Optimization: do not trigger the loading of directly dependent packages on query for aspects that do not have implicit attributes.
--
MOS_MIGRATED_REVID=95507900
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
index 7a560e8..6acdc9e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/AspectResolver.java
@@ -17,6 +17,7 @@
import com.google.common.collect.Multimaps;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.AspectDefinition;
+import com.google.devtools.build.lib.packages.AspectFactory;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchThingException;
@@ -128,7 +129,14 @@
new BinaryPredicate<Rule, Attribute>() {
@Override
public boolean apply(@Nullable Rule rule, @Nullable Attribute attribute) {
- return !attribute.getAspects().isEmpty();
+ for (Class<? extends AspectFactory<?, ?, ?>> aspectFactory : attribute.getAspects()) {
+ if (!AspectFactory.Util.create(aspectFactory).getDefinition()
+ .getAttributes().isEmpty()) {
+ return true;
+ }
+ }
+
+ return false;
}
});