aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-07-25 10:25:01 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-25 13:17:51 +0200
commit6d884afa8da1b08288cb0108e8bbf6c22ec63393 (patch)
tree7baa5a95ee4f6a1be551972912076bcfdead2d35 /src/main/java/com/google/devtools/build
parent0bf2e8e7f53962dfebaacc886f983138fef5ab4e (diff)
Make all WithLegacySkylarkName providers declared providers.
RELNOTES: None PiperOrigin-RevId: 163042362
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProvider.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinaryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java41
35 files changed, 170 insertions, 132 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
index 966471c37f..a5ad97eff9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.analysis;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
@@ -100,15 +99,19 @@ public final class AnalysisUtils {
*/
public static <S extends TransitiveInfoCollection, C extends TransitiveInfoProvider> Iterable<S>
filterByProvider(Iterable<S> prerequisites, final Class<C> provider) {
- return Iterables.filter(prerequisites, new Predicate<S>() {
- @Override
- public boolean apply(S target) {
- return target.getProvider(provider) != null;
- }
- });
+ return Iterables.filter(prerequisites, target -> target.getProvider(provider) != null);
}
/**
+ * Returns the iterable of collections that have the specified provider.
+ */
+ public static <S extends TransitiveInfoCollection, C extends SkylarkClassObject> Iterable<S>
+ filterByProvider(Iterable<S> prerequisites, final NativeClassObjectConstructor<C> provider) {
+ return Iterables.filter(prerequisites, target -> target.get(provider) != null);
+ }
+
+
+ /**
* Returns the path of the associated manifest file for the path of a Fileset. Works for both
* exec paths and root relative paths.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 6bf2ee2df3..c4afb4f546 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -30,6 +30,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -212,7 +213,6 @@ public final class RuleConfiguredTargetBuilder {
public <T extends TransitiveInfoProvider> RuleConfiguredTargetBuilder addProvider(
TransitiveInfoProvider provider) {
providersBuilder.add(provider);
- maybeAddSkylarkProvider(provider);
return this;
}
@@ -220,9 +220,6 @@ public final class RuleConfiguredTargetBuilder {
public <T extends TransitiveInfoProvider> RuleConfiguredTargetBuilder addProviders(
Iterable<TransitiveInfoProvider> providers) {
providersBuilder.addAll(providers);
- for (TransitiveInfoProvider provider : providers) {
- maybeAddSkylarkProvider(provider);
- }
return this;
}
@@ -250,14 +247,15 @@ public final class RuleConfiguredTargetBuilder {
Preconditions.checkNotNull(key);
Preconditions.checkNotNull(value);
providersBuilder.put(key, value);
- maybeAddSkylarkProvider(value);
return this;
}
- protected <T extends TransitiveInfoProvider> void maybeAddSkylarkProvider(T value) {
- if (value instanceof TransitiveInfoProvider.WithLegacySkylarkName) {
+ private <T extends TransitiveInfoProvider> void maybeAddSkylarkLegacyProvider(
+ SkylarkClassObject value) {
+ if (value.getConstructor() instanceof NativeClassObjectConstructor.WithLegacySkylarkName) {
addSkylarkTransitiveInfo(
- ((TransitiveInfoProvider.WithLegacySkylarkName) value).getSkylarkName(),
+ ((NativeClassObjectConstructor.WithLegacySkylarkName) value.getConstructor())
+ .getSkylarkName(),
value);
}
}
@@ -328,6 +326,7 @@ public final class RuleConfiguredTargetBuilder {
ClassObjectConstructor constructor = provider.getConstructor();
Preconditions.checkState(constructor.isExported());
providersBuilder.put(provider);
+ maybeAddSkylarkLegacyProvider(provider);
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 986a93b308..67613f2e7f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -902,6 +902,17 @@ public final class RuleContext extends TargetContext
}
/**
+ * Returns all the providers of the specified type that are listed under the specified attribute
+ * of this target in the BUILD file, and that contain the specified provider.
+ */
+ public <C extends SkylarkClassObject>
+ Iterable<? extends TransitiveInfoCollection> getPrerequisitesIf(
+ String attributeName, Mode mode, final NativeClassObjectConstructor<C> classType) {
+ return AnalysisUtils.filterByProvider(getPrerequisites(attributeName, mode), classType);
+ }
+
+
+ /**
* Returns the prerequisite referred to by the specified attribute. Also checks whether
* the attribute is marked as executable and that the target referred to can actually be
* executed.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProvider.java
index 9ee8933366..f2b49195a5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProvider.java
@@ -61,18 +61,4 @@ package com.google.devtools.build.lib.analysis;
*/
public interface TransitiveInfoProvider {
- /**
- * Implement this to mark that a native provider should be exported with
- * certain name to Skylark.
- * Broken: only works for rules, not for aspects.
- * DO NOT USE FOR NEW CODE!
- *
- * Use native declared providers
- * ({@link com.google.devtools.build.lib.packages.NativeClassObjectConstructor}) to
- * expose providers to both native and Skylark code.
- */
- @Deprecated
- interface WithLegacySkylarkName {
- String getSkylarkName();
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java
index 935e0044e9..8cb97c32f9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java
@@ -57,6 +57,21 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
}
/**
+ * Implement this to mark that a native provider should be exported with
+ * certain name to Skylark.
+ * Broken: only works for rules, not for aspects.
+ * DO NOT USE FOR NEW CODE!
+ *
+ * Use native declared providers
+ * ({@link NativeClassObjectConstructor}) to
+ * expose providers to both native and Skylark code.
+ */
+ @Deprecated
+ public static interface WithLegacySkylarkName {
+ String getSkylarkName();
+ }
+
+ /**
* A constructor for default {@code struct}s.
*
* <p>Singleton, instance is {@link #STRUCT}.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java
index 3113a4cbfc..8d50183680 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
import com.google.devtools.build.lib.analysis.SkylarkProviderValidationUtil;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Location;
@@ -350,9 +349,8 @@ public final class SkylarkRuleConfiguredTargetUtil {
SkylarkClassObject insStruct =
cast("instrumented_files", oldStyleProviders, SkylarkClassObject.class, loc);
addInstrumentedFiles(insStruct, ruleContext, builder);
- } else if (oldStyleProviders.getValue(key)
- instanceof TransitiveInfoProvider.WithLegacySkylarkName) {
- builder.addProvider((TransitiveInfoProvider) oldStyleProviders.getValue(key));
+ } else if (isNativeDeclaredProviderWithLegacySkylarkName(oldStyleProviders.getValue(key))) {
+ builder.addNativeDeclaredProvider((SkylarkClassObject) oldStyleProviders.getValue(key));
} else if (!key.equals("providers")) {
// We handled providers already.
builder.addSkylarkTransitiveInfo(key, oldStyleProviders.getValue(key), loc);
@@ -360,6 +358,14 @@ public final class SkylarkRuleConfiguredTargetUtil {
}
}
+ private static boolean isNativeDeclaredProviderWithLegacySkylarkName(Object value) {
+ if (!(value instanceof SkylarkClassObject)) {
+ return false;
+ }
+ return ((SkylarkClassObject) value).getConstructor()
+ instanceof NativeClassObjectConstructor.WithLegacySkylarkName;
+ }
+
/**
* Parses keys of (not necessarily a default) provider. If it is an actual default provider,
* throws an {@link EvalException} if there are unknown keys.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index d296905dfc..4028dc47da 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -121,7 +121,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
ApplePlatform platform = appleConfiguration.getMultiArchPlatform(platformType);
ImmutableListMultimap<BuildConfiguration, ObjcProvider> configurationToNonPropagatedObjcMap =
ruleContext.getPrerequisitesByConfiguration(
- "non_propagated_deps", Mode.SPLIT, ObjcProvider.class);
+ "non_propagated_deps", Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap =
ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT);
@@ -165,7 +165,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
ObjcProvider objcProvider = objcProviderBuilder.build();
// TODO(cparsons): Stop propagating ObjcProvider directly from this rule.
- targetBuilder.addProvider(ObjcProvider.class, objcProvider);
+ targetBuilder.addNativeDeclaredProvider(objcProvider);
switch (getBinaryType(ruleContext)) {
case EXECUTABLE:
@@ -266,7 +266,8 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
}
ObjcProvider bundleLoaderObjcProvider =
- ruleContext.getPrerequisite(BUNDLE_LOADER_ATTR_NAME, Mode.TARGET, ObjcProvider.class);
+ ruleContext.getPrerequisite(
+ BUNDLE_LOADER_ATTR_NAME, Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
if (bundleLoaderObjcProvider != null) {
dylibProviders.add(bundleLoaderObjcProvider);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index 49575aa0de..81e0975a4f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -81,7 +81,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT);
ImmutableListMultimap<BuildConfiguration, ObjcProvider> configToObjcAvoidDepsMap =
ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME,
- Mode.SPLIT, ObjcProvider.class);
+ Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
ImmutableListMultimap<BuildConfiguration, CcLinkParamsProvider> configToCcAvoidDepsMap =
ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME,
Mode.SPLIT, CcLinkParamsProvider.CC_LINK_PARAMS);
@@ -181,7 +181,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
targetBuilder
// TODO(cparsons): Remove ObjcProvider as a direct provider.
- .addProvider(ObjcProvider.class, objcProvider)
+ .addNativeDeclaredProvider(objcProvider)
.addNativeDeclaredProvider(
new AppleStaticLibraryProvider(
ruleIntermediateArtifacts.combinedArchitectureArchive(),
@@ -215,7 +215,7 @@ public class AppleStaticLibrary implements RuleConfiguredTargetFactory {
.addDefines(ruleContext.getTokenizedStringListAttr("defines"))
.addDeps(propagatedDeps)
.addDepObjcProviders(
- ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class))
+ ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.addDepObjcProviders(protosObjcProvider.asSet())
.setIntermediateArtifacts(intermediateArtifacts)
.setAlwayslink(false)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
index cff1acd722..20bc6656f4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
@@ -18,11 +18,9 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.packages.ImplicitOutputsFunction.fromTemplates;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -83,8 +81,7 @@ public class AppleStaticLibraryRule implements RuleDefinition {
attr(AVOID_DEPS_ATTR_NAME, LABEL_LIST)
.direct_compile_time_input()
.allowedRuleClasses(ObjcRuleClasses.CompilingRule.ALLOWED_CC_DEPS_RULE_CLASSES)
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class))
+ .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id())
.cfg(splitTransitionProvider)
.allowedFileTypes()
.aspect(objcProtoAspect))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
index 00c92f4cb7..6ef4b6a9ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
@@ -111,7 +111,8 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory {
ApplePlatform platform = appleConfiguration.getMultiArchPlatform(platformType);
ImmutableListMultimap<BuildConfiguration, ObjcProvider> configurationToDepsMap =
- ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT, ObjcProvider.class);
+ ruleContext.getPrerequisitesByConfiguration(
+ "deps", Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact outputArtifact =
ObjcRuleClasses.intermediateArtifacts(ruleContext).combinedArchitectureBinary();
@@ -131,7 +132,7 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory {
ObjcProvider objcProvider = objcProviderBuilder.build();
// TODO(cparsons): Stop propagating ObjcProvider directly from this rule.
- targetBuilder.addProvider(ObjcProvider.class, objcProvider);
+ targetBuilder.addNativeDeclaredProvider(objcProvider);
targetBuilder.addNativeDeclaredProvider(
new AppleExecutableBinaryProvider(outputArtifact, objcProvider));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinaryRule.java
index f2e2c59a2d..575f001040 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinaryRule.java
@@ -18,11 +18,9 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.syntax.Type.STRING;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
@@ -51,8 +49,7 @@ public class AppleStubBinaryRule implements RuleDefinition {
.add(
attr("deps", LABEL_LIST)
.direct_compile_time_input()
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class))
+ .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id())
.allowedFileTypes()
.cfg(splitTransitionProvider))
/*<!-- #BLAZE_RULE(apple_stub_binary).IMPLICIT_OUTPUTS -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index 79ae78973a..b78dc3d291 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -183,7 +183,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
RuleConfiguredTargetBuilder targetBuilder =
ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, objcProvider)
+ .addNativeDeclaredProvider(objcProvider)
.addNativeDeclaredProvider(objcProvider)
.addProvider(
InstrumentedFilesProvider.class,
@@ -193,7 +193,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
if (xcTestAppProvider.isPresent()) {
// TODO(bazel-team): Stop exporting an XcTestAppProvider once objc_binary no longer creates an
// application bundle.
- targetBuilder.addProvider(XcTestAppProvider.class, xcTestAppProvider.get());
+ targetBuilder.addNativeDeclaredProvider(xcTestAppProvider.get());
}
if (maybeRunfilesSupport.isPresent()) {
RunfilesSupport runfilesSupport = maybeRunfilesSupport.get();
@@ -230,7 +230,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
.addDepObjcProviders(protosObjcProvider.asSet())
.addNonPropagatedDepObjcProviders(
ruleContext.getPrerequisites(
- "non_propagated_deps", Mode.TARGET, ObjcProvider.class))
+ "non_propagated_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.setIntermediateArtifacts(intermediateArtifacts)
.setAlwayslink(false)
.setHasModuleMap()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
index 01d25fb7b9..aafd755c9c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
@@ -269,14 +269,15 @@ final class CompilationAttributes {
// missing, its private headers will be treated as public!
if (ruleContext.attributes().has("deps", BuildType.LABEL_LIST)) {
Iterable<ObjcProvider> providers =
- ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProvider.class);
+ ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
for (ObjcProvider provider : providers) {
moduleMaps.addTransitive(provider.get(TOP_LEVEL_MODULE_MAP));
}
}
if (ruleContext.attributes().has("non_propagated_deps", BuildType.LABEL_LIST)) {
Iterable<ObjcProvider> providers =
- ruleContext.getPrerequisites("non_propagated_deps", Mode.TARGET, ObjcProvider.class);
+ ruleContext.getPrerequisites(
+ "non_propagated_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
for (ObjcProvider provider : providers) {
moduleMaps.addTransitive(provider.get(TOP_LEVEL_MODULE_MAP));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 7e49b8eea3..c2ac087fb9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -1098,7 +1098,7 @@ public abstract class CompilationSupport {
Artifact dummyArchive =
Iterables.getOnlyElement(
ruleContext
- .getPrerequisite("$dummy_lib", Mode.TARGET, ObjcProvider.class)
+ .getPrerequisite("$dummy_lib", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR)
.get(LIBRARY));
CustomCommandLine commandLine =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java
index 4af8cee48d..cd418a338c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java
@@ -60,7 +60,7 @@ public class IosApplication extends ReleaseBundlingTargetFactory {
@Override
protected void validateAttributes(RuleContext ruleContext) {
Iterable<ObjcProvider> extensionProviders = ruleContext.getPrerequisites(
- "extensions", Mode.TARGET, ObjcProvider.class);
+ "extensions", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
if (hasMoreThanOneWatchExtension(extensionProviders, Flag.HAS_WATCH1_EXTENSION)
|| hasMoreThanOneWatchExtension(extensionProviders, Flag.HAS_WATCH2_EXTENSION)) {
ruleContext.attributeError("extensions", "An iOS application can contain exactly one "
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index d1ddc215a0..908020bea4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -268,7 +268,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
.addDepObjcProviders(protosObjcProvider.asSet())
.addNonPropagatedDepObjcProviders(
ruleContext.getPrerequisites(
- "non_propagated_deps", Mode.TARGET, ObjcProvider.class))
+ "non_propagated_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
.setHasModuleMap();
@@ -283,7 +283,8 @@ public final class IosTest implements RuleConfiguredTargetFactory {
ObjcConfiguration config = ruleContext.getFragment(ObjcConfiguration.class);
if (config.runMemleaks()) {
builder.addDepObjcProviders(
- ruleContext.getPrerequisites(MEMLEAKS_DEP_ATTR, Mode.TARGET, ObjcProvider.class));
+ ruleContext.getPrerequisites(
+ MEMLEAKS_DEP_ATTR, Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR));
}
return builder.build();
@@ -295,6 +296,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
/** Returns the {@link XcTestAppProvider} of the {@code xctest_app} attribute. */
protected static XcTestAppProvider xcTestAppProvider(RuleContext ruleContext) {
- return ruleContext.getPrerequisite(XCTEST_APP_ATTR, Mode.TARGET, XcTestAppProvider.class);
+ return ruleContext.getPrerequisite(
+ XCTEST_APP_ATTR, Mode.TARGET, XcTestAppProvider.SKYLARK_CONSTRUCTOR);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
index 55bfea69c0..78aaba6988 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
@@ -21,11 +21,9 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
@@ -92,9 +90,7 @@ public class IosTestRule implements RuleDefinition {
}
})
.allowedFileTypes()
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
- XcTestAppProvider.class)))
+ .mandatoryProviders(XcTestAppProvider.SKYLARK_CONSTRUCTOR.id()))
.override(
attr(BundlingRule.INFOPLIST_ATTR, LABEL)
.value(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 219eaa51c7..61e99ec6d9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -304,7 +304,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
return builder
.addProvider(
exportedJ2ObjcMappingFileProvider(base, ruleContext, directJ2ObjcMappingFileProvider))
- .addProvider(common.getObjcProvider())
+ .addNativeDeclaredProvider(common.getObjcProvider())
.build();
}
@@ -806,7 +806,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
builder.addDepObjcProviders(ruleContext.getPrerequisites(
dependentAttribute.getName(),
dependentAttribute.getAccessMode(),
- ObjcProvider.class));
+ ObjcProvider.SKYLARK_CONSTRUCTOR));
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
index e1537d07cd..810ce017de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java
@@ -72,12 +72,13 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory {
.build();
Iterable<ObjcProvider> jreDeps =
- ruleContext.getPrerequisites("jre_deps", Mode.TARGET, ObjcProvider.class);
+ ruleContext.getPrerequisites("jre_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
ObjcProvider.Builder objcProviderBuilder =
new ObjcProvider.Builder()
.addTransitiveAndPropagate(jreDeps)
.addTransitiveAndPropagate(
- ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProvider.class));
+ ruleContext.getPrerequisites(
+ "deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR));
for (ObjcProvider prereq : jreDeps) {
objcProviderBuilder.addTransitiveAndPropagate(JRE_LIBRARY, prereq.get(LIBRARY));
}
@@ -109,7 +110,6 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory {
.add(RunfilesProvider.class, RunfilesProvider.EMPTY)
.addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider)
.addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider)
- .addProvider(ObjcProvider.class, objcProvider)
.addNativeDeclaredProvider(objcProvider)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index 9305e8e64d..dd78199c83 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -258,7 +258,8 @@ public class MultiArchBinarySupport {
Iterable<ObjcProvider> additionalDepProviders =
Iterables.concat(
dylibObjcProviders,
- ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class),
+ ruleContext.getPrerequisites("bundles", Mode.TARGET,
+ ObjcProvider.SKYLARK_CONSTRUCTOR),
protosObjcProvider.asSet());
ObjcCommon common =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java
index dd7eda81fa..9888805be1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java
@@ -45,7 +45,6 @@ public class ObjcBundle implements RuleConfiguredTargetFactory {
NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(STABLE_ORDER);
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild)
- .addProvider(ObjcProvider.class, common.getObjcProvider())
.addNativeDeclaredProvider(common.getObjcProvider())
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
index aa6d9b3b01..c341593973 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
@@ -75,7 +75,6 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory {
.build();
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, nestedBundleProvider)
.addNativeDeclaredProvider(nestedBundleProvider)
.build();
}
@@ -113,7 +112,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory {
return new ObjcCommon.Builder(ruleContext)
.setResourceAttributes(new ResourceAttributes(ruleContext))
.addDepObjcProviders(
- ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class))
+ ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index 443144b571..55ac6df555 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -67,6 +67,8 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
@@ -257,7 +259,7 @@ public final class ObjcCommon {
ImmutableList.<CcLinkParamsProvider>builder();
for (TransitiveInfoCollection dep : deps) {
- addAnyProviders(propagatedObjcDeps, dep, ObjcProvider.class);
+ addAnyProviders(propagatedObjcDeps, dep, ObjcProvider.SKYLARK_CONSTRUCTOR);
addAnyProviders(cppDeps, dep, CppCompilationContext.class);
if (isCcLibrary(dep)) {
cppDepLinkParams.add(dep.get(CcLinkParamsProvider.CC_LINK_PARAMS));
@@ -279,7 +281,7 @@ public final class ObjcCommon {
ImmutableList.<ObjcProvider>builder();
for (TransitiveInfoCollection dep : runtimeDeps) {
- addAnyProviders(propagatedDeps, dep, ObjcProvider.class);
+ addAnyProviders(propagatedDeps, dep, ObjcProvider.SKYLARK_CONSTRUCTOR);
}
this.runtimeDepObjcProviders = Iterables.concat(
this.runtimeDepObjcProviders, propagatedDeps.build());
@@ -290,12 +292,25 @@ public final class ObjcCommon {
ImmutableList.Builder<T> listBuilder,
TransitiveInfoCollection collection,
Class<T> providerClass) {
- if (collection.getProvider(providerClass) != null) {
- listBuilder.add(collection.getProvider(providerClass));
+ T provider = collection.getProvider(providerClass);
+ if (provider != null) {
+ listBuilder.add(provider);
}
return listBuilder;
}
+ private <T extends SkylarkClassObject> ImmutableList.Builder<T> addAnyProviders(
+ ImmutableList.Builder<T> listBuilder,
+ TransitiveInfoCollection collection,
+ NativeClassObjectConstructor<T> providerClass) {
+ T provider = collection.get(providerClass);
+ if (provider != null) {
+ listBuilder.add(provider);
+ }
+ return listBuilder;
+ }
+
+
/**
* Add providers which will be exposed both to the declaring rule and to any dependers on the
* declaring rule.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java
index e11a01ef46..701856b775 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java
@@ -68,7 +68,6 @@ public class ObjcFramework implements RuleConfiguredTargetFactory {
NestedSetBuilder.<Artifact>linkOrder().addAll(frameworkImports).build());
NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(STABLE_ORDER);
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild)
- .addProvider(ObjcProvider.class, objcProvider)
.addNativeDeclaredProvider(objcProvider)
.addNativeDeclaredProvider(frameworkProvider)
.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
index 37c8cb6f87..a1253f0d11 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java
@@ -42,7 +42,8 @@ public class ObjcImport implements RuleConfiguredTargetFactory {
.addExtraImportLibraries(
ruleContext.getPrerequisiteArtifacts("archives", Mode.TARGET).list())
.addDepObjcProviders(
- ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class))
+ ruleContext.getPrerequisites(
+ "bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.build();
NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder();
@@ -64,7 +65,6 @@ public class ObjcImport implements RuleConfiguredTargetFactory {
new ResourceSupport(ruleContext).validateAttributes();
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, common.getObjcProvider())
.addNativeDeclaredProvider(common.getObjcProvider())
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index 814e3717bc..c45c378549 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -46,9 +46,10 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
.addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
.addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET))
.addDepObjcProviders(
- ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.class))
+ ruleContext.getPrerequisites("bundles", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.addNonPropagatedDepObjcProviders(
- ruleContext.getPrerequisites("non_propagated_deps", Mode.TARGET, ObjcProvider.class))
+ ruleContext.getPrerequisites(
+ "non_propagated_deps", Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext))
.setAlwayslink(ruleContext.attributes().get("alwayslink", Type.BOOLEAN))
.setHasModuleMap()
@@ -89,7 +90,6 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory {
J2ObjcEntryClassProvider.class)).build();
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, common.getObjcProvider())
.addNativeDeclaredProvider(common.getObjcProvider())
.addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider)
.addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
index 4b9143e8fe..b386e9b083 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
@@ -98,7 +98,7 @@ public class ObjcProtoAspect extends NativeAspectClass implements ConfiguredAspe
// (i.e. objc_binary) don't have to depend on it.
ObjcProvider protobufObjcProvider =
ruleContext.getPrerequisite(
- ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.class);
+ ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR);
aspectObjcProtoProvider.addProtobufHeaders(protobufObjcProvider.get(ObjcProvider.HEADER));
aspectObjcProtoProvider.addProtobufHeaderSearchPaths(
protobufObjcProvider.get(ObjcProvider.INCLUDE));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
index 64bdc18eed..ae0d22be15 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.rules.objc;
-
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -67,7 +66,6 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory {
.addFilesToBuild(filesToBuild);
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, protoSupport.getObjcProvider().get())
.addNativeDeclaredProvider(protoSupport.getObjcProvider().get())
.build();
}
@@ -110,7 +108,7 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory {
.addFilesToBuild(filesToBuild);
return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(ObjcProvider.class, protoSupport.getObjcProvider())
+ .addNativeDeclaredProvider(protoSupport.getObjcProvider())
.build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index dfe934a344..4a2081c7a6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -25,12 +25,12 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.WithLegacySkylarkName;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
@@ -55,17 +55,11 @@ import java.util.Map;
category = SkylarkModuleCategory.PROVIDER,
doc = "A provider for compilation and linking of objc."
)
-public final class ObjcProvider extends SkylarkClassObject
- implements TransitiveInfoProvider, TransitiveInfoProvider.WithLegacySkylarkName {
+public final class ObjcProvider extends SkylarkClassObject {
/** Skylark name for the ObjcProvider. */
public static final String SKYLARK_NAME = "objc";
- @Override
- public String getSkylarkName() {
- return SKYLARK_NAME;
- }
-
/**
* Represents one of the things this provider can provide transitively. Things are provided as
* {@link NestedSet}s of type E.
@@ -506,12 +500,7 @@ public final class ObjcProvider extends SkylarkClassObject
/** Skylark constructor and identifier for ObjcProvider. */
public static final NativeClassObjectConstructor<ObjcProvider> SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor<ObjcProvider>(ObjcProvider.class, SKYLARK_NAME) {
- @Override
- public String getErrorMessageFormatForInstances() {
- return "ObjcProvider field %s could not be instantiated";
- }
- };
+ new Constructor();
private ObjcProvider(
ImmutableMap<Key<?>, NestedSet<?>> items,
@@ -998,4 +987,22 @@ public final class ObjcProvider extends SkylarkClassObject
return new ObjcProvider(propagated, nonPropagated, strictDependency, skylarkFields.build());
}
}
+
+ private static class Constructor
+ extends NativeClassObjectConstructor<ObjcProvider>
+ implements WithLegacySkylarkName {
+ public Constructor() {
+ super(ObjcProvider.class, ObjcProvider.SKYLARK_NAME);
+ }
+
+ @Override
+ public String getSkylarkName() {
+ return SKYLARK_NAME;
+ }
+
+ @Override
+ public String getErrorMessageFormatForInstances() {
+ return "ObjcProvider field %s could not be instantiated";
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 411a7957f7..a1138a28d6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -36,7 +36,6 @@ import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
@@ -673,9 +672,8 @@ public class ObjcRuleClasses {
attr("deps", LABEL_LIST)
.direct_compile_time_input()
.allowedRuleClasses(ALLOWED_CC_DEPS_RULE_CLASSES)
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class))
- .allowedFileTypes())
+ .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id())
+ .allowedFileTypes())
/* <!-- #BLAZE_RULE($objc_compiling_rule).ATTRIBUTE(runtime_deps) -->
The list of framework targets that are late loaded at runtime. They are included in the
app bundle but not linked against at build time.
@@ -697,8 +695,7 @@ public class ObjcRuleClasses {
attr("non_propagated_deps", LABEL_LIST)
.direct_compile_time_input()
.allowedRuleClasses(ALLOWED_CC_DEPS_RULE_CLASSES)
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class))
+ .mandatoryProviders(ObjcProvider.SKYLARK_CONSTRUCTOR.id())
.allowedFileTypes())
/* <!-- #BLAZE_RULE($objc_compiling_rule).ATTRIBUTE(defines) -->
Extra <code>-D</code> flags to pass to the compiler. They should be in
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
index 053cd56181..9038e68d78 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
@@ -392,7 +392,7 @@ final class ProtobufSupport {
} else {
commonBuilder.addDepObjcProviders(
ruleContext.getPrerequisites(
- ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.class));
+ ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR));
}
return commonBuilder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
index 8139368952..343aa82741 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
@@ -127,7 +127,7 @@ final class ProtocolBuffers2Support {
.addIncludes(getIncludes())
.addDepObjcProviders(
ruleContext.getPrerequisites(
- ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.class))
+ ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.SKYLARK_CONSTRUCTOR))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
index 6aa8f487bc..a6d32b3a0c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
@@ -1174,7 +1174,8 @@ public final class ReleaseBundlingSupport {
}
for (ObjcProvider provider
- : ruleContext.getPrerequisites("binary", Mode.DONT_CHECK, ObjcProvider.class)) {
+ : ruleContext.getPrerequisites(
+ "binary", Mode.DONT_CHECK, ObjcProvider.SKYLARK_CONSTRUCTOR)) {
if (!provider.get(ObjcProvider.MULTI_ARCH_LINKED_BINARIES).isEmpty()) {
return Iterables.getOnlyElement(provider.get(ObjcProvider.MULTI_ARCH_LINKED_BINARIES));
}
@@ -1189,7 +1190,8 @@ public final class ReleaseBundlingSupport {
NestedSetBuilder<Artifact> linkedBinaries = NestedSetBuilder.stableOrder();
for (ObjcProvider provider
- : ruleContext.getPrerequisites("binary", Mode.DONT_CHECK, ObjcProvider.class)) {
+ : ruleContext.getPrerequisites(
+ "binary", Mode.DONT_CHECK, ObjcProvider.SKYLARK_CONSTRUCTOR)) {
linkedBinaries.addTransitive(provider.get(ObjcProvider.LINKED_BINARY));
}
@@ -1267,7 +1269,7 @@ public final class ReleaseBundlingSupport {
if (ruleContext.attributes().has("binary", BuildType.LABEL)) {
for (TransitiveInfoCollection prerequisite
: ruleContext.getPrerequisites("binary", Mode.DONT_CHECK)) {
- ObjcProvider prerequisiteProvider = prerequisite.getProvider(ObjcProvider.class);
+ ObjcProvider prerequisiteProvider = prerequisite.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
if (prerequisiteProvider != null) {
Artifact sourceArtifact = Iterables.getOnlyElement(prerequisiteProvider.get(key), null);
if (sourceArtifact != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
index 53820e6281..dc5962b7b9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
@@ -80,7 +80,7 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg
RuleConfiguredTargetBuilder targetBuilder =
ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProvider(XcTestAppProvider.class, releaseBundlingSupport.xcTestAppProvider())
+ .addNativeDeclaredProvider(releaseBundlingSupport.xcTestAppProvider())
.addProvider(
InstrumentedFilesProvider.class,
InstrumentedFilesCollector.forward(ruleContext, "binary"));
@@ -88,7 +88,6 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg
ObjcProvider exposedObjcProvider = exposedObjcProvider(ruleContext, releaseBundlingSupport);
if (exposedObjcProvider != null) {
targetBuilder
- .addProvider(ObjcProvider.class, exposedObjcProvider)
.addNativeDeclaredProvider(exposedObjcProvider);
}
@@ -143,7 +142,7 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg
for (Attribute attribute : dependencyAttributes) {
builder.addDepObjcProviders(
ruleContext.getPrerequisites(
- attribute.getName(), attribute.getAccessMode(), ObjcProvider.class));
+ attribute.getName(), attribute.getAccessMode(), ObjcProvider.SKYLARK_CONSTRUCTOR));
}
return builder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
index 051bcd5dca..a0a306ffc2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
@@ -16,9 +16,9 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.WithLegacySkylarkName;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -33,33 +33,21 @@ import com.google.devtools.build.lib.util.Preconditions;
"Deprecated. A provider for XCTest apps for testing. This is a legacy provider and should "
+ "not be used."
)
-public final class XcTestAppProvider extends SkylarkClassObject
- implements TransitiveInfoProvider, TransitiveInfoProvider.WithLegacySkylarkName {
+public final class XcTestAppProvider extends SkylarkClassObject {
/**
* The skylark struct key name for a rule implementation to use when exporting an ObjcProvider.
*/
public static final String XCTEST_APP_SKYLARK_PROVIDER_NAME = "xctest_app";
- @Override
- public String getSkylarkName() {
- return XCTEST_APP_SKYLARK_PROVIDER_NAME;
- }
-
- private static final NativeClassObjectConstructor<XcTestAppProvider> XCTEST_APP_PROVIDER =
- new NativeClassObjectConstructor<XcTestAppProvider>(
- XcTestAppProvider.class, "xctest_app_provider") {
- @Override
- public String getErrorMessageFormatForInstances() {
- return "XcTestAppProvider field %s could not be instantiated";
- }
- };
+ public static final NativeClassObjectConstructor<XcTestAppProvider> SKYLARK_CONSTRUCTOR =
+ new Constructor();
private final Artifact bundleLoader;
private final Artifact ipa;
private final ObjcProvider objcProvider;
XcTestAppProvider(Artifact bundleLoader, Artifact ipa, ObjcProvider objcProvider) {
- super(XCTEST_APP_PROVIDER, getSkylarkFields(bundleLoader, ipa, objcProvider));
+ super(SKYLARK_CONSTRUCTOR, getSkylarkFields(bundleLoader, ipa, objcProvider));
this.bundleLoader = Preconditions.checkNotNull(bundleLoader);
this.ipa = Preconditions.checkNotNull(ipa);
this.objcProvider = Preconditions.checkNotNull(objcProvider);
@@ -96,4 +84,23 @@ public final class XcTestAppProvider extends SkylarkClassObject
.put("objc", objcProvider)
.build();
}
+
+ private static class Constructor
+ extends NativeClassObjectConstructor<XcTestAppProvider>
+ implements WithLegacySkylarkName {
+
+ private Constructor() {
+ super(XcTestAppProvider.class, "xctest_app_provider");
+ }
+
+ @Override
+ public String getSkylarkName() {
+ return XCTEST_APP_SKYLARK_PROVIDER_NAME;
+ }
+
+ @Override
+ public String getErrorMessageFormatForInstances() {
+ return "XcTestAppProvider field %s could not be instantiated";
+ }
+ }
}