diff options
Diffstat (limited to 'src/main/java')
73 files changed, 814 insertions, 906 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java index a998570d8f..235dc375f4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java @@ -22,9 +22,9 @@ 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.events.Location; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.PackageSpecification; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.ClassObject; @@ -113,12 +113,12 @@ public abstract class AbstractConfiguredTarget @Override public final Object getIndex(Object key, Location loc) throws EvalException { - if (!(key instanceof ClassObjectConstructor)) { + if (!(key instanceof Provider)) { throw new EvalException(loc, String.format( "Type Target only supports indexing by object constructors, got %s instead", EvalUtils.getDataTypeName(key))); } - ClassObjectConstructor constructor = (ClassObjectConstructor) key; + Provider constructor = (Provider) key; Object declaredProvider = get(constructor.getKey()); if (declaredProvider != null) { return declaredProvider; @@ -133,12 +133,12 @@ public abstract class AbstractConfiguredTarget @Override public boolean containsKey(Object key, Location loc) throws EvalException { - if (!(key instanceof ClassObjectConstructor)) { + if (!(key instanceof Provider)) { throw new EvalException(loc, String.format( "Type Target only supports querying by object constructors, got %s instead", EvalUtils.getDataTypeName(key))); } - return get(((ClassObjectConstructor) key).getKey()) != null; + return get(((Provider) key).getKey()) != null; } @Override @@ -180,7 +180,7 @@ public abstract class AbstractConfiguredTarget /** Returns a declared provider provided by this target. Only meant to use from Skylark. */ @Nullable @Override - public final SkylarkClassObject get(ClassObjectConstructor.Key providerKey) { + public final Info get(Provider.Key providerKey) { if (providerKey.equals(DefaultProvider.SKYLARK_CONSTRUCTOR.getKey())) { return getDefaultProvider(); } @@ -189,8 +189,7 @@ public abstract class AbstractConfiguredTarget /** Implement in subclasses to get a skylark provider for a given {@code providerKey}. */ @Nullable - protected abstract SkylarkClassObject rawGetSkylarkProvider( - ClassObjectConstructor.Key providerKey); + protected abstract Info rawGetSkylarkProvider(Provider.Key providerKey); /** * Returns a value provided by this target. Only meant to use from Skylark. @@ -212,7 +211,6 @@ public abstract class AbstractConfiguredTarget default: return rawGetSkylarkProvider(providerKey); } - } /** Implement in subclasses to get a skylark provider for a given {@code providerKey}. */ 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 8eb0f2775c..90441ee26d 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 @@ -16,8 +16,8 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import java.util.HashMap; import java.util.Map; @@ -28,13 +28,11 @@ import java.util.Map; public final class ActionsProvider { /** The Actions provider type itself. */ - public static final NativeClassObjectConstructor<SkylarkClassObject> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<SkylarkClassObject>(SkylarkClassObject.class, "Actions") {}; + public static final NativeProvider<Info> SKYLARK_CONSTRUCTOR = + new NativeProvider<Info>(Info.class, "Actions") {}; - /** - * Factory method for creating instances of the Actions provider. - */ - public static SkylarkClassObject create(Iterable<ActionAnalysisMetadata> actions) { + /** Factory method for creating instances of the Actions provider. */ + public static Info create(Iterable<ActionAnalysisMetadata> actions) { Map<Artifact, ActionAnalysisMetadata> map = new HashMap<>(); for (ActionAnalysisMetadata action : actions) { for (Artifact artifact : action.getOutputs()) { @@ -46,6 +44,6 @@ public final class ActionsProvider { } } ImmutableMap<String, Object> fields = ImmutableMap.<String, Object>of("by_file", map); - return new SkylarkClassObject(SKYLARK_CONSTRUCTOR, fields); + return new Info(SKYLARK_CONSTRUCTOR, fields); } } 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 a5ad97eff9..c9462d2f1a 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 @@ -24,8 +24,8 @@ 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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.vfs.PathFragment; @@ -81,9 +81,9 @@ 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 Info> Iterable<T> getProviders( Iterable<? extends TransitiveInfoCollection> prerequisites, - final NativeClassObjectConstructor<T> skylarkKey) { + final NativeProvider<T> skylarkKey) { ImmutableList.Builder<T> result = ImmutableList.builder(); for (TransitiveInfoCollection prerequisite : prerequisites) { T prerequisiteProvider = prerequisite.get(skylarkKey); @@ -102,11 +102,9 @@ public final class AnalysisUtils { return Iterables.filter(prerequisites, target -> target.getProvider(provider) != null); } - /** - * Returns the iterable of collections that have the specified provider. - */ - public static <S extends TransitiveInfoCollection, C extends SkylarkClassObject> Iterable<S> - filterByProvider(Iterable<S> prerequisites, final NativeClassObjectConstructor<C> provider) { + /** Returns the iterable of collections that have the specified provider. */ + public static <S extends TransitiveInfoCollection, C extends Info> Iterable<S> filterByProvider( + Iterable<S> prerequisites, final NativeProvider<C> provider) { return Iterables.filter(prerequisites, target -> target.get(provider) != null); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java index 4e0c62b3f1..23df2954fd 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java @@ -28,8 +28,8 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.util.Preconditions; @@ -97,7 +97,7 @@ public final class ConfiguredAspect { } } - public SkylarkClassObject get(ClassObjectConstructor.Key key) { + public Info get(Provider.Key key) { return providers.getProvider(key); } @@ -205,9 +205,9 @@ public final class ConfiguredAspect { return this; } - public Builder addSkylarkDeclaredProvider(SkylarkClassObject declaredProvider, Location loc) + public Builder addSkylarkDeclaredProvider(Info declaredProvider, Location loc) throws EvalException { - ClassObjectConstructor constructor = declaredProvider.getConstructor(); + Provider constructor = declaredProvider.getProvider(); if (!constructor.isExported()) { throw new EvalException( constructor.getLocation(), "All providers must be top level values"); @@ -216,12 +216,12 @@ public final class ConfiguredAspect { return this; } - private void addDeclaredProvider(SkylarkClassObject declaredProvider) { + private void addDeclaredProvider(Info declaredProvider) { providers.put(declaredProvider); } - public Builder addNativeDeclaredProvider(SkylarkClassObject declaredProvider) { - ClassObjectConstructor constructor = declaredProvider.getConstructor(); + public Builder addNativeDeclaredProvider(Info declaredProvider) { + Provider constructor = declaredProvider.getProvider(); Preconditions.checkState(constructor.isExported()); addDeclaredProvider(declaredProvider); return this; 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 ab0722c6b1..26ba931295 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 @@ -19,16 +19,16 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; 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.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; /** DefaultProvider is provided by all targets implicitly and contains all standard fields. */ @Immutable -public final class DefaultProvider extends SkylarkClassObject { +public final class DefaultProvider extends Info { // Accessors for Skylark private static final String DATA_RUNFILES_FIELD = "data_runfiles"; @@ -47,18 +47,18 @@ public final class DefaultProvider extends SkylarkClassObject { private final AtomicReference<SkylarkNestedSet> files = new AtomicReference<>(); public static final String SKYLARK_NAME = "DefaultInfo"; - public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<SkylarkClassObject>(SkylarkClassObject.class, SKYLARK_NAME) { + public static final Provider SKYLARK_CONSTRUCTOR = + new NativeProvider<Info>(Info.class, SKYLARK_NAME) { @Override - protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) { + protected Info createInstanceFromSkylark(Object[] args, Location loc) { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; - return new SkylarkClassObject(this, kwargs, loc); + return new Info(this, kwargs, loc); } }; private DefaultProvider( - ClassObjectConstructor constructor, + Provider constructor, RunfilesProvider runfilesProvider, FileProvider fileProvider, FilesToRunProvider filesToRunProvider) { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java index 83a9266fe5..358a40d4cf 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/EnvironmentGroupConfiguredTarget.java @@ -14,9 +14,9 @@ package com.google.devtools.build.lib.analysis; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.EnvironmentGroup; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.util.Preconditions; /** @@ -35,7 +35,7 @@ public final class EnvironmentGroupConfiguredTarget extends AbstractConfiguredTa } @Override - protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) { + protected Info rawGetSkylarkProvider(Provider.Key providerKey) { return null; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java index 0659bb86cd..2c1ed08d06 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/FileConfiguredTarget.java @@ -18,9 +18,9 @@ import com.google.devtools.build.lib.actions.Artifact; 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.ClassObjectConstructor; import com.google.devtools.build.lib.packages.FileTarget; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.rules.fileset.FilesetProvider; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.util.FileType; @@ -81,7 +81,7 @@ public abstract class FileConfiguredTarget extends AbstractConfiguredTarget } @Override - protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) { + protected Info rawGetSkylarkProvider(Provider.Key providerKey) { return providers.getProvider(providerKey); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java index ec5a58fb3e..de8dbd8b9f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java @@ -15,9 +15,9 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; +import com.google.devtools.build.lib.packages.Provider.Key; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import java.util.ArrayList; import java.util.List; @@ -76,8 +76,8 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget { } @Override - protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) { - SkylarkClassObject provider = providers.getProvider(providerKey); + protected Info rawGetSkylarkProvider(Provider.Key providerKey) { + Info provider = providers.getProvider(providerKey); if (provider == null) { provider = base.get(providerKey); } @@ -142,12 +142,12 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget { throw new DuplicateException("Provider " + legacyId + " provided twice"); } aspectProviders.put(legacyId, providers.getProviderInstanceAt(i)); - } else if (providerKey instanceof ClassObjectConstructor.Key) { - ClassObjectConstructor.Key key = (Key) providerKey; + } else if (providerKey instanceof Provider.Key) { + Provider.Key key = (Key) providerKey; if (base.get(key) != null || aspectProviders.contains(key)) { throw new DuplicateException("Provider " + key + " provided twice"); } - aspectProviders.put((SkylarkClassObject) providers.getProviderInstanceAt(i)); + aspectProviders.put((Info) providers.getProviderInstanceAt(i)); } } } 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 9557410dfc..c53ef44acb 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 @@ -28,8 +28,8 @@ 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.events.Location; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.SkylarkRuleConfiguredTargetUtil; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; @@ -48,8 +48,8 @@ import javax.annotation.Nullable; * built when the target is mentioned on the command line (as opposed to being always built, like * {@link com.google.devtools.build.lib.analysis.FileProvider}) * - * <p>The artifacts are grouped into "output groups". Which output groups are built is controlled - * by the {@code --output_groups} undocumented command line option, which in turn is added to the + * <p>The artifacts are grouped into "output groups". Which output groups are built is controlled by + * the {@code --output_groups} undocumented command line option, which in turn is added to the * command line at the discretion of the build command being run. * * <p>Output groups starting with an underscore are "not important". This means that artifacts built @@ -57,12 +57,10 @@ import javax.annotation.Nullable; * not mentioned on the output. */ @Immutable -public final class OutputGroupProvider extends SkylarkClassObject - implements SkylarkIndexable, Iterable<String> { +public final class OutputGroupProvider extends Info implements SkylarkIndexable, Iterable<String> { public static final String SKYLARK_NAME = "output_groups"; - public static NativeClassObjectConstructor<OutputGroupProvider> SKYLARK_CONSTRUCTOR = - new Constructor(); + public static NativeProvider<OutputGroupProvider> SKYLARK_CONSTRUCTOR = new Constructor(); /** * Prefix for output groups that are not reported to the user on the terminal output of Blaze when @@ -258,7 +256,7 @@ public final class OutputGroupProvider extends SkylarkClassObject } /** A constructor callable from Skylark for OutputGroupProvider. */ - private static class Constructor extends NativeClassObjectConstructor<OutputGroupProvider> { + private static class Constructor extends NativeProvider<OutputGroupProvider> { private Constructor() { super(OutputGroupProvider.class, "OutputGroupInfo"); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java index e0516dc20d..4085f63363 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PackageGroupConfiguredTarget.java @@ -20,10 +20,10 @@ 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.events.Event; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.PackageGroup; import com.google.devtools.build.lib.packages.PackageSpecification; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.util.Preconditions; /** @@ -81,7 +81,7 @@ public final class PackageGroupConfiguredTarget extends AbstractConfiguredTarget } @Override - protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) { + protected Info rawGetSkylarkProvider(Provider.Key providerKey) { return null; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java index 8f6b61cbc3..028c8c5996 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java @@ -17,10 +17,10 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.RunUnder; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.OutputFile; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.SkylarkApiProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.Printer; @@ -129,7 +129,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { } @Override - protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) { + protected Info rawGetSkylarkProvider(Provider.Key providerKey) { return providers.getProvider(providerKey); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java index 821646843a..fc7bcf6bc3 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java @@ -29,9 +29,9 @@ 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.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.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.test.ExecutionInfoProvider; @@ -250,13 +250,10 @@ public final class RuleConfiguredTargetBuilder { return this; } - private <T extends TransitiveInfoProvider> void maybeAddSkylarkLegacyProvider( - SkylarkClassObject value) { - if (value.getConstructor() instanceof NativeClassObjectConstructor.WithLegacySkylarkName) { + private <T extends TransitiveInfoProvider> void maybeAddSkylarkLegacyProvider(Info value) { + if (value.getProvider() instanceof NativeProvider.WithLegacySkylarkName) { addSkylarkTransitiveInfo( - ((NativeClassObjectConstructor.WithLegacySkylarkName) value.getConstructor()) - .getSkylarkName(), - value); + ((NativeProvider.WithLegacySkylarkName) value.getProvider()).getSkylarkName(), value); } } @@ -273,18 +270,17 @@ public final class RuleConfiguredTargetBuilder { } /** - * Adds a "declared provider" defined in Skylark to the rule. - * Use this method for declared providers defined in Skyark. + * Adds a "declared provider" defined in Skylark to the rule. Use this method for declared + * providers defined in Skyark. * - * Has special handling for {@link OutputGroupProvider}: that provider is not added - * from Skylark directly, instead its outpuyt groups are added. + * <p>Has special handling for {@link OutputGroupProvider}: that provider is not added from + * Skylark directly, instead its outpuyt groups are added. * - * Use {@link #addNativeDeclaredProvider(SkylarkClassObject)} in definitions of - * native rules. + * <p>Use {@link #addNativeDeclaredProvider(Info)} in definitions of native rules. */ - public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider( - SkylarkClassObject provider, Location loc) throws EvalException { - ClassObjectConstructor constructor = provider.getConstructor(); + public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider(Info provider, Location loc) + throws EvalException { + Provider constructor = provider.getProvider(); if (!constructor.isExported()) { throw new EvalException(constructor.getLocation(), "All providers must be top level values"); @@ -304,26 +300,23 @@ public final class RuleConfiguredTargetBuilder { * Adds "declared providers" defined in native code to the rule. Use this method for declared * providers in definitions of native rules. * - * <p>Use {@link #addSkylarkDeclaredProvider(SkylarkClassObject, Location)} for Skylark rule - * implementations. + * <p>Use {@link #addSkylarkDeclaredProvider(Info, Location)} for Skylark rule implementations. */ - public RuleConfiguredTargetBuilder addNativeDeclaredProviders( - Iterable<SkylarkClassObject> providers) { - for (SkylarkClassObject provider : providers) { + public RuleConfiguredTargetBuilder addNativeDeclaredProviders(Iterable<Info> providers) { + for (Info provider : providers) { addNativeDeclaredProvider(provider); } return this; } /** - * Adds a "declared provider" defined in native code to the rule. - * Use this method for declared providers in definitions of native rules. + * Adds a "declared provider" defined in native code to the rule. Use this method for declared + * providers in definitions of native rules. * - * Use {@link #addSkylarkDeclaredProvider(SkylarkClassObject, Location)} - * for Skylark rule implementations. + * <p>Use {@link #addSkylarkDeclaredProvider(Info, Location)} for Skylark rule implementations. */ - public RuleConfiguredTargetBuilder addNativeDeclaredProvider(SkylarkClassObject provider) { - ClassObjectConstructor constructor = provider.getConstructor(); + public RuleConfiguredTargetBuilder addNativeDeclaredProvider(Info provider) { + Provider constructor = provider.getProvider(); Preconditions.checkState(constructor.isExported()); providersBuilder.put(provider); maybeAddSkylarkLegacyProvider(provider); 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 cd7b72b867..de978e0940 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 @@ -64,8 +64,9 @@ import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy; 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.Info; import com.google.devtools.build.lib.packages.InputFile; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.PackageSpecification; import com.google.devtools.build.lib.packages.RawAttributeMapper; @@ -74,7 +75,6 @@ import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.RuleErrorConsumer; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.AliasProvider; @@ -717,9 +717,7 @@ public final class RuleContext extends TargetContext checkAttribute(attributeName, Mode.SPLIT); Map<Optional<String>, ? extends List<? extends TransitiveInfoCollection>> map = getSplitPrerequisites(attributeName); - return map.isEmpty() - ? ImmutableList.of() - : map.entrySet().iterator().next().getValue(); + return map.isEmpty() ? ImmutableList.of() : map.entrySet().iterator().next().getValue(); } checkAttribute(attributeName, mode); @@ -820,13 +818,13 @@ public final class RuleContext extends TargetContext } /** - * For a given attribute, returns all declared provider provided by targets - * of that attribute. Each declared provider is keyed by the - * {@link BuildConfiguration} under which the provider was created. + * For a given attribute, returns all declared provider provided by targets of that attribute. + * Each declared provider is keyed by the {@link BuildConfiguration} under which the provider was + * created. */ - public <C extends SkylarkClassObject> ImmutableListMultimap<BuildConfiguration, C> - getPrerequisitesByConfiguration(String attributeName, Mode mode, - final NativeClassObjectConstructor<C> provider) { + public <C extends Info> + ImmutableListMultimap<BuildConfiguration, C> getPrerequisitesByConfiguration( + String attributeName, Mode mode, final NativeProvider<C> provider) { List<? extends TransitiveInfoCollection> transitiveInfoCollections = getPrerequisites(attributeName, mode); @@ -873,8 +871,8 @@ public final class RuleContext extends TargetContext * Returns all the declared providers (native and Skylark) for the specified constructor under the * specified attribute of this target in the BUILD file. */ - public <T extends SkylarkClassObject> Iterable<T> getPrerequisites( - String attributeName, Mode mode, final NativeClassObjectConstructor<T> skylarkKey) { + public <T extends Info> Iterable<T> getPrerequisites( + String attributeName, Mode mode, final NativeProvider<T> skylarkKey) { return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey); } @@ -884,8 +882,8 @@ public final class RuleContext extends TargetContext * TransitiveInfoCollection under the specified attribute. */ @Nullable - public <T extends SkylarkClassObject> T getPrerequisite( - String attributeName, Mode mode, final NativeClassObjectConstructor<T> skylarkKey) { + public <T extends Info> T getPrerequisite( + String attributeName, Mode mode, final NativeProvider<T> skylarkKey) { TransitiveInfoCollection prerequisite = getPrerequisite(attributeName, mode); return prerequisite == null ? null : prerequisite.get(skylarkKey); } @@ -904,9 +902,8 @@ public final class RuleContext extends TargetContext * Returns all the providers of the specified type that are listed under the specified attribute * of this target in the BUILD file, and that contain the specified provider. */ - public <C extends SkylarkClassObject> - Iterable<? extends TransitiveInfoCollection> getPrerequisitesIf( - String attributeName, Mode mode, final NativeClassObjectConstructor<C> classType) { + public <C extends Info> Iterable<? extends TransitiveInfoCollection> getPrerequisitesIf( + String attributeName, Mode mode, final NativeProvider<C> classType) { return AnalysisUtils.filterByProvider(getPrerequisites(attributeName, mode), classType); } @@ -1978,8 +1975,8 @@ public final class RuleContext extends TargetContext } /** - * Because some rules still have to use allowedRuleClasses to do rule dependency validation. - * A dependency is valid if it is from a rule in allowedRuledClasses, OR if all of the providers + * Because some rules still have to use allowedRuleClasses to do rule dependency validation. A + * dependency is valid if it is from a rule in allowedRuledClasses, OR if all of the providers * in requiredProviders are provided by the target. */ private void validateRuleDependency(ConfiguredTarget prerequisite, Attribute attribute) { @@ -1993,8 +1990,7 @@ public final class RuleContext extends TargetContext return; } - if (checkRuleDependencyMandatoryProviders(prerequisite, attribute, - unfulfilledRequirements)) { + if (checkRuleDependencyMandatoryProviders(prerequisite, attribute, unfulfilledRequirements)) { return; } @@ -2005,14 +2001,13 @@ public final class RuleContext extends TargetContext } } - /** - * Check if prerequisite should be allowed based on its rule class. - */ - private boolean checkRuleDependencyClass(ConfiguredTarget prerequisite, Attribute attribute, - Set<String> unfulfilledRequirements) { + /** Check if prerequisite should be allowed based on its rule class. */ + private boolean checkRuleDependencyClass( + ConfiguredTarget prerequisite, Attribute attribute, Set<String> unfulfilledRequirements) { if (attribute.getAllowedRuleClassesPredicate() != Predicates.<RuleClass>alwaysTrue()) { - if (attribute.getAllowedRuleClassesPredicate().apply( - ((Rule) prerequisite.getTarget()).getRuleClassObject())) { + if (attribute + .getAllowedRuleClassesPredicate() + .apply(((Rule) prerequisite.getTarget()).getRuleClassObject())) { // prerequisite has an allowed rule class => accept. return true; } @@ -2031,16 +2026,21 @@ public final class RuleContext extends TargetContext /** * Check if prerequisite should be allowed with warning based on its rule class. * - * If yes, also issues said warning. + * <p>If yes, also issues said warning. */ - private boolean checkRuleDependencyClassWarnings(ConfiguredTarget prerequisite, - Attribute attribute) { - if (attribute.getAllowedRuleClassesWarningPredicate().apply( - ((Rule) prerequisite.getTarget()).getRuleClassObject())) { + private boolean checkRuleDependencyClassWarnings( + ConfiguredTarget prerequisite, Attribute attribute) { + if (attribute + .getAllowedRuleClassesWarningPredicate() + .apply(((Rule) prerequisite.getTarget()).getRuleClassObject())) { Predicate<RuleClass> allowedRuleClasses = attribute.getAllowedRuleClassesPredicate(); - reportBadPrerequisite(attribute, prerequisite.getTarget().getTargetKind(), prerequisite, + reportBadPrerequisite( + attribute, + prerequisite.getTarget().getTargetKind(), + prerequisite, allowedRuleClasses == Predicates.<RuleClass>alwaysTrue() - ? null : "expected " + allowedRuleClasses, + ? null + : "expected " + allowedRuleClasses, true); // prerequisite has a rule class allowed with a warning => accept, emitting a warning. return true; @@ -2048,12 +2048,9 @@ public final class RuleContext extends TargetContext return false; } - /** - * Check if prerequisite should be allowed based on required providers on - * the attribute. - */ - private boolean checkRuleDependencyMandatoryProviders(ConfiguredTarget prerequisite, - Attribute attribute, Set<String> unfulfilledRequirements) { + /** Check if prerequisite should be allowed based on required providers on the attribute. */ + private boolean checkRuleDependencyMandatoryProviders( + ConfiguredTarget prerequisite, Attribute attribute, Set<String> unfulfilledRequirements) { RequiredProviders requiredProviders = attribute.getRequiredProviders(); if (requiredProviders.acceptsAny()) { @@ -2066,7 +2063,8 @@ public final class RuleContext extends TargetContext } unfulfilledRequirements.add( - String.format("'%s' does not have mandatory providers: %s", + String.format( + "'%s' does not have mandatory providers: %s", prerequisite.getLabel(), prerequisite.missingProviders(requiredProviders).getDescription())); 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 cbe80a67d2..2187da0cae 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 @@ -14,9 +14,9 @@ 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.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import javax.annotation.Nullable; @@ -36,18 +36,18 @@ public interface SkylarkProviderCollection { /** * Returns the declared provider requested, or null, if the information is not found. * - * Use {@link #get(NativeClassObjectConstructor)} for native providers. + * <p>Use {@link #get(NativeProvider)} for native providers. */ @Nullable - SkylarkClassObject get(ClassObjectConstructor.Key providerKey); + Info get(Provider.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. + * <p>Type-safe version of {@link #get(Provider.Key)} for native providers. */ @Nullable - default <T extends SkylarkClassObject> T get(NativeClassObjectConstructor<T> provider) { + default <T extends Info> T get(NativeProvider<T> provider) { return provider.getValueClass().cast(get(provider.getKey())); } @@ -55,9 +55,8 @@ public interface SkylarkProviderCollection { * 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. * - * <p>This method dispatches to either {@link #get(ClassObjectConstructor.Key)} or {@link - * #get(String)} depending on whether {@link SkylarkProviderIdentifier} is for legacy or for - * declared provider. + * <p>This method dispatches to either {@link #get(Provider.Key)} or {@link #get(String)} + * depending on whether {@link SkylarkProviderIdentifier} is for legacy or for declared provider. */ @Nullable default Object get(SkylarkProviderIdentifier id) { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java index 23c2238d58..b3b4894e2f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java @@ -87,22 +87,18 @@ public interface TransitiveInfoCollection extends SkylarkIndexable, SkylarkProvi default boolean satisfies(RequiredProviders providers) { return providers.isSatisfiedBy( aClass -> getProvider(aClass.asSubclass(TransitiveInfoProvider.class)) != null, - id -> this.get(id) != null - ); + id -> this.get(id) != null); } /** - * Returns providers that this {@link TransitiveInfoCollection} misses from - * a given {@link RequiredProviders}. + * Returns providers that this {@link TransitiveInfoCollection} misses from a given {@link + * RequiredProviders}. * - * If none are missing, returns {@link RequiredProviders} that accept any set - * of providers. + * <p>If none are missing, returns {@link RequiredProviders} that accept any set of providers. */ default RequiredProviders missingProviders(RequiredProviders providers) { return providers.getMissing( aClass -> getProvider(aClass.asSubclass(TransitiveInfoProvider.class)) != null, - id -> this.get(id) != null - ); + id -> this.get(id) != null); } - } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java index d8fa9ae4ae..9d83702a6a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java @@ -14,26 +14,26 @@ package com.google.devtools.build.lib.analysis; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** - * Provides a mapping between an identifier for transitive information and its instance. - * (between provider identifier and provider instance) + * Provides a mapping between an identifier for transitive information and its instance. (between + * provider identifier and provider instance) + * + * <p>We have three kinds of provider identifiers: * - * We have three kinds of provider identifiers: * <ul> - * <li>Declared providers. They are exposed to Skylark and identified by - * {@link ClassObjectConstructor.Key}. Provider instances are {@link SkylarkClassObject}s.</li> - * <li>Native providers. They are identified by their {@link Class} and their instances - * are instances of that class. They should implement {@link TransitiveInfoProvider} marker - * interface. - * </li> - * <li>Legacy Skylark providers (deprecated). They are identified by simple strings, - * and their instances are more-less random objects.</li> + * <li>Declared providers. They are exposed to Skylark and identified by {@link Provider.Key}. + * Provider instances are {@link Info}s. + * <li>Native providers. They are identified by their {@link Class} and their instances are + * instances of that class. They should implement {@link TransitiveInfoProvider} marker + * interface. + * <li>Legacy Skylark providers (deprecated). They are identified by simple strings, and their + * instances are more-less random objects. * </ul> */ @Immutable @@ -43,11 +43,11 @@ public interface TransitiveInfoProviderMap { <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass); /** - * Returns the instance of declared provider with the given {@code key}, - * or {@code null} if not present. + * Returns the instance of declared provider with the given {@code key}, or {@code null} if not + * present. */ @Nullable - SkylarkClassObject getProvider(ClassObjectConstructor.Key key); + Info getProvider(Provider.Key key); /** * Returns the instance of a legacy Skylark with the given name, or {@code null} if not present. @@ -80,10 +80,11 @@ public interface TransitiveInfoProviderMap { /** * Return value is one of: + * * <ul> - * <li>{@code Class<? extends TransitiveInfoProvider>}</li> - * <li>String</li> - * <li>{@link ClassObjectConstructor.Key}</li> + * <li>{@code Class<? extends TransitiveInfoProvider>} + * <li>String + * <li>{@link Provider.Key} * </ul> * * Low-level method, use with care. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java index f46689c247..4f1b753727 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java @@ -14,8 +14,8 @@ package com.google.devtools.build.lib.analysis; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.util.Preconditions; import java.util.Arrays; import java.util.LinkedHashMap; @@ -39,7 +39,7 @@ public class TransitiveInfoProviderMapBuilder { return providers.containsKey(legacyId); } - public boolean contains(ClassObjectConstructor.Key key) { + public boolean contains(Provider.Key key) { return providers.containsKey(key); } @@ -48,9 +48,8 @@ public class TransitiveInfoProviderMapBuilder { Class<? extends T> providerClass, T provider) { Preconditions.checkNotNull(providerClass); Preconditions.checkNotNull(provider); - Preconditions.checkState(!(provider instanceof SkylarkClassObject), - "Expose %s as native declared provider", - providerClass); + Preconditions.checkState( + !(provider instanceof Info), "Expose %s as native declared provider", providerClass); // TODO(arielb): throw an exception if the providerClass is already present? // This is enforced by aspects but RuleConfiguredTarget presents violations @@ -59,13 +58,13 @@ public class TransitiveInfoProviderMapBuilder { return this; } - public TransitiveInfoProviderMapBuilder put(SkylarkClassObject classObject) { + public TransitiveInfoProviderMapBuilder put(Info classObject) { Preconditions.checkNotNull(classObject); Preconditions.checkState(!(classObject instanceof TransitiveInfoProvider), "Declared provider %s should not implement TransitiveInfoProvider", classObject.getClass()); - providers.put(classObject.getConstructor().getKey(), classObject); + providers.put(classObject.getProvider().getKey(), classObject); return this; } @@ -105,8 +104,8 @@ public class TransitiveInfoProviderMapBuilder { } @Nullable - public SkylarkClassObject getProvider(ClassObjectConstructor.Key key) { - return (SkylarkClassObject) providers.get(key); + public Info getProvider(Provider.Key key) { + return (Info) providers.get(key); } public TransitiveInfoProviderMap build() { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java index b0ba5836a3..b43129d902 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java @@ -15,8 +15,8 @@ package com.google.devtools.build.lib.analysis; import com.google.devtools.build.lib.collect.ImmutableSharedKeyMap; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import java.util.Map; import javax.annotation.Nullable; @@ -43,8 +43,8 @@ class TransitiveInfoProviderMapImpl @Nullable @Override - public SkylarkClassObject getProvider(ClassObjectConstructor.Key key) { - return (SkylarkClassObject) get(key); + public Info getProvider(Provider.Key key) { + return (Info) get(key); } @Nullable 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 6020817a48..e790180d53 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,8 +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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -35,7 +35,7 @@ import com.google.devtools.build.lib.syntax.SkylarkType; category = SkylarkModuleCategory.PROVIDER ) @Immutable -public class ConstraintSettingInfo extends SkylarkClassObject { +public class ConstraintSettingInfo extends Info { /** Name used in Skylark for accessing this provider. */ public static final String SKYLARK_NAME = "ConstraintSettingInfo"; @@ -53,8 +53,8 @@ public class ConstraintSettingInfo extends SkylarkClassObject { /*types=*/ ImmutableList.<SkylarkType>of(SkylarkType.of(Label.class))); /** Skylark constructor and identifier for this provider. */ - public static final NativeClassObjectConstructor<ConstraintSettingInfo> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<ConstraintSettingInfo>( + public static final NativeProvider<ConstraintSettingInfo> SKYLARK_CONSTRUCTOR = + new NativeProvider<ConstraintSettingInfo>( ConstraintSettingInfo.class, SKYLARK_NAME, SIGNATURE) { @Override protected ConstraintSettingInfo createInstanceFromSkylark(Object[] args, Location loc) 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 9cd1fac8ce..53d8ae1256 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,8 +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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -35,7 +35,7 @@ import com.google.devtools.build.lib.syntax.SkylarkType; category = SkylarkModuleCategory.PROVIDER ) @Immutable -public class ConstraintValueInfo extends SkylarkClassObject { +public class ConstraintValueInfo extends Info { /** Name used in Skylark for accessing this provider. */ public static final String SKYLARK_NAME = "ConstraintValueInfo"; @@ -55,9 +55,8 @@ public class ConstraintValueInfo extends SkylarkClassObject { SkylarkType.of(Label.class), SkylarkType.of(ConstraintSettingInfo.class))); /** Skylark constructor and identifier for this provider. */ - public static final NativeClassObjectConstructor<ConstraintValueInfo> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<ConstraintValueInfo>( - ConstraintValueInfo.class, SKYLARK_NAME, SIGNATURE) { + public static final NativeProvider<ConstraintValueInfo> SKYLARK_CONSTRUCTOR = + new NativeProvider<ConstraintValueInfo>(ConstraintValueInfo.class, SKYLARK_NAME, SIGNATURE) { @Override protected ConstraintValueInfo createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { 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 9e5c917712..8d8b669785 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,8 +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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -44,7 +44,7 @@ import javax.annotation.Nullable; category = SkylarkModuleCategory.PROVIDER ) @Immutable -public class PlatformInfo extends SkylarkClassObject { +public class PlatformInfo extends Info { /** Name used in Skylark for accessing this provider. */ public static final String SKYLARK_NAME = "PlatformInfo"; @@ -66,8 +66,8 @@ public class PlatformInfo extends SkylarkClassObject { SkylarkType.LIST, SkylarkType.of(ConstraintValueInfo.class)))); /** Skylark constructor and identifier for this provider. */ - public static final NativeClassObjectConstructor<PlatformInfo> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<PlatformInfo>(PlatformInfo.class, SKYLARK_NAME, SIGNATURE) { + public static final NativeProvider<PlatformInfo> SKYLARK_CONSTRUCTOR = + new NativeProvider<PlatformInfo>(PlatformInfo.class, SKYLARK_NAME, SIGNATURE) { @Override protected PlatformInfo createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { 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 d8d1282ef4..dcdde460bc 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 @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.EvalException; @@ -38,7 +38,7 @@ import java.util.Map; category = SkylarkModuleCategory.PROVIDER ) @Immutable -public class ToolchainInfo extends SkylarkClassObject { +public class ToolchainInfo extends Info { /** Name used in Skylark for accessing this provider. */ public static final String SKYLARK_NAME = "ToolchainInfo"; @@ -56,9 +56,8 @@ public class ToolchainInfo extends SkylarkClassObject { /*types=*/ ImmutableList.<SkylarkType>of(SkylarkType.DICT)); /** Skylark constructor and identifier for this provider. */ - public static final NativeClassObjectConstructor<ToolchainInfo> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<ToolchainInfo>( - ToolchainInfo.class, SKYLARK_NAME, SIGNATURE) { + public static final NativeProvider<ToolchainInfo> SKYLARK_CONSTRUCTOR = + new NativeProvider<ToolchainInfo>(ToolchainInfo.class, SKYLARK_NAME, SIGNATURE) { @Override protected ToolchainInfo createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java index 51e48c1d13..7f3f01477b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java @@ -27,9 +27,9 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.packages.Attribute; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException; import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper; @@ -78,7 +78,7 @@ public class SkylarkRepositoryContext { private final Rule rule; private final Path outputDirectory; - private final SkylarkClassObject attrObject; + private final Info attrObject; private final SkylarkOS osObject; private final Environment env; private final HttpDownloader httpDownloader; @@ -110,8 +110,7 @@ public class SkylarkRepositoryContext { : SkylarkType.convertToSkylark(val, null)); } } - attrObject = NativeClassObjectConstructor.STRUCT.create( - attrBuilder.build(), "No such attribute '%s'"); + attrObject = NativeProvider.STRUCT.create(attrBuilder.build(), "No such attribute '%s'"); } @SkylarkCallable( @@ -130,7 +129,7 @@ public class SkylarkRepositoryContext { "A struct to access the values of the attributes. The values are provided by " + "the user (if not, a default value is used)." ) - public SkylarkClassObject getAttr() { + public Info getAttr() { return attrObject; } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java index 4c9454e45f..f1d7dff981 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java @@ -75,9 +75,8 @@ public class BazelPrerequisiteValidator } if (prerequisiteTarget instanceof PackageGroup) { - RequiredProviders requiredProviders = RawAttributeMapper.of(rule) - .getAttributeDefinition(attrName) - .getRequiredProviders(); + RequiredProviders requiredProviders = + RawAttributeMapper.of(rule).getAttributeDefinition(attrName).getRequiredProviders(); boolean containsPackageSpecificationProvider = requiredProviders.getDescription().contains("PackageSpecificationProvider"); // TODO(plf): Add the PackageSpecificationProvider to the 'visibility' attribute. diff --git a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java index 1f1ddd6d85..3f8686b16a 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java @@ -164,7 +164,7 @@ public final class AdvertisedProviderSet { return this; } - public Builder addSkylark(ClassObjectConstructor.Key id) { + public Builder addSkylark(Provider.Key id) { skylarkProviders.add(SkylarkProviderIdentifier.forKey(id)); return this; } 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 7114040300..bd3605627f 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 @@ -950,18 +950,18 @@ public final class Attribute implements Comparable<Attribute> { /** * If this is a label or label-list attribute, then this sets the allowed rule types with - * warning for the labels occurring in the attribute. This must be a disjoint set from - * {@link #allowedRuleClasses}. + * warning for the labels occurring in the attribute. This must be a disjoint set from {@link + * #allowedRuleClasses}. * * <p>If the attribute contains Labels of any other rule type (other than this or those set in - * allowedRuleClasses()) and they fulfill {@link #getRequiredProviders()}}, the build - * continues without error. Else the build fails during analysis. + * allowedRuleClasses()) and they fulfill {@link #getRequiredProviders()}}, the build continues + * without error. Else the build fails during analysis. * - * <p>If neither this nor {@link #allowedRuleClassesForLabels} is set, only rules that - * fulfill {@link #getRequiredProviders()} build without error. + * <p>If neither this nor {@link #allowedRuleClassesForLabels} is set, only rules that fulfill + * {@link #getRequiredProviders()} build without error. * - * <p>This only works on a per-target basis, not on a per-file basis; with other words, it - * works for 'deps' attributes, but not 'srcs' attributes. + * <p>This only works on a per-target basis, not on a per-file basis; with other words, it works + * for 'deps' attributes, but not 'srcs' attributes. */ public Builder<TYPE> allowedRuleClassesWithWarning(String... allowedRuleClasses) { return allowedRuleClassesWithWarning(ImmutableSet.copyOf(allowedRuleClasses)); @@ -1514,7 +1514,7 @@ public final class Attribute implements Comparable<Attribute> { private Object invokeCallback(Map<String, Object> attrValues) throws EvalException, InterruptedException { ClassObject attrs = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( attrValues, "No such regular (non computed) attribute '%s'."); Object result = callback.call(attrs); try { @@ -1792,19 +1792,16 @@ public final class Attribute implements Comparable<Attribute> { private final ImmutableList<RuleAspect<?>> aspects; /** - * Constructs a rule attribute with the specified name, type and default - * value. + * Constructs a rule attribute with the specified name, type and default value. * * @param name the name of the attribute * @param type the type of the attribute - * @param defaultValue the default value to use for this attribute if none is - * specified in rule declaration in the BUILD file. Must be null, or of - * type "type". May be an instance of ComputedDefault, in which case - * its getDefault() method must return an instance of "type", or null. - * Must be immutable. - * @param configTransition the configuration transition for this attribute - * (which must be of type LABEL, LABEL_LIST, NODEP_LABEL or - * NODEP_LABEL_LIST). + * @param defaultValue the default value to use for this attribute if none is specified in rule + * declaration in the BUILD file. Must be null, or of type "type". May be an instance of + * ComputedDefault, in which case its getDefault() method must return an instance of "type", + * or null. Must be immutable. + * @param configTransition the configuration transition for this attribute (which must be of type + * LABEL, LABEL_LIST, NODEP_LABEL or NODEP_LABEL_LIST). */ private Attribute( String name, diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java index 525055476c..ecb9cf862f 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java @@ -94,10 +94,11 @@ public abstract class ImplicitOutputsFunction { attrValues.put(attrName, value == null ? Runtime.NONE : value); } } - ClassObject attrs = NativeClassObjectConstructor.STRUCT.create( - attrValues, - "Attribute '%s' either doesn't exist " - + "or uses a select() (i.e. could have multiple values)"); + ClassObject attrs = + NativeProvider.STRUCT.create( + attrValues, + "Attribute '%s' either doesn't exist " + + "or uses a select() (i.e. could have multiple values)"); try { ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); for (Map.Entry<String, String> entry : castMap(callback.call(attrs), diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObject.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java index fa84c3eff6..059c55efb2 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObject.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java @@ -21,7 +21,6 @@ import com.google.common.collect.Ordering; import com.google.common.collect.Sets; import com.google.common.collect.Sets.SetView; import com.google.devtools.build.lib.events.Location; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.StructConstructor; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -40,7 +39,7 @@ import java.util.List; import java.util.Map; import javax.annotation.Nullable; -/** An implementation class of ClassObject for structs created in Skylark code. */ +/** Represents information provided by a {@link Provider}. */ @SkylarkModule( name = "struct", category = SkylarkModuleCategory.BUILTIN, @@ -49,53 +48,48 @@ import javax.annotation.Nullable; + "See the global <a href=\"globals.html#struct\">struct</a> function " + "for more details." ) -public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable, Serializable { - private final ClassObjectConstructor constructor; +public class Info implements ClassObject, SkylarkValue, Concatable, Serializable { + private final Provider provider; private final ImmutableMap<String, Object> values; private final Location creationLoc; private final String errorMessage; /** Creates an empty struct with a given location. */ - public SkylarkClassObject(ClassObjectConstructor constructor, Location location) { - this.constructor = constructor; + public Info(Provider provider, Location location) { + this.provider = provider; this.values = ImmutableMap.of(); this.creationLoc = location; - this.errorMessage = constructor.getErrorMessageFormatForInstances(); + this.errorMessage = provider.getErrorMessageFormatForInstances(); } - /** - * Creates a built-in struct (i.e. without creation loc). - */ - public SkylarkClassObject(ClassObjectConstructor constructor, - Map<String, Object> values) { - this.constructor = constructor; + /** Creates a built-in struct (i.e. without creation loc). */ + public Info(Provider provider, Map<String, Object> values) { + this.provider = provider; this.values = copyValues(values); this.creationLoc = null; - this.errorMessage = constructor.getErrorMessageFormatForInstances(); + this.errorMessage = provider.getErrorMessageFormatForInstances(); } /** * Creates a built-in struct (i.e. without creation loc). * - * Allows to supply a specific error message. - * Only used in {@link StructConstructor#create(Map, String)} - * If you need to override an error message, preferred way is to create a specific - * {@link NativeClassObjectConstructor}. + * <p>Allows to supply a specific error message. Only used in + * {@link com.google.devtools.build.lib.packages.NativeProvider.StructConstructor#create(Map, + * String)} If you need to override an error message, preferred way is to create a specific {@link + * NativeProvider}. */ - SkylarkClassObject(ClassObjectConstructor constructor, - Map<String, Object> values, String errorMessage) { - this.constructor = constructor; + Info(Provider provider, Map<String, Object> values, String errorMessage) { + this.provider = provider; this.values = copyValues(values); this.creationLoc = null; this.errorMessage = Preconditions.checkNotNull(errorMessage); } - public SkylarkClassObject(ClassObjectConstructor constructor, - Map<String, Object> values, Location creationLoc) { - this.constructor = constructor; + public Info(Provider provider, Map<String, Object> values, Location creationLoc) { + this.provider = provider; this.values = copyValues(values); this.creationLoc = Preconditions.checkNotNull(creationLoc); - this.errorMessage = constructor.getErrorMessageFormatForInstances(); + this.errorMessage = provider.getErrorMessageFormatForInstances(); } // Ensure that values are all acceptable to Skylark before to stuff them in a ClassObject @@ -117,9 +111,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable return values.containsKey(name); } - /** - * Returns a value and try to cast it into specified type - */ + /** Returns a value and try to cast it into specified type */ public <TYPE> TYPE getValue(String key, Class<TYPE> type) throws EvalException { Object obj = values.get(key); if (obj == null) { @@ -135,17 +127,16 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable } public Location getCreationLoc() { - return Preconditions.checkNotNull(creationLoc, - "This struct was not created in a Skylark code"); + return Preconditions.checkNotNull(creationLoc, "This struct was not created in a Skylark code"); } @Override public Concatter getConcatter() { return StructConcatter.INSTANCE; } - - public ClassObjectConstructor getConstructor() { - return constructor; + + public Provider getProvider() { + return provider; } @Nullable @@ -159,27 +150,25 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable private StructConcatter() {} @Override - public SkylarkClassObject concat( - Concatable left, Concatable right, Location loc) throws EvalException { - SkylarkClassObject lval = (SkylarkClassObject) left; - SkylarkClassObject rval = (SkylarkClassObject) right; - if (!lval.constructor.equals(rval.constructor)) { - throw new EvalException(loc, - String.format("Cannot concat %s with %s", - lval.constructor.getPrintableName(), - rval.constructor.getPrintableName())); + public Info concat(Concatable left, Concatable right, Location loc) throws EvalException { + Info lval = (Info) left; + Info rval = (Info) right; + if (!lval.provider.equals(rval.provider)) { + throw new EvalException( + loc, + String.format( + "Cannot concat %s with %s", + lval.provider.getPrintableName(), rval.provider.getPrintableName())); } - SetView<String> commonFields = Sets - .intersection(lval.values.keySet(), rval.values.keySet()); + SetView<String> commonFields = Sets.intersection(lval.values.keySet(), rval.values.keySet()); if (!commonFields.isEmpty()) { - throw new EvalException(loc, "Cannot concat structs with common field(s): " - + Joiner.on(",").join(commonFields)); + throw new EvalException( + loc, + "Cannot concat structs with common field(s): " + Joiner.on(",").join(commonFields)); } - return new SkylarkClassObject(lval.constructor, - ImmutableMap.<String, Object>builder() - .putAll(lval.values) - .putAll(rval.values) - .build(), + return new Info( + lval.provider, + ImmutableMap.<String, Object>builder().putAll(lval.values).putAll(rval.values).build(), loc); } } @@ -194,8 +183,8 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable @Override public boolean isImmutable() { - // If the constructor is not yet exported the hash code of the object is subject to change - if (!constructor.isExported()) { + // If the provider is not yet exported the hash code of the object is subject to change + if (!provider.isExported()) { return false; } for (Object item : values.values()) { @@ -208,14 +197,14 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable @Override public boolean equals(Object otherObject) { - if (!(otherObject instanceof SkylarkClassObject)) { + if (!(otherObject instanceof Info)) { return false; } - SkylarkClassObject other = (SkylarkClassObject) otherObject; + Info other = (Info) otherObject; if (this == other) { return true; } - if (!this.constructor.equals(other.constructor)) { + if (!this.provider.equals(other.provider)) { return false; } // Compare objects' keys and values @@ -235,7 +224,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable List<String> keys = new ArrayList<>(getKeys()); Collections.sort(keys); List<Object> objectsToHash = new ArrayList<>(); - objectsToHash.add(constructor); + objectsToHash.add(provider); for (String key : keys) { objectsToHash.add(key); objectsToHash.add(getValue(key)); @@ -267,7 +256,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable @Override public void reprLegacy(SkylarkPrinter printer) { boolean first = true; - printer.append(constructor.getPrintableName()); + printer.append(provider.getPrintableName()); printer.append("("); // Sort by key to ensure deterministic output. for (String key : Ordering.natural().sortedCopy(values.keySet())) { diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java index 6bcce0fc00..f6f7d8ecb6 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java @@ -23,31 +23,27 @@ 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 Provider} defined in native code. * - * <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>Every non-abstract derived class of {@link NativeProvider} 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: * * <pre> - * public static final ClassObjectConstructor CC_LINK_PARAMS = - * new NativeClassObjectConstructor("link_params") { }; + * public static final Provider CC_LINK_PARAMS = + * new NativeProvider("link_params") { }; * </pre> * * 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<VALUE extends SkylarkClassObject> - extends ClassObjectConstructor { +public abstract class NativeProvider<VALUE extends Info> extends Provider { private final NativeKey key; private final String errorMessageForInstances; - /** - * "struct" function. - */ + /** "struct" function. */ public static final StructConstructor STRUCT = new StructConstructor(); private final Class<VALUE> valueClass; @@ -57,13 +53,11 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj } /** - * Implement this to mark that a native provider should be exported with - * certain name to Skylark. - * Broken: only works for rules, not for aspects. - * DO NOT USE FOR NEW CODE! + * Implement this to mark that a native provider should be exported with certain name to Skylark. + * Broken: only works for rules, not for aspects. DO NOT USE FOR NEW CODE! * - * Use native declared providers mechanism - * exclusively to expose providers to both native and Skylark code. + * <p>Use native declared providers mechanism exclusively to expose providers to both native and + * Skylark code. */ @Deprecated public static interface WithLegacySkylarkName { @@ -75,36 +69,35 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj * * <p>Singleton, instance is {@link #STRUCT}. */ - public static final class StructConstructor - extends NativeClassObjectConstructor<SkylarkClassObject> { + public static final class StructConstructor extends NativeProvider<Info> { private StructConstructor() { - super(SkylarkClassObject.class, "struct"); + super(Info.class, "struct"); } @Override - protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) { + protected Info createInstanceFromSkylark(Object[] args, Location loc) { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; - return new SkylarkClassObject(this, kwargs, loc); + return new Info(this, kwargs, loc); } - public SkylarkClassObject create(Map<String, Object> values, String message) { - return new SkylarkClassObject(this, values, message); + public Info create(Map<String, Object> values, String message) { + return new Info(this, values, message); } - public SkylarkClassObject create(Location loc) { - return new SkylarkClassObject(this, loc); + public Info create(Location loc) { + return new Info(this, loc); } } private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = FunctionSignature.WithValues.create(FunctionSignature.KWARGS); - protected NativeClassObjectConstructor(Class<VALUE> clazz, String name) { + protected NativeProvider(Class<VALUE> clazz, String name) { this(clazz, name, SIGNATURE); } - protected NativeClassObjectConstructor( + protected NativeProvider( Class<VALUE> valueClass, String name, FunctionSignature.WithValues<Object, SkylarkType> signature) { @@ -117,8 +110,8 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj /** * equals() implements singleton class semantics. * - * Every non-abstract derived class of {@link NativeClassObjectConstructor} - * corresponds to a single declared provider. + * <p>Every non-abstract derived class of {@link NativeProvider} corresponds to a single declared + * provider. */ @Override public final boolean equals(@Nullable Object other) { @@ -128,8 +121,8 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj /** * hashCode() implements singleton class semantics. * - * Every non-abstract derived class of {@link NativeClassObjectConstructor} - * corresponds to a single declared provider. + * <p>Every non-abstract derived class of {@link NativeProvider} corresponds to a single declared + * provider. */ @Override public final int hashCode() { @@ -157,10 +150,9 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj } @Override - protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { - throw new EvalException(loc, - String.format("'%s' cannot be constructed from Skylark", getPrintableName())); + protected Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { + throw new EvalException( + loc, String.format("'%s' cannot be constructed from Skylark", getPrintableName())); } public static Pair<String, String> getSerializedRepresentationForNativeKey(NativeKey key) { @@ -169,26 +161,24 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj public static NativeKey getNativeKeyFromSerializedRepresentation(Pair<String, String> serialized) throws ClassNotFoundException { - Class<? extends NativeClassObjectConstructor> aClass = - Class.forName(serialized.second).asSubclass(NativeClassObjectConstructor.class); + Class<? extends NativeProvider> aClass = + Class.forName(serialized.second).asSubclass(NativeProvider.class); return new NativeKey(serialized.first, aClass); } /** - * A serializable representation of {@link NativeClassObjectConstructor}. + * A serializable representation of {@link NativeProvider}. * - * Just a wrapper around its class. + * <p>Just a wrapper around its class. */ // todo(vladmos,dslomov): when we allow declared providers in `requiredProviders`, // we will need to serialize this somehow. @Immutable public static final class NativeKey extends Key { private final String name; - private final Class<? extends NativeClassObjectConstructor> aClass; + private final Class<? extends NativeProvider> aClass; - private NativeKey( - String name, - Class<? extends NativeClassObjectConstructor> aClass) { + private NativeKey(String name, Class<? extends NativeProvider> aClass) { this.name = name; this.aClass = aClass; } diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java index 1ca18e2129..b03acc5610 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java @@ -1592,8 +1592,7 @@ public final class PackageFactory { builder.put(function.getName(), function); } } - return NativeClassObjectConstructor.STRUCT.create( - builder.build(), "no native function or rule '%s'"); + return NativeProvider.STRUCT.create(builder.build(), "no native function or rule '%s'"); } /** @param fakeEnv specify if we declare no-op functions, or real functions. */ diff --git a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java index 2356d7190a..b497b76131 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java @@ -25,16 +25,16 @@ import com.google.devtools.build.lib.syntax.SkylarkType; import javax.annotation.Nullable; /** - * Declared Provider (a constructor for {@link SkylarkClassObject}). + * Declared Provider (a constructor for {@link Info}). * - * <p>Declared providers can be declared either natively ({@link NativeClassObjectConstructor} or in - * Skylark {@link SkylarkClassObjectConstructor}. + * <p>Declared providers can be declared either natively ({@link NativeProvider} or in Skylark + * {@link SkylarkProvider}. * - * <p>{@link ClassObjectConstructor} serves both as "type identifier" for declared provider - * instances and as a function that can be called to construct a provider. + * <p>{@link Provider} serves both as "type identifier" for declared provider instances and as a + * function that can be called to construct a provider. * - * <p>Prefer to use {@link Key} as a serializable identifier of {@link ClassObjectConstructor}. In - * particular, {@link Key} should be used in all data structures exposed to Skyframe. + * <p>Prefer to use {@link Key} as a serializable identifier of {@link Provider}. In particular, + * {@link Key} should be used in all data structures exposed to Skyframe. */ @SkylarkModule( name = "Provider", @@ -60,35 +60,29 @@ import javax.annotation.Nullable; + "<a href=\"globals.html#provider\">provider</a> function." ) @Immutable -public abstract class ClassObjectConstructor extends BaseFunction { +public abstract class Provider extends BaseFunction { - protected ClassObjectConstructor(String name, - FunctionSignature.WithValues<Object, SkylarkType> signature, - Location location) { + protected Provider( + String name, FunctionSignature.WithValues<Object, SkylarkType> signature, Location location) { super(name, signature, location); } /** - * Has this {@link ClassObjectConstructor} been exported? - * All native constructors are always exported. Skylark constructors are exported - * if they are assigned to top-level name in a Skylark module. + * Has this {@link Provider} been exported? All native providers are always exported. Skylark + * providers are exported if they are assigned to top-level name in a Skylark module. */ public abstract boolean isExported(); - /** - * Returns a serializable representation of this constructor. - */ + /** Returns a serializable representation of this {@link Provider}. */ public abstract Key getKey(); - /** - * Returns a name of this constructor that should be used in error messages. - */ + /** Returns a name of this {@link Provider} that should be used in error messages. */ public abstract String getPrintableName(); /** * Returns an error message format for instances. * - * Must contain one '%s' placeholder for field name. + * <p>Must contain one '%s' placeholder for field name. */ public abstract String getErrorMessageFormatForInstances(); @@ -104,22 +98,17 @@ public abstract class ClassObjectConstructor extends BaseFunction { } /** - * Override this method to provide logic that is used to instantiate a declared provider - * from Skylark. + * Override this method to provide logic that is used to instantiate a declared provider from + * Skylark. * - * This is a method that is called when a constructor {@code c} is invoked as<br> + * <p>This is a method that is called when a constructor {@code c} is invoked as<br> * {@code c(arg1 = val1, arg2 = val2, ...)}. * - * @param args an array of argument values sorted as per the signature - * ({@see BaseFunction#call}) + * @param args an array of argument values sorted as per the signature ({@see BaseFunction#call}) */ - protected abstract SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) + protected abstract Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException; - /** - * A serializable representation of {@link ClassObjectConstructor}. - */ - // todo(vladmos,dslomov): when we allow declared providers in `requiredProviders`, - // we will need to serialize this somehow. + /** A serializable representation of {@link Provider}. */ public abstract static class Key {} } diff --git a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java index e9298bd08c..5b494b7d07 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java @@ -72,7 +72,8 @@ public final class RequiredProviders { } @Override - public boolean satisfies(Predicate<Class<?>> hasNativeProvider, + public boolean satisfies( + Predicate<Class<?>> hasNativeProvider, Predicate<SkylarkProviderIdentifier> hasSkylarkProvider, RequiredProviders requiredProviders, Builder missingProviders) { @@ -100,7 +101,8 @@ public final class RequiredProviders { } @Override - public boolean satisfies(Predicate<Class<?>> hasNativeProvider, + public boolean satisfies( + Predicate<Class<?>> hasNativeProvider, Predicate<SkylarkProviderIdentifier> hasSkylarkProvider, RequiredProviders requiredProviders, Builder missingProviders) { @@ -121,19 +123,23 @@ public final class RequiredProviders { /** Accept a dependency that has all providers from one of the sets. */ RESTRICTED { @Override - public boolean satisfies(final AdvertisedProviderSet advertisedProviderSet, - RequiredProviders requiredProviders, Builder missing) { + public boolean satisfies( + final AdvertisedProviderSet advertisedProviderSet, + RequiredProviders requiredProviders, + Builder missing) { if (advertisedProviderSet.canHaveAnyProvider()) { return true; } return satisfies( advertisedProviderSet.getNativeProviders()::contains, advertisedProviderSet.getSkylarkProviders()::contains, - requiredProviders, missing); + requiredProviders, + missing); } @Override - public boolean satisfies(Predicate<Class<?>> hasNativeProvider, + public boolean satisfies( + Predicate<Class<?>> hasNativeProvider, Predicate<SkylarkProviderIdentifier> hasSkylarkProvider, RequiredProviders requiredProviders, Builder missingProviders) { @@ -145,10 +151,11 @@ public final class RequiredProviders { // Collect missing providers if (missingProviders != null) { missingProviders.addNativeSet( - nativeProviderSet.stream().filter(hasNativeProvider.negate()) + nativeProviderSet + .stream() + .filter(hasNativeProvider.negate()) .collect(ImmutableSet.toImmutableSet())); } - } for (ImmutableSet<SkylarkProviderIdentifier> skylarkProviderSet @@ -159,7 +166,9 @@ public final class RequiredProviders { // Collect missing providers if (missingProviders != null) { missingProviders.addSkylarkSet( - skylarkProviderSet.stream().filter(hasSkylarkProvider.negate()) + skylarkProviderSet + .stream() + .filter(hasSkylarkProvider.negate()) .collect(ImmutableSet.toImmutableSet())); } } @@ -185,30 +194,28 @@ public final class RequiredProviders { describe(result, providers.nativeProviders, Class::getSimpleName); describe(result, providers.skylarkProviders, id -> "'" + id.toString() + "'"); return result.toString(); - } }; /** Checks if {@code advertisedProviderSet} satisfies these {@code RequiredProviders} */ - public abstract boolean satisfies(AdvertisedProviderSet advertisedProviderSet, - RequiredProviders requiredProviders, Builder missing); + public abstract boolean satisfies( + AdvertisedProviderSet advertisedProviderSet, + RequiredProviders requiredProviders, + Builder missing); /** - * Checks if a set of providers encoded by predicates {@code hasNativeProviders} - * and {@code hasSkylarkProvider} satisfies these {@code RequiredProviders} + * Checks if a set of providers encoded by predicates {@code hasNativeProviders} and {@code + * hasSkylarkProvider} satisfies these {@code RequiredProviders} */ abstract boolean satisfies( Predicate<Class<?>> hasNativeProvider, Predicate<SkylarkProviderIdentifier> hasSkylarkProvider, RequiredProviders requiredProviders, - @Nullable - Builder missingProviders); + @Nullable Builder missingProviders); abstract Builder copyAsBuilder(RequiredProviders providers); - /** - * Returns a string describing the providers that can be presented to the user. - */ + /** Returns a string describing the providers that can be presented to the user. */ abstract String getDescription(RequiredProviders providers); } @@ -228,8 +235,8 @@ public final class RequiredProviders { } /** - * Returns providers that are missing. If none are missing, returns - * {@code RequiredProviders} that accept anything. + * Returns providers that are missing. If none are missing, returns {@code RequiredProviders} that + * accept anything. */ public RequiredProviders getMissing( Predicate<Class<?>> hasNativeProvider, @@ -243,8 +250,8 @@ public final class RequiredProviders { } /** - * Returns providers that are missing. If none are missing, returns - * {@code RequiredProviders} that accept anything. + * Returns providers that are missing. If none are missing, returns {@code RequiredProviders} that + * accept anything. */ public RequiredProviders getMissing(AdvertisedProviderSet set) { Builder builder = acceptAnyBuilder(); @@ -255,10 +262,7 @@ public final class RequiredProviders { return builder.build(); } - - /** - * Returns true if this {@code RequiredProviders} instance accept any set of providers. - */ + /** Returns true if this {@code RequiredProviders} instance accept any set of providers. */ public boolean acceptsAny() { return constraint.equals(Constraint.ANY); } @@ -278,11 +282,11 @@ public final class RequiredProviders { this.skylarkProviders = skylarkProviders; } - /** - * Helper method to describe lists of sets of things. - */ - private static <T> void describe(StringBuilder result, - ImmutableList<ImmutableSet<T>> listOfSets, Function<T, String> describeOne) { + /** Helper method to describe lists of sets of things. */ + private static <T> void describe( + StringBuilder result, + ImmutableList<ImmutableSet<T>> listOfSets, + Function<T, String> describeOne) { Joiner joiner = Joiner.on(", "); for (ImmutableSet<T> ids : listOfSets) { if (result.length() > 0) { @@ -294,7 +298,6 @@ public final class RequiredProviders { } } - /** * A builder for {@link RequiredProviders} that accepts any dependency * unless restriction provider sets are added. @@ -311,9 +314,7 @@ public final class RequiredProviders { return new Builder(true); } - /** - * Returns a Builder initialized to the same value as this {@code RequiredProvider} - */ + /** Returns a Builder initialized to the same value as this {@code RequiredProvider} */ public Builder copyAsBuilder() { return constraint.copyAsBuilder(this); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java index 8bd600852a..ea341b3171 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java @@ -31,40 +31,36 @@ import javax.annotation.Nullable; * <p>This is a result of calling {@code provider()} function from Skylark ({@link * com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions#provider}). */ -public class SkylarkClassObjectConstructor extends ClassObjectConstructor - implements SkylarkExportable { +public class SkylarkProvider extends Provider implements SkylarkExportable { private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = FunctionSignature.WithValues.create(FunctionSignature.KWARGS); - @Nullable - private SkylarkKey key; - @Nullable - private String errorMessageFormatForInstances; + @Nullable private SkylarkKey key; + @Nullable private String errorMessageFormatForInstances; private static final String DEFAULT_ERROR_MESSAFE = "Object has no '%s' attribute."; /** - * Creates a Skylark-defined Declared Provider ({@link SkylarkClassObject} constructor). + * Creates a Skylark-defined Declared Provider ({@link Info} constructor). * - * Needs to be exported later. + * <p>Needs to be exported later. */ - public SkylarkClassObjectConstructor(String name, Location location) { + public SkylarkProvider(String name, Location location) { this(name, SIGNATURE, location); } - public SkylarkClassObjectConstructor( + public SkylarkProvider( String name, FunctionSignature.WithValues<Object, SkylarkType> signature, Location location) { super(name, signature, location); this.errorMessageFormatForInstances = DEFAULT_ERROR_MESSAFE; } @Override - protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { + protected Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; - return new SkylarkClassObject(this, kwargs, loc); + return new Info(this, kwargs, loc); } @Override @@ -92,8 +88,8 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor public void export(Label extensionLabel, String exportedName) { Preconditions.checkState(!isExported()); this.key = new SkylarkKey(extensionLabel, exportedName); - this.errorMessageFormatForInstances = String.format( - "'%s' object has no attribute '%%s'", exportedName); + this.errorMessageFormatForInstances = + String.format("'%s' object has no attribute '%%s'", exportedName); } @Override @@ -106,10 +102,10 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor @Override public boolean equals(@Nullable Object otherObject) { - if (!(otherObject instanceof SkylarkClassObjectConstructor)) { + if (!(otherObject instanceof SkylarkProvider)) { return false; } - SkylarkClassObjectConstructor other = (SkylarkClassObjectConstructor) otherObject; + SkylarkProvider other = (SkylarkProvider) otherObject; if (this.isExported() && other.isExported()) { return this.getKey().equals(other.getKey()); @@ -130,9 +126,8 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor } /** - * A serializable representation of Skylark-defined {@link SkylarkClassObjectConstructor} - * that uniquely identifies all {@link SkylarkClassObjectConstructor}s that - * are exposed to SkyFrame. + * A serializable representation of Skylark-defined {@link SkylarkProvider} that uniquely + * identifies all {@link SkylarkProvider}s that are exposed to SkyFrame. */ public static class SkylarkKey extends Key { private final Label extensionLabel; diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java index d9e663c43c..34b507af88 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java @@ -19,21 +19,17 @@ import java.util.Objects; import javax.annotation.Nullable; /** - * A wrapper around Skylark provider identifier, - * representing either a declared provider ({@see SkylarkClassObjectConstructor}) - * or a "legacy" string identifier. + * A wrapper around Skylark provider identifier, representing either a declared provider ({@see + * SkylarkProvider}) or a "legacy" string identifier. */ public final class SkylarkProviderIdentifier { @Nullable private final String legacyId; - @Nullable - private final ClassObjectConstructor.Key key; + @Nullable private final Provider.Key key; - /** - * Creates an id for a declared provider with a given key ({@see SkylarkClassObjectConstructor}). - */ - public static SkylarkProviderIdentifier forKey(ClassObjectConstructor.Key key) { + /** Creates an id for a declared provider with a given key ({@see SkylarkProvider}). */ + public static SkylarkProviderIdentifier forKey(Provider.Key key) { return new SkylarkProviderIdentifier(key); } @@ -49,7 +45,7 @@ public final class SkylarkProviderIdentifier { this.key = null; } - private SkylarkProviderIdentifier(ClassObjectConstructor.Key key) { + private SkylarkProviderIdentifier(Provider.Key key) { this.legacyId = null; this.key = key; } @@ -70,10 +66,8 @@ public final class SkylarkProviderIdentifier { return legacyId; } - /** - * Returns a key identifying the declared provider (only for non-legacy providers). - */ - public ClassObjectConstructor.Key getKey() { + /** Returns a key identifying the declared provider (only for non-legacy providers). */ + public Provider.Key getKey() { Preconditions.checkState(!isLegacy(), "Check !isLegacy() first"); return key; } diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java index ccb81e1201..292ce4d635 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java @@ -528,8 +528,7 @@ public class WorkspaceFactory { } builder.put("bazel_version", version); - return NativeClassObjectConstructor.STRUCT.create( - builder.build(), "no native function or rule '%s'"); + return NativeProvider.STRUCT.create(builder.build(), "no native function or rule '%s'"); } static ClassObject newNativeModule(RuleClassProvider ruleClassProvider, String version) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java index 1dc878f38c..d6bc200011 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java @@ -24,8 +24,8 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; 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.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.syntax.ClassObject; @@ -79,7 +79,7 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec @Nullable @Override - public SkylarkClassObject get(ClassObjectConstructor.Key providerKey) { + public Info get(Provider.Key providerKey) { return actual.get(providerKey); } 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 2b700f5c09..f92946ed40 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 @@ -16,20 +16,19 @@ package com.google.devtools.build.lib.rules; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; /** Provides access to make variables from the current fragments. */ @SkylarkModule(name = "MakeVariables", doc = "Make variables exposed by the current target.") @Immutable -public final class MakeVariableProvider extends SkylarkClassObject { +public final class MakeVariableProvider extends Info { public static final String SKYLARK_NAME = "MakeVariableInfo"; - public static final NativeClassObjectConstructor<MakeVariableProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<MakeVariableProvider>( - MakeVariableProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<MakeVariableProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<MakeVariableProvider>(MakeVariableProvider.class, SKYLARK_NAME) {}; private final ImmutableMap<String, String> makeVariables; diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java index c8b1368bbc..1951610c21 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTe import com.google.devtools.build.lib.packages.Attribute.SplitTransition; import com.google.devtools.build.lib.packages.AttributeValueSource; import com.google.devtools.build.lib.packages.BuildType; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.SkylarkAspect; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.skylarkinterface.Param; @@ -347,7 +347,7 @@ public final class SkylarkAttr implements SkylarkValue { * a legacy provider name. */ static boolean isProvider(Object o) { - return o instanceof String || o instanceof ClassObjectConstructor; + return o instanceof String || o instanceof Provider; } /** @@ -361,8 +361,8 @@ public final class SkylarkAttr implements SkylarkValue { for (Object obj : list) { if (obj instanceof String) { result.add(SkylarkProviderIdentifier.forLegacy((String) obj)); - } else if (obj instanceof ClassObjectConstructor) { - ClassObjectConstructor constructor = (ClassObjectConstructor) obj; + } else if (obj instanceof Provider) { + Provider constructor = (Provider) obj; if (!constructor.isExported()) { throw new EvalException(location, "Providers should be top-level values in extension files that define them."); diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java index a2cfcb29a7..b71db3b8c8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java @@ -51,14 +51,15 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.AttributeValueSource; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SkylarkImplicitOutputsFunctionWithCallback; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SkylarkImplicitOutputsFunctionWithMap; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Package.NameConflictException; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.PackageFactory.PackageContext; import com.google.devtools.build.lib.packages.PredicateWithMessage; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; @@ -66,9 +67,8 @@ import com.google.devtools.build.lib.packages.RuleFactory; import com.google.devtools.build.lib.packages.RuleFactory.BuildLangTypedAttributeValuesMap; import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException; import com.google.devtools.build.lib.packages.SkylarkAspect; -import com.google.devtools.build.lib.packages.SkylarkClassObject; -import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor; import com.google.devtools.build.lib.packages.SkylarkExportable; +import com.google.devtools.build.lib.packages.SkylarkProvider; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.packages.TestSize; import com.google.devtools.build.lib.rules.SkylarkAttr.Descriptor; @@ -183,7 +183,7 @@ public class SkylarkRuleClassFunctions { @SkylarkSignature( name = "struct", - returnType = SkylarkClassObject.class, + returnType = Info.class, doc = "Creates an immutable struct using the keyword arguments as attributes. It is used to " + "group multiple values together. Example:<br>" @@ -192,11 +192,11 @@ public class SkylarkRuleClassFunctions { extraKeywords = @Param(name = "kwargs", doc = "the struct attributes."), useLocation = true ) - private static final ClassObjectConstructor struct = NativeClassObjectConstructor.STRUCT; + private static final Provider struct = NativeProvider.STRUCT; @SkylarkSignature( name = "DefaultInfo", - returnType = ClassObjectConstructor.class, + returnType = Provider.class, doc = "A provider that is provided by every rule, even if it is not returned explicitly. " + "A <code>DefaultInfo</code> accepts the following parameters:" @@ -215,11 +215,11 @@ public class SkylarkRuleClassFunctions { + "<li><code>default_runfiles</code></li>" + "</ul>" ) - private static final ClassObjectConstructor defaultInfo = DefaultProvider.SKYLARK_CONSTRUCTOR; + private static final Provider defaultInfo = DefaultProvider.SKYLARK_CONSTRUCTOR; @SkylarkSignature( name = "OutputGroupInfo", - returnType = ClassObjectConstructor.class, + returnType = Provider.class, doc = "Provides information about output groups the rule provides.<br>" + "Instantiate this provider with <br>" @@ -227,31 +227,33 @@ public class SkylarkRuleClassFunctions { + "OutputGroupInfo(group1 = <files>, group2 = <files>...)</pre>" + "See <a href=\"../rules.html#output-groups\">Output Groups</a> for more information" ) - private static final ClassObjectConstructor outputGroupInfo = - OutputGroupProvider.SKYLARK_CONSTRUCTOR; + private static final Provider outputGroupInfo = OutputGroupProvider.SKYLARK_CONSTRUCTOR; // TODO(bazel-team): Move to a "testing" namespace module. Normally we'd pass an objectType // to @SkylarkSignature to do this, but that doesn't work here because we're exposing an already- // configured BaseFunction, rather than defining a new BuiltinFunction. This should wait for // better support from the Skylark/Java interface, or perhaps support for first-class modules. - @SkylarkSignature(name = "Actions", returnType = SkylarkClassObjectConstructor.class, doc = - "<i>(Note: This is a provider type. Don't instantiate it yourself; use it to retrieve a " - + "provider object from a <a href=\"Target.html\">Target</a>.)</i>" - + "<br/><br/>" - + "Provides access to the <a href=\"Action.html\">actions</a> generated by a rule. There " - + "is one field, <code>by_file</code>, which is a dictionary from an output of the rule " - + "to its corresponding generating action. " - + "<br/><br/>" - + "This is designed for testing rules, and should not be accessed outside of test logic. " - + "This provider is only available for targets generated by rules that have " - + "<a href=\"globals.html#rule._skylark_testable\">_skylark_testable</a> set to " - + "<code>True</code>." + @SkylarkSignature( + name = "Actions", + returnType = SkylarkProvider.class, + doc = + "<i>(Note: This is a provider type. Don't instantiate it yourself; use it to retrieve a " + + "provider object from a <a href=\"Target.html\">Target</a>.)</i>" + + "<br/><br/>" + + "Provides access to the <a href=\"Action.html\">actions</a> generated by a rule. " + + "There is one field, <code>by_file</code>, which is a dictionary from an output " + + "of the rule to its corresponding generating action. " + + "<br/><br/>" + + "This is designed for testing rules, and should not be accessed outside " + + "of test logic. This provider is only available for targets generated by rules" + + " that have <a href=\"globals.html#rule._skylark_testable\">_skylark_testable</a> " + + "set to <code>True</code>." ) - private static final ClassObjectConstructor actions = ActionsProvider.SKYLARK_CONSTRUCTOR; + private static final Provider actions = ActionsProvider.SKYLARK_CONSTRUCTOR; @SkylarkSignature( name = "provider", - returnType = ClassObjectConstructor.class, + returnType = Provider.class, doc = "Creates a declared provider 'constructor'. The return value of this " + "function can be used to create \"struct-like\" values. Example:<br>" @@ -271,8 +273,8 @@ public class SkylarkRuleClassFunctions { ) private static final BuiltinFunction provider = new BuiltinFunction("provider") { - public ClassObjectConstructor invoke(String doc, Location location) { - return new SkylarkClassObjectConstructor( + public Provider invoke(String doc, Location location) { + return new SkylarkProvider( "<no name>", // name is set on export. location); } @@ -854,8 +856,7 @@ public class SkylarkRuleClassFunctions { * RuleFunction}s etc. */ private static final ImmutableList<Class<? extends SkylarkExportable>> EXPORTABLES = - ImmutableList.of( - SkylarkClassObjectConstructor.class, SkylarkAspect.class, RuleFunction.class); + ImmutableList.of(SkylarkProvider.class, SkylarkAspect.class, RuleFunction.class); @SkylarkSignature( name = "Label", @@ -963,17 +964,17 @@ public class SkylarkRuleClassFunctions { + "# key {\n# inner_key: 1\n# }\n# key {\n# inner_key: 2\n# }\n\n" + "struct(key=struct(inner_key=struct(inner_inner_key='text'))).to_proto()\n" + "# key {\n# inner_key {\n# inner_inner_key: \"text\"\n# }\n# }\n</pre>", - objectType = SkylarkClassObject.class, + objectType = Info.class, returnType = String.class, parameters = { // TODO(bazel-team): shouldn't we accept any ClassObject? - @Param(name = "self", type = SkylarkClassObject.class, doc = "this struct.") + @Param(name = "self", type = Info.class, doc = "this struct.") }, useLocation = true ) private static final BuiltinFunction toProto = new BuiltinFunction("to_proto") { - public String invoke(SkylarkClassObject self, Location loc) throws EvalException { + public String invoke(Info self, Location loc) throws EvalException { StringBuilder sb = new StringBuilder(); printProtoTextMessage(self, sb, 0, loc); return sb.toString(); @@ -1069,17 +1070,17 @@ public class SkylarkRuleClassFunctions { + "# {\"key\":[{\"inner_key\":1},{\"inner_key\":2}]}\n\n" + "struct(key=struct(inner_key=struct(inner_inner_key='text'))).to_json()\n" + "# {\"key\":{\"inner_key\":{\"inner_inner_key\":\"text\"}}}\n</pre>", - objectType = SkylarkClassObject.class, + objectType = Info.class, returnType = String.class, parameters = { // TODO(bazel-team): shouldn't we accept any ClassObject? - @Param(name = "self", type = SkylarkClassObject.class, doc = "this struct.") + @Param(name = "self", type = Info.class, doc = "this struct.") }, useLocation = true ) private static final BuiltinFunction toJson = new BuiltinFunction("to_json") { - public String invoke(SkylarkClassObject self, Location loc) throws EvalException { + public String invoke(Info self, Location loc) throws EvalException { StringBuilder sb = new StringBuilder(); printJson(self, sb, loc, "struct field", null); return sb.toString(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java index 8d50183680..834cf87815 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleConfiguredTargetUtil.java @@ -29,9 +29,9 @@ import com.google.devtools.build.lib.analysis.SkylarkProviderValidationUtil; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Location; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector.InstrumentationSpec; @@ -103,7 +103,7 @@ public final class SkylarkRuleConfiguredTargetUtil { if (ruleContext.hasErrors()) { return null; - } else if (!(target instanceof SkylarkClassObject) + } else if (!(target instanceof Info) && target != Runtime.NONE && !(target instanceof Iterable)) { ruleContext.ruleError( @@ -187,7 +187,7 @@ public final class SkylarkRuleConfiguredTargetUtil { } private static void addInstrumentedFiles( - SkylarkClassObject insStruct, RuleContext ruleContext, RuleConfiguredTargetBuilder builder) + Info insStruct, RuleContext ruleContext, RuleConfiguredTargetBuilder builder) throws EvalException { Location insLoc = insStruct.getCreationLoc(); FileTypeSet fileTypeSet = FileTypeSet.ANY_FILE; @@ -269,25 +269,25 @@ public final class SkylarkRuleConfiguredTargetUtil { RuleContext ruleContext, RuleConfiguredTargetBuilder builder, Object target, Location loc) throws EvalException { - SkylarkClassObject oldStyleProviders = NativeClassObjectConstructor.STRUCT.create(loc); - ArrayList<SkylarkClassObject> declaredProviders = new ArrayList<>(); + Info oldStyleProviders = NativeProvider.STRUCT.create(loc); + ArrayList<Info> declaredProviders = new ArrayList<>(); - if (target instanceof SkylarkClassObject) { + if (target instanceof Info) { // Either an old-style struct or a single declared provider (not in a list) - SkylarkClassObject struct = (SkylarkClassObject) target; + Info struct = (Info) target; // Use the creation location of this struct as a better reference in error messages loc = struct.getCreationLoc(); - if (struct.getConstructor().getKey().equals(NativeClassObjectConstructor.STRUCT.getKey())) { + if (struct.getProvider().getKey().equals(NativeProvider.STRUCT.getKey())) { // Old-style struct, but it may contain declared providers oldStyleProviders = struct; if (struct.hasKey("providers")) { Iterable iterable = cast("providers", struct, Iterable.class, loc); for (Object o : iterable) { - SkylarkClassObject declaredProvider = + Info declaredProvider = SkylarkType.cast( o, - SkylarkClassObject.class, + Info.class, loc, "The value of 'providers' should be a sequence of declared providers"); declaredProviders.add(declaredProvider); @@ -300,10 +300,10 @@ public final class SkylarkRuleConfiguredTargetUtil { } else if (target instanceof Iterable) { // Sequence of declared providers for (Object o : (Iterable) target) { - SkylarkClassObject declaredProvider = + Info declaredProvider = SkylarkType.cast( o, - SkylarkClassObject.class, + Info.class, loc, "A return value of a rule implementation function should be " + "a sequence of declared providers"); @@ -313,9 +313,9 @@ public final class SkylarkRuleConfiguredTargetUtil { boolean defaultProviderProvidedExplicitly = false; - for (SkylarkClassObject declaredProvider : declaredProviders) { + for (Info declaredProvider : declaredProviders) { if (declaredProvider - .getConstructor() + .getProvider() .getKey() .equals(DefaultProvider.SKYLARK_CONSTRUCTOR.getKey())) { parseDefaultProviderKeys(declaredProvider, ruleContext, builder); @@ -346,11 +346,10 @@ public final class SkylarkRuleConfiguredTargetUtil { } else if (key.equals("output_groups")) { addOutputGroups(oldStyleProviders.getValue(key), loc, builder); } else if (key.equals("instrumented_files")) { - SkylarkClassObject insStruct = - cast("instrumented_files", oldStyleProviders, SkylarkClassObject.class, loc); + Info insStruct = cast("instrumented_files", oldStyleProviders, Info.class, loc); addInstrumentedFiles(insStruct, ruleContext, builder); } else if (isNativeDeclaredProviderWithLegacySkylarkName(oldStyleProviders.getValue(key))) { - builder.addNativeDeclaredProvider((SkylarkClassObject) oldStyleProviders.getValue(key)); + builder.addNativeDeclaredProvider((Info) oldStyleProviders.getValue(key)); } else if (!key.equals("providers")) { // We handled providers already. builder.addSkylarkTransitiveInfo(key, oldStyleProviders.getValue(key), loc); @@ -359,11 +358,10 @@ public final class SkylarkRuleConfiguredTargetUtil { } private static boolean isNativeDeclaredProviderWithLegacySkylarkName(Object value) { - if (!(value instanceof SkylarkClassObject)) { + if (!(value instanceof Info)) { return false; } - return ((SkylarkClassObject) value).getConstructor() - instanceof NativeClassObjectConstructor.WithLegacySkylarkName; + return ((Info) value).getProvider() instanceof NativeProvider.WithLegacySkylarkName; } /** @@ -371,7 +369,7 @@ public final class SkylarkRuleConfiguredTargetUtil { * throws an {@link EvalException} if there are unknown keys. */ private static void parseDefaultProviderKeys( - SkylarkClassObject provider, RuleContext ruleContext, RuleConfiguredTargetBuilder builder) + Info provider, RuleContext ruleContext, RuleConfiguredTargetBuilder builder) throws EvalException { SkylarkNestedSet files = null; Runfiles statelessRunfiles = null; @@ -398,7 +396,7 @@ public final class SkylarkRuleConfiguredTargetUtil { } else if (key.equals("executable")) { executable = cast("executable", provider, Artifact.class, loc); } else if (provider - .getConstructor() + .getProvider() .getKey() .equals(DefaultProvider.SKYLARK_CONSTRUCTOR.getKey())) { // Custom keys are not allowed for default providers @@ -473,8 +471,8 @@ public final class SkylarkRuleConfiguredTargetUtil { } if (ruleContext.getRule().getRuleClassObject().isSkylarkTestable()) { - SkylarkClassObject actions = ActionsProvider.create( - ruleContext.getAnalysisEnvironment().getRegisteredActions()); + Info actions = + ActionsProvider.create(ruleContext.getAnalysisEnvironment().getRegisteredActions()); builder.addSkylarkDeclaredProvider(actions, loc); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java index 7590bc344e..51dbdf02bf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java @@ -43,14 +43,14 @@ import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; import com.google.devtools.build.lib.packages.BuildType; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SkylarkImplicitOutputsFunction; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.Package; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.RawAttributeMapper; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; import com.google.devtools.build.lib.shell.ShellUtils; @@ -185,11 +185,11 @@ public final class SkylarkRuleContext implements SkylarkValue { private SkylarkDict<String, String> makeVariables; private SkylarkRuleAttributesCollection attributesCollection; private SkylarkRuleAttributesCollection ruleAttributesCollection; - private SkylarkClassObject splitAttributes; + private Info splitAttributes; // TODO(bazel-team): we only need this because of the css_binary rule. private ImmutableMap<Artifact, Label> artifactsLabelMap; - private SkylarkClassObject outputsObject; + private Info outputsObject; /** * Creates a new SkylarkRuleContext using ruleContext. @@ -262,7 +262,7 @@ public final class SkylarkRuleContext implements SkylarkValue { this.artifactsLabelMap = artifactLabelMapBuilder.build(); this.outputsObject = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( outputsBuilder, "No attribute '%s' in outputs. Make sure you declared a rule output with this name."); @@ -442,7 +442,7 @@ public final class SkylarkRuleContext implements SkylarkValue { executableRunfilesbuilder.build()); } - private static SkylarkClassObject buildSplitAttributeInfo( + private static Info buildSplitAttributeInfo( Collection<Attribute> attributes, RuleContext ruleContext) { ImmutableMap.Builder<String, Object> splitAttrInfos = ImmutableMap.builder(); @@ -482,10 +482,10 @@ public final class SkylarkRuleContext implements SkylarkValue { } } - return NativeClassObjectConstructor.STRUCT.create( + return NativeProvider.STRUCT.create( splitAttrInfos.build(), "No attribute '%s' in split_attr. Make sure that this attribute is defined with a " - + "split configuration."); + + "split configuration."); } @SkylarkModule( @@ -495,10 +495,10 @@ public final class SkylarkRuleContext implements SkylarkValue { ) private static class SkylarkRuleAttributesCollection implements SkylarkValue { private final SkylarkRuleContext skylarkRuleContext; - private final SkylarkClassObject attrObject; - private final SkylarkClassObject executableObject; - private final SkylarkClassObject fileObject; - private final SkylarkClassObject filesObject; + private final Info attrObject; + private final Info executableObject; + private final Info fileObject; + private final Info filesObject; private final ImmutableMap<Artifact, FilesToRunProvider> executableRunfilesMap; private final String ruleClassName; @@ -512,21 +512,21 @@ public final class SkylarkRuleContext implements SkylarkValue { this.skylarkRuleContext = skylarkRuleContext; this.ruleClassName = ruleClassName; attrObject = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( attrs, "No attribute '%s' in attr. Make sure you declared a rule attribute with this name."); executableObject = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( executables, "No attribute '%s' in executable. Make sure there is a label type attribute marked " + "as 'executable' with this name"); fileObject = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( singleFiles, "No attribute '%s' in file. Make sure there is a label type attribute marked " + "as 'single_file' with this name"); filesObject = - NativeClassObjectConstructor.STRUCT.create( + NativeProvider.STRUCT.create( files, "No attribute '%s' in files. Make sure there is a label or label_list type attribute " + "with this name"); @@ -538,25 +538,25 @@ public final class SkylarkRuleContext implements SkylarkValue { } @SkylarkCallable(name = "attr", structField = true, doc = ATTR_DOC) - public SkylarkClassObject getAttr() throws EvalException { + public Info getAttr() throws EvalException { checkMutable("attr"); return attrObject; } @SkylarkCallable(name = "executable", structField = true, doc = EXECUTABLE_DOC) - public SkylarkClassObject getExecutable() throws EvalException { + public Info getExecutable() throws EvalException { checkMutable("executable"); return executableObject; } @SkylarkCallable(name = "file", structField = true, doc = FILE_DOC) - public SkylarkClassObject getFile() throws EvalException { + public Info getFile() throws EvalException { checkMutable("file"); return fileObject; } @SkylarkCallable(name = "files", structField = true, doc = FILES_DOC) - public SkylarkClassObject getFiles() throws EvalException { + public Info getFiles() throws EvalException { checkMutable("files"); return filesObject; } @@ -625,8 +625,9 @@ public final class SkylarkRuleContext implements SkylarkValue { @SkylarkCallable( name = "default_provider", structField = true, - doc = "Deprecated. Use <a href=\"globals.html#DefaultInfo\">DefaultInfo</a> instead.") - public static ClassObjectConstructor getDefaultProvider() { + doc = "Deprecated. Use <a href=\"globals.html#DefaultInfo\">DefaultInfo</a> instead." + ) + public static Provider getDefaultProvider() { return DefaultProvider.SKYLARK_CONSTRUCTOR; } @@ -660,13 +661,13 @@ public final class SkylarkRuleContext implements SkylarkValue { } @SkylarkCallable(name = "attr", structField = true, doc = ATTR_DOC) - public SkylarkClassObject getAttr() throws EvalException { + public Info getAttr() throws EvalException { checkMutable("attr"); return attributesCollection.getAttr(); } @SkylarkCallable(name = "split_attr", structField = true, doc = SPLIT_ATTR_DOC) - public SkylarkClassObject getSplitAttr() throws EvalException { + public Info getSplitAttr() throws EvalException { checkMutable("split_attr"); if (splitAttributes == null) { throw new EvalException( @@ -675,29 +676,23 @@ public final class SkylarkRuleContext implements SkylarkValue { return splitAttributes; } - /** - * <p>See {@link RuleContext#getExecutablePrerequisite(String, Mode)}. - */ + /** See {@link RuleContext#getExecutablePrerequisite(String, Mode)}. */ @SkylarkCallable(name = "executable", structField = true, doc = EXECUTABLE_DOC) - public SkylarkClassObject getExecutable() throws EvalException { + public Info getExecutable() throws EvalException { checkMutable("executable"); return attributesCollection.getExecutable(); } - /** - * See {@link RuleContext#getPrerequisiteArtifact(String, Mode)}. - */ + /** See {@link RuleContext#getPrerequisiteArtifact(String, Mode)}. */ @SkylarkCallable(name = "file", structField = true, doc = FILE_DOC) - public SkylarkClassObject getFile() throws EvalException { + public Info getFile() throws EvalException { checkMutable("file"); return attributesCollection.getFile(); } - /** - * See {@link RuleContext#getPrerequisiteArtifacts(String, Mode)}. - */ + /** See {@link RuleContext#getPrerequisiteArtifacts(String, Mode)}. */ @SkylarkCallable(name = "files", structField = true, doc = FILES_DOC) - public SkylarkClassObject getFiles() throws EvalException { + public Info getFiles() throws EvalException { checkMutable("files"); return attributesCollection.getFiles(); } @@ -798,7 +793,7 @@ public final class SkylarkRuleContext implements SkylarkValue { } @SkylarkCallable(structField = true, doc = OUTPUTS_DOC) - public SkylarkClassObject outputs() throws EvalException { + public Info outputs() throws EvalException { checkMutable("outputs"); if (outputsObject == null) { throw new EvalException(Location.BUILTIN, "'outputs' is not defined"); 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 2a5248951d..85788a826f 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,10 +38,10 @@ 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.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType; @@ -101,8 +101,8 @@ public class AndroidCommon { return builder.build(); } - public static final <T extends SkylarkClassObject> Iterable<T> getTransitivePrerequisites( - RuleContext ruleContext, Mode mode, NativeClassObjectConstructor<T> key) { + public static final <T extends Info> Iterable<T> getTransitivePrerequisites( + RuleContext ruleContext, Mode mode, NativeProvider<T> key) { IterablesChain.Builder<T> builder = IterablesChain.builder(); AttributeMap attributes = ruleContext.attributes(); for (String attr : TRANSITIVE_ATTRIBUTES) { 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 901b2e2dde..27689dace7 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 @@ -17,21 +17,20 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Information about an {@code android_device_script_fixture} to run as part of an {@code * android_instrumentation_test}. */ @Immutable -public class AndroidDeviceScriptFixtureInfoProvider extends SkylarkClassObject { +public class AndroidDeviceScriptFixtureInfoProvider extends Info { private static final String SKYLARK_NAME = "DeviceScriptFixtureInfo"; - public static final NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider> - SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider>( - AndroidDeviceScriptFixtureInfoProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<AndroidDeviceScriptFixtureInfoProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 73ac9650e1..e37a693d79 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 @@ -18,20 +18,20 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Information about an {@code android_host_service_fixture} to run as part of an {@code * android_instrumentation_test}. */ @Immutable -public class AndroidHostServiceFixtureInfoProvider extends SkylarkClassObject { +public class AndroidHostServiceFixtureInfoProvider extends Info { private static final String SKYLARK_NAME = "HostServiceFixtureInfo"; - static final NativeClassObjectConstructor<AndroidHostServiceFixtureInfoProvider> + static final NativeProvider<AndroidHostServiceFixtureInfoProvider> ANDROID_HOST_SERVICE_FIXTURE_INFO = - new NativeClassObjectConstructor<AndroidHostServiceFixtureInfoProvider>( + new NativeProvider<AndroidHostServiceFixtureInfoProvider>( AndroidHostServiceFixtureInfoProvider.class, SKYLARK_NAME) {}; private final Artifact executable; 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 292b2f04ee..530096ea32 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 @@ -16,21 +16,20 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * A provider for targets that create Android instrumentations. Consumed by {@link * AndroidInstrumentationTest}. */ @Immutable -public class AndroidInstrumentationInfoProvider extends SkylarkClassObject { +public class AndroidInstrumentationInfoProvider extends Info { private static final String SKYLARK_NAME = "AndroidInstrumentationInfo"; - static final NativeClassObjectConstructor<AndroidInstrumentationInfoProvider> - ANDROID_INSTRUMENTATION_INFO = - new NativeClassObjectConstructor<AndroidInstrumentationInfoProvider>( - AndroidInstrumentationInfoProvider.class, SKYLARK_NAME) {}; + static final NativeProvider<AndroidInstrumentationInfoProvider> ANDROID_INSTRUMENTATION_INFO = + new NativeProvider<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/apple/ApplePlatform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java index cd22873f97..6be2024464 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 @@ -16,9 +16,9 @@ package com.google.devtools.build.lib.rules.apple; import com.google.common.collect.ImmutableSet; 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.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -212,15 +212,13 @@ public enum ApplePlatform implements SkylarkValue { } /** Returns a Skylark struct that contains the instances of this enum. */ - public static SkylarkClassObject getSkylarkStruct() { - ClassObjectConstructor constructor = - new NativeClassObjectConstructor<SkylarkClassObject>( - SkylarkClassObject.class, "platforms") {}; + public static Info getSkylarkStruct() { + Provider constructor = new NativeProvider<Info>(Info.class, "platforms") {}; HashMap<String, Object> fields = new HashMap<>(); for (ApplePlatform type : values()) { fields.put(type.skylarkKey, type); } - return new SkylarkClassObject(constructor, fields); + return new Info(constructor, fields); } @Override @@ -288,15 +286,13 @@ public enum ApplePlatform implements SkylarkValue { } /** Returns a Skylark struct that contains the instances of this enum. */ - public static SkylarkClassObject getSkylarkStruct() { - ClassObjectConstructor constructor = - new NativeClassObjectConstructor<SkylarkClassObject>( - SkylarkClassObject.class, "platform_types") {}; + public static Info getSkylarkStruct() { + Provider constructor = new NativeProvider<Info>(Info.class, "platform_types") {}; HashMap<String, Object> fields = new HashMap<>(); for (PlatformType type : values()) { fields.put(type.skylarkKey, type); } - return new SkylarkClassObject(constructor, fields); + return new Info(constructor, fields); } @Override 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 da22fa547e..a75fae2ad2 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 @@ -19,22 +19,21 @@ import com.google.common.base.Optional; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import java.util.Map; import javax.annotation.Nullable; /** A tuple containing information about a version of xcode and its properties. */ @Immutable -public class XcodeVersionProperties extends SkylarkClassObject { +public class XcodeVersionProperties extends Info { /** Skylark name for the XcodeVersionProperties provider. */ public static final String SKYLARK_NAME = "XcodeProperties"; /** Skylark constructor and identifier for XcodeVersionProperties provider. */ - public static final NativeClassObjectConstructor<XcodeVersionProperties> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<XcodeVersionProperties>( - XcodeVersionProperties.class, SKYLARK_NAME) {}; + public static final NativeProvider<XcodeVersionProperties> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 0481714ef4..8e5f0d5db1 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 @@ -18,8 +18,8 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; @@ -31,14 +31,14 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; doc = "A provider used to access information about config_feature_flag rules." ) @Immutable -public class ConfigFeatureFlagProvider extends SkylarkClassObject { +public class ConfigFeatureFlagProvider extends Info { /** Name used in Skylark for accessing ConfigFeatureFlagProvider. */ static final String SKYLARK_NAME = "FeatureFlagInfo"; /** Skylark constructor and identifier for ConfigFeatureFlagProvider. */ - static final NativeClassObjectConstructor<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<ConfigFeatureFlagProvider>( + static final NativeProvider<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<ConfigFeatureFlagProvider>( ConfigFeatureFlagProvider.class, SKYLARK_NAME) {}; private final String value; @@ -87,7 +87,7 @@ public class ConfigFeatureFlagProvider extends SkylarkClassObject { } // ConfigFeatureFlagProvider instances should all be unique, so we override the default - // equals and hashCode from SkylarkClassObject to ensure that. SCO's toString is fine, however. + // equals and hashCode from Info to ensure that. SCO's toString is fine, however. @Override public boolean equals(Object other) { return other == this; diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java index f464a45537..83df9ae0c8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java @@ -14,7 +14,7 @@ package com.google.devtools.build.lib.rules.config; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -31,7 +31,7 @@ public class ConfigSkylarkCommon { doc = "The key used to retrieve the provider containing config_feature_flag's value.", structField = true ) - public ClassObjectConstructor getConfigFeatureFlagProviderConstructor() { + public Provider getConfigFeatureFlagProviderConstructor() { return ConfigFeatureFlagProvider.SKYLARK_CONSTRUCTOR; } } 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 cc6d68adf1..1331f7e1ac 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 @@ -18,16 +18,15 @@ import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore.CcLinkParamsStoreImpl; /** A target that provides C linker parameters. */ @Immutable -public final class CcLinkParamsProvider extends SkylarkClassObject { - public static final NativeClassObjectConstructor<CcLinkParamsProvider> CC_LINK_PARAMS = - new NativeClassObjectConstructor<CcLinkParamsProvider>( - CcLinkParamsProvider.class, "link_params") {}; +public final class CcLinkParamsProvider extends Info { + public static final NativeProvider<CcLinkParamsProvider> CC_LINK_PARAMS = + new NativeProvider<CcLinkParamsProvider>(CcLinkParamsProvider.class, "link_params") {}; public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = input -> { // ... then try Skylark. 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 79bbd99e86..8eb12d6270 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 @@ -21,8 +21,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.util.Pair; @@ -31,20 +31,14 @@ import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Map; import javax.annotation.Nullable; -/** - * Information about a C++ compiler used by the <code>cc_*</code> rules. - */ -@SkylarkModule( - name = "CcToolchainInfo", - doc = "Information about the C++ compiler being used." -) +/** Information about a C++ compiler used by the <code>cc_*</code> rules. */ +@SkylarkModule(name = "CcToolchainInfo", doc = "Information about the C++ compiler being used.") @Immutable -public final class CcToolchainProvider extends SkylarkClassObject { +public final class CcToolchainProvider extends Info { public static final String SKYLARK_NAME = "CcToolchainInfo"; - public static final NativeClassObjectConstructor<CcToolchainProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<CcToolchainProvider>( - CcToolchainProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<CcToolchainProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 51f9fd5591..8448232fdc 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,8 +40,8 @@ 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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; @@ -878,8 +878,7 @@ public class JavaCommon { } /** Gets all the deps that implement a particular provider. */ - public final <P extends SkylarkClassObject> Iterable<P> getDependencies( - NativeClassObjectConstructor<P> provider) { + public final <P extends Info> Iterable<P> getDependencies(NativeProvider<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 e691a4f1ce..d701b37973 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,8 +24,8 @@ 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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.ArrayList; import java.util.LinkedList; @@ -34,10 +34,10 @@ import javax.annotation.Nullable; /** A Skylark declared provider that encapsulates all providers that are needed by Java rules. */ @Immutable -public final class JavaProvider extends SkylarkClassObject { +public final class JavaProvider extends Info { - public static final NativeClassObjectConstructor<JavaProvider> JAVA_PROVIDER = - new NativeClassObjectConstructor<JavaProvider>(JavaProvider.class, "java_common.provider") {}; + public static final NativeProvider<JavaProvider> JAVA_PROVIDER = + new NativeProvider<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/java/JavaRuntimeProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeProvider.java index 558ff04baa..e7f5708d62 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeProvider.java @@ -18,24 +18,20 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.vfs.PathFragment; /** Information about the Java runtime used by the <code>java_*</code> rules. */ -@SkylarkModule( - name = "JavaRuntimeInfo", - doc = "Information about the Java runtime being used." -) +@SkylarkModule(name = "JavaRuntimeInfo", doc = "Information about the Java runtime being used.") @Immutable -public class JavaRuntimeProvider extends SkylarkClassObject { +public class JavaRuntimeProvider extends Info { public static final String SKYLARK_NAME = "JavaRuntimeInfo"; - public static final NativeClassObjectConstructor<JavaRuntimeProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<JavaRuntimeProvider>( - JavaRuntimeProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<JavaRuntimeProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<JavaRuntimeProvider>(JavaRuntimeProvider.class, SKYLARK_NAME) {}; private final NestedSet<Artifact> javaBaseInputs; private final PathFragment javaHome; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java index 175d8642a6..a532e61569 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java @@ -24,7 +24,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDe 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.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.rules.SkylarkRuleContext; import com.google.devtools.build.lib.rules.java.proto.StrictDepsUtils; import com.google.devtools.build.lib.skylarkinterface.Param; @@ -50,7 +50,7 @@ public class JavaSkylarkCommon { structField = true, doc = "Returns the Java declared provider." ) - public ClassObjectConstructor getJavaProvider() { + public Provider getJavaProvider() { return JavaProvider.JAVA_PROVIDER; } @@ -454,12 +454,13 @@ public class JavaSkylarkCommon { } @SkylarkCallable( - name = JavaRuntimeProvider.SKYLARK_NAME, - doc = "The key used to retrieve the provider that contains information about the Java " - + "runtime being used.", - structField = true + name = JavaRuntimeProvider.SKYLARK_NAME, + doc = + "The key used to retrieve the provider that contains information about the Java " + + "runtime being used.", + structField = true ) - public static ClassObjectConstructor getJavaRuntimeProvider() { + public static Provider getJavaRuntimeProvider() { return JavaRuntimeProvider.SKYLARK_CONSTRUCTOR; } } 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 650e1eeb76..0e555244d5 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 @@ -17,8 +17,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import java.util.HashMap; import java.util.Map.Entry; @@ -37,7 +37,7 @@ import java.util.Map.Entry; * <p>Example: { "arm64": { "bitcode_symbols": Artifact, "dsym_binary": Artifact } } */ @Immutable -public final class AppleDebugOutputsProvider extends SkylarkClassObject { +public final class AppleDebugOutputsProvider extends Info { /** Expected types of debug outputs. */ enum OutputType { @@ -61,8 +61,8 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject { public static final String SKYLARK_NAME = "AppleDebugOutputs"; /** Skylark constructor and identifier for AppleDebugOutputsProvider. */ - public static final NativeClassObjectConstructor<AppleDebugOutputsProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleDebugOutputsProvider>( + public static final NativeProvider<AppleDebugOutputsProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<AppleDebugOutputsProvider>( AppleDebugOutputsProvider.class, SKYLARK_NAME) {}; /** 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 97adf8208e..248a13cfb6 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 @@ -16,28 +16,28 @@ 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.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Provider containing the executable binary output that was built using an apple_binary target with * the 'dylib' type. This provider contains: + * * <ul> - * <li>'binary': The dylib artifact output by apple_binary</li> + * <li>'binary': The dylib artifact output by apple_binary * <li>'objc': An {@link ObjcProvider} which contains information about the transitive - * dependencies linked into the dylib, (intended so that binaries depending on this dylib may - * avoid relinking symbols included in the dylib</li> - * </ul> + * dependencies linked into the dylib, (intended so that binaries depending on this dylib may + * avoid relinking symbols included in the dylib + * </ul> */ -public final class AppleDylibBinaryProvider extends SkylarkClassObject { +public final class AppleDylibBinaryProvider extends Info { /** Skylark name for the AppleDylibBinaryProvider. */ public static final String SKYLARK_NAME = "AppleDylibBinary"; /** Skylark constructor and identifier for AppleDylibBinaryProvider. */ - public static final NativeClassObjectConstructor<AppleDylibBinaryProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleDylibBinaryProvider>( - AppleDylibBinaryProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<AppleDylibBinaryProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 e17e7f2344..994afecd16 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 @@ -17,34 +17,34 @@ 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.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.vfs.PathFragment; import javax.annotation.Nullable; /** * Provider containing information about an Apple dynamic framework. This provider contains: + * * <ul> - * <li>'framework_dirs': The framework path names used as link inputs in order to link - * against the dynamic framework</li> - * <li>'framework_files': The full set of artifacts that should be included as inputs - * to link against the dynamic framework</li> - * <li>'binary': The dylib binary artifact of the dynamic framework</li> + * <li>'framework_dirs': The framework path names used as link inputs in order to link against the + * dynamic framework + * <li>'framework_files': The full set of artifacts that should be included as inputs to link + * against the dynamic framework + * <li>'binary': The dylib binary artifact of the dynamic framework * <li>'objc': An {@link ObjcProvider} which contains information about the transitive - * dependencies linked into the binary, (intended so that bundle loaders depending on this - * executable may avoid relinking symbols included in the loadable binary</li> - * </ul> + * dependencies linked into the binary, (intended so that bundle loaders depending on this + * executable may avoid relinking symbols included in the loadable binary + * </ul> */ -public final class AppleDynamicFrameworkProvider extends SkylarkClassObject { +public final class AppleDynamicFrameworkProvider extends Info { /** Skylark name for the AppleDynamicFrameworkProvider. */ public static final String SKYLARK_NAME = "AppleDynamicFramework"; /** Skylark constructor and identifier for AppleDynamicFrameworkProvider. */ - public static final NativeClassObjectConstructor<AppleDynamicFrameworkProvider> - SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleDynamicFrameworkProvider>( - AppleDynamicFrameworkProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<AppleDynamicFrameworkProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 7b072bd136..910a9402ba 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 @@ -16,29 +16,29 @@ 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.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Provider containing the executable binary output that was built using an apple_binary target with - * the 'executable' type. This provider contains: + * the 'executable' type. This provider contains: + * * <ul> - * <li>'binary': The dylib artifact output by apple_binary</li> + * <li>'binary': The dylib artifact output by apple_binary * <li>'objc': An {@link ObjcProvider} which contains information about the transitive - * dependencies linked into the binary, (intended so that bundle loaders depending on this - * executable may avoid relinking symbols included in the loadable binary</li> - * </ul> + * dependencies linked into the binary, (intended so that bundle loaders depending on this + * executable may avoid relinking symbols included in the loadable binary + * </ul> */ -public final class AppleExecutableBinaryProvider extends SkylarkClassObject { +public final class AppleExecutableBinaryProvider extends Info { /** Skylark name for the AppleExecutableBinaryProvider. */ public static final String SKYLARK_NAME = "AppleExecutableBinary"; /** Skylark constructor and identifier for AppleExecutableBinaryProvider. */ - public static final NativeClassObjectConstructor<AppleExecutableBinaryProvider> - SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleExecutableBinaryProvider>( - AppleExecutableBinaryProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<AppleExecutableBinaryProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 c276dc7e63..a8df0a87b1 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 @@ -16,26 +16,26 @@ 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.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Provider containing the executable binary output that was built using an apple_binary target with * the 'loadable_bundle' type. This provider contains: + * * <ul> - * <li>'binary': The binary artifact output by apple_binary</li> - * </ul> + * <li>'binary': The binary artifact output by apple_binary + * </ul> */ -public final class AppleLoadableBundleBinaryProvider extends SkylarkClassObject { +public final class AppleLoadableBundleBinaryProvider extends Info { /** Skylark name for the AppleLoadableBundleBinary. */ public static final String SKYLARK_NAME = "AppleLoadableBundleBinary"; /** Skylark constructor and identifier for AppleLoadableBundleBinary. */ - public static final NativeClassObjectConstructor<AppleLoadableBundleBinaryProvider> - SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleLoadableBundleBinaryProvider>( - AppleLoadableBundleBinaryProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<AppleLoadableBundleBinaryProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<AppleLoadableBundleBinaryProvider>( + AppleLoadableBundleBinaryProvider.class, SKYLARK_NAME) {}; private final Artifact appleLoadableBundleBinary; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index 7f5820b3f5..4291fbed0d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -20,8 +20,8 @@ import com.google.devtools.build.lib.actions.Artifact; 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.ClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.rules.apple.ApplePlatform; import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.rules.apple.AppleToolchain; @@ -73,10 +73,8 @@ public class AppleSkylarkCommon { @VisibleForTesting public static final String MISSING_KEY_ERROR = "No value for required key %s was present."; - @Nullable - private SkylarkClassObject platformType; - @Nullable - private SkylarkClassObject platform; + @Nullable private Info platformType; + @Nullable private Info platform; @SkylarkCallable( name = "apple_toolchain", @@ -88,23 +86,24 @@ public class AppleSkylarkCommon { @SkylarkCallable( name = "platform_type", - doc = "An enum-like struct that contains the following fields corresponding to Apple platform " - + "types:<br><ul>" - + "<li><code>ios</code></li>" - + "<li><code>macos</code></li>" - + "<li><code>tvos</code></li>" - + "<li><code>watchos</code></li>" - + "</ul><p>" - + "These values can be passed to methods that expect a platform type, like the 'apple' " - + "configuration fragment's " - + "<a href='apple.html#multi_arch_platform'>multi_arch_platform</a> method.<p>" - + "Example:<p>" - + "<pre class='language-python'>\n" - + "ctx.fragments.apple.multi_arch_platform(apple_common.platform_type.ios)\n" - + "</pre>", + doc = + "An enum-like struct that contains the following fields corresponding to Apple platform " + + "types:<br><ul>" + + "<li><code>ios</code></li>" + + "<li><code>macos</code></li>" + + "<li><code>tvos</code></li>" + + "<li><code>watchos</code></li>" + + "</ul><p>" + + "These values can be passed to methods that expect a platform type, like the 'apple' " + + "configuration fragment's " + + "<a href='apple.html#multi_arch_platform'>multi_arch_platform</a> method.<p>" + + "Example:<p>" + + "<pre class='language-python'>\n" + + "ctx.fragments.apple.multi_arch_platform(apple_common.platform_type.ios)\n" + + "</pre>", structField = true ) - public SkylarkClassObject getPlatformTypeStruct() { + public Info getPlatformTypeStruct() { if (platformType == null) { platformType = PlatformType.getSkylarkStruct(); } @@ -112,22 +111,23 @@ public class AppleSkylarkCommon { } @SkylarkCallable( - name = "platform", - doc = "An enum-like struct that contains the following fields corresponding to Apple " - + "platforms:<br><ul>" - + "<li><code>ios_device</code></li>" - + "<li><code>ios_simulator</code></li>" - + "<li><code>macos</code></li>" - + "<li><code>tvos_device</code></li>" - + "<li><code>tvos_simulator</code></li>" - + "<li><code>watchos_device</code></li>" - + "<li><code>watchos_device</code></li>" - + "</ul><p>" - + "These values can be passed to methods that expect a platform, like " - + "<a href='apple.html#sdk_version_for_platform'>apple.sdk_version_for_platform</a>.", - structField = true + name = "platform", + doc = + "An enum-like struct that contains the following fields corresponding to Apple " + + "platforms:<br><ul>" + + "<li><code>ios_device</code></li>" + + "<li><code>ios_simulator</code></li>" + + "<li><code>macos</code></li>" + + "<li><code>tvos_device</code></li>" + + "<li><code>tvos_simulator</code></li>" + + "<li><code>watchos_device</code></li>" + + "<li><code>watchos_device</code></li>" + + "</ul><p>" + + "These values can be passed to methods that expect a platform, like " + + "<a href='apple.html#sdk_version_for_platform'>apple.sdk_version_for_platform</a>.", + structField = true ) - public SkylarkClassObject getPlatformStruct() { + public Info getPlatformStruct() { if (platform == null) { platform = ApplePlatform.getSkylarkStruct(); } @@ -136,16 +136,17 @@ public class AppleSkylarkCommon { @SkylarkCallable( name = XcodeVersionProperties.SKYLARK_NAME, - doc = "The constructor/key for the <code>XcodeVersionProperties</code> provider.<p>" - + "If a target propagates the <code>XcodeVersionProperties</code> provider, use this as " - + "the key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.XcodeVersionProperties]\n" - + "</pre>", + doc = + "The constructor/key for the <code>XcodeVersionProperties</code> provider.<p>" + + "If a target propagates the <code>XcodeVersionProperties</code> provider," + + " use this as the key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.XcodeVersionProperties]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getXcodeVersionPropertiesConstructor() { + public Provider getXcodeVersionPropertiesConstructor() { return XcodeVersionProperties.SKYLARK_CONSTRUCTOR; } @@ -153,117 +154,125 @@ public class AppleSkylarkCommon { // TODO(b/63899207): This currently does not match ObjcProvider.SKYLARK_NAME as it requires // a migration of existing skylark rules. name = "Objc", - doc = "The constructor/key for the <code>Objc</code> provider.<p>" - + "If a target propagates the <code>Objc</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.Objc]\n" - + "</pre>", + doc = + "The constructor/key for the <code>Objc</code> provider.<p>" + + "If a target propagates the <code>Objc</code> provider, use this as the " + + "key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.Objc]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getObjcProviderConstructor() { + public Provider getObjcProviderConstructor() { return ObjcProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleDynamicFrameworkProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleDynamicFramework</code> provider.<p>" - + "If a target propagates the <code>AppleDynamicFramework</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleDynamicFramework]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleDynamicFramework</code> provider.<p>" + + "If a target propagates the <code>AppleDynamicFramework</code> provider, use this " + + "as the key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleDynamicFramework]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleDynamicFrameworkConstructor() { + public Provider getAppleDynamicFrameworkConstructor() { return AppleDynamicFrameworkProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleDylibBinaryProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleDylibBinary</code> provider.<p>" - + "If a target propagates the <code>AppleDylibBinary</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleDylibBinary]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleDylibBinary</code> provider.<p>" + + "If a target propagates the <code>AppleDylibBinary</code> provider, use this as the " + + "key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleDylibBinary]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleDylibBinaryConstructor() { + public Provider getAppleDylibBinaryConstructor() { return AppleDylibBinaryProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleExecutableBinaryProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleExecutableBinary</code> provider.<p>" - + "If a target propagates the <code>AppleExecutableBinary</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleExecutableBinary]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleExecutableBinary</code> provider.<p>" + + "If a target propagates the <code>AppleExecutableBinary</code> provider," + + " use this as the key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleExecutableBinary]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleExecutableBinaryConstructor() { + public Provider getAppleExecutableBinaryConstructor() { return AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleStaticLibraryProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleStaticLibrary</code> provider.<p>" - + "If a target propagates the <code>AppleStaticLibrary</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleStaticLibrary]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleStaticLibrary</code> provider.<p>" + + "If a target propagates the <code>AppleStaticLibrary</code> provider, use " + + "this as the key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleStaticLibrary]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleStaticLibraryProvider() { + public Provider getAppleStaticLibraryProvider() { return AppleStaticLibraryProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleDebugOutputsProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleDebugOutputs</code> provider.<p>" - + "If a target propagates the <code>AppleDebugOutputs</code> provider, use this as the " - + "key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleDebugOutputs]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleDebugOutputs</code> provider.<p>" + + "If a target propagates the <code>AppleDebugOutputs</code> provider, use this as the " + + "key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleDebugOutputs]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleDebugOutputsConstructor() { + public Provider getAppleDebugOutputsConstructor() { return AppleDebugOutputsProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = AppleLoadableBundleBinaryProvider.SKYLARK_NAME, - doc = "The constructor/key for the <code>AppleLoadableBundleBinary</code> provider.<p>" - + "If a target propagates the <code>AppleLoadableBundleBinary</code> provider, use this as " - + "the key with which to retrieve it. Example:<br>" - + "<pre class='language-python'>\n" - + "dep = ctx.attr.deps[0]\n" - + "p = dep[apple_common.AppleLoadableBundleBinary]\n" - + "</pre>", + doc = + "The constructor/key for the <code>AppleLoadableBundleBinary</code> provider.<p>" + + "If a target propagates the <code>AppleLoadableBundleBinary</code> provider, " + + "use this as the key with which to retrieve it. Example:<br>" + + "<pre class='language-python'>\n" + + "dep = ctx.attr.deps[0]\n" + + "p = dep[apple_common.AppleLoadableBundleBinary]\n" + + "</pre>", structField = true ) - public ClassObjectConstructor getAppleLoadableBundleBinaryConstructor() { + public Provider getAppleLoadableBundleBinaryConstructor() { return AppleLoadableBundleBinaryProvider.SKYLARK_CONSTRUCTOR; } @SkylarkCallable( name = IosDeviceProvider.SKYLARK_NAME, - doc = "<b>Deprecated. Use the new Skylark testing rules instead.</b> Returns the provider " - + "constructor for IosDeviceProvider. Use this as a key to access the attributes exposed " - + "by ios_device.", + doc = + "<b>Deprecated. Use the new Skylark testing rules instead.</b> Returns the provider " + + "constructor for IosDeviceProvider. Use this as a key to access the attributes " + + "exposed by ios_device.", structField = true ) - public ClassObjectConstructor getIosDeviceProviderConstructor() { + public Provider getIosDeviceProviderConstructor() { return IosDeviceProvider.SKYLARK_CONSTRUCTOR; } 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 f18a9b476e..cc0f064d55 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 @@ -16,28 +16,30 @@ 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.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; /** * Provider containing information regarding multi-architecture Apple static libraries, as is * propagated that by the {@code apple_static_library} rule. + * * <p>This provider contains: + * * <ul> - * <li>'archive': The multi-arch archive (.a) output by apple_static_library</li> + * <li>'archive': The multi-arch archive (.a) output by apple_static_library * <li>'objc': An {@link ObjcProvider} which contains information about the transitive - * dependencies linked into the library, (intended so that targets may avoid linking - * symbols included in this archive multiple times).</li> - * </ul> + * dependencies linked into the library, (intended so that targets may avoid linking symbols + * included in this archive multiple times). + * </ul> */ -public final class AppleStaticLibraryProvider extends SkylarkClassObject { +public final class AppleStaticLibraryProvider extends Info { /** Skylark name for the AppleStaticLibraryProvider. */ public static final String SKYLARK_NAME = "AppleStaticLibrary"; /** Skylark constructor and identifier for AppleStaticLibraryProvider. */ - public static final NativeClassObjectConstructor<AppleStaticLibraryProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<AppleStaticLibraryProvider>( + public static final NativeProvider<AppleStaticLibraryProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<AppleStaticLibraryProvider>( AppleStaticLibraryProvider.class, SKYLARK_NAME) {}; private final Artifact multiArchArchive; 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 1128ae8acb..8ad4575f56 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 @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; 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.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.util.Preconditions; import java.util.Map; @@ -27,7 +27,7 @@ import javax.annotation.Nullable; /** Provider that describes a simulator device. */ @Immutable -public final class IosDeviceProvider extends SkylarkClassObject { +public final class IosDeviceProvider extends Info { /** A builder of {@link IosDeviceProvider}s. */ public static final class Builder { private String type; @@ -76,8 +76,8 @@ public final class IosDeviceProvider extends SkylarkClassObject { public static final String SKYLARK_NAME = "IosDevice"; /** Skylark constructor and identifier for the IosDeviceProvider. */ - public static final NativeClassObjectConstructor<IosDeviceProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<IosDeviceProvider>(IosDeviceProvider.class, SKYLARK_NAME) {}; + public static final NativeProvider<IosDeviceProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index 55ac6df555..cd4553c5e1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -67,8 +67,8 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; @@ -299,10 +299,10 @@ public final class ObjcCommon { return listBuilder; } - private <T extends SkylarkClassObject> ImmutableList.Builder<T> addAnyProviders( + private <T extends Info> ImmutableList.Builder<T> addAnyProviders( ImmutableList.Builder<T> listBuilder, TransitiveInfoCollection collection, - NativeClassObjectConstructor<T> providerClass) { + NativeProvider<T> providerClass) { T provider = collection.get(providerClass); if (provider != null) { listBuilder.add(provider); 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 d7e8ff45ac..2e0f05dd72 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 @@ -29,9 +29,9 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.WithLegacySkylarkName; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.NativeProvider.WithLegacySkylarkName; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider; import com.google.devtools.build.lib.rules.cpp.CppModuleMap; import com.google.devtools.build.lib.rules.cpp.LinkerInputs; @@ -55,7 +55,7 @@ import java.util.Map; category = SkylarkModuleCategory.PROVIDER, doc = "A provider for compilation and linking of objc." ) -public final class ObjcProvider extends SkylarkClassObject { +public final class ObjcProvider extends Info { /** Skylark name for the ObjcProvider. */ public static final String SKYLARK_NAME = "objc"; @@ -499,8 +499,7 @@ public final class ObjcProvider extends SkylarkClassObject { private final ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems; /** Skylark constructor and identifier for ObjcProvider. */ - public static final NativeClassObjectConstructor<ObjcProvider> SKYLARK_CONSTRUCTOR = - new Constructor(); + public static final NativeProvider<ObjcProvider> SKYLARK_CONSTRUCTOR = new Constructor(); private ObjcProvider( ImmutableMap<Key<?>, NestedSet<?>> items, @@ -1007,8 +1006,7 @@ public final class ObjcProvider extends SkylarkClassObject { } } - private static class Constructor - extends NativeClassObjectConstructor<ObjcProvider> + private static class Constructor extends NativeProvider<ObjcProvider> implements WithLegacySkylarkName { public Constructor() { super(ObjcProvider.class, ObjcProvider.SKYLARK_NAME); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java index 03c2ae243f..f3937f6549 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java @@ -24,8 +24,8 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; @@ -160,26 +160,24 @@ public class ObjcProviderSkylarkConverters { @SuppressWarnings("unchecked") @Override public Object valueForSkylark(Key<?> javaKey, NestedSet<?> javaValue) { - NestedSetBuilder<SkylarkClassObject> result = NestedSetBuilder.stableOrder(); + NestedSetBuilder<Info> result = NestedSetBuilder.stableOrder(); for (BundleableFile bundleableFile : (Iterable<BundleableFile>) javaValue) { - result.add(NativeClassObjectConstructor.STRUCT.create( - ImmutableMap.<String, Object>of( - BUNDLED_FIELD, bundleableFile.getBundled(), - BUNDLE_PATH_FIELD, bundleableFile.getBundlePath() - ), - "No such attribute '%s'" - )); + result.add( + NativeProvider.STRUCT.create( + ImmutableMap.<String, Object>of( + BUNDLED_FIELD, bundleableFile.getBundled(), + BUNDLE_PATH_FIELD, bundleableFile.getBundlePath()), + "No such attribute '%s'")); } - return SkylarkNestedSet.of(SkylarkClassObject.class, result.build()); + return SkylarkNestedSet.of(Info.class, result.build()); } @SuppressWarnings("unchecked") @Override public Iterable<?> valueForJava(Key<?> javaKey, Object skylarkValue) { - validateTypes(skylarkValue, SkylarkClassObject.class, javaKey.getSkylarkKeyName()); + validateTypes(skylarkValue, Info.class, javaKey.getSkylarkKeyName()); NestedSetBuilder<BundleableFile> result = NestedSetBuilder.stableOrder(); - for (SkylarkClassObject struct : - ((SkylarkNestedSet) skylarkValue).toCollection(SkylarkClassObject.class)) { + for (Info struct : ((SkylarkNestedSet) skylarkValue).toCollection(Info.class)) { Artifact artifact; String path; try { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java index 47f5a3031c..d6d57f9cbb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java @@ -30,7 +30,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.SimulatorRule; @@ -255,7 +255,7 @@ public class TestSupport { * Returns any additional providers that need to be exported to the rule context to the passed * builder. */ - public Iterable<SkylarkClassObject> getExtraProviders() { + public Iterable<Info> getExtraProviders() { IosDeviceProvider deviceProvider = ruleContext.getPrerequisite( IosTest.TARGET_DEVICE, Mode.TARGET, IosDeviceProvider.SKYLARK_CONSTRUCTOR); @@ -274,7 +274,7 @@ public class TestSupport { envBuilder.put("APPLE_COVERAGE", "1"); } - return ImmutableList.<SkylarkClassObject>of(new TestEnvironmentProvider(envBuilder.build())); + return ImmutableList.<Info>of(new TestEnvironmentProvider(envBuilder.build())); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java index a0a306ffc2..a1209251d4 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 @@ -17,9 +17,9 @@ package com.google.devtools.build.lib.rules.objc; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.WithLegacySkylarkName; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.packages.NativeProvider.WithLegacySkylarkName; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.util.Preconditions; @@ -33,14 +33,13 @@ import com.google.devtools.build.lib.util.Preconditions; "Deprecated. A provider for XCTest apps for testing. This is a legacy provider and should " + "not be used." ) -public final class XcTestAppProvider extends SkylarkClassObject { +public final class XcTestAppProvider extends Info { /** * The skylark struct key name for a rule implementation to use when exporting an ObjcProvider. */ public static final String XCTEST_APP_SKYLARK_PROVIDER_NAME = "xctest_app"; - public static final NativeClassObjectConstructor<XcTestAppProvider> SKYLARK_CONSTRUCTOR = - new Constructor(); + public static final NativeProvider<XcTestAppProvider> SKYLARK_CONSTRUCTOR = new Constructor(); private final Artifact bundleLoader; private final Artifact ipa; @@ -85,8 +84,7 @@ public final class XcTestAppProvider extends SkylarkClassObject { .build(); } - private static class Constructor - extends NativeClassObjectConstructor<XcTestAppProvider> + private static class Constructor extends NativeProvider<XcTestAppProvider> implements WithLegacySkylarkName { private Constructor() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformCommon.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformCommon.java index 48e905772e..c793dea5f3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformCommon.java @@ -18,7 +18,7 @@ import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo; import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo; import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.analysis.platform.ToolchainInfo; -import com.google.devtools.build.lib.packages.ClassObjectConstructor; +import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor; @@ -37,7 +37,7 @@ public class PlatformCommon { + "ConstraintValueInfo providers that defines the platform.", structField = true ) - public ClassObjectConstructor getPlatformInfoConstructor() { + public Provider getPlatformInfoConstructor() { return PlatformInfo.SKYLARK_CONSTRUCTOR; } @@ -48,7 +48,7 @@ public class PlatformCommon { + "uniquely identifies the constraint (and which should always be ctx.label).", structField = true ) - public ClassObjectConstructor getConstraintSettingInfoConstructor() { + public Provider getConstraintSettingInfoConstructor() { return ConstraintSettingInfo.SKYLARK_CONSTRUCTOR; } @@ -60,7 +60,7 @@ public class PlatformCommon { + "and the ConstraintSettingInfo which the value belongs to.", structField = true ) - public ClassObjectConstructor getConstraintValueInfoConstructor() { + public Provider getConstraintValueInfoConstructor() { return ConstraintValueInfo.SKYLARK_CONSTRUCTOR; } @@ -71,7 +71,7 @@ public class PlatformCommon { + "toolchain, and a map of the toolchain's data.", structField = true ) - public ClassObjectConstructor getToolchainInfoConstructor() { + public Provider getToolchainInfoConstructor() { return ToolchainInfo.SKYLARK_CONSTRUCTOR; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java index de9d22e329..b0cafa85f6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java @@ -38,9 +38,9 @@ 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.BuildType; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector.LocalMetadataCollector; @@ -162,11 +162,11 @@ public final class PyCommon { /** * Returns a Skylark struct for exposing transitive Python sources: * - * addSkylarkTransitiveInfo(PYTHON_SKYLARK_PROVIDER_NAME, createSourceProvider(...)) + * <p>addSkylarkTransitiveInfo(PYTHON_SKYLARK_PROVIDER_NAME, createSourceProvider(...)) */ - public static SkylarkClassObject createSourceProvider( + public static Info createSourceProvider( NestedSet<Artifact> transitivePythonSources, boolean isUsingSharedLibrary) { - return NativeClassObjectConstructor.STRUCT.create( + return NativeProvider.STRUCT.create( ImmutableMap.<String, Object>of( TRANSITIVE_PYTHON_SRCS, SkylarkNestedSet.of(Artifact.class, transitivePythonSources), @@ -301,14 +301,15 @@ public final class PyCommon { private NestedSet<Artifact> getTransitivePythonSourcesFromSkylarkProvider( TransitiveInfoCollection dep) { - SkylarkClassObject pythonSkylarkProvider = null; + Info pythonSkylarkProvider = null; try { - pythonSkylarkProvider = SkylarkType.cast( + pythonSkylarkProvider = + SkylarkType.cast( dep.get(PYTHON_SKYLARK_PROVIDER_NAME), - SkylarkClassObject.class, + Info.class, null, - "%s should be a struct", PYTHON_SKYLARK_PROVIDER_NAME - ); + "%s should be a struct", + PYTHON_SKYLARK_PROVIDER_NAME); if (pythonSkylarkProvider != null) { Object sourceFiles = pythonSkylarkProvider.getValue(TRANSITIVE_PYTHON_SRCS); @@ -487,8 +488,8 @@ public final class PyCommon { for (TransitiveInfoCollection dep : deps) { Object providerObject = dep.get(PYTHON_SKYLARK_PROVIDER_NAME); if (providerObject != null) { - SkylarkType.checkType(providerObject, SkylarkClassObject.class, null); - SkylarkClassObject provider = (SkylarkClassObject) providerObject; + SkylarkType.checkType(providerObject, Info.class, null); + Info provider = (Info) providerObject; Boolean isUsingSharedLibrary = provider.getValue(IS_USING_SHARED_LIBRARY, Boolean.class); if (Boolean.TRUE.equals(isUsingSharedLibrary)) { return true; 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 32cabb0e2d..4f1e40a84c 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 @@ -15,8 +15,8 @@ package com.google.devtools.build.lib.rules.test; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import java.util.Map; /** @@ -24,12 +24,11 @@ import java.util.Map; * tests). */ @Immutable -public final class ExecutionInfoProvider extends SkylarkClassObject { +public final class ExecutionInfoProvider extends Info { /** Skylark constructor and identifier for ExecutionInfoProvider. */ - public static final NativeClassObjectConstructor<ExecutionInfoProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<ExecutionInfoProvider>( - ExecutionInfoProvider.class, "ExecutionInfo") {}; + public static final NativeProvider<ExecutionInfoProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<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 fe52a230a0..c4fb3f6849 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 @@ -17,17 +17,17 @@ package com.google.devtools.build.lib.rules.test; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.NativeClassObjectConstructor; -import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeProvider; import java.util.Map; /** Provider containing any additional environment variables for use in the test action. */ @Immutable -public final class TestEnvironmentProvider extends SkylarkClassObject { +public final class TestEnvironmentProvider extends Info { /** Skylark constructor and identifier for TestEnvironmentProvider. */ - public static final NativeClassObjectConstructor<TestEnvironmentProvider> SKYLARK_CONSTRUCTOR = - new NativeClassObjectConstructor<TestEnvironmentProvider>( + public static final NativeProvider<TestEnvironmentProvider> SKYLARK_CONSTRUCTOR = + new NativeProvider<TestEnvironmentProvider>( TestEnvironmentProvider.class, "TestEnvironment") {}; private final Map<String, String> environment; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java index 190e40aace..3ca1942095 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java @@ -24,8 +24,8 @@ import com.google.devtools.build.lib.analysis.SkylarkProviderValidationUtil; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.SkylarkAspect; -import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.rules.SkylarkRuleConfiguredTargetUtil; import com.google.devtools.build.lib.rules.SkylarkRuleContext; import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; @@ -84,7 +84,7 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory { if (ruleContext.hasErrors()) { return null; - } else if (!(aspectSkylarkObject instanceof SkylarkClassObject) + } else if (!(aspectSkylarkObject instanceof Info) && !(aspectSkylarkObject instanceof Iterable)) { ruleContext.ruleError( String.format( @@ -114,7 +114,7 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory { if (aspectSkylarkObject instanceof Iterable) { addDeclaredProviders(builder, (Iterable) aspectSkylarkObject); } else { - SkylarkClassObject struct = (SkylarkClassObject) aspectSkylarkObject; + Info struct = (Info) aspectSkylarkObject; Location loc = struct.getCreationLoc(); for (String key : struct.getKeys()) { if (key.equals("output_groups")) { @@ -145,10 +145,10 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory { throws EvalException { for (Object o : aspectSkylarkObject) { Location loc = skylarkAspect.getImplementation().getLocation(); - SkylarkClassObject declaredProvider = + Info declaredProvider = SkylarkType.cast( o, - SkylarkClassObject.class, + Info.class, loc, "A return value of an aspect implementation function should be " + "a sequence of declared providers"); |