aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar shreyax <shreyax@google.com>2018-02-26 18:22:13 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-26 18:23:57 -0800
commit6b9b6076c1b224d8e4f64fc065a9b84e4ba5817b (patch)
tree2b65ccd0a13e009e5fe76917a9b2b36a31f39130 /src/main/java/com/google/devtools
parent8aad4db092624284b686036a042856b883f8e414 (diff)
Optimize GC churn of Attribute#getAspects by lazily allocating a builder.
PiperOrigin-RevId: 187113491
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Attribute.java7
1 files changed, 5 insertions, 2 deletions
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 75ff0f3332..4821e3b85b 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
@@ -2110,14 +2110,17 @@ public final class Attribute implements Comparable<Attribute> {
* Returns the list of aspects required for dependencies through this attribute.
*/
public ImmutableList<Aspect> getAspects(Rule rule) {
- ImmutableList.Builder<Aspect> builder = ImmutableList.builder();
+ ImmutableList.Builder<Aspect> builder = null;
for (RuleAspect aspect : aspects) {
Aspect a = aspect.getAspect(rule);
if (a != null) {
+ if (builder == null) {
+ builder = ImmutableList.builder();
+ }
builder.add(a);
}
}
- return builder.build();
+ return builder == null ? ImmutableList.of() : builder.build();
}
public ImmutableList<AspectClass> getAspectClasses() {