diff options
author | 2018-03-23 12:10:25 -0700 | |
---|---|---|
committer | 2018-03-23 12:12:08 -0700 | |
commit | 10798099687faad9edd9a3b9e4e46b03cedfaad7 (patch) | |
tree | 19259903a6b6975d2e7010fa890850293652dce9 /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | |
parent | 55ad6b205e77c0391af72e9ca57d74f15fe47936 (diff) |
Adds hook to AspectFunction to allow for inlining SkylarkImportLookupFunction.
If inlining is off, fixes a bug where null return values resulted in an error.
PiperOrigin-RevId: 190255818
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | 42 |
1 files changed, 34 insertions, 8 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 37ca17c17f..bbce1d67e5 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 @@ -99,6 +99,7 @@ public final class AspectFunction implements SkyFunction { private final RuleClassProvider ruleClassProvider; private final Supplier<Boolean> removeActionsAfterEvaluation; private final BuildOptions defaultBuildOptions; + @Nullable SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining; /** * Indicates whether the set of packages transitively loaded for a given {@link AspectValue} will * be needed for package root resolution later in the build. If not, they are not collected and @@ -110,11 +111,13 @@ public final class AspectFunction implements SkyFunction { BuildViewProvider buildViewProvider, RuleClassProvider ruleClassProvider, Supplier<Boolean> removeActionsAfterEvaluation, + @Nullable SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining, boolean storeTransitivePackagesForPackageRootResolution, BuildOptions defaultBuildOptions) { this.buildViewProvider = buildViewProvider; this.ruleClassProvider = ruleClassProvider; this.removeActionsAfterEvaluation = Preconditions.checkNotNull(removeActionsAfterEvaluation); + this.skylarkImportLookupFunctionForInlining = skylarkImportLookupFunctionForInlining; this.storeTransitivePackagesForPackageRootResolution = storeTransitivePackagesForPackageRootResolution; this.defaultBuildOptions = defaultBuildOptions; @@ -128,12 +131,19 @@ public final class AspectFunction implements SkyFunction { */ @Nullable static SkylarkDefinedAspect loadSkylarkDefinedAspect( - Environment env, SkylarkAspectClass skylarkAspectClass) + Environment env, + SkylarkAspectClass skylarkAspectClass, + @Nullable SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining) throws AspectCreationException, InterruptedException { Label extensionLabel = skylarkAspectClass.getExtensionLabel(); String skylarkValueName = skylarkAspectClass.getExportedName(); - SkylarkAspect skylarkAspect = loadSkylarkAspect(env, extensionLabel, skylarkValueName); + SkylarkAspect skylarkAspect = + loadSkylarkAspect( + env, extensionLabel, skylarkValueName, skylarkImportLookupFunctionForInlining); + if (skylarkAspect == null) { + return null; + } if (!(skylarkAspect instanceof SkylarkDefinedAspect)) { throw new AspectCreationException( String.format( @@ -151,14 +161,26 @@ public final class AspectFunction implements SkyFunction { */ @Nullable static SkylarkAspect loadSkylarkAspect( - Environment env, Label extensionLabel, String skylarkValueName) + Environment env, + Label extensionLabel, + String skylarkValueName, + @Nullable SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining) throws AspectCreationException, InterruptedException { SkyKey importFileKey = SkylarkImportLookupValue.key(extensionLabel, false); try { - SkylarkImportLookupValue skylarkImportLookupValue = - (SkylarkImportLookupValue) env.getValueOrThrow( - importFileKey, SkylarkImportFailedException.class); + SkylarkImportLookupValue skylarkImportLookupValue; + if (skylarkImportLookupFunctionForInlining == null) { + // not inlining + skylarkImportLookupValue = + (SkylarkImportLookupValue) + env.getValueOrThrow(importFileKey, SkylarkImportFailedException.class); + } else { + skylarkImportLookupValue = + skylarkImportLookupFunctionForInlining.computeWithInlineCalls(importFileKey, env, 1); + } if (skylarkImportLookupValue == null) { + Preconditions.checkState( + env.valuesMissing(), "no skylark import value for %s", importFileKey); return null; } @@ -175,7 +197,9 @@ public final class AspectFunction implements SkyFunction { "%s from %s is not an aspect", skylarkValueName, extensionLabel.toString())); } return (SkylarkAspect) skylarkValue; - } catch (SkylarkImportFailedException | ConversionException e) { + } catch (SkylarkImportFailedException + | ConversionException + | InconsistentFilesystemException e) { env.getListener().handle(Event.error(e.getMessage())); throw new AspectCreationException(e.getMessage()); } @@ -198,7 +222,9 @@ public final class AspectFunction implements SkyFunction { SkylarkAspectClass skylarkAspectClass = (SkylarkAspectClass) key.getAspectClass(); SkylarkDefinedAspect skylarkAspect; try { - skylarkAspect = loadSkylarkDefinedAspect(env, skylarkAspectClass); + skylarkAspect = + loadSkylarkDefinedAspect( + env, skylarkAspectClass, skylarkImportLookupFunctionForInlining); } catch (AspectCreationException e) { throw new AspectFunctionException(e); } |