diff options
author | 2015-05-19 21:19:37 +0000 | |
---|---|---|
committer | 2015-05-21 09:46:17 +0000 | |
commit | 66b35f3d069a77e5da685099d3ba3c0a0f5e844b (patch) | |
tree | 1970ede6c00b2980f6a11951581f5046073d236d /src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java | |
parent | 87836b4116f78b3c37cb8ed439c14d98193ae9d5 (diff) |
Move target pattern parsing to key construction time
So that a subsequent commit can take advantage of semantic information
known only after target patterns have been parsed, this commit moves
parsing from pattern evaluation time to pattern key construction time.
This leads toward more efficient processing of target patterns in
target pattern sequence evaluation.
--
MOS_MIGRATED_REVID=94025646
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java | 24 |
1 files changed, 22 insertions, 2 deletions
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 979f322b19..d166126038 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 @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.FilteringPolicy; import com.google.devtools.build.lib.pkgcache.ParseFailureListener; import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator; +import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternSkyKeyOrException; import com.google.devtools.build.lib.syntax.Label; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.ErrorInfo; @@ -99,8 +100,27 @@ final class SkyframeTargetPatternEvaluator implements TargetPatternEvaluator { ResolvedTargets<Target> parseTargetPatternList(String offset, EventHandler eventHandler, List<String> targetPatterns, FilteringPolicy policy, boolean keepGoing) throws InterruptedException, TargetParsingException { - return parseTargetPatternKeys(TargetPatternValue.keys(targetPatterns, policy, offset), - SkyframeExecutor.DEFAULT_THREAD_COUNT, keepGoing, eventHandler); + Iterable<TargetPatternSkyKeyOrException> keysMaybe = + TargetPatternValue.keys(targetPatterns, policy, offset); + + ImmutableList.Builder<SkyKey> builder = ImmutableList.builder(); + for (TargetPatternSkyKeyOrException skyKeyOrException : keysMaybe) { + try { + builder.add(skyKeyOrException.getSkyKey()); + } catch (TargetParsingException e) { + if (!keepGoing) { + throw e; + } + String pattern = skyKeyOrException.getOriginalPattern(); + eventHandler.handle(Event.error("Skipping '" + pattern + "': " + e.getMessage())); + if (eventHandler instanceof ParseFailureListener) { + ((ParseFailureListener) eventHandler).parsingError(pattern, e.getMessage()); + } + } + } + ImmutableList<SkyKey> skyKeys = builder.build(); + return parseTargetPatternKeys(skyKeys, SkyframeExecutor.DEFAULT_THREAD_COUNT, keepGoing, + eventHandler); } private static Map<PackageIdentifier, Package> getPackages( |