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;