Flip the flag --incompatible_static_name_resolution_in_build_files
Fixes https://github.com/bazelbuild/bazel/issues/8022
RELNOTES: --incompatible_static_name_resolution_in_build_files is now enabled by default
PiperOrigin-RevId: 249521083
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index 2de6c55..edcfbf3 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -528,7 +528,7 @@
@Option(
name = "incompatible_static_name_resolution_in_build_files",
- defaultValue = "false",
+ defaultValue = "true",
documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
metadataTags = {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index bc576d6..3d1d3e6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -250,7 +250,7 @@
.incompatibleRemapMainRepo(false)
.incompatibleRemoveNativeMavenJar(false)
.incompatibleRestrictNamedParams(false)
- .incompatibleStaticNameResolutionInBuildFiles(false)
+ .incompatibleStaticNameResolutionInBuildFiles(true)
.incompatibleStringJoinRequiresStrings(false)
.internalSkylarkFlagTestCanary(false)
.incompatibleDoNotSplitLinkingCmdline(false)
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 f221cab..9379951 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
@@ -638,15 +638,13 @@
scratch.file("parent/BUILD",
"sh_library(name = 'foo',",
" srcs = ['//badpkg1:okay-target', '//okaypkg:transitively-bad-target'])");
- Path badpkg1BuildFile = scratch.file("badpkg1/BUILD",
- "exports_files(['okay-target'])",
- "invalidbuildsyntax");
+ Path badpkg1BuildFile =
+ scratch.file("badpkg1/BUILD", "exports_files(['okay-target'])", "fail()");
scratch.file("okaypkg/BUILD",
"sh_library(name = 'transitively-bad-target',",
" srcs = ['//badpkg2:bad-target'])");
- Path badpkg2BuildFile = scratch.file("badpkg2/BUILD",
- "sh_library(name = 'bad-target')",
- "invalidbuildsyntax");
+ Path badpkg2BuildFile =
+ scratch.file("badpkg2/BUILD", "sh_library(name = 'bad-target')", "fail()");
update(defaultFlags().with(Flag.KEEP_GOING), "//parent:foo");
assertThat(getFrequencyOfErrorsWithLocation(badpkg1BuildFile.asFragment(), eventCollector))
.isEqualTo(1);
@@ -695,12 +693,9 @@
return;
}
reporter.removeHandler(failFastHandler);
- scratch.file("parent/BUILD",
- "sh_library(name = 'a', deps = ['//child:b'])",
- "parentisbad");
- scratch.file("child/BUILD",
- "sh_library(name = 'b')",
- "childisbad");
+ scratch.file(
+ "parent/BUILD", "sh_library(name = 'a', deps = ['//child:b'])", "fail('parentisbad')");
+ scratch.file("child/BUILD", "sh_library(name = 'b')", "fail('childisbad')");
update(defaultFlags().with(Flag.KEEP_GOING), "//parent:a");
assertContainsEventWithFrequency("parentisbad", 1);
assertContainsEventWithFrequency("childisbad", 1);
@@ -1042,12 +1037,10 @@
}
scratch.file("parent/BUILD",
"sh_library(name = 'a', deps = ['//child:b'])");
- scratch.file("child/BUILD",
- "sh_library(name = 'b')",
- "undefined_symbol");
+ scratch.file("child/BUILD", "sh_library(name = 'b')", "fail('some error')");
reporter.removeHandler(failFastHandler);
assertThrows(ViewCreationFailedException.class, () -> update("//parent:a"));
- assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ assertContainsEventWithFrequency("some error", 1);
assertContainsEventWithFrequency(
"Target '//child:b' contains an error and its package is in error and referenced "
+ "by '//parent:a'", 1);
@@ -1061,12 +1054,10 @@
}
scratch.file("parent/BUILD",
"sh_library(name = 'a', deps = ['//child:b'])");
- scratch.file("child/BUILD",
- "sh_library(name = 'b')",
- "undefined_symbol");
+ scratch.file("child/BUILD", "sh_library(name = 'b')", "fail('some error')");
reporter.removeHandler(failFastHandler);
update(defaultFlags().with(Flag.KEEP_GOING), "//parent:a");
- assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ assertContainsEventWithFrequency("some error", 1);
assertContainsEventWithFrequency(
"Target '//child:b' contains an error and its package is in error and referenced "
+ "by '//parent:a'", 1);
@@ -1080,15 +1071,13 @@
}
scratch.file("parent/BUILD",
"sh_library(name = 'a', deps = ['//child:b'])");
- scratch.file("child/BUILD",
- "sh_library(name = 'b')",
- "undefined_symbol");
+ scratch.file("child/BUILD", "sh_library(name = 'b')", "fail('some error')");
scratch.file("okay/BUILD",
"sh_binary(name = 'okay', srcs = ['okay.sh'])");
useConfiguration("--experimental_action_listener=//parent:a");
reporter.removeHandler(failFastHandler);
assertThrows(ViewCreationFailedException.class, () -> update("//okay"));
- assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ assertContainsEventWithFrequency("some error", 1);
assertContainsEventWithFrequency(
"Target '//child:b' contains an error and its package is in error and referenced "
+ "by '//parent:a'", 1);
@@ -1102,15 +1091,13 @@
}
scratch.file("parent/BUILD",
"sh_library(name = 'a', deps = ['//child:b'])");
- scratch.file("child/BUILD",
- "sh_library(name = 'b')",
- "undefined_symbol");
+ scratch.file("child/BUILD", "sh_library(name = 'b')", "fail('some error')");
scratch.file("okay/BUILD",
"sh_binary(name = 'okay', srcs = ['okay.sh'])");
useConfiguration("--experimental_action_listener=//parent:a");
reporter.removeHandler(failFastHandler);
update(defaultFlags().with(Flag.KEEP_GOING), "//okay");
- assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ assertContainsEventWithFrequency("some error", 1);
assertContainsEventWithFrequency(
"Target '//child:b' contains an error and its package is in error and referenced "
+ "by '//parent:a'", 1);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java
index 071c486..6678bf4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestBase.java
@@ -93,9 +93,7 @@
scratch.file("okaypkg/BUILD",
"sh_library(name = 'transitively-a-cycle',",
" srcs = ['//symlinkcycle:cycle'])");
- Path badpkgBuildFile = scratch.file("badpkg/BUILD",
- "exports_files(['okay-target'])",
- "invalidbuildsyntax");
+ Path badpkgBuildFile = scratch.file("badpkg/BUILD", "exports_files(['okay-target'])", "fail()");
if (incremental) {
update(defaultFlags().with(Flag.KEEP_GOING), "//okaypkg:transitively-a-cycle");
assertContainsEvent("circular symlinks detected");
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
index 4caa852..bdd7d35 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -714,9 +714,7 @@
/*includes=*/ ImmutableList.of("W*", "subdir"),
/*excludes=*/ ImmutableList.<String>of(),
/* excludeDirs= */ true));
- assertThat(e)
- .hasMessageThat()
- .isEqualTo("ERROR /globs/BUILD:2:73: name 'this_will_fail' is not defined");
+ assertThat(e).hasMessageThat().isEqualTo("ERROR /globs/BUILD:2:73: incorrect glob result");
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
index 7c3adb0..ec94250 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
@@ -199,16 +199,12 @@
List<String> result, List<String> includes, List<String> excludes, boolean excludeDirs)
throws Exception {
- // The BUILD language, unlike Skylark, doesn't have fail(), so instead,
- // we rely on boolean short circuit logic to only try to evaluate
- // the undefined identifier this_will_fail if the result isn't as expected,
- // in which case an error occurs (which we test in testGlobNegativeTest).
Pair<Package, GlobCache> evaluated =
evaluateGlob(
includes,
excludes,
excludeDirs,
- Printer.format("(result == sorted(%r)) or this_will_fail()", result));
+ Printer.format("(result == sorted(%r)) or fail('incorrect glob result')", result));
Package pkg = evaluated.first;
GlobCache globCache = evaluated.second;
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
index 7a08d8d..ad872a6 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
@@ -735,23 +735,19 @@
@Test
public void testTopLevelTargetErrorsPrintedExactlyOnce_NoKeepGoing() throws Exception {
- tester.addFile("bad/BUILD",
- "sh_binary(name = 'bad', srcs = ['bad.sh'])",
- "undefined_symbol");
+ tester.addFile("bad/BUILD", "sh_binary(name = 'bad', srcs = ['bad.sh'])", "fail('some error')");
assertThrows(TargetParsingException.class, () -> tester.load("//bad"));
- tester.assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ tester.assertContainsEventWithFrequency("some error", 1);
PatternExpandingError err = tester.findPostOnce(PatternExpandingError.class);
assertThat(err.getPattern()).containsExactly("//bad");
}
@Test
public void testTopLevelTargetErrorsPrintedExactlyOnce_KeepGoing() throws Exception {
- tester.addFile("bad/BUILD",
- "sh_binary(name = 'bad', srcs = ['bad.sh'])",
- "undefined_symbol");
+ tester.addFile("bad/BUILD", "sh_binary(name = 'bad', srcs = ['bad.sh'])", "fail('some error')");
TargetPatternPhaseValue result = tester.loadKeepGoing("//bad");
assertThat(result.hasError()).isTrue();
- tester.assertContainsEventWithFrequency("name 'undefined_symbol' is not defined", 1);
+ tester.assertContainsEventWithFrequency("some error", 1);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
index 8dcdf8e..8bf0d8d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
@@ -292,7 +292,6 @@
scratch.file("BUILD", "");
RootedPath workspace =
createWorkspaceFile(
- "WORKSPACE",
"workspace(name = 'good')",
"local_repository(name = 'a', path = '../a', repo_mapping = {'@x' : '@y'})",
"load('//:b.bzl', 'b')",
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index 2d25e1a..60bbb78 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -703,20 +703,19 @@
@Test
public void testIfStatementForbiddenInBuild() throws Exception {
- new BuildTest()
- .testIfErrorContains("if statements are not allowed in BUILD files", "if False: pass");
+ new BuildTest().testIfErrorContains("if statements are not allowed", "if False: pass");
}
@Test
public void testKwargsForbiddenInBuild() throws Exception {
new BuildTest()
- .testIfErrorContains("**kwargs arguments are not allowed in BUILD files", "func(**dict)");
+ .testIfErrorContains("**kwargs arguments are not allowed in BUILD files", "print(**dict)");
}
@Test
public void testArgsForbiddenInBuild() throws Exception {
new BuildTest()
- .testIfErrorContains("*args arguments are not allowed in BUILD files", "func(*array)");
+ .testIfErrorContains("*args arguments are not allowed in BUILD files", "print(*['a'])");
}
@Test