aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-05-03 12:06:58 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-05-03 17:26:03 +0200
commit202c5b39007d32cb2da5086aface684b7d769ad8 (patch)
tree857ad432ffcfdaf94d3b0686d5b0b6086f1fa4a1 /src
parentfd6c97061906a38a1b4b3500d0cf3829e4d45725 (diff)
Remove memory regression introduced with OutputGroupInfo provider.
Almost every target has an OutputGroupProvider. Do not create another Key->Provider map just for it. RELNOTES: None. PiperOrigin-RevId: 154937690
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java5
5 files changed, 15 insertions, 5 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 acaa4a8db6..cb7daee618 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
@@ -186,6 +186,9 @@ public abstract class AbstractConfiguredTarget
if (providerKey.equals(DefaultProvider.SKYLARK_CONSTRUCTOR.getKey())) {
return getDefaultProvider();
}
+ if (providerKey.equals(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey())) {
+ return OutputGroupProvider.get(this);
+ }
SkylarkProviders skylarkProviders = getProvider(SkylarkProviders.class);
if (skylarkProviders != null) {
return skylarkProviders.getDeclaredProvider(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 2c0fcfb178..bff4b1cd2c 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
@@ -112,6 +112,9 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget {
getAllProviders(base, aspects, ExtraActionArtifactsProvider.class));
TransitiveInfoProviderMap.Builder aspectProviders = TransitiveInfoProviderMap.builder();
+ if (mergedOutputGroupProvider != null) {
+ aspectProviders.add(mergedOutputGroupProvider);
+ }
if (mergedSkylarkProviders != null) {
aspectProviders.add(mergedSkylarkProviders);
}
@@ -123,7 +126,8 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget {
for (Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> entry :
aspect.getProviders().entrySet()) {
Class<? extends TransitiveInfoProvider> providerClass = entry.getKey();
- if (SkylarkProviders.class.equals(providerClass)
+ if (OutputGroupProvider.class.equals(providerClass)
+ || SkylarkProviders.class.equals(providerClass)
|| ExtraActionArtifactsProvider.class.equals(providerClass)) {
continue;
}
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 397d7fdd1b..0606a1fda4 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
@@ -58,7 +58,7 @@ import javax.annotation.Nullable;
*/
@Immutable
public final class OutputGroupProvider extends SkylarkClassObject
- implements SkylarkIndexable, Iterable<String> {
+ implements TransitiveInfoProvider, SkylarkIndexable, Iterable<String> {
public static final String SKYLARK_NAME = "output_groups";
public static NativeClassObjectConstructor SKYLARK_CONSTRUCTOR = new Constructor();
@@ -127,7 +127,7 @@ public final class OutputGroupProvider extends SkylarkClassObject
@Nullable
public static OutputGroupProvider get(TransitiveInfoCollection collection) {
- return (OutputGroupProvider) collection.get(SKYLARK_CONSTRUCTOR.getKey());
+ return (OutputGroupProvider) collection.getProvider(OutputGroupProvider.class);
}
@Nullable
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 bdf8e10543..16baad7e4c 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
@@ -131,7 +131,7 @@ public final class RuleConfiguredTargetBuilder {
}
OutputGroupProvider outputGroupProvider = new OutputGroupProvider(outputGroups.build());
- addNativeDeclaredProvider(outputGroupProvider);
+ addProvider(OutputGroupProvider.class, outputGroupProvider);
addSkylarkTransitiveInfo(OutputGroupProvider.SKYLARK_NAME, outputGroupProvider);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
index 0778ade163..99a4534ae9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
@@ -164,7 +164,10 @@ public final class SkylarkProviders implements TransitiveInfoProvider {
throw new DuplicateException("Provider " + key + " provided twice");
}
- resultBuilder.put(key, map.get(key));
+ V v = map.get(key);
+ if (v != null) {
+ resultBuilder.put(key, v);
+ }
}
}
return resultBuilder.build();