Introduce an AspectClass: a representation of a class of aspects.

For native aspects, AspectClass is a facade for Class<AspectFactory<...>>.

--
MOS_MIGRATED_REVID=105986390
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
index 47bfc54..15407b4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
@@ -16,9 +16,11 @@
 import com.google.common.testing.EqualsTester;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
-import com.google.devtools.build.lib.analysis.util.TestAspects;
+import com.google.devtools.build.lib.analysis.util.TestAspects.AttributeAspect;
+import com.google.devtools.build.lib.analysis.util.TestAspects.ExtraAttributeAspect;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.AspectParameters;
+import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.skyframe.AspectValue;
 
 import org.junit.After;
@@ -58,8 +60,8 @@
     AspectParameters i2 = new AspectParameters.Builder()
         .addAttribute("foo", "baz")
         .build();
-    Class<? extends ConfiguredAspectFactory> a1 = TestAspects.AttributeAspect.class;
-    Class<? extends ConfiguredAspectFactory> a2 = TestAspects.ExtraAttributeAspect.class;
+    NativeAspectClass a1 = new NativeAspectClass(AttributeAspect.class);
+    NativeAspectClass a2 = new NativeAspectClass(ExtraAttributeAspect.class);
 
     new EqualsTester()
         .addEqualityGroup(AspectValue.key(l1, c1, a1, AspectParameters.EMPTY),
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
index dca9b87..67889a8 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
@@ -30,6 +30,7 @@
 import com.google.devtools.build.lib.packages.AspectFactory;
 import com.google.devtools.build.lib.packages.AspectParameters;
 import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -109,9 +110,10 @@
 
   private ListMultimap<Attribute, Dependency> dependentNodeMap(
       String targetName, Class<? extends ConfiguredAspectFactory> aspect) throws Exception {
-    AspectDefinition aspectDefinition = aspect == null
-        ? null
-        : AspectFactory.Util.create(aspect).getDefinition();
+    AspectDefinition aspectDefinition =
+        aspect == null
+            ? null
+            : AspectFactory.Util.create(new NativeAspectClass(aspect)).getDefinition();
     Target target = packageManager.getTarget(reporter, Label.parseAbsolute(targetName));
     return dependencyResolver.dependentNodeMap(
         new TargetAndConfiguration(target, getTargetConfiguration()),
@@ -155,7 +157,11 @@
         "aspect(name='a', foo=[':b'])",
         "aspect(name='b', foo=[])");
     ListMultimap<Attribute, Dependency> map = dependentNodeMap("//a:a", null);
-    assertDep(map, "foo", "//a:b", new AspectWithParameters(TestAspects.SimpleAspect.class));
+    assertDep(
+        map,
+        "foo",
+        "//a:b",
+        new AspectWithParameters(new NativeAspectClass(TestAspects.SimpleAspect.class)));
   }
 
   @Test
@@ -166,7 +172,11 @@
         "simple(name='b', foo=[])");
     ListMultimap<Attribute, Dependency> map =
         dependentNodeMap("//a:a", TestAspects.AttributeAspect.class);
-    assertDep(map, "foo", "//a:b", new AspectWithParameters(TestAspects.AttributeAspect.class));
+    assertDep(
+        map,
+        "foo",
+        "//a:b",
+        new AspectWithParameters(new NativeAspectClass(TestAspects.AttributeAspect.class)));
   }
 
   @Test
@@ -201,15 +211,18 @@
     BuildConfiguration host = getHostConfiguration();
     BuildConfiguration target = getTargetConfiguration();
 
-    ImmutableSet<AspectWithParameters> twoAspects = ImmutableSet.of(
-        new AspectWithParameters(TestAspects.SimpleAspect.class), 
-        new AspectWithParameters(TestAspects.AttributeAspect.class));
-    ImmutableSet<AspectWithParameters> inverseAspects = ImmutableSet.of(
-        new AspectWithParameters(TestAspects.AttributeAspect.class), 
-        new AspectWithParameters(TestAspects.SimpleAspect.class));
-    ImmutableSet<AspectWithParameters> differentAspects = ImmutableSet.of(
-        new AspectWithParameters(TestAspects.AttributeAspect.class), 
-        new AspectWithParameters(TestAspects.ErrorAspect.class));
+    ImmutableSet<AspectWithParameters> twoAspects =
+        ImmutableSet.of(
+            new AspectWithParameters(new NativeAspectClass(TestAspects.SimpleAspect.class)),
+            new AspectWithParameters(new NativeAspectClass(TestAspects.AttributeAspect.class)));
+    ImmutableSet<AspectWithParameters> inverseAspects =
+        ImmutableSet.of(
+            new AspectWithParameters(new NativeAspectClass(TestAspects.AttributeAspect.class)),
+            new AspectWithParameters(new NativeAspectClass(TestAspects.SimpleAspect.class)));
+    ImmutableSet<AspectWithParameters> differentAspects =
+        ImmutableSet.of(
+            new AspectWithParameters(new NativeAspectClass(TestAspects.AttributeAspect.class)),
+            new AspectWithParameters(new NativeAspectClass(TestAspects.ErrorAspect.class)));
 
     new EqualsTester()
         .addEqualityGroup(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 1ff708e..df14698 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -90,6 +90,7 @@
 import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
+import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.OutputFile;
@@ -870,11 +871,16 @@
    */
   protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner,
       Class<? extends ConfiguredAspectFactory> creatingAspectFactory) {
-    return getPackageRelativeDerivedArtifact(packageRelativePath,
+    return getPackageRelativeDerivedArtifact(
+        packageRelativePath,
         owner.getConfiguration().getBinDirectory(),
-        (AspectValue.AspectKey) AspectValue.key(
-            owner.getLabel(), owner.getConfiguration(), creatingAspectFactory,
-            AspectParameters.EMPTY).argument());
+        (AspectValue.AspectKey)
+            AspectValue.key(
+                    owner.getLabel(),
+                    owner.getConfiguration(),
+                    new NativeAspectClass(creatingAspectFactory),
+                    AspectParameters.EMPTY)
+                .argument());
   }
 
   /**
@@ -930,11 +936,16 @@
    */
   protected Artifact getGenfilesArtifact(String packageRelativePath, ConfiguredTarget owner,
       Class<? extends ConfiguredAspectFactory> creatingAspectFactory) {
-    return getPackageRelativeDerivedArtifact(packageRelativePath,
+    return getPackageRelativeDerivedArtifact(
+        packageRelativePath,
         owner.getConfiguration().getGenfilesDirectory(),
-        (AspectValue.AspectKey) AspectValue.key(
-            owner.getLabel(), owner.getConfiguration(), creatingAspectFactory,
-            AspectParameters.EMPTY).argument());
+        (AspectValue.AspectKey)
+            AspectValue.key(
+                    owner.getLabel(),
+                    owner.getConfiguration(),
+                    new NativeAspectClass(creatingAspectFactory),
+                    AspectParameters.EMPTY)
+                .argument());
   }
 
   /**