aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-07-19 09:50:07 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-19 10:22:53 +0200
commitc8521d0e516f55dbc16c504f1406eded18578353 (patch)
tree30094a0a0f0827eed3260f8d743797fad87951d9 /src/main
parent48e8b9ff10c8bf7408e63be43decaa71cef188eb (diff)
Make TargetPatternKey implement SkyKey instead of wrapping in LegacySkyKey
Makes for much nicer client code. PiperOrigin-RevId: 162454439
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java29
7 files changed, 48 insertions, 45 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index fe54c4d033..6cc8fd1585 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -688,10 +688,8 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
private Pair<TargetPattern, ImmutableSet<PathFragment>> getPatternAndExcludes(String pattern)
throws TargetParsingException, InterruptedException {
TargetPatternKey targetPatternKey =
- ((TargetPatternKey)
- TargetPatternValue.key(
- pattern, TargetPatternEvaluator.DEFAULT_FILTERING_POLICY, parserPrefix)
- .argument());
+ TargetPatternValue.key(
+ pattern, TargetPatternEvaluator.DEFAULT_FILTERING_POLICY, parserPrefix);
ImmutableSet<PathFragment> subdirectoriesToExclude =
targetPatternKey.getAllSubdirectoriesToExclude(blacklistPatternsSupplier);
return Pair.of(targetPatternKey.getParsedPattern(), subdirectoriesToExclude);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index d967df0956..1901c7862e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -69,6 +69,7 @@ import com.google.devtools.build.lib.skyframe.PackageValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue.Precomputed;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.TargetPatternValue;
+import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
import com.google.devtools.build.lib.skyframe.TransitiveTargetValue;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -409,7 +410,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
boolean ok = true;
Map<String, ResolvedTargets<Target>> preloadedPatterns =
Maps.newHashMapWithExpectedSize(patterns.size());
- Map<SkyKey, String> patternKeys = Maps.newHashMapWithExpectedSize(patterns.size());
+ Map<TargetPatternKey, String> patternKeys = Maps.newHashMapWithExpectedSize(patterns.size());
for (String pattern : patterns) {
checkValidPatternType(pattern);
patternKeys.put(TargetPatternValue.key(pattern, FilteringPolicies.NO_FILTER, ""), pattern);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
index 79fd2fb9b2..f54604d536 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
@@ -89,18 +89,17 @@ public class PrepareDepsOfPatternValue implements SkyValue {
ImmutableList.Builder<PrepareDepsOfPatternSkyKeyOrException> builder = ImmutableList.builder();
for (int i = 0; i < keysMaybe.size(); i++) {
TargetPatternSkyKeyOrException keyMaybe = keysMaybe.get(i);
- SkyKey skyKey;
+ TargetPatternKey targetPatternKey;
try {
- skyKey = keyMaybe.getSkyKey();
+ targetPatternKey = keyMaybe.getSkyKey();
} catch (TargetParsingException e) {
// keyMaybe.getSkyKey() may throw TargetParsingException if its corresponding pattern
// failed to parse. If so, wrap the exception and return it, so that our caller can
// deal with it.
- skyKey = null;
+ targetPatternKey = null;
builder.add(new PrepareDepsOfPatternSkyKeyException(e, keyMaybe.getOriginalPattern()));
}
- if (skyKey != null) {
- TargetPatternKey targetPatternKey = (TargetPatternKey) skyKey.argument();
+ if (targetPatternKey != null) {
if (targetPatternKey.isNegative()) {
if (!targetPatternKey.getParsedPattern().getType().equals(Type.TARGETS_BELOW_DIRECTORY)) {
builder.add(
@@ -134,14 +133,13 @@ public class PrepareDepsOfPatternValue implements SkyValue {
ImmutableSet.Builder<PathFragment> excludedDirectoriesBuilder = ImmutableSet.builder();
for (int j = position + 1; j < keysMaybe.size(); j++) {
TargetPatternSkyKeyOrException laterPatternMaybe = keysMaybe.get(j);
- SkyKey laterSkyKey;
+ TargetPatternKey laterTargetPatternKey;
try {
- laterSkyKey = laterPatternMaybe.getSkyKey();
+ laterTargetPatternKey = laterPatternMaybe.getSkyKey();
} catch (TargetParsingException ignored) {
- laterSkyKey = null;
+ laterTargetPatternKey = null;
}
- if (laterSkyKey != null) {
- TargetPatternKey laterTargetPatternKey = (TargetPatternKey) laterSkyKey.argument();
+ if (laterTargetPatternKey != null) {
TargetPattern laterParsedPattern = laterTargetPatternKey.getParsedPattern();
if (laterTargetPatternKey.isNegative()
&& laterParsedPattern.getType() == Type.TARGETS_BELOW_DIRECTORY
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 e1239e1bc1..379d3de9d7 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
@@ -118,6 +118,7 @@ import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossReposit
import com.google.devtools.build.lib.skyframe.PackageLookupValue.BuildFileName;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ProgressSupplier;
+import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
import com.google.devtools.build.lib.syntax.SkylarkSemanticsOptions;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.ExitCode;
@@ -1249,7 +1250,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
}
EvaluationResult<TargetPatternValue> targetPatterns(
- Iterable<SkyKey> patternSkyKeys,
+ Iterable<TargetPatternKey> patternSkyKeys,
int numThreads,
boolean keepGoing,
ExtendedEventHandler eventHandler)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
index a0ccc8894c..c84e84946c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
@@ -26,12 +26,12 @@ import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator;
+import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternSkyKeyOrException;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.ErrorInfo;
import com.google.devtools.build.skyframe.EvaluationResult;
-import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.WalkableGraph;
import java.util.Collection;
import java.util.List;
@@ -105,7 +105,7 @@ final class SkyframeTargetPatternEvaluator implements TargetPatternEvaluator {
Iterable<TargetPatternSkyKeyOrException> keysMaybe =
TargetPatternValue.keys(targetPatterns, policy, offset);
- ImmutableList.Builder<SkyKey> builder = ImmutableList.builder();
+ ImmutableList.Builder<TargetPatternKey> builder = ImmutableList.builder();
for (TargetPatternSkyKeyOrException skyKeyOrException : keysMaybe) {
try {
builder.add(skyKeyOrException.getSkyKey());
@@ -122,7 +122,7 @@ final class SkyframeTargetPatternEvaluator implements TargetPatternEvaluator {
eventHandler.handle(Event.error("Skipping '" + pattern + "': " + e.getMessage()));
}
}
- ImmutableList<SkyKey> skyKeys = builder.build();
+ ImmutableList<TargetPatternKey> skyKeys = builder.build();
return parseTargetPatternKeys(
targetPatterns,
skyKeys,
@@ -140,9 +140,9 @@ final class SkyframeTargetPatternEvaluator implements TargetPatternEvaluator {
: new BuildTargetPatternsResultBuilder();
}
- ResolvedTargets<Target> parseTargetPatternKeys(
+ private ResolvedTargets<Target> parseTargetPatternKeys(
List<String> targetPattern,
- Iterable<SkyKey> patternSkyKeys,
+ Iterable<TargetPatternKey> patternSkyKeys,
int numThreads,
boolean keepGoing,
ExtendedEventHandler eventHandler,
@@ -152,19 +152,17 @@ final class SkyframeTargetPatternEvaluator implements TargetPatternEvaluator {
skyframeExecutor.targetPatterns(patternSkyKeys, numThreads, keepGoing, eventHandler);
String errorMessage = null;
- for (SkyKey key : patternSkyKeys) {
+ for (TargetPatternKey key : patternSkyKeys) {
TargetPatternValue resultValue = result.get(key);
if (resultValue != null) {
ResolvedTargets<Label> results = resultValue.getTargets();
- if (((TargetPatternValue.TargetPatternKey) key.argument()).isNegative()) {
+ if (key.isNegative()) {
finalTargetSetEvaluator.addLabelsOfNegativePattern(results);
} else {
finalTargetSetEvaluator.addLabelsOfPositivePattern(results);
}
} else {
- TargetPatternValue.TargetPatternKey patternKey =
- (TargetPatternValue.TargetPatternKey) key.argument();
- String rawPattern = patternKey.getPattern();
+ String rawPattern = key.getPattern();
ErrorInfo error = result.errorMap().get(key);
if (error == null) {
Preconditions.checkState(!keepGoing);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index 967883c698..13b1556f22 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -188,7 +188,7 @@ final class TargetPatternPhaseFunction implements SkyFunction {
*/
private static ResolvedTargets<Target> getTargetsToBuild(
Environment env, TargetPatternList options) throws InterruptedException {
- List<SkyKey> patternSkyKeys = new ArrayList<>();
+ List<TargetPatternKey> patternSkyKeys = new ArrayList<>();
for (TargetPatternSkyKeyOrException keyOrException :
TargetPatternValue.keys(
options.getTargetPatterns(),
@@ -214,11 +214,10 @@ final class TargetPatternPhaseFunction implements SkyFunction {
}
ResolvedTargets.Builder<Target> builder = ResolvedTargets.builder();
- for (SkyKey key : patternSkyKeys) {
- TargetPatternKey pattern = (TargetPatternKey) key.argument();
+ for (TargetPatternKey pattern : patternSkyKeys) {
TargetPatternValue value;
try {
- value = (TargetPatternValue) resolvedPatterns.get(key).get();
+ value = (TargetPatternValue) resolvedPatterns.get(pattern).get();
} catch (TargetParsingException e) {
String rawPattern = pattern.getPattern();
String errorMessage = e.getMessage();
@@ -264,7 +263,7 @@ final class TargetPatternPhaseFunction implements SkyFunction {
private static ResolvedTargets<Target> determineTests(
Environment env, List<String> targetPatterns, String offset, TestFilter testFilter)
throws InterruptedException {
- List<SkyKey> patternSkyKeys = new ArrayList<>();
+ List<TargetPatternKey> patternSkyKeys = new ArrayList<>();
for (TargetPatternSkyKeyOrException keyOrException :
TargetPatternValue.keys(targetPatterns, FilteringPolicies.FILTER_TESTS, offset)) {
try {
@@ -280,7 +279,7 @@ final class TargetPatternPhaseFunction implements SkyFunction {
}
List<SkyKey> expandedSuiteKeys = new ArrayList<>();
- for (SkyKey key : patternSkyKeys) {
+ for (TargetPatternKey key : patternSkyKeys) {
TargetPatternValue value;
try {
value = (TargetPatternValue) resolvedPatterns.get(key).get();
@@ -296,11 +295,10 @@ final class TargetPatternPhaseFunction implements SkyFunction {
}
ResolvedTargets.Builder<Target> testTargetsBuilder = ResolvedTargets.builder();
- for (SkyKey key : patternSkyKeys) {
- TargetPatternKey pattern = (TargetPatternKey) key.argument();
+ for (TargetPatternKey pattern : patternSkyKeys) {
TargetPatternValue value;
try {
- value = (TargetPatternValue) resolvedPatterns.get(key).get();
+ value = (TargetPatternValue) resolvedPatterns.get(pattern).get();
} catch (TargetParsingException e) {
// This was already reported in getTargetsToBuild (maybe merge the two code paths?).
continue;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
index ce65642e65..9d9ac22066 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
@@ -31,7 +31,7 @@ import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.InterruptibleSupplier;
-import com.google.devtools.build.skyframe.LegacySkyKey;
+import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
@@ -109,7 +109,7 @@ public final class TargetPatternValue implements SkyValue {
* @param offset The offset to apply to relative target patterns.
*/
@ThreadSafe
- public static SkyKey key(String pattern, FilteringPolicy policy, String offset)
+ public static TargetPatternKey key(String pattern, FilteringPolicy policy, String offset)
throws TargetParsingException {
return Iterables.getOnlyElement(keys(ImmutableList.of(pattern), policy, offset)).getSkyKey();
}
@@ -147,8 +147,7 @@ public final class TargetPatternValue implements SkyValue {
!positive,
offset,
ImmutableSet.<PathFragment>of());
- SkyKey skyKey = LegacySkyKey.create(SkyFunctions.TARGET_PATTERN, targetPatternKey);
- builder.add(new TargetPatternSkyKeyValue(skyKey));
+ builder.add(new TargetPatternSkyKeyValue(targetPatternKey));
}
return builder.build();
}
@@ -162,7 +161,7 @@ public final class TargetPatternValue implements SkyValue {
* offset, whether it is a positive or negative match, and a set of excluded subdirectories.
*/
@ThreadSafe
- public static class TargetPatternKey implements Serializable {
+ public static class TargetPatternKey implements SkyKey, Serializable {
private final TargetPattern parsedPattern;
private final FilteringPolicy policy;
@@ -184,6 +183,16 @@ public final class TargetPatternValue implements SkyValue {
this.excludedSubdirectories = Preconditions.checkNotNull(excludedSubdirectories);
}
+ @Override
+ public SkyFunctionName functionName() {
+ return SkyFunctions.TARGET_PATTERN;
+ }
+
+ @Override
+ public Object argument() {
+ return this;
+ }
+
public String getPattern() {
return parsedPattern.getOriginalPattern();
}
@@ -267,7 +276,7 @@ public final class TargetPatternValue implements SkyValue {
* Returns the stored {@link SkyKey} or throws {@link TargetParsingException} if one was thrown
* when computing the key.
*/
- SkyKey getSkyKey() throws TargetParsingException;
+ TargetPatternKey getSkyKey() throws TargetParsingException;
/**
* Returns the pattern that resulted in the stored {@link SkyKey} or {@link
@@ -278,14 +287,14 @@ public final class TargetPatternValue implements SkyValue {
private static final class TargetPatternSkyKeyValue implements TargetPatternSkyKeyOrException {
- private final SkyKey value;
+ private final TargetPatternKey value;
- private TargetPatternSkyKeyValue(SkyKey value) {
+ private TargetPatternSkyKeyValue(TargetPatternKey value) {
this.value = value;
}
@Override
- public SkyKey getSkyKey() throws TargetParsingException {
+ public TargetPatternKey getSkyKey() throws TargetParsingException {
return value;
}
@@ -307,7 +316,7 @@ public final class TargetPatternValue implements SkyValue {
}
@Override
- public SkyKey getSkyKey() throws TargetParsingException {
+ public TargetPatternKey getSkyKey() throws TargetParsingException {
throw exception;
}