diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
3 files changed, 33 insertions, 24 deletions
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 0bca5204f5..be4ad076ab 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 @@ -170,27 +170,24 @@ final class TargetPatternPhaseFunction implements SkyFunction { LoadingPhaseRunner.maybeReportDeprecation(env.getListener(), targets.getTargets()); boolean preExpansionError = targets.hasError(); - ResolvedTargets.Builder<Target> expandedTargetsBuilder = ResolvedTargets.builder(); + ResolvedTargets.Builder<Label> expandedLabelsBuilder = ResolvedTargets.builder(); for (Target target : targets.getTargets()) { if (TargetUtils.isTestSuiteRule(target) && options.isExpandTestSuites()) { SkyKey expansionKey = Preconditions.checkNotNull(testExpansionKeys.get(target.getLabel())); TestSuiteExpansionValue testExpansion = (TestSuiteExpansionValue) expandedTests.get(expansionKey); - expandedTargetsBuilder.merge(testExpansion.getTargets()); + expandedLabelsBuilder.merge(testExpansion.getLabels()); } else { - expandedTargetsBuilder.add(target); + expandedLabelsBuilder.add(target.getLabel()); } } - ResolvedTargets<Target> expandedTargets = expandedTargetsBuilder.build(); + ResolvedTargets<Label> targetLabels = expandedLabelsBuilder.build(); + ResolvedTargets<Target> expandedTargets = + TestSuiteExpansionFunction.labelsToTargets( + env, targetLabels.getTargets(), targetLabels.hasError()); Set<Target> testSuiteTargets = Sets.difference(targets.getTargets(), expandedTargets.getTargets()); - ImmutableSet<Label> targetLabels = - expandedTargets - .getTargets() - .stream() - .map(Target::getLabel) - .collect(ImmutableSet.toImmutableSet()); ImmutableSet<Label> testsToRunLabels = null; if (testsToRun != null) { testsToRunLabels = @@ -201,7 +198,7 @@ final class TargetPatternPhaseFunction implements SkyFunction { TargetPatternPhaseValue result = new TargetPatternPhaseValue( - targetLabels, + targetLabels.getTargets(), testsToRunLabels, targets.hasError(), expandedTargets.hasError() || workspaceError, @@ -363,15 +360,24 @@ final class TargetPatternPhaseFunction implements SkyFunction { TestSuiteExpansionValue expandedSuitesValue = (TestSuiteExpansionValue) expandedSuites.get( TestSuiteExpansionValue.key(value.getTargets().getTargets())); if (pattern.isNegative()) { - ResolvedTargets<Target> negativeTargets = expandedSuitesValue.getTargets(); + ResolvedTargets<Target> negativeTargets = + TestSuiteExpansionFunction.labelsToTargets( + env, + expandedSuitesValue.getLabels().getTargets(), + expandedSuitesValue.getLabels().hasError()); testTargetsBuilder.filter(Predicates.not(Predicates.in(negativeTargets.getTargets()))); testTargetsBuilder.mergeError(negativeTargets.hasError()); } else { - ResolvedTargets<Target> positiveTargets = expandedSuitesValue.getTargets(); + ResolvedTargets<Target> positiveTargets = + TestSuiteExpansionFunction.labelsToTargets( + env, + expandedSuitesValue.getLabels().getTargets(), + expandedSuitesValue.getLabels().hasError()); testTargetsBuilder.addAll(positiveTargets.getTargets()); testTargetsBuilder.mergeError(positiveTargets.hasError()); } } + testTargetsBuilder.filter(testFilter); return testTargetsBuilder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionFunction.java index 27343aabe7..a20168396b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionFunction.java @@ -31,6 +31,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Nullable; /** @@ -52,20 +53,22 @@ final class TestSuiteExpansionFunction implements SkyFunction { return null; } - Set<Target> result = new LinkedHashSet<>(); + Set<Label> result = new LinkedHashSet<>(); boolean hasError = targets.hasError(); for (Target target : targets.getTargets()) { if (TargetUtils.isTestRule(target)) { - result.add(target); + result.add(target.getLabel()); } else if (TargetUtils.isTestSuiteRule(target)) { TestsInSuiteValue value = (TestsInSuiteValue) testsInSuites.get( TestsInSuiteValue.key(target, true)); if (value != null) { - result.addAll(value.getTargets().getTargets()); + result.addAll(value.getTargets().getTargets().stream() + .map(Target::getLabel) + .collect(Collectors.toList())); hasError |= value.getTargets().hasError(); } } else { - result.add(target); + result.add(target.getLabel()); } } if (env.valuesMissing()) { @@ -73,7 +76,7 @@ final class TestSuiteExpansionFunction implements SkyFunction { } // We use ResolvedTargets in order to associate an error flag; the result should never contain // any filtered targets. - return new TestSuiteExpansionValue(new ResolvedTargets<Target>(result, hasError)); + return new TestSuiteExpansionValue(new ResolvedTargets<>(result, hasError)); } static ResolvedTargets<Target> labelsToTargets( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionValue.java index d32af1a9b0..d35b19c40d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionValue.java @@ -21,7 +21,6 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.ResolvedTargets; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; -import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.skyframe.serialization.NotSerializableRuntimeException; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; @@ -39,16 +38,17 @@ import java.util.Collection; @ThreadSafe @VisibleForTesting public final class TestSuiteExpansionValue implements SkyValue { - private ResolvedTargets<Target> targets; + private ResolvedTargets<Label> labels; - TestSuiteExpansionValue(ResolvedTargets<Target> targets) { - this.targets = Preconditions.checkNotNull(targets); + TestSuiteExpansionValue(ResolvedTargets<Label> labels) { + this.labels = Preconditions.checkNotNull(labels); } - public ResolvedTargets<Target> getTargets() { - return targets; + public ResolvedTargets<Label> getLabels() { + return labels; } + @SuppressWarnings("unused") private void writeObject(ObjectOutputStream out) { throw new NotSerializableRuntimeException(); |