Optimize GC churn of Attribute#getAspects by lazily allocating a builder.
PiperOrigin-RevId: 187113491
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 75ff0f3..4821e3b 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 @@
* 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() {