Extract AspectCreationException to its own class.
This prevents AspectResolver from needing a dependency on all of AspectFunction.
PiperOrigin-RevId: 306670654
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
index ebb8058..69919c8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
@@ -23,7 +23,7 @@
import com.google.devtools.build.lib.packages.NoSuchThingException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.AspectFunction;
+import com.google.devtools.build.lib.skyframe.AspectCreationException;
import com.google.devtools.build.lib.skyframe.AspectValue;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
@@ -53,16 +53,16 @@
Map<SkyKey, ConfiguredTargetAndData> configuredTargetMap,
Iterable<Dependency> deps,
@Nullable NestedSetBuilder<Package> transitivePackages)
- throws AspectFunction.AspectCreationException, InterruptedException {
+ throws AspectCreationException, InterruptedException {
OrderedSetMultimap<Dependency, ConfiguredAspect> result = OrderedSetMultimap.create();
Set<SkyKey> allAspectKeys = new HashSet<>();
for (Dependency dep : deps) {
allAspectKeys.addAll(getAspectKeys(dep).values());
}
- Map<SkyKey, ValueOrException2<AspectFunction.AspectCreationException, NoSuchThingException>>
- depAspects = env.getValuesOrThrow(allAspectKeys,
- AspectFunction.AspectCreationException.class, NoSuchThingException.class);
+ Map<SkyKey, ValueOrException2<AspectCreationException, NoSuchThingException>> depAspects =
+ env.getValuesOrThrow(
+ allAspectKeys, AspectCreationException.class, NoSuchThingException.class);
for (Dependency dep : deps) {
Map<AspectDescriptor, SkyKey> aspectToKeys = getAspectKeys(dep);
@@ -76,12 +76,10 @@
// instances and merge them into a single Exception to get full root cause data.
aspectValue = (AspectValue) depAspects.get(aspectKey).get();
} catch (NoSuchThingException e) {
- throw new AspectFunction.AspectCreationException(
+ throw new AspectCreationException(
String.format(
"Evaluation of aspect %s on %s failed: %s",
- depAspect.getAspect().getAspectClass().getName(),
- dep.getLabel(),
- e.toString()),
+ depAspect.getAspect().getAspectClass().getName(), dep.getLabel(), e),
new LabelCause(dep.getLabel(), e.getMessage()));
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectCreationException.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectCreationException.java
new file mode 100644
index 0000000..c792d4f
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectCreationException.java
@@ -0,0 +1,58 @@
+// Copyright 2020 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.skyframe;
+
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
+import com.google.devtools.build.lib.causes.AnalysisFailedCause;
+import com.google.devtools.build.lib.causes.Cause;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import javax.annotation.Nullable;
+
+/** An exception indicating that there was a problem creating an aspect. */
+public final class AspectCreationException extends Exception implements SaneAnalysisException {
+ private static ConfigurationId toId(BuildConfiguration config) {
+ return config == null ? null : config.getEventId().getConfiguration();
+ }
+
+ private final NestedSet<Cause> causes;
+
+ public AspectCreationException(String message, NestedSet<Cause> causes) {
+ super(message);
+ this.causes = causes;
+ }
+
+ public AspectCreationException(
+ String message, Label currentTarget, @Nullable BuildConfiguration configuration) {
+ this(
+ message,
+ NestedSetBuilder.<Cause>stableOrder()
+ .add(new AnalysisFailedCause(currentTarget, toId(configuration), message))
+ .build());
+ }
+
+ public AspectCreationException(String message, Label currentTarget) {
+ this(message, currentTarget, null);
+ }
+
+ public AspectCreationException(String message, Cause cause) {
+ this(message, NestedSetBuilder.<Cause>stableOrder().add(cause).build());
+ }
+
+ public NestedSet<Cause> getCauses() {
+ return causes;
+ }
+}
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 e4c01b2..35db830 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
@@ -39,8 +39,6 @@
import com.google.devtools.build.lib.analysis.config.DependencyEvaluationException;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget;
-import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
-import com.google.devtools.build.lib.causes.AnalysisFailedCause;
import com.google.devtools.build.lib.causes.Cause;
import com.google.devtools.build.lib.causes.LabelCause;
import com.google.devtools.build.lib.cmdline.Label;
@@ -687,42 +685,6 @@
return Label.print(aspectKey.getLabel());
}
- /** An exception indicating that there was a problem creating an aspect. */
- public static final class AspectCreationException extends Exception
- implements SaneAnalysisException {
- private static ConfigurationId toId(BuildConfiguration config) {
- return config == null ? null : config.getEventId().getConfiguration();
- }
-
- private final NestedSet<Cause> causes;
-
- public AspectCreationException(String message, NestedSet<Cause> causes) {
- super(message);
- this.causes = causes;
- }
-
- public AspectCreationException(
- String message, Label currentTarget, @Nullable BuildConfiguration configuration) {
- this(
- message,
- NestedSetBuilder.<Cause>stableOrder()
- .add(new AnalysisFailedCause(currentTarget, toId(configuration), message))
- .build());
- }
-
- public AspectCreationException(String message, Label currentTarget) {
- this(message, currentTarget, null);
- }
-
- public AspectCreationException(String message, Cause cause) {
- this(message, NestedSetBuilder.<Cause>stableOrder().add(cause).build());
- }
-
- public NestedSet<Cause> getCauses() {
- return causes;
- }
- }
-
/** Used to indicate errors during the computation of an {@link AspectValue}. */
public static final class AspectFunctionException extends SkyFunctionException {
public AspectFunctionException(NoSuchThingException e) {
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 8466bdc..38565c2 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
@@ -71,7 +71,6 @@
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
-import com.google.devtools.build.lib.skyframe.AspectFunction.AspectCreationException;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor.BuildViewProvider;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
index 90636b6..b8a994d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
@@ -17,7 +17,6 @@
import com.google.devtools.build.lib.causes.LabelCause;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.SkylarkAspect;
-import com.google.devtools.build.lib.skyframe.AspectFunction.AspectCreationException;
import com.google.devtools.build.lib.skyframe.AspectValue.SkylarkAspectLoadingKey;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;