Remove AspectClass.getDefinition

Aspect becomes a triple (AspectClass, AspectDefinition,
AspectParameters) and loses its equals() method.
After this CL, SkylarkAspectClass.getDefintion still exists and is
deprecated.

--
MOS_MIGRATED_REVID=119159653
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index c390a81499..aa171b2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -61,6 +61,15 @@
 
 /**
  * The Skyframe function that generates aspects.
+ *
+ * {@link AspectFunction} takes a SkyKey containing an {@link AspectKey} [a tuple of
+ * (target label, configurations, aspect class and aspect parameters)],
+ * loads an {@link Aspect} from aspect class and aspect parameters,
+ * gets a {@link ConfiguredTarget} for label and configurations, and then creates
+ * a {@link ConfiguredAspect} for a given {@link AspectKey}.
+ *
+ * See {@link com.google.devtools.build.lib.packages.AspectClass} documentation
+ * for an overview of aspect-related classes
  */
 public final class AspectFunction implements SkyFunction {
   private final BuildViewProvider buildViewProvider;
@@ -116,7 +125,7 @@
       NativeAspectClass<?> nativeAspectClass = (NativeAspectClass<?>) key.getAspectClass();
       aspectFactory =
           (ConfiguredAspectFactory) nativeAspectClass.newInstance();
-      aspect = new Aspect(nativeAspectClass, key.getParameters());
+      aspect = Aspect.forNative(nativeAspectClass, key.getParameters());
     } else if (key.getAspectClass() instanceof SkylarkAspectClass) {
       SkylarkAspectClass skylarkAspectClass = (SkylarkAspectClass) key.getAspectClass();
       SkylarkAspect skylarkAspect;
@@ -132,7 +141,10 @@
       }
 
       aspectFactory = new SkylarkAspectFactory(skylarkAspect.getName(), skylarkAspect);
-      aspect = new Aspect(skylarkAspect.getAspectClass(), key.getParameters());
+      aspect = Aspect.forSkylark(
+          skylarkAspect.getAspectClass(),
+          skylarkAspect.getAspectClass().getDefinition(),
+          key.getParameters());
     } else {
       throw new IllegalStateException();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 08410ee..48b046d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -27,6 +27,7 @@
 import com.google.devtools.build.lib.actions.Actions;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
+import com.google.devtools.build.lib.analysis.AspectDescriptor;
 import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.ConfiguredAspect;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -49,7 +50,9 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.Aspect;
+import com.google.devtools.build.lib.packages.AspectClass;
 import com.google.devtools.build.lib.packages.AspectDefinition;
+import com.google.devtools.build.lib.packages.AspectParameters;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
 import com.google.devtools.build.lib.packages.BuildType;
@@ -598,9 +601,11 @@
     ListMultimap<SkyKey, ConfiguredAspect> result = ArrayListMultimap.create();
     Set<SkyKey> aspectKeys = new HashSet<>();
     for (Dependency dep : deps) {
-      for (Entry<Aspect, BuildConfiguration> depAspect : dep.getAspectConfigurations().entrySet()) {
+      for (Entry<AspectDescriptor, BuildConfiguration> depAspect
+          : dep.getAspectConfigurations().entrySet()) {
         aspectKeys.add(createAspectKey(
-            dep.getLabel(), depAspect.getValue(), dep.getConfiguration(), depAspect.getKey()));
+            dep.getLabel(), depAspect.getValue(), dep.getConfiguration(),
+            depAspect.getKey().getAspectClass(), depAspect.getKey().getParameters()));
       }
     }
 
@@ -615,13 +620,12 @@
         continue;
       }
       ConfiguredTarget depConfiguredTarget = configuredTargetMap.get(depKey);
