From d0a3c5eb67320906e4b937df5434f0e673cb6dce Mon Sep 17 00:00:00 2001 From: janakr Date: Thu, 9 Aug 2018 15:59:24 -0700 Subject: Batch all DependencyResolver#getTarget calls. This leads to some duplicate iteration, but that should be cheap, while requesting packages sequentially can hurt... PiperOrigin-RevId: 208126130 --- .../devtools/build/lib/analysis/BuildViewTest.java | 38 ++++++++++++++++++++++ .../analysis/ConfiguredAttributeMapperTest.java | 31 +++++++++--------- .../build/lib/analysis/DependencyResolverTest.java | 30 +++++++++++++---- .../select/AbstractAttributeMapperTest.java | 33 ++++++++----------- .../select/AggregatingAttributeMapperTest.java | 8 ++--- .../analysis/select/RawAttributeMapperTest.java | 9 +---- .../lib/analysis/util/BuildViewForTesting.java | 29 +++++++++++++---- 7 files changed, 114 insertions(+), 64 deletions(-) (limited to 'src/test') 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 b6107f4915..3b6221ad82 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 @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.pkgcache.LoadingFailureEvent; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; +import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.testutil.Suite; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -1320,6 +1321,43 @@ public class BuildViewTest extends BuildViewTestBase { + "java_binary); continuing anyway"); } + @Test + public void errorInImplicitDeps() throws Exception { + setRulesAvailableInTests( + (MockRule) + () -> { + try { + return MockRule.define( + "custom_rule", + attr("$implicit1", BuildType.LABEL_LIST) + .defaultValue( + ImmutableList.of( + Label.parseAbsoluteUnchecked("//bad2:label"), + Label.parseAbsoluteUnchecked("//foo:dep"))), + attr("$implicit2", BuildType.LABEL) + .defaultValue(Label.parseAbsoluteUnchecked("//bad:label"))); + } catch (Type.ConversionException e) { + throw new IllegalStateException(e); + } + }); + scratch.file("foo/BUILD", "custom_rule(name = 'foo')", "sh_library(name = 'dep')"); + scratch.file( + "bad/BUILD", + "sh_library(name = 'other_label', nonexistent_attribute = 'blah')", + "sh_library(name = 'label')"); + // bad2/BUILD is completely missing. + reporter.removeHandler(failFastHandler); + update(defaultFlags().with(Flag.KEEP_GOING), "//foo:foo"); + assertContainsEvent( + "every rule of type custom_rule implicitly depends upon the target '//bad2:label', but this" + + " target could not be found because of: no such package 'bad2': BUILD file not found " + + "on package path"); + assertContainsEvent( + "every rule of type custom_rule implicitly depends upon the target '//bad:label', but this " + + "target could not be found because of: Target '//bad:label' contains an error and its" + + " package is in error"); + } + @Test public void onlyAllowedRuleClassesWithWarning() throws Exception { setRulesAvailableInTests( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java index 15a90a87a1..f3014f20d0 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java @@ -19,13 +19,13 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.syntax.Type; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -114,37 +114,36 @@ public class ConfiguredAttributeMapperTest extends BuildViewTestCase { " name = 'defaultdep',", " srcs = ['defaultdep.sh'])"); - final List