aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java24
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/IosApplicationTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcLibraryTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcProtoLibraryTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java27
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java24
43 files changed, 219 insertions, 177 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";
+ }
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
index 4c562df429..a7b9e1e7ab 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
@@ -51,7 +51,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
public void testJ2ObjCInformationExportedFromJ2ObjcLibrary() throws Exception {
ConfiguredTarget j2objcLibraryTarget = getConfiguredTarget(
"//java/com/google/dummy/test:transpile");
- ObjcProvider provider = j2objcLibraryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))).containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
"java/com/google/dummy/test/libtest_j2objc.a");
@@ -85,7 +85,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
" deps = ['test'])");
ConfiguredTarget target = getConfiguredTarget("//java/com/google/test:transpile");
- ObjcProvider provider = target.getProvider(ObjcProvider.class);
+ ObjcProvider provider = target.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
String genfilesFragment = target.getConfiguration().getGenfilesFragment().toString();
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))).containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
@@ -124,7 +124,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
ConfiguredTarget j2objcLibraryTarget = getConfiguredTarget(
"//java/com/google/dummy/test/proto:transpile");
- ObjcProvider provider = j2objcLibraryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))).containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
"third_party/java/j2objc/libproto_runtime.a",
@@ -220,7 +220,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
Artifact classMappingFile = getGenfilesArtifact("test.clsmap.properties", test);
assertThat(provider.getClassMappingFiles()).containsExactly(classMappingFile);
- ObjcProvider objcProvider = target.getProvider(ObjcProvider.class);
+ ObjcProvider objcProvider = target.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact headerFile = getGenfilesArtifact("test.j2objc.pb.h", test);
Artifact sourceFile = getGenfilesArtifact("test.j2objc.pb.m", test);
assertThat(objcProvider.get(ObjcProvider.HEADER)).contains(headerFile);
@@ -285,7 +285,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
public void testExplicitJreDeps() throws Exception {
ConfiguredTarget j2objcLibraryTarget = getConfiguredTarget(
"//java/com/google/dummy/test:transpile");
- ObjcProvider provider = j2objcLibraryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
// jre_io_lib and jre_emul_lib should be excluded.
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))).containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
@@ -306,7 +306,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
")");
ConfiguredTarget target = getJ2ObjCAspectConfiguredTarget("//java/com/google/transpile:dummy");
- ObjcProvider provider = target.getProvider(ObjcProvider.class);
+ ObjcProvider provider = target.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact srcJarSources = getFirstArtifactEndingWith(
provider.get(ObjcProvider.SOURCE), "source_files");
Artifact srcJarHeaders = getFirstArtifactEndingWith(
@@ -325,7 +325,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
addSimpleJ2ObjcLibraryWithJavaPlugin();
ConfiguredTarget j2objcLibraryTarget =
getConfiguredTarget("//java/com/google/app/test:transpile");
- ObjcProvider provider = j2objcLibraryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact headers =
getFirstArtifactEndingWith(provider.get(ObjcProvider.HEADER), "header_files");
Artifact sources =
@@ -500,7 +500,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
protected Artifact j2objcArchive(String j2objcLibraryTarget, String javaTargetName)
throws Exception {
ConfiguredTarget target = getConfiguredTarget(j2objcLibraryTarget);
- ObjcProvider provider = target.getProvider(ObjcProvider.class);
+ ObjcProvider provider = target.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
String archiveName = String.format("lib%s_j2objc.a", javaTargetName);
return getFirstArtifactEndingWith(provider.get(ObjcProvider.LIBRARY), archiveName);
}
@@ -518,7 +518,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
ConfiguredTarget objcTarget = getConfiguredTarget("//app:lib");
- ObjcProvider provider = objcTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = objcTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY)))
.containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
@@ -559,7 +559,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
ConfiguredTarget objcTarget = getConfiguredTarget("//app:lib");
- ObjcProvider provider = objcTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = objcTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY)))
.containsExactly(
"third_party/java/j2objc/libjre_core_lib.a",
@@ -659,7 +659,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
ConfiguredTarget target = getJ2ObjCAspectConfiguredTarget("//java/com/google/transpile:dummy");
- ObjcProvider provider = target.getProvider(ObjcProvider.class);
+ ObjcProvider provider = target.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact moduleMap =
getFirstArtifactEndingWith(
provider.get(ObjcProvider.MODULE_MAP), "dummy.modulemaps/module.modulemap");
@@ -696,7 +696,7 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest {
addSimpleJ2ObjcLibraryWithJavaPlugin();
ConfiguredTarget j2objcLibraryTarget =
getConfiguredTarget("//java/com/google/app/test:transpile");
- ObjcProvider provider = j2objcLibraryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
Artifact moduleMap =
getFirstArtifactEndingWith(
provider.get(ObjcProvider.MODULE_MAP), "test.modulemaps/module.modulemap");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosApplicationTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosApplicationTest.java
index 2f718f3116..01e54dddb0 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosApplicationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosApplicationTest.java
@@ -116,7 +116,8 @@ public class IosApplicationTest extends ObjcRuleTestCase {
")");
RuleContext ruleContext = getRuleContext(getConfiguredTarget("//x:x"));
ImmutableListMultimap<BuildConfiguration, ObjcProvider> prereqByConfig =
- ruleContext.getPrerequisitesByConfiguration("binary", Mode.SPLIT, ObjcProvider.class);
+ ruleContext.getPrerequisitesByConfiguration(
+ "binary", Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
List<String> childCpus = Lists.transform(prereqByConfig.keySet().asList(),
new Function<BuildConfiguration, String>() {
@Override
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
index 8427e72fd8..f33a9e6636 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
@@ -1092,7 +1092,7 @@ public class IosTestTest extends ObjcRuleTestCase {
ObjcProvider appProvider =
getConfiguredTarget("//test:protos_app")
- .getProvider(XcTestAppProvider.class)
+ .get(XcTestAppProvider.SKYLARK_CONSTRUCTOR)
.getObjcProvider();
ConfiguredTarget binTarget = getConfiguredTarget("//test:protos_bin");
Artifact protoHeader =
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcLibraryTest.java
index 40fa3569a7..abbae40ccf 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcLibraryTest.java
@@ -108,7 +108,7 @@ public class LegacyObjcLibraryTest extends ObjcLibraryTest {
.addAll(FASTBUILD_COPTS)
.addAll(
iquoteArgs(
- getConfiguredTarget("//objc:lib").getProvider(ObjcProvider.class),
+ getConfiguredTarget("//objc:lib").get(ObjcProvider.SKYLARK_CONSTRUCTOR),
getTargetConfiguration()))
.build();
@@ -170,7 +170,7 @@ public class LegacyObjcLibraryTest extends ObjcLibraryTest {
.addAll(FASTBUILD_COPTS)
.addAll(
iquoteArgs(
- getConfiguredTarget("//objc:lib").getProvider(ObjcProvider.class),
+ getConfiguredTarget("//objc:lib").get(ObjcProvider.SKYLARK_CONSTRUCTOR),
getTargetConfiguration()))
.build();
@@ -249,7 +249,7 @@ public class LegacyObjcLibraryTest extends ObjcLibraryTest {
.addAll(FASTBUILD_COPTS)
.addAll(
iquoteArgs(
- getConfiguredTarget("//objc:lib").getProvider(ObjcProvider.class),
+ getConfiguredTarget("//objc:lib").get(ObjcProvider.SKYLARK_CONSTRUCTOR),
getAppleCrosstoolConfiguration()))
.add("-include", "objc/some.pch")
.add("-fobjc-arc")
@@ -295,7 +295,7 @@ public class LegacyObjcLibraryTest extends ObjcLibraryTest {
.addAll(FASTBUILD_COPTS)
.addAll(
iquoteArgs(
- getConfiguredTarget("//objc:lib").getProvider(ObjcProvider.class),
+ getConfiguredTarget("//objc:lib").get(ObjcProvider.SKYLARK_CONSTRUCTOR),
getTargetConfiguration()))
.add("-fobjc-arc")
.add("-Ifoo")
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcProtoLibraryTest.java
index dc45294c3e..a7258a4f53 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/LegacyObjcProtoLibraryTest.java
@@ -79,7 +79,7 @@ public class LegacyObjcProtoLibraryTest extends ObjcProtoLibraryTest {
.addAll(FASTBUILD_COPTS)
.addAll(
LegacyObjcLibraryTest.iquoteArgs(
- target.getProvider(ObjcProvider.class), getTargetConfiguration()))
+ target.get(ObjcProvider.SKYLARK_CONSTRUCTOR), getTargetConfiguration()))
.add("-I")
.add(sourceFile.getExecPath().getParentDirectory().getParentDirectory().toString())
.add("-fno-objc-arc")
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
index 5b7155528c..9e2d0c07d0 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -51,6 +51,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
+import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.common.options.OptionsParsingException;
import java.util.Collections;
@@ -331,9 +332,9 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
.setAndCreateFiles("hdrs", "d.h", "e.m")
.setList("deps", "//objc:lib")
.write();
- assertThat(Artifact.toRootRelativePaths(target.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(target, HEADER))
.containsExactly("objc/a.h", "objc/b.h", "objc/f.m");
- assertThat(Artifact.toRootRelativePaths(depender.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(depender, HEADER))
.containsExactly("objc/a.h", "objc/b.h", "objc/f.m", "objc2/d.h", "objc2/e.m");
}
@@ -356,11 +357,9 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
.setList("non_propagated_deps", "//objc2:lib")
.write();
- assertThat(Artifact.toRootRelativePaths(target.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(target, HEADER))
.containsExactly("objc/a.h", "objc/b.h");
- assertThat(
- Artifact.toRootRelativePaths(
- transitiveDepender.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(transitiveDepender, HEADER))
.containsExactly("objc2/c.h", "objc2/d.h", "objc3/e.h", "objc3/f.h");
}
@@ -1026,16 +1025,20 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
.setAndCreateFiles("hdrs", "c.h", "d.h")
.setList("deps", "//objc:lib")
.write();
- assertThat(Artifact.toRootRelativePaths(target.getProvider(ObjcProvider.class).get(LIBRARY)))
- .containsExactly("objc/liblib.a");
- assertThat(Artifact.toRootRelativePaths(depender.getProvider(ObjcProvider.class).get(LIBRARY)))
- .containsExactly("objc/liblib.a", "objc2/liblib.a");
- assertThat(Artifact.toRootRelativePaths(target.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(target, LIBRARY)).containsExactly("objc/liblib.a");
+ assertThat(getArifactPaths(depender, LIBRARY)).containsExactly(
+ "objc/liblib.a", "objc2/liblib.a");
+ assertThat(getArifactPaths(target, HEADER))
.containsExactly("objc/a.h", "objc/b.h");
- assertThat(Artifact.toRootRelativePaths(depender.getProvider(ObjcProvider.class).get(HEADER)))
+ assertThat(getArifactPaths(depender, HEADER))
.containsExactly("objc/a.h", "objc/b.h", "objc2/c.h", "objc2/d.h");
}
+ private Iterable<String> getArifactPaths(ConfiguredTarget target, Key<Artifact> artifactKey) {
+ return Artifact.toRootRelativePaths(
+ target.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(artifactKey));
+ }
+
@Test
public void testWeakSdkFrameworks_objcProvider() throws Exception {
createLibraryTargetWriter("//base_lib:lib")
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
index 9ae12ffe0f..8116e34c9b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
@@ -1072,7 +1072,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
protected ObjcProvider providerForTarget(String label) throws Exception {
- return getConfiguredTarget(label).getProvider(ObjcProvider.class);
+ return getConfiguredTarget(label).get(ObjcProvider.SKYLARK_CONSTRUCTOR);
}
protected CommandAction archiveAction(String label) throws Exception {
@@ -1171,7 +1171,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
"includes", "['incdir']");
ObjcProvider provider =
getConfiguredTarget("//x:x", getAppleCrosstoolConfiguration())
- .getProvider(ObjcProvider.class);
+ .get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.get(HEADER)).containsExactly(getSourceArtifact("x/a.h"));
assertThat(provider.get(INCLUDE))
.containsExactly(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
index 2cfdbad0a5..11d36332da 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
@@ -209,7 +209,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
")");
ConfiguredTarget binaryTarget = getConfiguredTarget("//examples/apple_skylark:bin");
- ObjcProvider objcProvider = binaryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider objcProvider = binaryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(Artifact.toRootRelativePaths(objcProvider.get(ObjcProvider.LIBRARY)))
.contains("examples/apple_skylark/liblib.a");
@@ -246,7 +246,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
")");
ConfiguredTarget binaryTarget = getConfiguredTarget("//examples/apple_skylark:bin");
- ObjcProvider objcProvider = binaryTarget.getProvider(ObjcProvider.class);
+ ObjcProvider objcProvider = binaryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
assertThat(objcProvider.get(ObjcProvider.DEFINE)).contains("mock_define");
}
@@ -689,11 +689,11 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
" return struct(objc=created_provider)");
Iterable<String> foundLinkopts =
- skylarkTarget.getProvider(ObjcProvider.class).get(ObjcProvider.LINKOPT);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(ObjcProvider.LINKOPT);
Iterable<String> foundDefines =
- skylarkTarget.getProvider(ObjcProvider.class).get(ObjcProvider.DEFINE);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(ObjcProvider.DEFINE);
boolean usesSwift =
- skylarkTarget.getProvider(ObjcProvider.class).is(ObjcProvider.Flag.USES_SWIFT);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
assertThat(foundLinkopts).containsExactly("somelinkopt");
assertThat(foundDefines).containsExactly("define1", "define2");
@@ -712,7 +712,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
" return struct(objc=created_provider)");
Iterable<Artifact> foundLinkInputs =
- skylarkTarget.getProvider(ObjcProvider.class).get(ObjcProvider.LINK_INPUTS);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(ObjcProvider.LINK_INPUTS);
assertThat(ActionsTestUtil.baseArtifactNames(foundLinkInputs)).contains("foo.ast");
}
@@ -724,7 +724,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
" return struct(objc=created_provider)");
boolean usesSwift =
- skylarkTarget.getProvider(ObjcProvider.class).is(ObjcProvider.Flag.USES_SWIFT);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
assertThat(usesSwift).isTrue();
}
@@ -739,7 +739,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
" return struct(objc=created_provider)");
Iterable<PathFragment> foundIncludes =
- skylarkTarget.getProvider(ObjcProvider.class).get(ObjcProvider.INCLUDE);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(ObjcProvider.INCLUDE);
assertThat(foundIncludes)
.containsExactly(
@@ -760,7 +760,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
"(include=propagated_includes, direct_dep_providers=[strict_provider])",
" return struct(objc=created_provider)");
- ObjcProvider skylarkProvider = skylarkTarget.getProvider(ObjcProvider.class);
+ ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
ObjcProvider skylarkProviderDirectDepender =
new ObjcProvider.Builder().addTransitiveAndPropagate(skylarkProvider).build();
ObjcProvider skylarkProviderIndirectDepender =
@@ -785,7 +785,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
" return struct(objc=created_provider)");
Iterable<String> foundStrings =
- skylarkTarget.getProvider(ObjcProvider.class).get(ObjcProvider.DEFINE);
+ skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR).get(ObjcProvider.DEFINE);
assertThat(foundStrings).containsExactly("define_from_dep", "define_from_impl");
}
@@ -1130,7 +1130,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
- XcTestAppProvider xcTestAppProvider = skylarkTarget.getProvider(XcTestAppProvider.class);
+ XcTestAppProvider xcTestAppProvider = skylarkTarget.get(XcTestAppProvider.SKYLARK_CONSTRUCTOR);
assertThat(xcTestAppProvider.getBundleLoader().getRootRelativePathString())
.isEqualTo("examples/rule/test_artifact");
@@ -1243,7 +1243,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase {
")");
ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
- assertThat(skylarkTarget.getProvider(ObjcProvider.class)).isNotNull();
+ assertThat(skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR)).isNotNull();
}
private void checkSkylarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception {