aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-08-03 11:21:29 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-03 11:23:10 -0700
commit880508ccf8bab7aa9d238210f8b2ee21d52600f9 (patch)
tree7a437bafc3dad084e2a92f4c128fdaa113ccc99f /src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
parent172d36dfe19f4ddab275ef7116525aa67c3e9877 (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.java33
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(