aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java23
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java2
4 files changed, 35 insertions, 5 deletions
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 a4d54c035a..87523c15bb 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
@@ -129,6 +129,8 @@ public final class AspectFunction implements SkyFunction {
transitivePackages);
} catch (DependencyEvaluationException e) {
throw new AspectFunctionException(e.getRootCauseSkyKey(), e.getCause());
+ } catch (AspectCreationException e) {
+ throw new AspectFunctionException(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 8067e60e7c..7fe19c5c78 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
@@ -193,6 +193,9 @@ final class ConfiguredTargetFunction implements SkyFunction {
return ans;
} catch (DependencyEvaluationException e) {
throw new ConfiguredTargetFunctionException(e.getRootCauseSkyKey(), e.getCause());
+ } catch (AspectCreationException e) {
+ throw new ConfiguredTargetFunctionException(
+ new ConfiguredValueCreationException(e.getMessage()));
}
}
@@ -224,7 +227,7 @@ final class ConfiguredTargetFunction implements SkyFunction {
AspectDefinition aspectDefinition, AspectParameters aspectParameters,
Set<ConfigMatchingProvider> configConditions, RuleClassProvider ruleClassProvider,
BuildConfiguration hostConfiguration, NestedSetBuilder<Package> transitivePackages)
- throws DependencyEvaluationException {
+ throws DependencyEvaluationException, AspectCreationException {
// Create the map from attributes to list of (target, configuration) pairs.
ListMultimap<Attribute, Dependency> depValueNames;
@@ -483,7 +486,7 @@ final class ConfiguredTargetFunction implements SkyFunction {
private static ListMultimap<SkyKey, Aspect> resolveAspectDependencies(Environment env,
Map<SkyKey, ConfiguredTarget> configuredTargetMap, Iterable<Dependency> deps,
NestedSetBuilder<Package> transitivePackages)
- throws DependencyEvaluationException {
+ throws AspectCreationException {
ListMultimap<SkyKey, Aspect> result = ArrayListMultimap.create();
Set<SkyKey> aspectKeys = new HashSet<>();
for (Dependency dep : deps) {
@@ -517,12 +520,12 @@ final class ConfiguredTargetFunction implements SkyFunction {
} catch (ConfiguredValueCreationException e) {
// The configured target should have been created in resolveConfiguredTargetDependencies()
throw new IllegalStateException(e);
- } catch (NoSuchThingException | AspectCreationException e) {
+ } catch (NoSuchThingException e) {
AspectFactory<?, ?, ?> depAspectFactory =
AspectFactory.Util.create(depAspect.getAspectFactory());
- throw new DependencyEvaluationException(new ConfiguredValueCreationException(
+ throw new AspectCreationException(
String.format("Evaluation of aspect %s on %s failed: %s",
- depAspectFactory.getDefinition().getName(), dep.getLabel(), e.toString())));
+ depAspectFactory.getDefinition().getName(), dep.getLabel(), e.toString()));
}
if (aspectValue == null) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index 02b4f3e1dc..b051db1a8c 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -126,6 +126,29 @@ public class AspectTest extends AnalysisTestCase {
}
@Test
+ public void transitiveAspectInError() throws Exception {
+ setRules(new TestAspects.BaseRule(), new TestAspects.ErrorAspectRule(),
+ new TestAspects.SimpleRule());
+
+ pkg("a",
+ "error_aspect(name='a', foo=[':b'])",
+ "error_aspect(name='b', bar=[':c'])",
+ "error_aspect(name='c', bar=[':d'])",
+ "error_aspect(name='d')");
+
+ reporter.removeHandler(failFastHandler);
+ // getConfiguredTarget() uses a separate code path that does not hit
+ // SkyframeBuildView#configureTargets
+ try {
+ update("//a:a");
+ fail();
+ } catch (ViewCreationFailedException e) {
+ // expected
+ }
+ assertContainsEvent("Aspect error");
+ }
+
+ @Test
public void sameTargetInDifferentAttributes() throws Exception {
setRules(new TestAspects.BaseRule(), new TestAspects.AspectRequiringRule(),
new TestAspects.SimpleRule());
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
index 5f41e3d4ec..c0ee9111a0 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
@@ -237,6 +237,7 @@ public class TestAspects {
}
private static final AspectDefinition ERROR_ASPECT = new AspectDefinition.Builder("error")
+ .attributeAspect("bar", ErrorAspect.class)
.build();
/**
@@ -367,6 +368,7 @@ public class TestAspects {
return builder
.add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
.aspect(ErrorAspect.class))
+ .add(attr("bar", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE))
.build();
}