diff options
author | 2018-02-07 12:22:17 -0800 | |
---|---|---|
committer | 2018-02-07 12:24:35 -0800 | |
commit | 2fff952bbccc4c8436223314e3636fdd05e2073d (patch) | |
tree | bf1fdf3b8089148f2c9ffb6e0c4fc0c88f71b2a8 /src | |
parent | e40603fecbc13380dd9648cf3bf1e31f6ce74c0f (diff) |
Refactor to get rid of some getConfiguredTarget() calls in tests and replace
them with getConfiguredTargetAndTarget() so we can get rid of
ConfiguredTarget.getTarget() callers. This should be a test only change.
PiperOrigin-RevId: 184877255
Diffstat (limited to 'src')
16 files changed, 265 insertions, 146 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index a3835d836a..a4cf6e421e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -1133,6 +1133,12 @@ public class BuildView { getTopLevelTransitionForTarget(label, eventHandler)); } + @VisibleForTesting + public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting( + ExtendedEventHandler eventHandler, Label label, BuildConfiguration config) { + return skyframeExecutor.getConfiguredTargetAndTargetForTesting(eventHandler, label, config); + } + /** * Returns a RuleContext which is the same as the original RuleContext of the target parameter. */ 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 93775243af..4cc660209a 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 @@ -1641,9 +1641,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { return getConfiguredTargetForTesting(eventHandler, label, configuration, NoTransition.INSTANCE); } - /** - * Returns a particular configured target after applying the given transition. - */ + /** Returns a particular configured target after applying the given transition. */ @VisibleForTesting @Nullable public ConfiguredTarget getConfiguredTargetForTesting( @@ -1652,6 +1650,20 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { BuildConfiguration configuration, ConfigurationTransition transition) { ConfiguredTargetAndTarget configuredTargetAndTarget = + getConfiguredTargetAndTargetForTesting(eventHandler, label, configuration, transition); + return configuredTargetAndTarget == null + ? null + : configuredTargetAndTarget.getConfiguredTarget(); + } + + @VisibleForTesting + @Nullable + public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting( + ExtendedEventHandler eventHandler, + Label label, + BuildConfiguration configuration, + ConfigurationTransition transition) { + ConfiguredTargetAndTarget configuredTargetAndTarget = Iterables.getFirst( getConfiguredTargetsForTesting( eventHandler, @@ -1662,9 +1674,15 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { : Dependency.withTransitionAndAspects( label, transition, AspectCollection.EMPTY))), null); - return configuredTargetAndTarget == null - ? null - : configuredTargetAndTarget.getConfiguredTarget(); + return configuredTargetAndTarget; + } + + @VisibleForTesting + @Nullable + public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting( + ExtendedEventHandler eventHandler, Label label, BuildConfiguration configuration) { + return getConfiguredTargetAndTargetForTesting( + eventHandler, label, configuration, NoTransition.INSTANCE); } /** diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java index a5e2c46a3f..7f20fffae1 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.util.FileTypeSet; import org.junit.Before; import org.junit.Test; @@ -40,12 +41,17 @@ public class AspectAwareAttributeMapperTest extends BuildViewTestCase { @Before public final void createMapper() throws Exception { - RuleConfiguredTarget ct = (RuleConfiguredTarget) scratchConfiguredTarget("foo", "myrule", - "cc_binary(", - " name = 'myrule',", - " srcs = [':a.cc'],", - " linkstatic = select({'//conditions:default': 1}))"); - rule = ct.getTarget(); + ConfiguredTargetAndTarget ctat = + scratchConfiguredTargetAndTarget( + "foo", + "myrule", + "cc_binary(", + " name = 'myrule',", + " srcs = [':a.cc'],", + " linkstatic = select({'//conditions:default': 1}))"); + + RuleConfiguredTarget ct = (RuleConfiguredTarget) ctat.getConfiguredTarget(); + rule = (Rule) ctat.getTarget(); Attribute aspectAttr = new Attribute.Builder<Label>("fromaspect", BuildType.LABEL) .allowedFileTypes(FileTypeSet.ANY_FILE) .build(); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java index 510be593d2..6af2d40a07 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java @@ -44,6 +44,7 @@ import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.events.OutputFilter.RegexOutputFilter; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.testutil.Suite; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestSpec; @@ -91,9 +92,9 @@ public class BuildViewTest extends BuildViewTestBase { Rule ruleTarget = (Rule) getTarget("//pkg:foo"); assertThat(ruleTarget.getRuleClass()).isEqualTo("genrule"); - ConfiguredTarget ruleCT = getConfiguredTarget("//pkg:foo"); + ConfiguredTargetAndTarget ruleCTAT = getConfiguredTargetAndTarget("//pkg:foo"); - assertThat(ruleCT.getTarget()).isSameAs(ruleTarget); + assertThat(ruleCTAT.getTarget()).isSameAs(ruleTarget); } @Test @@ -115,14 +116,17 @@ public class BuildViewTest extends BuildViewTestBase { //scratch.file("tests/small_test_1.py"); update("//tests:smallTests"); + ConfiguredTargetAndTarget test1 = getConfiguredTargetAndTarget("//tests:small_test_1"); + ConfiguredTargetAndTarget test2 = getConfiguredTargetAndTarget("//tests:small_test_2"); + ConfiguredTargetAndTarget suite = getConfiguredTargetAndTarget("//tests:smallTests"); - ConfiguredTarget test1 = getConfiguredTarget("//tests:small_test_1"); - ConfiguredTarget test2 = getConfiguredTarget("//tests:small_test_2"); - ConfiguredTarget suite = getConfiguredTarget("//tests:smallTests"); + ConfiguredTarget test1CT = test1.getConfiguredTarget(); + ConfiguredTarget test2CT = test2.getConfiguredTarget(); + ConfiguredTarget suiteCT = suite.getConfiguredTarget(); assertNoEvents(); // start from a clean slate Collection<ConfiguredTarget> targets = - new LinkedHashSet<>(ImmutableList.of(test1, test2, suite)); + new LinkedHashSet<>(ImmutableList.of(test1CT, test2CT, suiteCT)); targets = Lists.<ConfiguredTarget>newArrayList( BuildView.filterTestsByTargets( @@ -130,7 +134,7 @@ public class BuildViewTest extends BuildViewTestBase { Sets.newHashSet(test1.getTarget(), suite.getTarget()), NullEventHandler.INSTANCE, skyframeExecutor.getPackageManager())); - assertThat(targets).containsExactlyElementsIn(Sets.newHashSet(test1, suite)); + assertThat(targets).containsExactlyElementsIn(Sets.newHashSet(test1CT, suiteCT)); } @Test @@ -147,17 +151,16 @@ public class BuildViewTest extends BuildViewTestBase { public void testGeneratedArtifact() throws Exception { setupDummyRule(); update("//pkg:a.out"); - OutputFileConfiguredTarget outputCT = (OutputFileConfiguredTarget) - getConfiguredTarget("//pkg:a.out"); - Artifact outputArtifact = outputCT.getArtifact(); + OutputFileConfiguredTarget output = + (OutputFileConfiguredTarget) getConfiguredTarget("//pkg:a.out"); + Artifact outputArtifact = output.getArtifact(); assertThat(outputArtifact.getRoot()) .isEqualTo( - outputCT + output .getConfiguration() - .getBinDirectory( - outputCT.getTarget().getLabel().getPackageIdentifier().getRepository())); + .getBinDirectory(output.getLabel().getPackageIdentifier().getRepository())); assertThat(outputArtifact.getExecPath()) - .isEqualTo(outputCT.getConfiguration().getBinFragment().getRelative("pkg/a.out")); + .isEqualTo(output.getConfiguration().getBinFragment().getRelative("pkg/a.out")); assertThat(outputArtifact.getRootRelativePath()).isEqualTo(PathFragment.create("pkg/a.out")); Action action = getGeneratingAction(outputArtifact); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java index 519807fa77..fc9aa99a9a 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java @@ -58,6 +58,7 @@ import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunctio import com.google.devtools.build.lib.runtime.KeepGoingOption; import com.google.devtools.build.lib.runtime.LoadingPhaseThreadsOption; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; @@ -389,6 +390,23 @@ public abstract class AnalysisTestCase extends FoundationTestCase { return update(new EventBus(), defaultFlags(), aspects, labels); } + protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget(String label) + throws InterruptedException { + return getConfiguredTargetAndTarget(label, getTargetConfiguration()); + } + + protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget( + String label, BuildConfiguration config) { + ensureUpdateWasCalled(); + Label parsedLabel; + try { + parsedLabel = Label.parseAbsolute(label); + } catch (LabelSyntaxException e) { + throw new AssertionError(e); + } + return skyframeExecutor.getConfiguredTargetAndTargetForTesting(reporter, parsedLabel, config); + } + protected Target getTarget(String label) throws InterruptedException { try { return SkyframeExecutorTestUtils.getExistingTarget(skyframeExecutor, @@ -403,6 +421,14 @@ public abstract class AnalysisTestCase extends FoundationTestCase { return getConfiguredTargetForSkyframe(label, configuration); } + /** + * Returns the corresponding configured target, if it exists. Note that this will only return + * anything useful after a call to update() with the same label. + */ + protected ConfiguredTarget getConfiguredTarget(String label) throws InterruptedException { + return getConfiguredTarget(label, getTargetConfiguration()); + } + private ConfiguredTarget getConfiguredTargetForSkyframe(String label, BuildConfiguration configuration) { Label parsedLabel; @@ -416,14 +442,6 @@ public abstract class AnalysisTestCase extends FoundationTestCase { /** * Returns the corresponding configured target, if it exists. Note that this will only return - * anything useful after a call to update() with the same label. - */ - protected ConfiguredTarget getConfiguredTarget(String label) throws InterruptedException { - return getConfiguredTarget(label, getTargetConfiguration()); - } - - /** - * Returns the corresponding configured target, if it exists. Note that this will only return * anything useful after a call to update() with the same label. The label passed in must * represent an input file. */ diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 8d89ee08dc..479cde386d 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -123,6 +123,7 @@ import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.DiffAwareness; import com.google.devtools.build.lib.skyframe.LegacyLoadingPhaseRunner; @@ -624,25 +625,6 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return skyframeExecutor.getActionGraph(reporter); } - protected final Action getGeneratingAction(Artifact artifact) { - Preconditions.checkNotNull(artifact); - ActionAnalysisMetadata action = mutableActionGraph.getGeneratingAction(artifact); - - if (action == null) { - action = getActionGraph().getGeneratingAction(artifact); - } - - if (action != null) { - Preconditions.checkState( - action instanceof Action, - "%s is not a proper Action object", - action.prettyPrint()); - return (Action) action; - } else { - return null; - } - } - @Nullable protected final ParameterFileWriteAction findParamsFileAction(SpawnAction spawnAction) { for (Artifact input : spawnAction.getInputs()) { @@ -670,6 +652,23 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return getGeneratingAction(artifact); } + protected final Action getGeneratingAction(Artifact artifact) { + Preconditions.checkNotNull(artifact); + ActionAnalysisMetadata action = mutableActionGraph.getGeneratingAction(artifact); + + if (action == null) { + action = getActionGraph().getGeneratingAction(artifact); + } + + if (action != null) { + Preconditions.checkState( + action instanceof Action, "%s is not a proper Action object", action.prettyPrint()); + return (Action) action; + } else { + return null; + } + } + protected Action getGeneratingActionInOutputGroup( ConfiguredTarget target, String outputName, String outputGroupName) { NestedSet<Artifact> outputGroup = @@ -685,6 +684,11 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return (SpawnAction) getGeneratingAction(artifact); } + protected SpawnAction getGeneratingSpawnAction(ConfiguredTarget target, String outputName) { + return getGeneratingSpawnAction( + Iterables.find(getFilesToBuild(target), artifactNamed(outputName))); + } + protected final List<String> getGeneratingSpawnActionArgs(Artifact artifact) throws CommandLineExpansionException { SpawnAction a = getGeneratingSpawnAction(artifact); @@ -694,11 +698,6 @@ public abstract class BuildViewTestCase extends FoundationTestCase { : ImmutableList.copyOf(Iterables.concat(a.getArguments(), p.getContents())); } - protected SpawnAction getGeneratingSpawnAction(ConfiguredTarget target, String outputName) { - return getGeneratingSpawnAction( - Iterables.find(getFilesToBuild(target), artifactNamed(outputName))); - } - protected ActionsTestUtil actionsTestUtil() { return new ActionsTestUtil(getActionGraph()); } @@ -743,6 +742,25 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } /** + * Returns a ConfiguredTargetAndTarget for the specified label, using the given build + * configuration. + */ + protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget( + Label label, BuildConfiguration config) { + return view.getConfiguredTargetAndTargetForTesting(reporter, label, config); + } + + /** + * Returns the ConfiguredTargetAndTarget for the specified label. If the label corresponds to a + * target with a top-level configuration transition, that transition is applied to the given + * config in the ConfiguredTargetAndTarget's ConfiguredTarget. + */ + public ConfiguredTargetAndTarget getConfiguredTargetAndTarget(String label) + throws LabelSyntaxException { + return getConfiguredTargetAndTarget(Label.parseAbsolute(label), targetConfig); + } + + /** * Returns the ConfiguredTarget for the specified file label, configured for * the "build" (aka "target") configuration. */ @@ -803,6 +821,57 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } /** + * Create and return a configured scratch rule. + * + * @param packageName the package name of the rule. + * @param ruleName the name of the rule. + * @param config the configuration to use to construct the configured rule. + * @param lines the text of the rule. + * @return the configured target instance for the created rule. + * @throws IOException + * @throws Exception + */ + protected ConfiguredTarget scratchConfiguredTarget( + String packageName, String ruleName, BuildConfiguration config, String... lines) + throws IOException, Exception { + ConfiguredTargetAndTarget ctat = + scratchConfiguredTargetAndTarget(packageName, ruleName, config, lines); + return ctat == null ? null : ctat.getConfiguredTarget(); + } + + /** + * Creates and returns a configured scratch rule and it's target. + * + * @param packageName the package name of the rule. + * @param rulename the name of the rule. + * @param lines the text of the rule. + * @return the configured tatarget and target instance for the created rule. + * @throws Exception + */ + protected ConfiguredTargetAndTarget scratchConfiguredTargetAndTarget( + String packageName, String rulename, String... lines) throws Exception { + return scratchConfiguredTargetAndTarget(packageName, rulename, targetConfig, lines); + } + + /** + * Creates and returns a configured scratch rule and it's target. + * + * @param packageName the package name of the rule. + * @param ruleName the name of the rule. + * @param config the configuration to use to construct the configured rule. + * @param lines the text of the rule. + * @return the ConfiguredTargetAndTarget instance for the created rule. + * @throws IOException + * @throws Exception + */ + protected ConfiguredTargetAndTarget scratchConfiguredTargetAndTarget( + String packageName, String ruleName, BuildConfiguration config, String... lines) + throws Exception { + Target rule = scratchRule(packageName, ruleName, lines); + return view.getConfiguredTargetAndTargetForTesting(reporter, rule.getLabel(), config); + } + + /** * Create and return a scratch rule. * * @param packageName the package name of the rule. @@ -829,26 +898,6 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } /** - * Create and return a configured scratch rule. - * - * @param packageName the package name of the rule. - * @param ruleName the name of the rule. - * @param config the configuration to use to construct the configured rule. - * @param lines the text of the rule. - * @return the configured target instance for the created rule. - * @throws IOException - * @throws Exception - */ - protected ConfiguredTarget scratchConfiguredTarget(String packageName, - String ruleName, - BuildConfiguration config, - String... lines) - throws IOException, Exception { - Target rule = scratchRule(packageName, ruleName, lines); - return view.getConfiguredTargetForTesting(reporter, rule.getLabel(), config); - } - - /** * Check that configuration of the target named 'ruleName' in the * specified BUILD file fails with an error message ending in * 'expectedErrorMessage'. @@ -1156,18 +1205,6 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } /** - * Strips the C++-contributed prefix out of an output path when tests are run with trimmed - * configurations. e.g. turns "bazel-out/gcc-X-glibc-Y-k8-fastbuild/ to "bazel-out/fastbuild/". - * - * <p>This should be used for targets use configurations with C++ fragments. - */ - protected String stripCppPrefixForTrimmedConfigs(String outputPath) { - return targetConfig.trimConfigurations() - ? AnalysisTestUtil.OUTPUT_PATH_CPP_PREFIX_PATTERN.matcher(outputPath).replaceFirst("") - : outputPath; - } - - /** * Gets a derived Artifact for testing in the subdirectory of the {@link * BuildConfiguration#getGenfilesDirectory} corresponding to the package of {@code owner}. So to * specify a file foo/foo.o owned by target //foo:foo, {@code packageRelativePath} should just be @@ -1219,6 +1256,18 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return getGeneratingAction(getFileConfiguredTarget(label).getArtifact()); } + /** + * Strips the C++-contributed prefix out of an output path when tests are run with trimmed + * configurations. e.g. turns "bazel-out/gcc-X-glibc-Y-k8-fastbuild/ to "bazel-out/fastbuild/". + * + * <p>This should be used for targets use configurations with C++ fragments. + */ + protected String stripCppPrefixForTrimmedConfigs(String outputPath) { + return targetConfig.trimConfigurations() + ? AnalysisTestUtil.OUTPUT_PATH_CPP_PREFIX_PATTERN.matcher(outputPath).replaceFirst("") + : outputPath; + } + protected String fileName(Artifact artifact) { return artifact.getExecPathString(); } @@ -1301,20 +1350,6 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } } - private BuildConfiguration getConfiguration(String label) { - BuildConfiguration config; - try { - config = getConfiguredTarget(label).getConfiguration(); - config = view.getConfigurationForTesting(getTarget(label), config, reporter); - } catch (LabelSyntaxException e) { - throw new IllegalArgumentException(e); - } catch (Exception e) { - //TODO(b/36585204): Clean this up - throw new RuntimeException(e); - } - return config; - } - private ConfiguredTargetKey makeConfiguredTargetKey(String label) { return ConfiguredTargetKey.of(makeLabel(label), getConfiguration(label)); } @@ -1519,6 +1554,20 @@ public abstract class BuildViewTestCase extends FoundationTestCase { } } + private BuildConfiguration getConfiguration(String label) { + BuildConfiguration config; + try { + config = getConfiguredTarget(label).getConfiguration(); + config = view.getConfigurationForTesting(getTarget(label), config, reporter); + } catch (LabelSyntaxException e) { + throw new IllegalArgumentException(e); + } catch (Exception e) { + // TODO(b/36585204): Clean this up + throw new RuntimeException(e); + } + return config; + } + /** * Returns an attribute value retriever for the given rule for the target configuration. */ diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java index aec222e596..7fa018d49c 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java @@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.bazel.repository.downloader.HttpDownloader; @@ -32,6 +31,7 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.skyframe.SkyFunction; @@ -142,7 +142,7 @@ public class SkylarkRepositoryIntegrationTest extends BuildViewTestCase { .add("repo(name='foo', path='/repo2')") .build()); invalidatePackages(); - ConfiguredTarget target = getConfiguredTarget("@foo//:bar"); + ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar"); Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path"); assertThat(path).isEqualTo("foo"); } @@ -170,7 +170,7 @@ public class SkylarkRepositoryIntegrationTest extends BuildViewTestCase { .add("repo(name='foo')") .build()); invalidatePackages(); - ConfiguredTarget target = getConfiguredTarget("@foo//:bar"); + ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar"); Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path"); assertThat(path).isEqualTo("foo"); } @@ -199,7 +199,7 @@ public class SkylarkRepositoryIntegrationTest extends BuildViewTestCase { .add("repo(name='foo')") .build()); invalidatePackages(); - ConfiguredTarget target = getConfiguredTarget("@foo//:bar"); + ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar"); Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path"); assertThat(path).isEqualTo("foo"); } @@ -229,7 +229,7 @@ public class SkylarkRepositoryIntegrationTest extends BuildViewTestCase { .add("repo(name='foobar')") .build()); invalidatePackages(); - ConfiguredTarget target = getConfiguredTarget("@foobar//:bar"); + ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foobar//:bar"); Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path"); assertThat(path).isEqualTo("foobar"); } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java index c2bfad33eb..facfac3150 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java @@ -18,12 +18,12 @@ import static org.junit.Assert.fail; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; -import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.packages.AttributeContainer; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -169,7 +169,8 @@ public class AndroidNdkRepositoryTest extends BuildViewTestCase { ")"); invalidatePackages(); - ConfiguredTarget cpufeatures = getConfiguredTarget("@androidndk//:cpufeatures"); + ConfiguredTargetAndTarget cpufeatures = + getConfiguredTargetAndTarget("@androidndk//:cpufeatures"); assertThat(cpufeatures).isNotNull(); AttributeContainer attributes = cpufeatures.getTarget().getAssociatedRule().getAttributeContainer(); diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java index 02cf802a6a..8f55fcc34e 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepositoryTest.java @@ -105,7 +105,9 @@ public class SdkMavenRepositoryTest extends BuildViewTestCase { public void testGeneratedAarImport() throws Exception { sdkMavenRepository.writeBuildFiles(workspaceDir); Rule aarImport = - getConfiguredTarget("//com.google.android:bar-1.0.0").getTarget().getAssociatedRule(); + getConfiguredTargetAndTarget("//com.google.android:bar-1.0.0") + .getTarget() + .getAssociatedRule(); assertThat(aarImport.getRuleClass()).isEqualTo("aar_import"); AttributeMap attributes = RawAttributeMapper.of(aarImport); assertThat(attributes.get("aar", BuildType.LABEL)) @@ -118,7 +120,9 @@ public class SdkMavenRepositoryTest extends BuildViewTestCase { public void testGeneratedJavaImport() throws Exception { sdkMavenRepository.writeBuildFiles(workspaceDir); Rule javaImport = - getConfiguredTarget("//com.google.android:foo-1.0.0").getTarget().getAssociatedRule(); + getConfiguredTargetAndTarget("//com.google.android:foo-1.0.0") + .getTarget() + .getAssociatedRule(); assertThat(javaImport.getRuleClass()).isEqualTo("java_import"); AttributeMap attributes = RawAttributeMapper.of(javaImport); assertThat(attributes.get("jars", BuildType.LABEL_LIST)).containsExactly( @@ -130,7 +134,9 @@ public class SdkMavenRepositoryTest extends BuildViewTestCase { public void testGeneratedRuleForInvalidPackaging() throws Exception { sdkMavenRepository.writeBuildFiles(workspaceDir); Rule invalidPackagingGenrule = - getConfiguredTarget("//com.google.android:baz-1.0.0").getTarget().getAssociatedRule(); + getConfiguredTargetAndTarget("//com.google.android:baz-1.0.0") + .getTarget() + .getAssociatedRule(); assertThat(invalidPackagingGenrule.getRuleClass()).isEqualTo("genrule"); assertThat(RawAttributeMapper.of(invalidPackagingGenrule).get("cmd", Type.STRING)) .isEqualTo("echo Bazel does not recognize the Maven packaging type for: " diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java index 227406c03a..26d908c0a7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java @@ -51,6 +51,7 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompileAction; import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -1547,28 +1548,28 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { "png"); } - private void testDirectResourceFiltering( - String filters, List<String> unexpectedQualifiers, ImmutableList<String> expectedQualifiers) + private void testDensityResourceFiltering( + String densities, List<String> unexpectedQualifiers, List<String> expectedQualifiers) throws Exception { testDirectResourceFiltering( - filters, - /* densities= */ "", + /* resourceConfigurationFilters= */ "", + densities, unexpectedQualifiers, expectedQualifiers, - /* expectUnqualifiedResource= */ true, + /* expectUnqualifiedResource= */ false, "drawable", "png"); } - private void testDensityResourceFiltering( - String densities, List<String> unexpectedQualifiers, List<String> expectedQualifiers) + private void testDirectResourceFiltering( + String filters, List<String> unexpectedQualifiers, ImmutableList<String> expectedQualifiers) throws Exception { testDirectResourceFiltering( - /* resourceConfigurationFilters= */ "", - densities, + filters, + /* densities= */ "", unexpectedQualifiers, expectedQualifiers, - /* expectUnqualifiedResource= */ false, + /* expectUnqualifiedResource= */ true, "drawable", "png"); } @@ -2004,7 +2005,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { "<resources><string name = 'lib_string'>Libs!</string></resources>"); scratch.file("java/r/android/res/values/strings.xml", "<resources><string name = 'hello'>Hello Android!</string></resources>"); - Artifact jar = getResourceClassJar(getConfiguredTarget("//java/r/android:r")); + Artifact jar = getResourceClassJar(getConfiguredTargetAndTarget("//java/r/android:r")); assertThat(getGeneratingAction(jar).getMnemonic()).isEqualTo("RClassGenerator"); assertThat(getGeneratingSpawnActionArgs(jar)) .containsAllOf("--primaryRTxt", "--primaryManifest", "--library", "--classJarOutput"); @@ -2019,7 +2020,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { " )"); scratch.file("java/r/android/res/values/strings.xml", "<resources><string name = 'hello'>Hello Android!</string></resources>"); - Artifact jar = getResourceClassJar(getConfiguredTarget("//java/r/android:r")); + Artifact jar = getResourceClassJar(getConfiguredTargetAndTarget("//java/r/android:r")); assertThat(getGeneratingAction(jar).getMnemonic()).isEqualTo("RClassGenerator"); List<String> args = getGeneratingSpawnActionArgs(jar); assertThat(args).containsAllOf("--primaryRTxt", "--primaryManifest", "--classJarOutput"); @@ -2044,7 +2045,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { "<resources><string name = 'lib_string'>Libs!</string></resources>"); scratch.file("java/r/android/res/values/strings.xml", "<resources><string name = 'hello'>Hello Android!</string></resources>"); - ConfiguredTarget binary = getConfiguredTarget("//java/r/android:r"); + ConfiguredTargetAndTarget binary = getConfiguredTargetAndTarget("//java/r/android:r"); Artifact jar = getResourceClassJar(binary); assertThat(getGeneratingAction(jar).getMnemonic()).isEqualTo("RClassGenerator"); List<String> args = getGeneratingSpawnActionArgs(jar); diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java index 70003b2b6e..657ecacd9d 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.rules.android.deployinfo.AndroidDeployInfoO import com.google.devtools.build.lib.rules.java.JavaCompileAction; import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -137,9 +138,9 @@ public abstract class AndroidBuildViewTestCase extends BuildViewTestCase { transitive ? info.getTransitiveAndroidResources() : info.getDirectAndroidResources()); } - protected Artifact getResourceClassJar(final ConfiguredTarget target) { + protected Artifact getResourceClassJar(final ConfiguredTargetAndTarget target) { JavaRuleOutputJarsProvider jarProvider = - JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, target); + JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, target.getConfiguredTarget()); assertThat(jarProvider).isNotNull(); return Iterables.find( jarProvider.getOutputJars(), diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java index 50d986494f..f50823be3a 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -117,9 +118,11 @@ public class AndroidInstrumentationTestTest extends AndroidBuildViewTestCase { @Test public void testTestExecutableRunfiles() throws Exception { - ConfiguredTarget androidInstrumentationTest = getConfiguredTarget("//javatests/com/app/ait"); + ConfiguredTargetAndTarget androidInstrumentationTest = + getConfiguredTargetAndTarget("//javatests/com/app/ait"); NestedSet<Artifact> runfiles = androidInstrumentationTest + .getConfiguredTarget() .getProvider(RunfilesProvider.class) .getDefaultRunfiles() .getAllArtifacts(); diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java index 8466857522..4d7c3fc697 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; import com.google.devtools.build.lib.packages.util.MockCcSupport; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.FileType; @@ -1126,14 +1127,15 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase { public void addOnlyStaticLibraryToFilesToBuildWhenWrappingIffImplicitOutput() throws Exception { // This shared library has the same name as the archive generated by this rule, so it should // override said archive. However, said archive should still be put in files to build. - ConfiguredTarget target = - scratchConfiguredTarget("a", "b", "cc_library(name = 'b', srcs = ['libb.so'])"); + ConfiguredTargetAndTarget target = + scratchConfiguredTargetAndTarget("a", "b", "cc_library(name = 'b', srcs = ['libb.so'])"); if (target.getTarget().getAssociatedRule().getImplicitOutputsFunction() != ImplicitOutputsFunction.NONE) { - assertThat(artifactsToStrings(getFilesToBuild(target))).containsExactly("bin a/libb.a"); + assertThat(artifactsToStrings(getFilesToBuild(target.getConfiguredTarget()))) + .containsExactly("bin a/libb.a"); } else { - assertThat(artifactsToStrings(getFilesToBuild(target))).isEmpty(); + assertThat(artifactsToStrings(getFilesToBuild(target.getConfiguredTarget()))).isEmpty(); } } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java index 9f8e1d09eb..7b575ac946 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/util/SkyframeExecutorTestUtils.java @@ -111,11 +111,12 @@ public class SkyframeExecutorTestUtils { */ public static Iterable<ConfiguredTarget> getExistingConfiguredTargets( SkyframeExecutor skyframeExecutor, final Label label) { - return Iterables.filter(getAllExistingConfiguredTargets(skyframeExecutor), + return Iterables.filter( + getAllExistingConfiguredTargets(skyframeExecutor), new Predicate<ConfiguredTarget>() { @Override public boolean apply(ConfiguredTarget input) { - return input.getTarget().getLabel().equals(label); + return input.getLabel().equals(label); } }); } diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java index 40500e66b6..6f8e3843b0 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.SkylarkProvider; import com.google.devtools.build.lib.packages.SkylarkProvider.SkylarkKey; +import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget; import com.google.devtools.build.lib.skyframe.PackageFunction; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction; @@ -107,7 +108,7 @@ public class SkylarkIntegrationTest extends BuildViewTestCase { } private AttributeContainer getContainerForTarget(String targetName) throws Exception { - ConfiguredTarget target = getConfiguredTarget("//test/skylark:" + targetName); + ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("//test/skylark:" + targetName); return target.getTarget().getAssociatedRule().getAttributeContainer(); } diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java index bc6a903e13..61dd892ff6 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java @@ -20,6 +20,7 @@ import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import static org.junit.Assert.fail; +import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; @@ -1401,7 +1402,7 @@ public class SkylarkRuleContextTest extends SkylarkTestCase { invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. assertThat( (List<Label>) - getConfiguredTarget("@foo//:baz") + getConfiguredTargetAndTarget("@foo//:baz") .getTarget() .getAssociatedRule() .getAttributeContainer() @@ -2035,10 +2036,11 @@ public class SkylarkRuleContextTest extends SkylarkTestCase { } catch (AssertionError e) { assertThat(e) .hasMessageThat() - .contains("cannot access field or method '" - + attribute.split("\\(")[0] - + "' of rule context for '//test:dep' outside of its own rule implementation " - + "function"); + .contains( + "cannot access field or method '" + + Iterables.get(Splitter.on('(').split(attribute), 0) + + "' of rule context for '//test:dep' outside of its own rule implementation " + + "function"); } } } @@ -2083,10 +2085,11 @@ public class SkylarkRuleContextTest extends SkylarkTestCase { } catch (AssertionError e) { assertThat(e) .hasMessageThat() - .contains("cannot access field or method '" - + attribute.split("\\(")[0] - + "' of rule context for '//test:dep' outside of its own rule implementation " - + "function"); + .contains( + "cannot access field or method '" + + Iterables.get(Splitter.on('(').split(attribute), 0) + + "' of rule context for '//test:dep' outside of its own rule implementation " + + "function"); } } } |