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