diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | 26 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java | 2 |
2 files changed, 12 insertions, 16 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 dca5c79101..8d14af31f1 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 @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException; @@ -111,9 +112,11 @@ public final class AspectFunction implements SkyFunction { loadSkylarkAspect( env, skylarkAspectClass.getExtensionLabel(), skylarkAspectClass.getExportedName()); } catch (SkylarkImportFailedException e) { - throw new AspectFunctionException(skyKey, e); + env.getListener().handle(Event.error(e.getMessage())); + throw new AspectFunctionException(new AspectCreationException(e.getMessage())); } catch (ConversionException e) { - throw new AspectFunctionException(skyKey, e); + env.getListener().handle(Event.error(e.getMessage())); + throw new AspectFunctionException(new AspectCreationException(e.getMessage())); } if (skylarkAspect == null) { return null; @@ -124,23 +127,22 @@ public final class AspectFunction implements SkyFunction { throw new IllegalStateException(); } + // Keep this in sync with the same code in ConfiguredTargetFunction. PackageValue packageValue = (PackageValue) env.getValue(PackageValue.key(key.getLabel().getPackageIdentifier())); if (packageValue == null) { return null; } - Package pkg = packageValue.getPackage(); if (pkg.containsErrors()) { throw new AspectFunctionException( - skyKey, new BuildFileContainsErrorsException(key.getLabel().getPackageIdentifier())); + new BuildFileContainsErrorsException(key.getLabel().getPackageIdentifier())); } - Target target; try { target = pkg.getTarget(key.getLabel().getName()); } catch (NoSuchTargetException e) { - throw new AspectFunctionException(skyKey, e); + throw new AspectFunctionException(e); } if (!(target instanceof Rule)) { @@ -302,18 +304,12 @@ public final class AspectFunction implements SkyFunction { * Used to indicate errors during the computation of an {@link AspectValue}. */ private static final class AspectFunctionException extends SkyFunctionException { - public AspectFunctionException(AspectCreationException e) { + public AspectFunctionException(NoSuchThingException e) { super(e, Transience.PERSISTENT); } - /** Used to rethrow a child error that we cannot handle. */ - public AspectFunctionException(SkyKey childKey, Exception transitiveError) { - super(transitiveError, childKey); - } - - /** Used to rethrow a child error that we cannot handle. */ - public AspectFunctionException(SkyKey childKey, NoSuchThingException e) { - super(e, childKey); + public AspectFunctionException(AspectCreationException e) { + super(e, Transience.PERSISTENT); } } } 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 1d6329a6a1..8b55b1c59a 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 @@ -135,7 +135,6 @@ final class ConfiguredTargetFunction implements SkyFunction { if (packageValue == null) { return null; } - Package pkg = packageValue.getPackage(); if (pkg.containsErrors()) { throw new ConfiguredTargetFunctionException( @@ -147,6 +146,7 @@ final class ConfiguredTargetFunction implements SkyFunction { } catch (NoSuchTargetException e) { throw new ConfiguredTargetFunctionException(e); } + transitivePackages.add(packageValue.getPackage()); // TODO(bazel-team): This is problematic - we create the right key, but then end up with a value // that doesn't match; we can even have the same value multiple times. However, I think it's |