bazel packages: rename InfoInterface to Info
Info is now an interface. The logic of the former abstract class of that name
has been pushed down into it subclasses, most of which do not need to materialize
Location and Provider as fields. This saved two words per Info instance.
PiperOrigin-RevId: 284178767
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 6f86752..7247db8 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
@@ -31,7 +31,7 @@
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.BuiltinProvider;
-import com.google.devtools.build.lib.packages.InfoInterface;
+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.TriState;
@@ -92,7 +92,7 @@
* 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 InfoInterface> Iterable<T> getProviders(
+ public static <T extends Info> Iterable<T> getProviders(
Iterable<? extends TransitiveInfoCollection> prerequisites,
final NativeProvider<T> skylarkKey) {
ImmutableList.Builder<T> result = ImmutableList.builder();
@@ -109,7 +109,7 @@
* 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 InfoInterface> Iterable<T> getProviders(
+ public static <T extends Info> Iterable<T> getProviders(
Iterable<? extends TransitiveInfoCollection> prerequisites,
final BuiltinProvider<T> skylarkKey) {
ImmutableList.Builder<T> result = ImmutableList.builder();
@@ -131,14 +131,14 @@
}
/** Returns the iterable of collections that have the specified provider. */
- public static <S extends TransitiveInfoCollection, C extends InfoInterface> Iterable<S>
- filterByProvider(Iterable<S> prerequisites, final NativeProvider<C> 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);
}
/** Returns the iterable of collections that have the specified provider. */
- public static <S extends TransitiveInfoCollection, C extends InfoInterface>
- Iterable<S> filterByProvider(Iterable<S> prerequisites, final BuiltinProvider<C> provider) {
+ public static <S extends TransitiveInfoCollection, C extends Info> Iterable<S> filterByProvider(
+ Iterable<S> prerequisites, final BuiltinProvider<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 86dd39e..0e07c6d 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
@@ -34,7 +34,7 @@
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.InfoInterface;
+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.skyframe.serialization.autocodec.AutoCodec;
@@ -122,7 +122,7 @@
}
}
- public InfoInterface get(Provider.Key key) {
+ public Info get(Provider.Key key) {
return providers.get(key);
}
@@ -233,8 +233,7 @@
return this;
}
- public Builder addSkylarkDeclaredProvider(InfoInterface declaredProvider)
- throws EvalException {
+ public Builder addSkylarkDeclaredProvider(Info declaredProvider) throws EvalException {
Provider constructor = declaredProvider.getProvider();
if (!constructor.isExported()) {
throw new EvalException(
@@ -244,11 +243,11 @@
return this;
}
- private void addDeclaredProvider(InfoInterface declaredProvider) {
+ private void addDeclaredProvider(Info declaredProvider) {
providers.put(declaredProvider);
}
- public Builder addNativeDeclaredProvider(InfoInterface declaredProvider) {
+ public Builder addNativeDeclaredProvider(Info declaredProvider) {
Provider constructor = declaredProvider.getProvider();
Preconditions.checkState(constructor.isExported());
addDeclaredProvider(declaredProvider);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/EmptyConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/EmptyConfiguredTarget.java
index a60fe0d..95dd272 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/EmptyConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/EmptyConfiguredTarget.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
import javax.annotation.Nullable;
@@ -33,7 +33,7 @@
@Nullable
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ProviderCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/ProviderCollection.java
index dced6a4..a0f7e9e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ProviderCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ProviderCollection.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.packages.BuiltinProvider;
-import com.google.devtools.build.lib.packages.InfoInterface;
+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;
@@ -46,7 +46,7 @@
* <p>Use {@link #get(NativeProvider)} for native providers.
*/
@Nullable
- InfoInterface get(Provider.Key providerKey);
+ Info get(Provider.Key providerKey);
/**
* Returns the native declared provider requested, or null, if the information is not found.
@@ -54,7 +54,7 @@
* <p>Type-safe version of {@link #get(Provider.Key)} for native providers.
*/
@Nullable
- default <T extends InfoInterface> T get(NativeProvider<T> provider) {
+ default <T extends Info> T get(NativeProvider<T> provider) {
return provider.getValueClass().cast(get(provider.getKey()));
}
@@ -64,7 +64,7 @@
* <p>Type-safe version of {@link #get(Provider.Key)} for native providers.
*/
@Nullable
- default <T extends InfoInterface> T get(BuiltinProvider<T> provider) {
+ default <T extends Info> T get(BuiltinProvider<T> provider) {
return provider.getValueClass().cast(get(provider.getKey()));
}
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 8f25598..f3375c3 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
@@ -51,7 +51,7 @@
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.BuildSetting;
import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -498,9 +498,9 @@
* <p>Has special handling for {@link OutputGroupInfo}: that provider is not added from Skylark
* directly, instead its output groups are added.
*
- * <p>Use {@link #addNativeDeclaredProvider(InfoInterface)} in definitions of native rules.
+ * <p>Use {@link #addNativeDeclaredProvider(Info)} in definitions of native rules.
*/
- public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider(InfoInterface provider)
+ public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider(Info provider)
throws EvalException {
Provider constructor = provider.getProvider();
if (!constructor.isExported()) {
@@ -522,10 +522,10 @@
* 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(InfoInterface)} for Skylark rule implementations.
+ * <p>Use {@link #addSkylarkDeclaredProvider(Info)} for Skylark rule implementations.
*/
- public RuleConfiguredTargetBuilder addNativeDeclaredProviders(Iterable<InfoInterface> providers) {
- for (InfoInterface provider : providers) {
+ public RuleConfiguredTargetBuilder addNativeDeclaredProviders(Iterable<Info> providers) {
+ for (Info provider : providers) {
addNativeDeclaredProvider(provider);
}
return this;
@@ -535,9 +535,9 @@
* Adds a "declared provider" defined in native code to the rule. Use this method for declared
* providers in definitions of native rules.
*
- * <p>Use {@link #addSkylarkDeclaredProvider(InfoInterface)} for Skylark rule implementations.
+ * <p>Use {@link #addSkylarkDeclaredProvider(Info)} for Skylark rule implementations.
*/
- public RuleConfiguredTargetBuilder addNativeDeclaredProvider(InfoInterface provider) {
+ public RuleConfiguredTargetBuilder addNativeDeclaredProvider(Info provider) {
Provider constructor = provider.getProvider();
Preconditions.checkState(constructor.isExported());
providersBuilder.put(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 614cd11..f167e8a 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
@@ -79,7 +79,6 @@
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.InfoInterface;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.OutputFile;
@@ -1073,7 +1072,7 @@
* 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 InfoInterface> Iterable<T> getPrerequisites(
+ public <T extends Info> Iterable<T> getPrerequisites(
String attributeName, Mode mode, final NativeProvider<T> skylarkKey) {
return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey);
}
@@ -1082,7 +1081,7 @@
* 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 InfoInterface> Iterable<T> getPrerequisites(
+ public <T extends Info> Iterable<T> getPrerequisites(
String attributeName, Mode mode, final BuiltinProvider<T> skylarkKey) {
return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey);
}
@@ -1093,7 +1092,7 @@
* TransitiveInfoCollection under the specified attribute.
*/
@Nullable
- public <T extends InfoInterface> T getPrerequisite(
+ 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);
@@ -1105,7 +1104,7 @@
* TransitiveInfoCollection under the specified attribute.
*/
@Nullable
- public <T extends InfoInterface> T getPrerequisite(
+ public <T extends Info> T getPrerequisite(
String attributeName, Mode mode, final BuiltinProvider<T> skylarkKey) {
TransitiveInfoCollection prerequisite = getPrerequisite(attributeName, mode);
return prerequisite == null ? null : prerequisite.get(skylarkKey);
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 91b3249..c1cca86 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,7 +14,7 @@
package com.google.devtools.build.lib.analysis;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import javax.annotation.concurrent.Immutable;
@@ -26,7 +26,7 @@
*
* <ul>
* <li>Declared providers. They are exposed to Skylark and identified by {@link Provider.Key}.
- * Provider instances are {@link InfoInterface}s.
+ * 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.
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 3d87e47..b7f6669 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
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.analysis;
import com.google.common.base.Preconditions;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import java.util.Arrays;
import java.util.LinkedHashMap;
@@ -49,8 +49,7 @@
Preconditions.checkNotNull(providerClass);
Preconditions.checkNotNull(provider);
Preconditions.checkState(
- !(provider instanceof InfoInterface), "Expose %s as native declared provider",
- providerClass);
+ !(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,7 +58,7 @@
return this;
}
- public TransitiveInfoProviderMapBuilder put(InfoInterface classObject) {
+ public TransitiveInfoProviderMapBuilder put(Info classObject) {
Preconditions.checkNotNull(classObject);
Preconditions.checkState(!(classObject instanceof TransitiveInfoProvider),
"Declared provider %s should not implement TransitiveInfoProvider",
@@ -105,8 +104,8 @@
}
@Nullable
- public InfoInterface getProvider(Provider.Key key) {
- return (InfoInterface) 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 1b5aa39..3ef7f4f 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
@@ -16,7 +16,7 @@
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.collect.ImmutableSharedKeyMap;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
@@ -62,8 +62,8 @@
@Nullable
@Override
- public InfoInterface get(Provider.Key key) {
- return (InfoInterface) super.get(key);
+ public Info get(Provider.Key key) {
+ return (Info) super.get(key);
}
@Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index 71330b8..6734c37 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -31,7 +31,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
@@ -218,7 +218,7 @@
/** Returns a declared provider provided by this target. Only meant to use from Skylark. */
@Nullable
@Override
- public final InfoInterface get(Provider.Key providerKey) {
+ public final Info get(Provider.Key providerKey) {
if (providerKey.equals(DefaultInfo.PROVIDER.getKey())) {
return getDefaultProvider();
}
@@ -227,7 +227,7 @@
/** Implement in subclasses to get a skylark provider for a given {@code providerKey}. */
@Nullable
- protected abstract InfoInterface rawGetSkylarkProvider(Provider.Key providerKey);
+ protected abstract Info rawGetSkylarkProvider(Provider.Key providerKey);
public String getRuleClassString() {
return "";
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
index d83b7cb..b95f126 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/EnvironmentGroupConfiguredTarget.java
@@ -18,7 +18,7 @@
import com.google.devtools.build.lib.analysis.TargetContext;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -41,7 +41,7 @@
}
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
index 2dff116..12b5e9e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
@@ -32,7 +32,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
@@ -113,7 +113,7 @@
}
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
return providers.get(providerKey);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
index 0fcc28a..ee6eb34 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
@@ -26,7 +26,7 @@
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.InfoInterface;
+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.skylarkbuildapi.ActionApi;
@@ -95,8 +95,8 @@
}
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
- InfoInterface provider = providers.get(providerKey);
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
+ Info provider = providers.get(providerKey);
if (provider == null) {
provider = base.get(providerKey);
}
@@ -181,7 +181,7 @@
if (base.get(key) != null || aspectProviders.contains(key)) {
throw new DuplicateException("Provider " + key + " provided twice");
}
- aspectProviders.put((InfoInterface) providers.getProviderInstanceAt(i));
+ aspectProviders.put((Info) providers.getProviderInstanceAt(i));
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
index 6b30c77..76ae3c0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/PackageGroupConfiguredTarget.java
@@ -26,7 +26,7 @@
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.Event;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.PackageGroup;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
@@ -107,7 +107,7 @@
}
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index 86d8f9b..fea75c1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -38,7 +38,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
import com.google.devtools.build.lib.packages.Provider;
@@ -215,7 +215,7 @@
}
@Override
- protected InfoInterface rawGetSkylarkProvider(Provider.Key providerKey) {
+ protected Info rawGetSkylarkProvider(Provider.Key providerKey) {
return providers.get(providerKey);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
index 242073c..c61fd98 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
@@ -38,7 +38,7 @@
import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
import com.google.devtools.build.lib.packages.BazelStarlarkContext;
import com.google.devtools.build.lib.packages.FunctionSplitTransitionWhitelist;
-import com.google.devtools.build.lib.packages.InfoInterface;
+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.Rule;
@@ -138,7 +138,7 @@
if (ruleContext.hasErrors()) {
return null;
- } else if (!(target instanceof InfoInterface)
+ } else if (!(target instanceof Info)
&& target != Starlark.NONE
&& !(target instanceof Iterable)) {
ruleContext.ruleError(
@@ -325,11 +325,11 @@
throws EvalException {
StructImpl oldStyleProviders = StructProvider.STRUCT.createEmpty(loc);
- Map<Provider.Key, InfoInterface> declaredProviders = new LinkedHashMap<>();
+ Map<Provider.Key, Info> declaredProviders = new LinkedHashMap<>();
- if (target instanceof InfoInterface) {
+ if (target instanceof Info) {
// Either an old-style struct or a single declared provider (not in a list)
- InfoInterface info = (InfoInterface) target;
+ Info info = (Info) target;
// Use the creation location of this struct as a better reference in error messages
loc = info.getCreationLoc();
if (getProviderKey(loc, info).equals(StructProvider.STRUCT.getKey())) {
@@ -350,10 +350,10 @@
if (struct.hasField("providers")) {
Iterable<?> iterable = cast("providers", struct, Iterable.class, loc);
for (Object o : iterable) {
- InfoInterface declaredProvider =
+ Info declaredProvider =
SkylarkType.cast(
o,
- InfoInterface.class,
+ Info.class,
loc,
"The value of 'providers' should be a sequence of declared providers");
Provider.Key providerKey = getProviderKey(loc, declaredProvider);
@@ -372,10 +372,10 @@
} else if (target instanceof Iterable) {
// Sequence of declared providers
for (Object o : (Iterable) target) {
- InfoInterface declaredProvider =
+ Info declaredProvider =
SkylarkType.cast(
o,
- InfoInterface.class,
+ Info.class,
loc,
"A return value of a rule implementation function should be "
+ "a sequence of declared providers");
@@ -390,7 +390,7 @@
boolean defaultProviderProvidedExplicitly = false;
- for (InfoInterface declaredProvider : declaredProviders.values()) {
+ for (Info declaredProvider : declaredProviders.values()) {
if (getProviderKey(loc, declaredProvider).equals(DefaultInfo.PROVIDER.getKey())) {
parseDefaultProviderFields((DefaultInfo) declaredProvider, context, builder);
defaultProviderProvidedExplicitly = true;
@@ -436,8 +436,8 @@
throws EvalException {
builder.addSkylarkTransitiveInfo(fieldName, value);
- if (value instanceof InfoInterface) {
- InfoInterface info = (InfoInterface) value;
+ if (value instanceof Info) {
+ Info info = (Info) value;
// To facilitate migration off legacy provider syntax, implicitly set the modern provider key
// and the canonical legacy provider key if applicable.
@@ -460,7 +460,7 @@
RuleConfiguredTargetBuilder builder,
StructImpl oldStyleProviders,
String fieldName,
- InfoInterface info)
+ Info info)
throws EvalException {
// If the modern key is already set, do nothing.
if (builder.containsProviderKey(info.getProvider().getKey())) {
@@ -495,8 +495,7 @@
* occur if the provider was declared in a non-global scope (for example a rule implementation
* function)
*/
- private static Provider.Key getProviderKey(Location loc, InfoInterface infoObject)
- throws EvalException {
+ private static Provider.Key getProviderKey(Location loc, Info infoObject) throws EvalException {
if (!infoObject.getProvider().isExported()) {
throw new EvalException(
loc,
@@ -676,7 +675,7 @@
}
if (ruleContext.getRule().getRuleClassObject().isSkylarkTestable()) {
- InfoInterface actions =
+ Info actions =
ActionsProvider.create(ruleContext.getAnalysisEnvironment().getRegisteredActions());
builder.addSkylarkDeclaredProvider(actions);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
index ba4d2d8..1d8477d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
@@ -15,7 +15,6 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.skylarkbuildapi.test.AnalysisFailureInfoApi;
@@ -26,8 +25,7 @@
*
* <p>Encapsulates information about analysis-phase errors which would have occurred during a build.
*/
-public final class AnalysisFailureInfo extends Info
- implements AnalysisFailureInfoApi<AnalysisFailure> {
+public final class AnalysisFailureInfo implements Info, AnalysisFailureInfoApi<AnalysisFailure> {
/**
* Singleton provider instance for {@link AnalysisFailureInfo}.
@@ -38,10 +36,14 @@
private final NestedSet<AnalysisFailure> causes;
private AnalysisFailureInfo(NestedSet<AnalysisFailure> causes) {
- super(SKYLARK_CONSTRUCTOR, Location.BUILTIN);
this.causes = causes;
}
+ @Override
+ public AnalysisFailureInfoProvider getProvider() {
+ return SKYLARK_CONSTRUCTOR;
+ }
+
/**
* Constructs and returns an {@link AnalysisFailureInfo} object representing the given failures.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisTestResultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisTestResultInfo.java
index 9e7c72a..f485d48 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisTestResultInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisTestResultInfo.java
@@ -14,16 +14,15 @@
package com.google.devtools.build.lib.analysis.test;
-import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.skylarkbuildapi.test.AnalysisTestResultInfoApi;
/**
- * Encapsulates the result of analyis-phase testing. Build targets which return an instance of
- * this provider signal to the build system that it should generate 'stub' test executable.
+ * Encapsulates the result of analyis-phase testing. Build targets which return an instance of this
+ * provider signal to the build system that it should generate 'stub' test executable.
*/
-public class AnalysisTestResultInfo extends Info implements AnalysisTestResultInfoApi {
+public class AnalysisTestResultInfo implements Info, AnalysisTestResultInfoApi {
/**
* Singleton provider instance for {@link AnalysisTestResultInfo}.
@@ -35,12 +34,16 @@
private final String message;
public AnalysisTestResultInfo(Boolean success, String message) {
- super(SKYLARK_CONSTRUCTOR, Location.BUILTIN);
this.success = success;
this.message = message;
}
@Override
+ public TestResultInfoProvider getProvider() {
+ return SKYLARK_CONSTRUCTOR;
+ }
+
+ @Override
public Boolean getSuccess() {
return success;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesInfo.java
index 95c1fdb..1f3678b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesInfo.java
@@ -17,7 +17,6 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -26,7 +25,7 @@
/** An implementation class for the InstrumentedFilesProvider interface. */
@AutoCodec
-public final class InstrumentedFilesInfo extends Info implements InstrumentedFilesInfoApi {
+public final class InstrumentedFilesInfo implements Info, InstrumentedFilesInfoApi {
/** Singleton provider instance for {@link InstrumentedFilesInfo}. */
public static final InstrumentedFilesProvider SKYLARK_CONSTRUCTOR =
new InstrumentedFilesProvider();
@@ -57,7 +56,6 @@
NestedSet<Artifact> coverageSupportFiles,
NestedSet<Pair<String, String>> coverageEnvironment,
NestedSet<Pair<String, String>> reportedToActualSources) {
- super(SKYLARK_CONSTRUCTOR, Location.BUILTIN);
this.instrumentedFiles = instrumentedFiles;
this.instrumentationMetadataFiles = instrumentationMetadataFiles;
this.baselineCoverageFiles = baselineCoverageFiles;
@@ -67,6 +65,11 @@
this.reportedToActualSources = reportedToActualSources;
}
+ @Override
+ public InstrumentedFilesProvider getProvider() {
+ return SKYLARK_CONSTRUCTOR;
+ }
+
/** The transitive closure of instrumented source files. */
public NestedSet<Artifact> getInstrumentedFiles() {
return instrumentedFiles;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
index 5ec7d4e..1cd0382 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuiltinProvider.java
@@ -23,8 +23,8 @@
/**
* Base class for declared providers {@see Provider} defined in native code.
*
- * <p>Every subclass of {@link BuiltinProvider} corresponds to a single declared
- * provider. This is enforced by final {@link #equals(Object)} and {@link #hashCode()}.
+ * <p>Every subclass of {@link BuiltinProvider} corresponds to a single declared provider. This is
+ * enforced by final {@link #equals(Object)} and {@link #hashCode()}.
*
* <p>Implementations of native declared providers should subclass this class, and define a method
* in the subclass definition to create instances of its corresponding Info object. The method
@@ -32,7 +32,7 @@
* true, and with {@link SkylarkConstructor} for the info type it constructs.
*/
@Immutable
-public abstract class BuiltinProvider<T extends InfoInterface> implements Provider {
+public abstract class BuiltinProvider<T extends Info> implements Provider {
private final NativeKey key;
private final String name;
private final Class<T> valueClass;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Info.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java
index 6a5d8f9..bc5e998 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Info.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java
@@ -13,55 +13,43 @@
// limitations under the License.
package com.google.devtools.build.lib.packages;
-import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.syntax.Printer;
import com.google.devtools.build.lib.syntax.StarlarkValue;
-import java.io.Serializable;
-import javax.annotation.Nullable;
/**
- * Generic implementation of {@link InfoInterface}.
- *
- * <p>Natively-defined Info objects should subclass this to be registered as Info objects that may
- * be passed between targets.
+ * An Info is a unit of information produced by analysis of one configured target and consumed by
+ * other targets that depend directly upon it. The result of analysis is a dictionary of Info
+ * values, each keyed by its Provider. Every Info is an instance of a Provider: if a Provider is
+ * like a Java class, then an Info is like an instance of that class.
*/
-public abstract class Info implements Serializable, InfoInterface, StarlarkValue {
+public interface Info extends StarlarkValue {
- /** The {@link Provider} that describes the type of this instance. */
- protected final Provider provider;
+ /** Returns the provider that instantiated this Info. */
+ Provider getProvider();
/**
- * The Skylark location where this provider instance was created.
- *
- * <p>Built-in provider instances may use {@link Location#BUILTIN}.
+ * Returns the source location where this Info (provider instance) was created, or BUILTIN if it
+ * was instantiated by Java code.
*/
- @VisibleForSerialization
- protected final Location location;
-
- protected Info(Provider provider, @Nullable Location location) {
- this.provider = Preconditions.checkNotNull(provider);
- this.location = location == null ? Location.BUILTIN : location;
+ default Location getCreationLoc() {
+ return Location.BUILTIN;
}
/**
- * Returns the Skylark location where this provider instance was created.
- *
- * <p>Builtin provider instances may return {@link Location#BUILTIN}.
+ * This method (which is redundant with getCreationLoc and should not be overridden or called) is
+ * required to pacify the AutoCodec annotation processor.
*/
- public Location getCreationLoc() {
- return location;
- }
-
- public Provider getProvider() {
- return provider;
+ // TODO(adonovan): find out why and stop it.
+ // Alternatively rename various constructor parameters from 'location' to 'creationLoc'.
+ default Location getLocation() {
+ return getCreationLoc();
}
@Override
- public void repr(Printer printer) {
+ default void repr(Printer printer) {
printer.append("<instance of provider ");
- printer.append(provider.getPrintableName());
+ printer.append(getProvider().getPrintableName());
printer.append(">");
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InfoInterface.java b/src/main/java/com/google/devtools/build/lib/packages/InfoInterface.java
deleted file mode 100644
index b2a24e0..0000000
--- a/src/main/java/com/google/devtools/build/lib/packages/InfoInterface.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.packages;
-
-import com.google.devtools.build.lib.events.Location;
-
-/**
- * An instance (in the Skylark sense, not Java) of a {@link Provider}.
- *
- * <p>Info objects are specially handled in skylark, serving as units of information passed
- * between targets. Each Info object must be associated with a Provider key, defined by the
- * Provider which constructs Info objects of its type.
- */
-public interface InfoInterface {
-
- /**
- * Returns the Skylark location where this instance was created.
- *
- * <p>Builtin provider instances may return {@link Location#BUILTIN}.
- */
- Location getCreationLoc();
-
- /**
- * Returns the provider instance that constructs instances of this info.
- */
- Provider getProvider();
-}
\ No newline at end of file
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
index 9d733c5..a05d9b9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
@@ -26,6 +26,9 @@
/** Base class for native implementations of {@link StructImpl}. */
// todo(vladmos,dslomov): make abstract once DefaultInfo stops instantiating it.
+// TODO(adonovan): split NativeInfo into NativeInfo and NativeInfoWithExtraFields;
+// only a very few subclasses (e.g. ToolchainInfo) make use of NativeInfoWithFields.values,
+// and only they should pay for it.
public class NativeInfo extends StructImpl {
protected final ImmutableSortedMap<String, Object> values;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
index 877e5a5..dc3ed9c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
@@ -45,8 +45,7 @@
*/
@Immutable
@Deprecated
-public abstract class NativeProvider<V extends InfoInterface> extends BaseFunction
- implements Provider {
+public abstract class NativeProvider<V extends Info> extends BaseFunction implements Provider {
private final String name;
private final NativeKey key;
private final String errorMessageFormatForUnknownField;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Provider.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
index 2ef9cca..895240a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
@@ -19,7 +19,7 @@
import com.google.devtools.build.lib.syntax.ClassObject;
/**
- * Declared Provider (a constructor for {@link InfoInterface}).
+ * Declared Provider (a constructor for {@link Info}).
*
* <p>Declared providers can be declared either natively ({@link NativeProvider} or in Skylark
* {@link SkylarkProvider}.
@@ -27,7 +27,7 @@
* <p>{@link Provider} serves both as "type identifier" for declared provider instances and as a
* function that can be called to construct a provider. To the Skylark user, there are "providers"
* and "provider instances"; the former is a Java instance of this class, and the latter is a Java
- * instance of {@link InfoInterface}.
+ * instance of {@link Info}.
*
* <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.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
index 3a865da..8f5b49d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
@@ -38,11 +38,11 @@
import java.util.Map;
import javax.annotation.Nullable;
-/**
- * A generic skylark object with fields, constructable by calling {@code struct()} in skylark.
- */
-public abstract class StructImpl extends Info
- implements ClassObject, StructApi, Serializable {
+/** A generic skylark object with fields, constructable by calling {@code struct()} in skylark. */
+public abstract class StructImpl implements Info, ClassObject, StructApi, Serializable {
+
+ private final Provider provider;
+ private final Location location;
/**
* Constructs an {@link StructImpl}.
@@ -52,7 +52,18 @@
* {@link Location#BUILTIN}.
*/
protected StructImpl(Provider provider, @Nullable Location location) {
- super(provider, location);
+ this.provider = provider;
+ this.location = location != null ? location : Location.BUILTIN;
+ }
+
+ @Override
+ public Provider getProvider() {
+ return provider;
+ }
+
+ @Override
+ public Location getCreationLoc() {
+ return location;
}
/**
@@ -118,7 +129,7 @@
* <p>By default, it is the one specified by the provider.
*/
protected String getErrorMessageFormatForUnknownField() {
- return provider.getErrorMessageFormatForUnknownField();
+ return getProvider().getErrorMessageFormatForUnknownField();
}
@Override
@@ -137,7 +148,7 @@
if (this == other) {
return true;
}
- if (!this.provider.equals(other.provider)) {
+ if (!this.getProvider().equals(other.getProvider())) {
return false;
}
// Compare objects' fields and their values
@@ -157,7 +168,7 @@
List<String> fields = new ArrayList<>(getFieldNames());
Collections.sort(fields);
List<Object> objectsToHash = new ArrayList<>();
- objectsToHash.add(provider);
+ objectsToHash.add(getProvider());
for (String field : fields) {
objectsToHash.add(field);
objectsToHash.add(getValueOrNull(field));
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 59474e9..43996de 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
@@ -25,7 +25,7 @@
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.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -104,7 +104,7 @@
@Nullable
@Override
- public InfoInterface get(Provider.Key providerKey) {
+ public Info get(Provider.Key providerKey) {
return actual.get(providerKey);
}
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 ea95c05..723daf2 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
@@ -41,7 +41,7 @@
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.BuiltinProvider;
-import com.google.devtools.build.lib.packages.InfoInterface;
+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;
@@ -107,7 +107,7 @@
return builder.build();
}
- public static final <T extends InfoInterface> Iterable<T> getTransitivePrerequisites(
+ 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();
@@ -119,7 +119,7 @@
return builder.build();
}
- public static final <T extends InfoInterface> Iterable<T> getTransitivePrerequisites(
+ public static final <T extends Info> Iterable<T> getTransitivePrerequisites(
RuleContext ruleContext, Mode mode, BuiltinProvider<T> key) {
IterablesChain.Builder<T> builder = IterablesChain.builder();
AttributeMap attributes = ruleContext.attributes();
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 cc2d260..5c5e9a4 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
@@ -104,7 +104,7 @@
}
// ConfigFeatureFlagProvider instances should all be unique, so we override the default
- // equals and hashCode from InfoInterface 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/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
index 83b6944..245540bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.java;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.rules.cpp.CcInfo;
@@ -24,19 +23,22 @@
/** A target that provides C++ libraries to be linked into Java targets. */
@Immutable
-public final class JavaCcLinkParamsProvider extends Info
- implements JavaCcLinkParamsProviderApi<CcInfo> {
+public final class JavaCcLinkParamsProvider implements Info, JavaCcLinkParamsProviderApi<CcInfo> {
public static final String PROVIDER_NAME = "JavaCcLinkParamsInfo";
public static final Provider PROVIDER = new Provider();
private final CcInfo ccInfo;
public JavaCcLinkParamsProvider(CcInfo ccInfo) {
- super(PROVIDER, Location.BUILTIN);
this.ccInfo = CcInfo.builder().setCcLinkingContext(ccInfo.getCcLinkingContext()).build();
}
@Override
+ public Provider getProvider() {
+ return PROVIDER;
+ }
+
+ @Override
public CcInfo getCcInfo() {
return ccInfo;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
index 14a961a..b8ba82d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java
@@ -79,10 +79,6 @@
this.messages = ImmutableList.copyOf(messages);
}
- public Location getLocation() {
- return location;
- }
-
public ImmutableList<Artifact> getMessages() {
return messages;
}
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 0f1f568..a8454c2 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
@@ -31,7 +31,6 @@
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.BuiltinProvider;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.NativeProvider.WithLegacySkylarkName;
@@ -88,8 +87,9 @@
* transitive nested sets returned by ObjcProvider queries. It does not materially affect other
* operations of the ObjcProvider.
*/
+// TODO(adonovan): this is an info, not a provider; rename.
@Immutable
-public final class ObjcProvider extends Info implements ObjcProviderApi<Artifact> {
+public final class ObjcProvider implements Info, ObjcProviderApi<Artifact> {
/** Skylark name for the ObjcProvider. */
public static final String SKYLARK_NAME = "objc";
@@ -635,7 +635,6 @@
ImmutableMap<Key<?>, NestedSet<?>> nonPropagatedItems,
ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems,
ImmutableListMultimap<Key<?>, ?> directItems) {
- super(SKYLARK_CONSTRUCTOR, Location.BUILTIN);
this.semantics = semantics;
this.items = Preconditions.checkNotNull(items);
this.nonPropagatedItems = Preconditions.checkNotNull(nonPropagatedItems);
@@ -643,6 +642,11 @@
this.directItems = Preconditions.checkNotNull(directItems);
}
+ @Override
+ public BuiltinProvider<ObjcProvider> getProvider() {
+ return SKYLARK_CONSTRUCTOR;
+ }
+
/**
* All artifacts, bundleable files, etc. of the type specified by {@code key}.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
index d1080f3..eb5ef40 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
@@ -33,7 +33,7 @@
import javax.annotation.Nullable;
/** Instance of the provider type for the Python rules. */
-public class PyInfo extends Info implements PyInfoApi<Artifact> {
+public final class PyInfo implements Info, PyInfoApi<Artifact> {
public static final String STARLARK_NAME = "PyInfo";
@@ -65,6 +65,7 @@
}
}
+ private final Location location;
// Verified on initialization to contain Artifact.
private final Depset transitiveSources;
private final boolean usesSharedLibraries;
@@ -80,7 +81,6 @@
Depset imports,
boolean hasPy2OnlySources,
boolean hasPy3OnlySources) {
- super(PROVIDER, location);
Preconditions.checkArgument(
depsetHasTypeAndCompatibleOrder(transitiveSources, Artifact.TYPE, Order.COMPILE_ORDER));
// TODO(brandjon): PyCommon currently requires COMPILE_ORDER, but we'll probably want to change
@@ -88,6 +88,7 @@
// itself, so we use STABLE here to accept any order.
Preconditions.checkArgument(
depsetHasTypeAndCompatibleOrder(imports, SkylarkType.STRING, Order.STABLE_ORDER));
+ this.location = location != null ? location : Location.BUILTIN;
this.transitiveSources = transitiveSources;
this.usesSharedLibraries = usesSharedLibraries;
this.imports = imports;
@@ -96,6 +97,16 @@
}
@Override
+ public PyInfoProvider getProvider() {
+ return PROVIDER;
+ }
+
+ @Override
+ public Location getCreationLoc() {
+ return location;
+ }
+
+ @Override
public boolean equals(Object other) {
// PyInfo implements value equality, but note that it contains identity-equality fields
// (depsets), so you generally shouldn't rely on equality comparisons.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
index 80b2047..3ed639c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
@@ -42,7 +42,7 @@
* invariants mirror the user-visible API on {@link PyRuntimeInfoApi} except that {@code None} is
* replaced by null.
*/
-public class PyRuntimeInfo extends Info implements PyRuntimeInfoApi<Artifact> {
+public final class PyRuntimeInfo implements Info, PyRuntimeInfoApi<Artifact> {
/** The Starlark-accessible top-level builtin name for this provider type. */
public static final String STARLARK_NAME = "PyRuntimeInfo";
@@ -50,6 +50,7 @@
/** The singular {@code PyRuntimeInfo} provider type object. */
public static final PyRuntimeInfoProvider PROVIDER = new PyRuntimeInfoProvider();
+ private final Location location;
@Nullable private final PathFragment interpreterPath;
@Nullable private final Artifact interpreter;
// Validated on initalization to contain Artifact
@@ -63,16 +64,26 @@
@Nullable Artifact interpreter,
@Nullable Depset files,
PythonVersion pythonVersion) {
- super(PROVIDER, location);
Preconditions.checkArgument((interpreterPath == null) != (interpreter == null));
Preconditions.checkArgument((interpreter == null) == (files == null));
Preconditions.checkArgument(pythonVersion.isTargetValue());
+ this.location = location != null ? location : Location.BUILTIN;
this.files = files;
this.interpreterPath = interpreterPath;
this.interpreter = interpreter;
this.pythonVersion = pythonVersion;
}
+ @Override
+ public PyRuntimeInfoProvider getProvider() {
+ return PROVIDER;
+ }
+
+ @Override
+ public Location getCreationLoc() {
+ return location;
+ }
+
/** Constructs an instance from native rule logic (built-in location) for an in-build runtime. */
public static PyRuntimeInfo createForInBuildRuntime(
Artifact interpreter, NestedSet<Artifact> files, PythonVersion pythonVersion) {
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 d1aea77..b02766e 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
@@ -27,7 +27,7 @@
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.packages.BazelStarlarkContext;
-import com.google.devtools.build.lib.packages.InfoInterface;
+import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.SkylarkDefinedAspect;
import com.google.devtools.build.lib.packages.StructImpl;
@@ -106,7 +106,7 @@
return null;
} else if (!(aspectSkylarkObject instanceof StructImpl)
&& !(aspectSkylarkObject instanceof Iterable)
- && !(aspectSkylarkObject instanceof InfoInterface)) {
+ && !(aspectSkylarkObject instanceof Info)) {
ruleContext.ruleError(
String.format(
"Aspect implementation should return a struct, a list, or a provider "
@@ -137,7 +137,7 @@
addDeclaredProviders(builder, (Iterable) aspectSkylarkObject);
} else {
// Either an old-style struct or a single declared provider (not in a list)
- InfoInterface info = (InfoInterface) aspectSkylarkObject;
+ Info info = (Info) aspectSkylarkObject;
Location loc = info.getCreationLoc();
if (info.getProvider().getKey().equals(StructProvider.STRUCT.getKey())) {
// Old-style struct, that may contain declared providers.
@@ -175,10 +175,10 @@
int i = 0;
for (Object o : aspectSkylarkObject) {
Location loc = skylarkAspect.getImplementation().getLocation();
- InfoInterface declaredProvider =
+ Info declaredProvider =
SkylarkType.cast(
o,
- InfoInterface.class,
+ Info.class,
loc,
"A return value of an aspect implementation function should be "
+ "a sequence of declared providers, instead got a %s at index %d",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SingleToolchainResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SingleToolchainResolutionFunctionTest.java
index f2a5b62..5fd90bd 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SingleToolchainResolutionFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SingleToolchainResolutionFunctionTest.java
@@ -31,7 +31,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.packages.InfoInterface;
+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.rules.platform.ToolchainTestCase;
@@ -248,7 +248,7 @@
@SuppressWarnings("unchecked")
@Override
- public <T extends InfoInterface> T get(NativeProvider<T> provider) {
+ public <T extends Info> T get(NativeProvider<T> provider) {
if (PlatformInfo.PROVIDER.equals(provider)) {
return (T) this.platform;
}
@@ -257,7 +257,7 @@
@Nullable
@Override
- public InfoInterface get(Provider.Key providerKey) {
+ public Info get(Provider.Key providerKey) {
return null;
}