diff options
author | dslomov <dslomov@google.com> | 2017-07-10 17:15:27 +0200 |
---|---|---|
committer | László Csomor <laszlocsomor@google.com> | 2017-07-10 17:45:04 +0200 |
commit | 77baa4c372ae014db8e17f6d3c60bd88597853d9 (patch) | |
tree | 3ca2c63943782b506b0f19f5b7f7465909723590 /src | |
parent | 45bd34e747d13fc2bebdc849a11b4b952da5d8a6 (diff) |
Make native declared providers type-safe.
RELNOTES: None.
PiperOrigin-RevId: 161395570
Diffstat (limited to 'src')
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( |