aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-07-10 17:15:27 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-07-10 17:45:04 +0200
commit77baa4c372ae014db8e17f6d3c60bd88597853d9 (patch)
tree3ca2c63943782b506b0f19f5b7f7465909723590
parent45bd34e747d13fc2bebdc849a11b4b952da5d8a6 (diff)
Make native declared providers type-safe.
RELNOTES: None. PiperOrigin-RevId: 161395570
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/DefaultProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Attribute.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java42
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/ExecutionInfoProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestEnvironmentProvider.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java20
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/IosDeviceTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModuleTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java6
59 files changed, 214 insertions, 280 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
index f34bc310d2..8eb0f2775c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
@@ -27,11 +27,9 @@ import java.util.Map;
*/
public final class ActionsProvider {
- /**
- * The Actions provider type itself.
- */
- public static final NativeClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor("Actions") { };
+ /** The Actions provider type itself. */
+ public static final NativeClassObjectConstructor<SkylarkClassObject> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<SkylarkClassObject>(SkylarkClassObject.class, "Actions") {};
/**
* Factory method for creating instances of the Actions provider.
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 209eb226ae..966471c37f 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
@@ -25,7 +25,7 @@ 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.packages.BuildType;
-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.TriState;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -82,15 +82,14 @@ public final class AnalysisUtils {
* Returns the list of declared providers (native and Skylark) of the specified Skylark key from a
* set of transitive info collections.
*/
- public static <T extends SkylarkClassObject> Iterable<T> getProviders(
+ public static <T extends SkylarkClassObject> Iterable<T> getProviders(
Iterable<? extends TransitiveInfoCollection> prerequisites,
- final ClassObjectConstructor.Key skylarkKey,
- Class<T> resultClass) {
+ final NativeClassObjectConstructor<T> skylarkKey) {
ImmutableList.Builder<T> result = ImmutableList.builder();
for (TransitiveInfoCollection prerequisite : prerequisites) {
- SkylarkClassObject prerequisiteProvider = prerequisite.get(skylarkKey);
+ T prerequisiteProvider = prerequisite.get(skylarkKey);
if (prerequisiteProvider != null) {
- result.add(resultClass.cast(prerequisiteProvider));
+ result.add(prerequisiteProvider);
}
}
return result.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultProvider.java
index 0f0b5569b5..ab0722c6b1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultProvider.java
@@ -48,7 +48,7 @@ public final class DefaultProvider extends SkylarkClassObject {
public static final String SKYLARK_NAME = "DefaultInfo";
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) {
+ new NativeClassObjectConstructor<SkylarkClassObject>(SkylarkClassObject.class, SKYLARK_NAME) {
@Override
protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) {
@SuppressWarnings("unchecked")
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java
index 06bbfdcee2..c4265763ec 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java
@@ -61,7 +61,8 @@ public final class OutputGroupProvider extends SkylarkClassObject
implements TransitiveInfoProvider, SkylarkIndexable, Iterable<String> {
public static final String SKYLARK_NAME = "output_groups";
- public static NativeClassObjectConstructor SKYLARK_CONSTRUCTOR = new Constructor();
+ public static NativeClassObjectConstructor<OutputGroupProvider> SKYLARK_CONSTRUCTOR =
+ new Constructor();
/**
* Prefix for output groups that are not reported to the user on the terminal output of Blaze when
@@ -256,17 +257,15 @@ public final class OutputGroupProvider extends SkylarkClassObject
return outputGroups.keySet();
}
- /**
- * A constructor callable from Skylark for OutputGroupProvider.
- */
- private static class Constructor extends NativeClassObjectConstructor {
+ /** A constructor callable from Skylark for OutputGroupProvider. */
+ private static class Constructor extends NativeClassObjectConstructor<OutputGroupProvider> {
private Constructor() {
- super("OutputGroupInfo");
+ super(OutputGroupProvider.class, "OutputGroupInfo");
}
@Override
- protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc)
+ protected OutputGroupProvider createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException {
@SuppressWarnings("unchecked")
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 d2999d3098..c159037231 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
@@ -66,6 +66,7 @@ import com.google.devtools.build.lib.packages.FileTarget;
import com.google.devtools.build.lib.packages.FilesetEntry;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.InputFile;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.PackageSpecification;
import com.google.devtools.build.lib.packages.RawAttributeMapper;
@@ -851,10 +852,8 @@ public final class RuleContext extends TargetContext
* specified attribute of this target in the BUILD file.
*/
public <T extends SkylarkClassObject> Iterable<T> getPrerequisites(
- String attributeName, Mode mode,
- final ClassObjectConstructor.Key skylarkKey,
- Class<T> result) {
- return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey, result);
+ String attributeName, Mode mode, final NativeClassObjectConstructor<T> skylarkKey) {
+ return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java
index 3289b49f85..cbe80a67d2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.analysis;
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.SkylarkProviderIdentifier;
import javax.annotation.Nullable;
@@ -33,13 +34,24 @@ public interface SkylarkProviderCollection {
Object get(String providerKey);
/**
- * Returns the declared provider requested, or null, if the information is not found. The
- * transitive information has to have been added using the Skylark framework.
+ * Returns the declared provider requested, or null, if the information is not found.
+ *
+ * Use {@link #get(NativeClassObjectConstructor)} for native providers.
*/
@Nullable
SkylarkClassObject get(ClassObjectConstructor.Key providerKey);
/**
+ * Returns the native declared provider requested, or null, if the information is not found.
+ *
+ * Type-safe version of {@link #get(ClassObjectConstructor.Key)} for native providers.
+ */
+ @Nullable
+ default <T extends SkylarkClassObject> T get(NativeClassObjectConstructor<T> provider) {
+ return provider.getValueClass().cast(get(provider.getKey()));
+ }
+
+ /**
* Returns the provider defined in Skylark, or null, if the information is not found. The
* transitive information has to have been added using the Skylark framework.
*
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
index 0e12ba2597..6020817a48 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
@@ -19,10 +19,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -55,8 +53,9 @@ public class ConstraintSettingInfo extends SkylarkClassObject {
/*types=*/ ImmutableList.<SkylarkType>of(SkylarkType.of(Label.class)));
/** Skylark constructor and identifier for this provider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME, SIGNATURE) {
+ public static final NativeClassObjectConstructor<ConstraintSettingInfo> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<ConstraintSettingInfo>(
+ ConstraintSettingInfo.class, SKYLARK_NAME, SIGNATURE) {
@Override
protected ConstraintSettingInfo createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException {
@@ -66,10 +65,6 @@ public class ConstraintSettingInfo extends SkylarkClassObject {
}
};
- /** Identifier used to retrieve this provider from rules which export it. */
- public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
- SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());
-
private final Label label;
private ConstraintSettingInfo(Label label, Location location) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
index be11feaba6..9cd1fac8ce 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -19,10 +19,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -57,8 +55,9 @@ public class ConstraintValueInfo extends SkylarkClassObject {
SkylarkType.of(Label.class), SkylarkType.of(ConstraintSettingInfo.class)));
/** Skylark constructor and identifier for this provider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME, SIGNATURE) {
+ public static final NativeClassObjectConstructor<ConstraintValueInfo> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<ConstraintValueInfo>(
+ ConstraintValueInfo.class, SKYLARK_NAME, SIGNATURE) {
@Override
protected ConstraintValueInfo createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException {
@@ -69,10 +68,6 @@ public class ConstraintValueInfo extends SkylarkClassObject {
}
};
- /** Identifier used to retrieve this provider from rules which export it. */
- public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
- SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());
-
private final ConstraintSettingInfo constraint;
private final Label label;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
index 003896d055..1d1092a9a3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
@@ -22,10 +22,8 @@ import com.google.common.collect.Multimap;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -67,8 +65,8 @@ public class PlatformInfo extends SkylarkClassObject {
SkylarkType.LIST, SkylarkType.of(ConstraintValueInfo.class))));
/** Skylark constructor and identifier for this provider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME, SIGNATURE) {
+ public static final NativeClassObjectConstructor<PlatformInfo> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<PlatformInfo>(PlatformInfo.class, SKYLARK_NAME, SIGNATURE) {
@Override
protected PlatformInfo createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException {
@@ -91,10 +89,6 @@ public class PlatformInfo extends SkylarkClassObject {
}
};
- /** Identifier used to retrieve this provider from rules which export it. */
- public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
- SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());
-
private final Label label;
private final ImmutableList<ConstraintValueInfo> constraints;
private final ImmutableMap<String, String> remoteExecutionProperties;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
index 56443af320..148fea7ab3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
@@ -16,19 +16,13 @@ package com.google.devtools.build.lib.analysis.platform;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.SkylarkProviderCollection;
-import com.google.devtools.build.lib.util.Preconditions;
/** Utility methods to help locate platform-related providers. */
public class PlatformProviderUtils {
/** Retrieves and casts the {@link PlatformInfo} provider from the given target. */
public static PlatformInfo platform(SkylarkProviderCollection target) {
- Object provider = target.get(PlatformInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof PlatformInfo);
- return (PlatformInfo) provider;
+ return target.get(PlatformInfo.SKYLARK_CONSTRUCTOR);
}
/** Retrieves and casts {@link PlatformInfo} providers from the given targets. */
@@ -39,12 +33,7 @@ public class PlatformProviderUtils {
/** Retrieves and casts the {@link ConstraintSettingInfo} provider from the given target. */
public static ConstraintSettingInfo constraintSetting(SkylarkProviderCollection target) {
- Object provider = target.get(ConstraintSettingInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ConstraintSettingInfo);
- return (ConstraintSettingInfo) provider;
+ return target.get(ConstraintSettingInfo.SKYLARK_CONSTRUCTOR);
}
/** Retrieves and casts {@link ConstraintSettingInfo} providers from the given targets. */
@@ -55,12 +44,7 @@ public class PlatformProviderUtils {
/** Retrieves and casts the {@link ConstraintValueInfo} provider from the given target. */
public static ConstraintValueInfo constraintValue(SkylarkProviderCollection target) {
- Object provider = target.get(ConstraintValueInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ConstraintValueInfo);
- return (ConstraintValueInfo) provider;
+ return target.get(ConstraintValueInfo.SKYLARK_CONSTRUCTOR);
}
/** Retrieves and casts {@link ConstraintValueInfo} providers from the given targets. */
@@ -71,11 +55,6 @@ public class PlatformProviderUtils {
/** Retrieves and casts the {@link ToolchainInfo} provider from the given target. */
public static ToolchainInfo toolchain(SkylarkProviderCollection target) {
- Object provider = target.get(ToolchainInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ToolchainInfo);
- return (ToolchainInfo) provider;
+ return target.get(ToolchainInfo.SKYLARK_CONSTRUCTOR);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
index 0a3c6a4639..16e5a857ac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
@@ -19,10 +19,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.EvalException;
@@ -60,8 +58,9 @@ public class ToolchainInfo extends SkylarkClassObject {
/*types=*/ ImmutableList.<SkylarkType>of(SkylarkType.of(Label.class), SkylarkType.DICT));
/** Skylark constructor and identifier for this provider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME, SIGNATURE) {
+ public static final NativeClassObjectConstructor<ToolchainInfo> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<ToolchainInfo>(
+ ToolchainInfo.class, SKYLARK_NAME, SIGNATURE) {
@Override
protected ToolchainInfo createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException {
@@ -73,10 +72,6 @@ public class ToolchainInfo extends SkylarkClassObject {
}
};
- /** Identifier used to retrieve this provider from rules which export it. */
- public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
- SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());
-
private final Label type;
private ToolchainInfo(Label type, Map<String, Object> toolchainData, Location loc) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index ee2f8ac88f..a312aeff95 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -998,6 +998,11 @@ public final class Attribute implements Comparable<Attribute> {
return this;
}
+ public Builder<TYPE> mandatoryProviders(SkylarkProviderIdentifier... providers) {
+ mandatoryProviders(Arrays.asList(providers));
+ return this;
+ }
+
/**
* Asserts that a particular parameterized aspect probably needs to be computed for all direct
* dependencies through this attribute.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java
index 9bce718d38..de48d2c41b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java
@@ -92,6 +92,9 @@ public abstract class ClassObjectConstructor extends BaseFunction {
*/
public abstract String getErrorMessageFormatForInstances();
+ public SkylarkProviderIdentifier id() {
+ return SkylarkProviderIdentifier.forKey(getKey());
+ }
@Override
protected Object call(Object[] args, @Nullable FuncallExpression ast, @Nullable Environment env)
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 b3fd87e73f..2ed7e51b81 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
@@ -23,24 +23,25 @@ import java.util.Map;
import javax.annotation.Nullable;
/**
- * Base class for declared providers {@see ClassObjectConstructor} defined
- * in native code.
+ * Base class for declared providers {@see ClassObjectConstructor} defined in native code.
*
- * Every non-abstract derived class of {@link NativeClassObjectConstructor}
- * corresponds to a single declared provider. This is enforced by final
- * {@link #equals(Object)} and {@link #hashCode()}.
+ * <p>Every non-abstract derived class of {@link NativeClassObjectConstructor} corresponds to a
+ * single declared provider. This is enforced by final {@link #equals(Object)} and {@link
+ * #hashCode()}.
+ *
+ * <p>Typical implementation of a non-constructable from Skylark declared provider is as follows:
*
- * Typical implementation of a non-constructable from Skylark declared provider is as follows:
* <pre>
* public static final ClassObjectConstructor CC_LINK_PARAMS =
* new NativeClassObjectConstructor("link_params") { };
* </pre>
*
- * To allow construction from Skylark and custom construction logic, override
- * {@link #createInstanceFromSkylark(Object[], Location)} (see {@link #STRUCT} for an example.
+ * To allow construction from Skylark and custom construction logic, override {@link
+ * #createInstanceFromSkylark(Object[], Location)} (see {@link #STRUCT} for an example.
*/
@Immutable
-public abstract class NativeClassObjectConstructor extends ClassObjectConstructor {
+public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObject>
+ extends ClassObjectConstructor {
private final NativeKey key;
private final String errorMessageForInstances;
@@ -49,14 +50,21 @@ public abstract class NativeClassObjectConstructor extends ClassObjectConstructo
*/
public static final StructConstructor STRUCT = new StructConstructor();
+ private final Class<VALUE> valueClass;
+
+ public Class<VALUE> getValueClass() {
+ return valueClass;
+ }
+
/**
* A constructor for default {@code struct}s.
*
- * Singleton, instance is {@link #STRUCT}.
+ * <p>Singleton, instance is {@link #STRUCT}.
*/
- public static final class StructConstructor extends NativeClassObjectConstructor {
+ public static final class StructConstructor
+ extends NativeClassObjectConstructor<SkylarkClassObject> {
private StructConstructor() {
- super("struct");
+ super(SkylarkClassObject.class, "struct");
}
@Override
@@ -74,16 +82,18 @@ public abstract class NativeClassObjectConstructor extends ClassObjectConstructo
private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE =
FunctionSignature.WithValues.create(FunctionSignature.KWARGS);
- protected NativeClassObjectConstructor(String name) {
- this(name, SIGNATURE);
+ protected NativeClassObjectConstructor(Class<VALUE> clazz, String name) {
+ this(clazz, name, SIGNATURE);
}
- protected NativeClassObjectConstructor(String name,
+ protected NativeClassObjectConstructor(
+ Class<VALUE> valueClass,
+ String name,
FunctionSignature.WithValues<Object, SkylarkType> signature) {
super(name, signature, Location.BUILTIN);
key = new NativeKey(name, getClass());
+ this.valueClass = valueClass;
errorMessageForInstances = String.format("'%s' object has no attribute '%%s'", name);
-
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java b/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java
index 15d4998c7f..46ad5446b5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/MakeVariableProvider.java
@@ -31,7 +31,8 @@ public final class MakeVariableProvider extends SkylarkClassObject
public static final String SKYLARK_NAME = "MakeVariableInfo";
public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
+ new NativeClassObjectConstructor<MakeVariableProvider>(
+ MakeVariableProvider.class, SKYLARK_NAME) {};
private final ImmutableMap<String, String> makeVariables;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index dafdb335a6..4fefee34f5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -38,9 +38,9 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
@@ -100,13 +100,12 @@ public class AndroidCommon {
}
public static final <T extends SkylarkClassObject> Iterable<T> getTransitivePrerequisites(
- RuleContext ruleContext, Mode mode, SkylarkClassObjectConstructor.Key key,
- final Class<T> classType) {
+ RuleContext ruleContext, Mode mode, NativeClassObjectConstructor<T> key) {
IterablesChain.Builder<T> builder = IterablesChain.builder();
AttributeMap attributes = ruleContext.attributes();
for (String attr : TRANSITIVE_ATTRIBUTES) {
if (attributes.has(attr, BuildType.LABEL_LIST)) {
- builder.add(ruleContext.getPrerequisites(attr, mode, key, classType));
+ builder.add(ruleContext.getPrerequisites(attr, mode, key));
}
}
return builder.build();
@@ -938,9 +937,8 @@ public class AndroidCommon {
private NestedSet<Artifact> collectHiddenTopLevelArtifacts(RuleContext ruleContext) {
NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder();
for (OutputGroupProvider provider :
- getTransitivePrerequisites(ruleContext, Mode.TARGET,
- OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
- OutputGroupProvider.class)) {
+ getTransitivePrerequisites(
+ ruleContext, Mode.TARGET, OutputGroupProvider.SKYLARK_CONSTRUCTOR)) {
builder.addTransitive(provider.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL));
}
return builder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java
index 42b7b11a70..8d44854a39 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java
@@ -30,8 +30,10 @@ public class AndroidDeviceScriptFixtureInfoProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
private static final String SKYLARK_NAME = "DeviceScriptFixtureInfo";
- public static final NativeClassObjectConstructor ANDROID_DEVICE_SCRIPT_FIXTURE_INFO =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
+ public static final NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider>
+ ANDROID_DEVICE_SCRIPT_FIXTURE_INFO =
+ new NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider>(
+ AndroidDeviceScriptFixtureInfoProvider.class, SKYLARK_NAME) {};
private final Artifact fixtureScript;
private final NestedSet<Artifact> supportApks;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java
index 3acd378695..a554a39b3d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java
@@ -31,8 +31,10 @@ public class AndroidHostServiceFixtureInfoProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
private static final String SKYLARK_NAME = "HostServiceFixtureInfo";
- static final NativeClassObjectConstructor ANDROID_HOST_SERVICE_FIXTURE_INFO =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
+ static final NativeClassObjectConstructor<AndroidHostServiceFixtureInfoProvider>
+ ANDROID_HOST_SERVICE_FIXTURE_INFO =
+ new NativeClassObjectConstructor<AndroidHostServiceFixtureInfoProvider>(
+ AndroidHostServiceFixtureInfoProvider.class, SKYLARK_NAME) {};
private final Artifact executable;
private final ImmutableList<String> serviceNames;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java
index 63a8fb353e..e151be796b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java
@@ -29,9 +29,10 @@ public class AndroidInstrumentationInfoProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
private static final String SKYLARK_NAME = "AndroidInstrumentationInfo";
- static final NativeClassObjectConstructor ANDROID_INSTRUMENTATION_INFO =
- new NativeClassObjectConstructor(SKYLARK_NAME) {
- };
+ static final NativeClassObjectConstructor<AndroidInstrumentationInfoProvider>
+ ANDROID_INSTRUMENTATION_INFO =
+ new NativeClassObjectConstructor<AndroidInstrumentationInfoProvider>(
+ AndroidInstrumentationInfoProvider.class, SKYLARK_NAME) {};
private final Artifact targetApk;
private final Artifact instrumentationApk;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
index 20066b36c3..92a9cdd538 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
@@ -184,8 +184,7 @@ public class AndroidInstrumentationTest implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisites(
"instrumentations",
Mode.TARGET,
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey(),
- AndroidInstrumentationInfoProvider.class),
+ AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO),
AndroidInstrumentationInfoProvider::getTargetApk);
}
@@ -198,8 +197,7 @@ public class AndroidInstrumentationTest implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisites(
"instrumentations",
Mode.TARGET,
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey(),
- AndroidInstrumentationInfoProvider.class),
+ AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO),
AndroidInstrumentationInfoProvider::getInstrumentationApk);
}
@@ -217,8 +215,7 @@ public class AndroidInstrumentationTest implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisites(
"fixtures",
Mode.TARGET,
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey(),
- AndroidHostServiceFixtureInfoProvider.class)) {
+ AndroidHostServiceFixtureInfoProvider.ANDROID_HOST_SERVICE_FIXTURE_INFO)) {
allSupportApks.addTransitive(fixture.getSupportApks());
}
return allSupportApks.build();
@@ -271,8 +268,7 @@ public class AndroidInstrumentationTest implements RuleConfiguredTargetFactory {
ruleContext.getPrerequisites(
"fixtures",
Mode.TARGET,
- AndroidHostServiceFixtureInfoProvider.ANDROID_HOST_SERVICE_FIXTURE_INFO.getKey(),
- AndroidHostServiceFixtureInfoProvider.class));
+ AndroidHostServiceFixtureInfoProvider.ANDROID_HOST_SERVICE_FIXTURE_INFO));
if (hostServiceFixtures.size() > 1) {
ruleContext.ruleError(
"android_instrumentation_test accepts at most one android_host_service_fixture");
@@ -285,8 +281,7 @@ public class AndroidInstrumentationTest implements RuleConfiguredTargetFactory {
return ruleContext.getPrerequisites(
"fixtures",
Mode.TARGET,
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey(),
- AndroidDeviceScriptFixtureInfoProvider.class);
+ AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
}
private static String getDeviceBrokerType(RuleContext ruleContext) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index ac9fb18fe5..052e0c170f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -904,7 +904,7 @@ public final class AndroidRuleClasses {
.allowedFileTypes()
.nonconfigurable("defines an aspect of configuration")
.mandatoryProviders(
- ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_IDENTIFIER)))
+ ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_CONSTRUCTOR.id())))
// The resource extractor is used at the binary level to extract java resources from the
// deploy jar so that they can be added to the APK.
.add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
index eebde008e7..8e047c31c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
@@ -186,7 +186,9 @@ public enum ApplePlatform {
/** Returns a Skylark struct that contains the instances of this enum. */
public static SkylarkClassObject getSkylarkStruct() {
- ClassObjectConstructor constructor = new NativeClassObjectConstructor("platforms") { };
+ ClassObjectConstructor constructor =
+ new NativeClassObjectConstructor<SkylarkClassObject>(
+ SkylarkClassObject.class, "platforms") {};
HashMap<String, Object> fields = new HashMap<>();
for (ApplePlatform type : values()) {
fields.put(type.skylarkKey, type);
@@ -242,7 +244,9 @@ public enum ApplePlatform {
/** Returns a Skylark struct that contains the instances of this enum. */
public static SkylarkClassObject getSkylarkStruct() {
- ClassObjectConstructor constructor = new NativeClassObjectConstructor("platform_types") { };
+ ClassObjectConstructor constructor =
+ new NativeClassObjectConstructor<SkylarkClassObject>(
+ SkylarkClassObject.class, "platform_types") {};
HashMap<String, Object> fields = new HashMap<>();
for (PlatformType type : values()) {
fields.put(type.skylarkKey, type);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
index e52726f454..0e872c5e74 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
@@ -20,7 +20,6 @@ import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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 java.util.Map;
@@ -34,8 +33,9 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
public static final String SKYLARK_NAME = "XcodeProperties";
/** Skylark constructor and identifier for XcodeVersionProperties provider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ public static final NativeClassObjectConstructor<XcodeVersionProperties> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<XcodeVersionProperties>(
+ XcodeVersionProperties.class, SKYLARK_NAME) {};
@VisibleForTesting public static final String DEFAULT_IOS_SDK_VERSION = "8.4";
@VisibleForTesting public static final String DEFAULT_WATCHOS_SDK_VERSION = "2.0";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
index 9f6e919fbd..13ba415d34 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
@@ -19,14 +19,11 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.util.Preconditions;
/** Provider for exporting value and valid value predicate of feature flags to consuming targets. */
@SkylarkModule(
@@ -41,17 +38,9 @@ public class ConfigFeatureFlagProvider extends SkylarkClassObject
static final String SKYLARK_NAME = "FeatureFlagInfo";
/** Skylark constructor and identifier for ConfigFeatureFlagProvider. */
- static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
-
- /**
- * Identifier used to retrieve this provider from rules which export it.
- *
- * <p>Prefer to use {@link #fromTarget(TransitiveInfoCollection)} for the purposes of getting this
- * provider from a TransitiveInfoCollection; this should be used for mandatoryProviders only.
- */
- public static final SkylarkProviderIdentifier SKYLARK_IDENTIFIER =
- SkylarkProviderIdentifier.forKey(SKYLARK_CONSTRUCTOR.getKey());
+ public static final NativeClassObjectConstructor<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<ConfigFeatureFlagProvider>(
+ ConfigFeatureFlagProvider.class, SKYLARK_NAME) {};
private final String value;
private final Predicate<String> validityPredicate;
@@ -70,12 +59,7 @@ public class ConfigFeatureFlagProvider extends SkylarkClassObject
/** Retrieves and casts the provider from the given target. */
public static ConfigFeatureFlagProvider fromTarget(TransitiveInfoCollection target) {
- Object provider = target.get(SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ConfigFeatureFlagProvider);
- return (ConfigFeatureFlagProvider) provider;
+ return target.get(SKYLARK_CONSTRUCTOR);
}
/** Gets the current value of the flag in the flag's current configuration. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
index dcfe505a61..4bd368415a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
@@ -154,7 +154,7 @@ public class ConfigRuleClasses {
.undocumented("the feature flag feature has not yet been launched")
.allowedFileTypes()
.mandatoryProviders(
- ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_IDENTIFIER))
+ ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_CONSTRUCTOR.id()))
.nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON))
.requiresConfigurationFragments(FeaturePolicyConfiguration.class)
.setIsConfigMatcherForConfigSettingOnly()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index 7b7906a529..f081075e03 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -312,9 +312,8 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory {
ccCompilationOutputs.getFilesToCompile(
isLipoCollector, processHeadersInDependencies, usePic));
for (OutputGroupProvider dep :
- ruleContext.getPrerequisites("deps", Mode.TARGET,
- OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
- OutputGroupProvider.class)) {
+ ruleContext.getPrerequisites(
+ "deps", Mode.TARGET, OutputGroupProvider.SKYLARK_CONSTRUCTOR)) {
artifactsToForceBuilder.addTransitive(
dep.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
index 3c7aa425c2..2618fee2d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -1487,8 +1487,8 @@ public final class CcLibraryHelper {
RuleContext ruleContext, CcCompilationOutputs ccCompilationOutputs) {
NestedSetBuilder<Artifact> headerTokens = NestedSetBuilder.stableOrder();
for (OutputGroupProvider dep :
- ruleContext.getPrerequisites("deps", Mode.TARGET,
- OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(), OutputGroupProvider.class)) {
+ ruleContext.getPrerequisites(
+ "deps", Mode.TARGET, OutputGroupProvider.SKYLARK_CONSTRUCTOR)) {
headerTokens.addTransitive(dep.getOutputGroup(CcLibraryHelper.HIDDEN_HEADER_TOKENS));
}
if (ruleContext.getFragment(CppConfiguration.class).processHeadersInDependencies()) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java
index 76a6c768f3..1ed8d6f169 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java
@@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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.rules.cpp.CcLinkParamsStore.CcLinkParamsStoreImpl;
@@ -28,8 +27,9 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore.CcLinkParamsSto
@Immutable
public final class CcLinkParamsProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
- public static final ClassObjectConstructor CC_LINK_PARAMS =
- new NativeClassObjectConstructor("link_params") { };
+ public static final NativeClassObjectConstructor<CcLinkParamsProvider> CC_LINK_PARAMS =
+ new NativeClassObjectConstructor<CcLinkParamsProvider>(
+ CcLinkParamsProvider.class, "link_params") {};
public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS =
input -> {
@@ -40,7 +40,7 @@ public final class CcLinkParamsProvider extends SkylarkClassObject
}
// ... then try Skylark.
- provider = (CcLinkParamsProvider) input.get(CC_LINK_PARAMS.getKey());
+ provider = input.get(CC_LINK_PARAMS);
if (provider != null) {
return provider.getCcLinkParamsStore();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index 89beafe21d..29715a7d78 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -22,7 +22,6 @@ 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.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -45,8 +44,9 @@ public final class CcToolchainProvider
extends SkylarkClassObject implements TransitiveInfoProvider {
public static final String SKYLARK_NAME = "CcToolchainInfo";
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
+ public static final NativeClassObjectConstructor<CcToolchainProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<CcToolchainProvider>(
+ CcToolchainProvider.class, SKYLARK_NAME) {};
/** An empty toolchain to be returned in the error case (instead of null). */
public static final CcToolchainProvider EMPTY_TOOLCHAIN_IS_ERROR =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index 5779e65cfc..bb6fe7e905 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -40,7 +40,7 @@ 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.packages.BuildType;
-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;
@@ -880,12 +880,10 @@ public class JavaCommon {
return AnalysisUtils.getProviders(getDependencies(), provider);
}
- /**
- * Gets all the deps that implement a particular provider.
- */
+ /** Gets all the deps that implement a particular provider. */
public final <P extends SkylarkClassObject> Iterable<P> getDependencies(
- ClassObjectConstructor.Key provider, Class<P> resultClass) {
- return AnalysisUtils.getProviders(getDependencies(), provider, resultClass);
+ NativeClassObjectConstructor<P> provider) {
+ return AnalysisUtils.getProviders(getDependencies(), provider);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
index 4e7ed9f11a..4599ceeb58 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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.syntax.SkylarkNestedSet;
@@ -37,8 +36,8 @@ import javax.annotation.Nullable;
@Immutable
public final class JavaProvider extends SkylarkClassObject implements TransitiveInfoProvider {
- public static final ClassObjectConstructor JAVA_PROVIDER =
- new NativeClassObjectConstructor("java_common.provider") { };
+ public static final NativeClassObjectConstructor<JavaProvider> JAVA_PROVIDER =
+ new NativeClassObjectConstructor<JavaProvider>(JavaProvider.class, "java_common.provider") {};
private static final ImmutableSet<Class<? extends TransitiveInfoProvider>> ALLOWED_PROVIDERS =
ImmutableSet.of(
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 40eaeb8421..6bbfc3bbac 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
@@ -259,9 +259,8 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
private static Iterable<ObjcProvider> getDylibProviders(RuleContext ruleContext) {
ImmutableList.Builder<ObjcProvider> dylibProviders = ImmutableList.builder();
Iterable<AppleDynamicFrameworkProvider> frameworkProviders =
- ruleContext.getPrerequisites(DYLIBS_ATTR_NAME, Mode.TARGET,
- AppleDynamicFrameworkProvider.SKYLARK_CONSTRUCTOR.getKey(),
- AppleDynamicFrameworkProvider.class);
+ ruleContext.getPrerequisites(
+ DYLIBS_ATTR_NAME, Mode.TARGET, AppleDynamicFrameworkProvider.SKYLARK_CONSTRUCTOR);
for (AppleDynamicFrameworkProvider frameworkProvider : frameworkProviders) {
dylibProviders.add(frameworkProvider.getDepsObjcProvider());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
index eadabb9c57..10ff0d389d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
@@ -18,7 +18,6 @@ import com.google.common.collect.Maps;
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.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import java.util.HashMap;
@@ -64,8 +63,9 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject
public static final String SKYLARK_NAME = "AppleDebugOutputs";
/** Skylark constructor and identifier for AppleDebugOutputsProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ public static final NativeClassObjectConstructor<AppleDebugOutputsProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleDebugOutputsProvider>(
+ AppleDebugOutputsProvider.class, SKYLARK_NAME) {};
/**
* Creates a new provider instance.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
index 76e04d684f..7afae2ef62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
@@ -17,7 +17,6 @@ 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.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -37,9 +36,10 @@ public final class AppleDylibBinaryProvider extends SkylarkClassObject
/** Skylark name for the AppleDylibBinaryProvider. */
public static final String SKYLARK_NAME = "AppleDylibBinary";
- /** Skylark constructor and identifier for AppleDylibBinaryProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ /** Skylark constructor and identifier for AppleDylibBinaryProvider. */
+ public static final NativeClassObjectConstructor<AppleDylibBinaryProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleDylibBinaryProvider>(
+ AppleDylibBinaryProvider.class, SKYLARK_NAME) {};
private final Artifact dylibBinary;
private final ObjcProvider depsObjcProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
index 848058efc4..2ab05d6dac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
@@ -18,7 +18,6 @@ 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.collect.nestedset.NestedSet;
-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.vfs.PathFragment;
@@ -43,9 +42,11 @@ public final class AppleDynamicFrameworkProvider extends SkylarkClassObject
/** Skylark name for the AppleDynamicFrameworkProvider. */
public static final String SKYLARK_NAME = "AppleDynamicFramework";
- /** Skylark constructor and identifier for AppleDynamicFrameworkProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) {};
+ /** Skylark constructor and identifier for AppleDynamicFrameworkProvider. */
+ public static final NativeClassObjectConstructor<AppleDynamicFrameworkProvider>
+ SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleDynamicFrameworkProvider>(
+ AppleDynamicFrameworkProvider.class, SKYLARK_NAME) {};
/** Field name for the dylib binary artifact of the dynamic framework. */
public static final String DYLIB_BINARY_FIELD_NAME = "binary";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
index 24002a4736..347b1111d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
@@ -17,7 +17,6 @@ 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.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -37,9 +36,11 @@ public final class AppleExecutableBinaryProvider extends SkylarkClassObject
/** Skylark name for the AppleExecutableBinaryProvider. */
public static final String SKYLARK_NAME = "AppleExecutableBinary";
- /** Skylark constructor and identifier for AppleExecutableBinaryProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ /** Skylark constructor and identifier for AppleExecutableBinaryProvider. */
+ public static final NativeClassObjectConstructor<AppleExecutableBinaryProvider>
+ SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleExecutableBinaryProvider>(
+ AppleExecutableBinaryProvider.class, SKYLARK_NAME) {};
private final Artifact appleExecutableBinary;
private final ObjcProvider depsObjcProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
index f271b73617..cd014bcf43 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
@@ -17,7 +17,6 @@ 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.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -34,9 +33,11 @@ public final class AppleLoadableBundleBinaryProvider extends SkylarkClassObject
/** Skylark name for the AppleLoadableBundleBinary. */
public static final String SKYLARK_NAME = "AppleLoadableBundleBinary";
- /** Skylark constructor and identifier for AppleLoadableBundleBinary. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ /** Skylark constructor and identifier for AppleLoadableBundleBinary. */
+ public static final NativeClassObjectConstructor<AppleLoadableBundleBinaryProvider>
+ SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleLoadableBundleBinaryProvider>(
+ AppleLoadableBundleBinaryProvider.class, SKYLARK_NAME) {};
private final Artifact appleLoadableBundleBinary;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryProvider.java
index e4c477fb53..6cb613f973 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryProvider.java
@@ -17,7 +17,6 @@ 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.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -38,9 +37,10 @@ public final class AppleStaticLibraryProvider extends SkylarkClassObject
/** Skylark name for the AppleStaticLibraryProvider. */
public static final String SKYLARK_NAME = "AppleStaticLibrary";
- /** Skylark constructor and identifier for AppleStaticLibraryProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ /** Skylark constructor and identifier for AppleStaticLibraryProvider. */
+ public static final NativeClassObjectConstructor<AppleStaticLibraryProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<AppleStaticLibraryProvider>(
+ AppleStaticLibraryProvider.class, SKYLARK_NAME) {};
private final Artifact multiArchArchive;
private final ObjcProvider depsObjcProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java
index 79e62b8064..d22fdca486 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java
@@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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.rules.apple.DottedVersion;
@@ -78,8 +77,8 @@ public final class IosDeviceProvider extends SkylarkClassObject implements Trans
public static final String SKYLARK_NAME = "IosDevice";
/** Skylark constructor and identifier for the IosDeviceProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor(SKYLARK_NAME) { };
+ public static final NativeClassObjectConstructor<IosDeviceProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<IosDeviceProvider>(IosDeviceProvider.class, SKYLARK_NAME) {};
private final String type;
private final DottedVersion iosVersion;
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 e918abb94a..b040c629ff 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
@@ -30,7 +30,6 @@ 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.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
@@ -507,8 +506,8 @@ public final class ObjcProvider extends SkylarkClassObject
// Items which should be passed to strictly direct dependers, but not transitive dependers.
private final ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems;
- private static final ClassObjectConstructor OBJC_PROVIDER =
- new NativeClassObjectConstructor("objc_provider") {
+ private static final NativeClassObjectConstructor<ObjcProvider> OBJC_PROVIDER =
+ new NativeClassObjectConstructor<ObjcProvider>(ObjcProvider.class, "objc_provider") {
@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/Watch2ExtensionSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
index f50580ce6f..a73ecaeafb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
@@ -180,8 +180,7 @@ public class Watch2ExtensionSupport {
Iterable<ObjcProvider> binaryDependencies() {
TransitiveInfoCollection info = ruleContext.getPrerequisite("binary", Mode.TARGET);
AppleExecutableBinaryProvider binaryProvider =
- (AppleExecutableBinaryProvider) info.get(
- AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR.getKey());
+ info.get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR);
return ImmutableList.of(binaryProvider.getDepsObjcProvider());
}
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 e25c88c154..df27f2e0b0 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
@@ -18,7 +18,6 @@ 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.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
@@ -44,8 +43,9 @@ public final class XcTestAppProvider extends SkylarkClassObject
return XCTEST_APP_SKYLARK_PROVIDER_NAME;
}
- private static final ClassObjectConstructor XCTEST_APP_PROVIDER =
- new NativeClassObjectConstructor("xctest_app_provider") {
+ 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";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
index 0976c01dcd..ca95be913a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValueRule.java
@@ -48,7 +48,8 @@ public class ConstraintValueRule implements RuleDefinition {
.mandatory()
.allowedRuleClasses(ConstraintSettingRule.RULE_NAME)
.allowedFileTypes(FileTypeSet.NO_FILE)
- .mandatoryProviders(ImmutableList.of(ConstraintSettingInfo.SKYLARK_IDENTIFIER)))
+ .mandatoryProviders(
+ ImmutableList.of(ConstraintSettingInfo.SKYLARK_CONSTRUCTOR.id())))
.removeAttribute("deps")
.removeAttribute("data")
.exemptFromConstraintChecking("this rule *defines* a constraint")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
index 10344bb6ea..aef9d42377 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformRule.java
@@ -52,7 +52,7 @@ public class PlatformRule implements RuleDefinition {
.add(
attr(CONSTRAINT_VALUES_ATTR, BuildType.LABEL_LIST)
.allowedFileTypes(FileTypeSet.NO_FILE)
- .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_IDENTIFIER)))
+ .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id())))
/* <!-- #BLAZE_RULE(platform).ATTRIBUTE(remote_execution_properties) -->
A key/value dict of values that will be sent to a remote execution platform.
@@ -76,14 +76,14 @@ public class PlatformRule implements RuleDefinition {
.add(
attr(CPU_CONSTRAINTS_ATTR, BuildType.LABEL_LIST)
.allowedFileTypes(FileTypeSet.NO_FILE)
- .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_IDENTIFIER))
+ .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id()))
.undocumented("Should only be used by internal packages."))
// Undocumented. Indicates to the rule which constraint_values to use for automatic CPU
// mapping.
.add(
attr(OS_CONSTRAINTS_ATTR, BuildType.LABEL_LIST)
.allowedFileTypes(FileTypeSet.NO_FILE)
- .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_IDENTIFIER))
+ .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id()))
.undocumented("Should only be used by internal packages."))
.removeAttribute("deps")
.removeAttribute("data")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
index 8065d35909..3c393e2269 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
@@ -59,7 +59,7 @@ public class ToolchainRule implements RuleDefinition {
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr(EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST)
- .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_IDENTIFIER))
+ .mandatoryProviders(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id())
.allowedFileTypes()
.nonconfigurable("part of toolchain configuration"))
/* <!-- #BLAZE_RULE(toolchain).ATTRIBUTE(target_compatible_with) -->
@@ -68,7 +68,7 @@ public class ToolchainRule implements RuleDefinition {
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr(TARGET_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST)
- .mandatoryProviders(ImmutableList.of(ConstraintValueInfo.SKYLARK_IDENTIFIER))
+ .mandatoryProviders(ConstraintValueInfo.SKYLARK_CONSTRUCTOR.id())
.allowedFileTypes()
.nonconfigurable("part of toolchain configuration"))
/* <!-- #BLAZE_RULE(toolchain).ATTRIBUTE(toolchain) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/ExecutionInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/test/ExecutionInfoProvider.java
index 5567f2719a..4f17ec199c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/ExecutionInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/ExecutionInfoProvider.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.test;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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 java.util.Map;
@@ -30,9 +29,9 @@ public final class ExecutionInfoProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
/** Skylark constructor and identifier for ExecutionInfoProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor("ExecutionInfo") {
- };
+ public static final NativeClassObjectConstructor<ExecutionInfoProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<ExecutionInfoProvider>(
+ ExecutionInfoProvider.class, "ExecutionInfo") {};
private final ImmutableMap<String, String> executionInfo;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestEnvironmentProvider.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestEnvironmentProvider.java
index e2b5fc8510..240738dde5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestEnvironmentProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestEnvironmentProvider.java
@@ -18,7 +18,6 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-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 java.util.Map;
@@ -29,8 +28,9 @@ public final class TestEnvironmentProvider extends SkylarkClassObject
implements TransitiveInfoProvider {
/** Skylark constructor and identifier for TestEnvironmentProvider. */
- public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
- new NativeClassObjectConstructor("TestEnvironment") { };
+ public static final NativeClassObjectConstructor<TestEnvironmentProvider> SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor<TestEnvironmentProvider>(
+ TestEnvironmentProvider.class, "TestEnvironment") {};
private final Map<String, String> environment;
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
index abc3ec917d..03cc956b71 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
@@ -36,7 +36,7 @@ public class RequiredProvidersTest {
private static final class P3 {}
private static final ClassObjectConstructor P_NATIVE =
- new NativeClassObjectConstructor("p_native") {};
+ new NativeClassObjectConstructor<SkylarkClassObject>(SkylarkClassObject.class, "p_native") {};
private static final SkylarkClassObjectConstructor P_SKYLARK =
new SkylarkClassObjectConstructor("p_skylark", Location.BUILTIN);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java
index 6149580254..3f51d80979 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureTest.java
@@ -60,9 +60,7 @@ public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase {
ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture");
assertThat(fixture).isNotNull();
AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider =
- (AndroidDeviceScriptFixtureInfoProvider)
- fixture.get(
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey());
+ fixture.get(AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
assertThat(deviceScriptFixtureInfoProvider).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getFixtureScript()).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getFixtureScript().prettyPrint())
@@ -80,9 +78,7 @@ public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase {
ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture");
assertThat(fixture).isNotNull();
AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider =
- (AndroidDeviceScriptFixtureInfoProvider)
- fixture.get(
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey());
+ fixture.get(AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
assertThat(deviceScriptFixtureInfoProvider).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getFixtureScript()).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getFixtureScript().prettyPrint())
@@ -133,9 +129,7 @@ public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase {
ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture");
assertThat(fixture).isNotNull();
AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider =
- (AndroidDeviceScriptFixtureInfoProvider)
- fixture.get(
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey());
+ fixture.get(AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
assertThat(deviceScriptFixtureInfoProvider).isNotNull();
assertThat(
@@ -169,9 +163,7 @@ public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase {
ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture");
assertThat(fixture).isNotNull();
AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider =
- (AndroidDeviceScriptFixtureInfoProvider)
- fixture.get(
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey());
+ fixture.get(AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
assertThat(deviceScriptFixtureInfoProvider).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getDaemon()).isTrue();
}
@@ -188,9 +180,7 @@ public class AndroidDeviceScriptFixtureTest extends AndroidBuildViewTestCase {
ConfiguredTarget fixture = getConfiguredTarget("//javatests/com/app:fixture");
assertThat(fixture).isNotNull();
AndroidDeviceScriptFixtureInfoProvider deviceScriptFixtureInfoProvider =
- (AndroidDeviceScriptFixtureInfoProvider)
- fixture.get(
- AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO.getKey());
+ fixture.get(AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
assertThat(deviceScriptFixtureInfoProvider).isNotNull();
assertThat(deviceScriptFixtureInfoProvider.getStrictExit()).isTrue();
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
index a594abe3ee..ffd847c52e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
@@ -169,7 +169,7 @@ public class AndroidDeviceTest extends BuildViewTestCase {
assertThat(target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey())).isNotNull();
ExecutionInfoProvider executionInfoProvider =
- (ExecutionInfoProvider) target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey());
+ target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR);
assertThat(executionInfoProvider.getExecutionInfo()).doesNotContainKey(REQUIRES_KVM);
TemplateExpansionAction stubAction = (TemplateExpansionAction) getGeneratingAction(
getExecutable(target));
@@ -228,9 +228,7 @@ public class AndroidDeviceTest extends BuildViewTestCase {
assertThat(action.getExecutionInfo())
.containsEntry(REQUIRES_KVM, "");
assertThat(target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey())).isNotNull();
- assertThat(
- ((ExecutionInfoProvider) target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey()))
- .getExecutionInfo())
+ assertThat(target.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR).getExecutionInfo())
.containsKey(REQUIRES_KVM);
}
@@ -276,12 +274,7 @@ public class AndroidDeviceTest extends BuildViewTestCase {
Iterable<String> biosFilesExecPathStrings =
Iterables.transform(
getToolDependency("//tools/android/emulator:emulator_x86_bios").getFilesToRun(),
- new Function<Artifact, String>() {
- @Override
- public String apply(Artifact artifact) {
- return artifact.getExecPathString();
- }
- });
+ Artifact::getExecPathString);
assertWithMessage("Invalid boot commandline.")
.that(action.getArguments())
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureTest.java
index e0954c0c51..55718d40ee 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureTest.java
@@ -162,7 +162,6 @@ public class AndroidHostServiceFixtureTest extends AndroidBuildViewTestCase {
private AndroidHostServiceFixtureInfoProvider getHostServiceFixtureInfoProvider(
ConfiguredTarget ct) throws Exception {
- return (AndroidHostServiceFixtureInfoProvider)
- ct.get(AndroidHostServiceFixtureInfoProvider.ANDROID_HOST_SERVICE_FIXTURE_INFO.getKey());
+ return ct.get(AndroidHostServiceFixtureInfoProvider.ANDROID_HOST_SERVICE_FIXTURE_INFO);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
index e71be0a2bc..860082c483 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
@@ -72,9 +72,7 @@ public class AndroidInstrumentationRuleImplTest extends AndroidBuildViewTestCase
ConfiguredTarget instrumentation = getConfiguredTarget("//javatests/com/app/instrumentation");
assertThat(instrumentation).isNotNull();
AndroidInstrumentationInfoProvider instrumentationProvider =
- (AndroidInstrumentationInfoProvider)
- instrumentation.get(
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey());
+ instrumentation.get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO);
assertThat(instrumentationProvider.getTargetApk()).isNotNull();
assertThat(instrumentationProvider.getTargetApk().prettyPrint())
.isEqualTo("javatests/com/app/instrumentation/instrumentation-target.apk");
@@ -98,9 +96,7 @@ public class AndroidInstrumentationRuleImplTest extends AndroidBuildViewTestCase
ConfiguredTarget instrumentation = getConfiguredTarget("//javatests/com/app/instrumentation");
assertThat(instrumentation).isNotNull();
AndroidInstrumentationInfoProvider instrumentationProvider =
- (AndroidInstrumentationInfoProvider)
- instrumentation.get(
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey());
+ instrumentation.get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO);
Artifact targetApk = instrumentationProvider.getTargetApk();
assertThat(targetApk).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
index 66f08f83c2..a80a221b87 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
@@ -239,16 +239,14 @@ public class AndroidInstrumentationTestTest extends AndroidBuildViewTestCase {
}
private static Artifact getInstrumentationApk(ConfiguredTarget instrumentation) {
- return ((AndroidInstrumentationInfoProvider)
- instrumentation.get(
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey()))
+ return instrumentation
+ .get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO)
.getInstrumentationApk();
}
private static Artifact getTargetApk(ConfiguredTarget instrumentation) {
- return ((AndroidInstrumentationInfoProvider)
- instrumentation.get(
- AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO.getKey()))
+ return instrumentation
+ .get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO)
.getTargetApk();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
index c42ef25391..be78678e13 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
@@ -586,8 +586,7 @@ public class SkylarkJavaLiteProtoLibraryTest extends BuildViewTestCase {
private static <P extends TransitiveInfoProvider> P getProvider(
Class<P> providerClass, ConfiguredTarget target) {
- JavaProvider javaProvider =
- (JavaProvider) target.get(JavaProvider.JAVA_PROVIDER.getKey());
+ JavaProvider javaProvider = target.get(JavaProvider.JAVA_PROVIDER);
return javaProvider.getProvider(providerClass);
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
index db30b9a0ac..d387743cc5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
@@ -1360,8 +1360,7 @@ public class AppleBinaryTest extends ObjcRuleTestCase {
")");
ConfiguredTarget binTarget = getConfiguredTarget("//bin:bin");
AppleExecutableBinaryProvider executableBinaryProvider =
- (AppleExecutableBinaryProvider) binTarget.get(
- AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR.getKey());
+ binTarget.get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR);
assertThat(executableBinaryProvider).isNotNull();
CommandAction testLinkAction = linkAction("//test:test");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
index c410ce51cd..01f8b08d99 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
@@ -532,8 +532,7 @@ public class AppleStaticLibraryTest extends ObjcRuleTestCase {
")");
ConfiguredTarget binTarget = getConfiguredTarget("//lib:applelib");
AppleStaticLibraryProvider provider =
- (AppleStaticLibraryProvider) binTarget.get(
- AppleStaticLibraryProvider.SKYLARK_CONSTRUCTOR.getKey());
+ binTarget.get(AppleStaticLibraryProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider).isNotNull();
assertThat(provider.getMultiArchArchive()).isNotNull();
assertThat(provider.getDepsObjcProvider()).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosDeviceTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosDeviceTest.java
index 49b7540b69..273f51b497 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosDeviceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosDeviceTest.java
@@ -104,8 +104,7 @@ public class IosDeviceTest extends BuildViewTestCase {
assertThat(view.hasErrors(getConfiguredTarget("//test:foo"))).isFalse();
ConfiguredTarget target = getConfiguredTarget("//test:foo");
- IosDeviceProvider provider =
- (IosDeviceProvider) target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR.getKey());
+ IosDeviceProvider provider = target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.getType()).isEqualTo("IPHONE_6");
}
@@ -156,8 +155,7 @@ public class IosDeviceTest extends BuildViewTestCase {
assertThat(view.hasErrors(getConfiguredTarget(label))).isFalse();
ConfiguredTarget target = getConfiguredTarget(label);
- IosDeviceProvider provider =
- (IosDeviceProvider) target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR.getKey());
+ IosDeviceProvider provider = target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.getXcodeVersion()).isEqualTo(DottedVersion.fromString(version));
}
@@ -165,8 +163,7 @@ public class IosDeviceTest extends BuildViewTestCase {
assertThat(view.hasErrors(getConfiguredTarget(label))).isFalse();
ConfiguredTarget target = getConfiguredTarget(label);
- IosDeviceProvider provider =
- (IosDeviceProvider) target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR.getKey());
+ IosDeviceProvider provider = target.get(IosDeviceProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.getIosVersion()).isEqualTo(DottedVersion.fromString(version));
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModuleTest.java b/src/test/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModuleTest.java
index 7aecef07b4..0d6318f606 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModuleTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/test/SkylarkTestingModuleTest.java
@@ -45,9 +45,7 @@ public class SkylarkTestingModuleTest extends BuildViewTestCase {
")");
ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
- ExecutionInfoProvider provider =
- (ExecutionInfoProvider)
- skylarkTarget.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey());
+ ExecutionInfoProvider provider = skylarkTarget.get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.getExecutionInfo().get("requires-darwin")).isEqualTo("1");
}
@@ -73,8 +71,7 @@ public class SkylarkTestingModuleTest extends BuildViewTestCase {
ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
TestEnvironmentProvider provider =
- (TestEnvironmentProvider)
- skylarkTarget.get(TestEnvironmentProvider.SKYLARK_CONSTRUCTOR.getKey());
+ skylarkTarget.get(TestEnvironmentProvider.SKYLARK_CONSTRUCTOR);
assertThat(provider.getEnvironment().get("XCODE_VERSION_OVERRIDE")).isEqualTo("7.3.1");
}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 24c16e59c8..1cd8a98c62 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -1404,8 +1404,10 @@ public class SkylarkEvaluationTest extends EvaluationTest {
@SkylarkModule(name = "SkylarkClassObjectWithSkylarkCallables", doc = "")
static final class SkylarkClassObjectWithSkylarkCallables extends SkylarkClassObject {
- private static final NativeClassObjectConstructor CONSTRUCTOR =
- new NativeClassObjectConstructor("struct_with_skylark_callables") {};
+ private static final NativeClassObjectConstructor<SkylarkClassObjectWithSkylarkCallables>
+ CONSTRUCTOR =
+ new NativeClassObjectConstructor<SkylarkClassObjectWithSkylarkCallables>(
+ SkylarkClassObjectWithSkylarkCallables.class, "struct_with_skylark_callables") {};
SkylarkClassObjectWithSkylarkCallables() {
super(