-      for (Entry<Aspect, BuildConfiguration> depAspect : dep.getAspectConfigurations().entrySet()) {
-        if (!aspectMatchesConfiguredTarget(depConfiguredTarget, depAspect.getKey())) {
-          continue;
-        }
-
+      for (Entry<AspectDescriptor, BuildConfiguration> depAspect
+          : dep.getAspectConfigurations().entrySet()) {
         SkyKey aspectKey = createAspectKey(
-            dep.getLabel(), depAspect.getValue(), dep.getConfiguration(), depAspect.getKey());
+            dep.getLabel(), depAspect.getValue(), dep.getConfiguration(),
+            depAspect.getKey().getAspectClass(),
+            depAspect.getKey().getParameters());
         AspectValue aspectValue = null;
         try {
           // TODO(ulfjack): Catch all thrown AspectCreationException and NoSuchThingException
@@ -631,7 +635,7 @@
           throw new AspectCreationException(
               String.format(
                   "Evaluation of aspect %s on %s failed: %s",
-                  depAspect.getKey().getDefinition().getName(),
+                  depAspect.getKey().getAspectClass().getName(),
                   dep.getLabel(),
                   e.toString()));
         }
@@ -640,6 +644,10 @@
           // Dependent aspect has either not been computed yet or is in error.
           return null;
         }
+        if (!aspectMatchesConfiguredTarget(depConfiguredTarget, aspectValue.getAspect())) {
+          continue;
+        }
+
         result.put(depKey, aspectValue.getConfiguredAspect());
         transitivePackages.addTransitive(aspectValue.getTransitivePackages());
       }
@@ -651,16 +659,17 @@
       Label label,
       BuildConfiguration aspectConfiguration,
       BuildConfiguration baseConfiguration,
-      Aspect depAspect) {
+      AspectClass aspectClass,
+      AspectParameters parameters) {
     return AspectValue.key(label,
         aspectConfiguration,
         baseConfiguration,
-        depAspect.getAspectClass(),
-        depAspect.getParameters());
+        aspectClass,
+        parameters);
   }
 
-  private static boolean aspectMatchesConfiguredTarget(ConfiguredTarget dep, Aspect aspectClass) {
-    AspectDefinition aspectDefinition = aspectClass.getDefinition();
+  private static boolean aspectMatchesConfiguredTarget(ConfiguredTarget dep, Aspect aspect) {
+    AspectDefinition aspectDefinition = aspect.getDefinition();
     for (Class<?> provider : aspectDefinition.getRequiredProviders()) {
       if (dep.getProvider(provider.asSubclass(TransitiveInfoProvider.class)) == null) {
         return false;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index c215411..0232429 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -47,6 +47,7 @@
 import com.google.devtools.build.lib.actions.PackageRootResolutionException;
 import com.google.devtools.build.lib.actions.ResourceManager;
 import com.google.devtools.build.lib.actions.Root;
+import com.google.devtools.build.lib.analysis.AspectDescriptor;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.BuildView.Options;
 import com.google.devtools.build.lib.analysis.ConfiguredAspect;
@@ -75,7 +76,6 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.exec.OutputService;
-import com.google.devtools.build.lib.packages.Aspect;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
@@ -1165,10 +1165,12 @@
     final List<SkyKey> skyKeys = new ArrayList<>();
     for (Dependency key : keys) {
       skyKeys.add(ConfiguredTargetValue.key(key.getLabel(), configs.get(key)));
-      for (Aspect aspect : key.getAspects()) {
+      for (AspectDescriptor aspectDescriptor : key.getAspects()) {
         skyKeys.add(
             ConfiguredTargetFunction.createAspectKey(
-                key.getLabel(), configs.get(key), configs.get(key), aspect));
+                key.getLabel(), configs.get(key), configs.get(key),
+                aspectDescriptor.getAspectClass(),
+                aspectDescriptor.getParameters()));
       }
     }
 
@@ -1187,10 +1189,12 @@
           ((ConfiguredTargetValue) result.get(configuredTargetKey)).getConfiguredTarget();
       List<ConfiguredAspect> configuredAspects = new ArrayList<>();
 
-      for (Aspect aspect : key.getAspects()) {
+      for (AspectDescriptor aspectDescriptor : key.getAspects()) {
         SkyKey aspectKey =
             ConfiguredTargetFunction.createAspectKey(
-                key.getLabel(), configs.get(key), configs.get(key), aspect);
+                key.getLabel(), configs.get(key), configs.get(key),
+                aspectDescriptor.getAspectClass(),
+                aspectDescriptor.getParameters());
         if (result.get(aspectKey) == null) {
           continue DependentNodeLoop;
         }