Do not put OutputGroupProvider into SkylarkProviders.
Almost every target has an OutputGroupProvider. Putting an
("output_groups", value) pair into SkylarkProviders creates an
unneccessary map. This CL removes it.
RELNOTES: None.
PiperOrigin-RevId: 154940624
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 18c00f9..116df61 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
@@ -33,6 +33,7 @@
import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.Arrays;
@@ -92,6 +93,33 @@
return providers.getProvider(providerClass);
}
+ public Object getProvider(SkylarkProviderIdentifier id) {
+ if (id.isLegacy()) {
+ return get(id.getLegacyId());
+ } else {
+ return get(id.getKey());
+ }
+ }
+
+ public SkylarkClassObject get(ClassObjectConstructor.Key key) {
+ if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
+ return getProvider(OutputGroupProvider.class);
+ }
+ SkylarkProviders skylarkProviders = getProvider(SkylarkProviders.class);
+ return skylarkProviders != null ? skylarkProviders.getDeclaredProvider(key) : null;
+ }
+
+ public Object get(String legacyKey) {
+ if (OutputGroupProvider.SKYLARK_NAME.equals(legacyKey)) {
+ return getProvider(OutputGroupProvider.class);
+ }
+ SkylarkProviders skylarkProviders = getProvider(SkylarkProviders.class);
+ return skylarkProviders != null
+ ? skylarkProviders.get(SkylarkProviderIdentifier.forLegacy(legacyKey))
+ : null;
+ }
+
+
@Override
public UnmodifiableIterator<TransitiveInfoProvider> iterator() {
return providers.values().iterator();
@@ -210,14 +238,23 @@
throw new EvalException(
constructor.getLocation(), "All providers must be top level values");
}
- skylarkDeclaredProvidersBuilder.put(constructor.getKey(), declaredProvider);
+ ClassObjectConstructor.Key key = constructor.getKey();
+ addDeclaredProvider(key, declaredProvider);
return this;
}
+ private void addDeclaredProvider(Key key, SkylarkClassObject declaredProvider) {
+ if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
+ addProvider(OutputGroupProvider.class, (OutputGroupProvider) declaredProvider);
+ } else {
+ skylarkDeclaredProvidersBuilder.put(key, declaredProvider);
+ }
+ }
+
public Builder addNativeDeclaredProvider(SkylarkClassObject declaredProvider) {
ClassObjectConstructor constructor = declaredProvider.getConstructor();
Preconditions.checkState(constructor.isExported());
- skylarkDeclaredProvidersBuilder.put(constructor.getKey(), declaredProvider);
+ addDeclaredProvider(constructor.getKey(), declaredProvider);
return this;
}
@@ -234,8 +271,7 @@
throw new IllegalStateException(
"OutputGroupProvider was provided explicitly; do not use addOutputGroup");
}
- skylarkDeclaredProvidersBuilder.put(
- OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
+ addDeclaredProvider(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
new OutputGroupProvider(outputGroups.build()));
}