aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-03-23 12:10:25 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-23 12:12:08 -0700
commit10798099687faad9edd9a3b9e4e46b03cedfaad7 (patch)
tree19259903a6b6975d2e7010fa890850293652dce9 /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
parent55ad6b205e77c0391af72e9ca57d74f15fe47936 (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.java42
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);
}