diff options
author | tomlu <tomlu@google.com> | 2018-08-03 11:21:29 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-03 11:23:10 -0700 |
commit | 880508ccf8bab7aa9d238210f8b2ee21d52600f9 (patch) | |
tree | 7a437bafc3dad084e2a92f4c128fdaa113ccc99f /src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java | |
parent | 172d36dfe19f4ddab275ef7116525aa67c3e9877 (diff) |
Add support to completion function to create a path resolver from its looked-up artifact values.
RELNOTES: None
PiperOrigin-RevId: 207295716
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 4a9c7bfc0b..36ad359ba8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.ActionCacheChecker; import com.google.devtools.build.lib.actions.ActionExecutionStatusReporter; import com.google.devtools.build.lib.actions.ActionGraph; +import com.google.devtools.build.lib.actions.ActionInputMap; import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionLogBufferPathGenerator; @@ -46,6 +47,7 @@ import com.google.devtools.build.lib.actions.ActionLookupValue; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.ArtifactOwner; +import com.google.devtools.build.lib.actions.ArtifactPathResolver; import com.google.devtools.build.lib.actions.ArtifactResolver.ArtifactResolverSupplier; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.CommandLineExpansionException; @@ -116,6 +118,7 @@ import com.google.devtools.build.lib.profiler.Profiler; import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.rules.repository.ResolvedHashesFunction; import com.google.devtools.build.lib.skyframe.AspectValue.AspectValueKey; +import com.google.devtools.build.lib.skyframe.CompletionFunction.PathResolverFactory; import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.FileDirtinessChecker; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile; @@ -183,9 +186,9 @@ import javax.annotation.Nullable; /** * A helper object to support Skyframe-driven execution. * - * <p>This object is mostly used to inject external state, such as the executor engine or - * some additional artifacts (workspace status and build info artifacts) into SkyFunctions - * for use during the build. + * <p>This object is mostly used to inject external state, such as the executor engine or some + * additional artifacts (workspace status and build info artifacts) into SkyFunctions for use during + * the build. */ public abstract class SkyframeExecutor implements WalkableGraphFactory { private final EvaluatorSupplier evaluatorSupplier; @@ -304,6 +307,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { private static final Logger logger = Logger.getLogger(SkyframeExecutor.class.getName()); + private final PathResolverFactory pathResolverFactory = new PathResolverFactoryImpl(); + /** An {@link ArtifactResolverSupplier} that supports setting of an {@link ArtifactFactory}. */ public static class MutableArtifactFactorySupplier implements ArtifactResolverSupplier { @@ -319,6 +324,20 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } } + class PathResolverFactoryImpl implements PathResolverFactory { + @Override + public boolean shouldCreatePathResolverForArtifactValues() { + return outputService != null && outputService.supportsPathResolverForArtifactValues(); + } + + @Override + public ArtifactPathResolver createPathResolverForArtifactValues(ActionInputMap actionInputMap) { + Preconditions.checkState(shouldCreatePathResolverForArtifactValues()); + return outputService.createPathResolverForArtifactValues( + directories.getExecRoot().asFragment(), fileSystem, getPathEntries(), actionInputMap); + } + } + protected SkyframeExecutor( EvaluatorSupplier evaluatorSupplier, PackageFactory pkgFactory, @@ -491,8 +510,12 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { SkyFunctions.WORKSPACE_FILE, new WorkspaceFileFunction(ruleClassProvider, pkgFactory, directories)); map.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction()); - map.put(SkyFunctions.TARGET_COMPLETION, CompletionFunction.targetCompletionFunction()); - map.put(SkyFunctions.ASPECT_COMPLETION, CompletionFunction.aspectCompletionFunction()); + map.put( + SkyFunctions.TARGET_COMPLETION, + CompletionFunction.targetCompletionFunction(pathResolverFactory)); + map.put( + SkyFunctions.ASPECT_COMPLETION, + CompletionFunction.aspectCompletionFunction(pathResolverFactory)); map.put(SkyFunctions.TEST_COMPLETION, new TestCompletionFunction()); map.put(Artifact.ARTIFACT, new ArtifactFunction()); map.put( |