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;
             }
           });