Enable the Java launcher by default
--
MOS_MIGRATED_REVID=128421303
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
index e3d59df..3206e03 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
@@ -30,8 +30,11 @@
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.PredicateWithMessage;
@@ -41,6 +44,7 @@
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.RuleClass.PackageNameConstraint;
import com.google.devtools.build.lib.packages.TriState;
+import com.google.devtools.build.lib.rules.java.JavaConfiguration;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
import com.google.devtools.build.lib.syntax.Type;
@@ -57,6 +61,22 @@
protected static final String JUNIT_TESTRUNNER = "//tools/jdk:TestRunner_deploy.jar";
+ /**
+ * Implementation for the :java_launcher attribute. Note that the Java launcher is disabled by
+ * default, so it returns null for the configuration-independent default value.
+ */
+ public static final LateBoundLabel<BuildConfiguration> JAVA_LAUNCHER =
+ new LateBoundLabel<BuildConfiguration>(JavaConfiguration.class) {
+ @Override
+ public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ // don't read --java_launcher if this target overrides via a launcher attribute
+ if (attributes != null && attributes.isAttributeValueExplicitlySpecified("launcher")) {
+ return attributes.get("launcher", LABEL);
+ }
+ return configuration.getFragment(JavaConfiguration.class).getJavaLauncherLabel();
+ }
+ };
+
public static final ImplicitOutputsFunction JAVA_BINARY_IMPLICIT_OUTPUTS =
fromFunctions(
JavaSemantics.JAVA_BINARY_CLASS_JAR,
@@ -387,7 +407,7 @@
attr("launcher", LABEL)
.allowedFileTypes(FileTypeSet.NO_FILE)
.allowedRuleClasses("cc_binary"))
- .add(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER)) // blaze flag
+ .add(attr(":java_launcher", LABEL).value(JAVA_LAUNCHER)) // blaze flag
.add(
attr("$no_launcher", NODEP_LABEL_LIST)
.value(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
index 0de34ae..833d76d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
@@ -59,7 +59,6 @@
.add(attr(":extra_proguard_specs", LABEL_LIST).value(JavaSemantics.EXTRA_PROGUARD_SPECS))
.override(attr("stamp", TRISTATE).value(TriState.NO))
.override(attr("use_testrunner", BOOLEAN).value(true))
- .override(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER))
// TODO(dmarting): remove once we drop the legacy bazel java_test behavior.
.override(attr("main_class", STRING).value(JUNIT4_RUNNER))
/* <!-- #BLAZE_RULE(java_test).ATTRIBUTE(test_class) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index d09339f..ea17d1e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -282,12 +282,15 @@
)
public Label hostJavaLauncher;
- @Option(name = "java_launcher",
- defaultValue = "null",
- converter = LabelConverter.class,
- category = "semantics",
- help = "If enabled, a specific Java launcher is used. "
- + "The \"launcher\" attribute overrides this flag. ")
+ @Option(
+ name = "java_launcher",
+ defaultValue = "null",
+ converter = LabelConverter.class,
+ category = "semantics",
+ help =
+ "The Java launcher to use when building Java binaries. "
+ + "The \"launcher\" attribute overrides this flag. "
+ )
public Label javaLauncher;
@Option(name = "proguard_top",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
index 2e1435e..c2b5875 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.rules.java;
-import static com.google.devtools.build.lib.packages.BuildType.LABEL;
import static com.google.devtools.build.lib.packages.ImplicitOutputsFunction.fromTemplates;
import com.google.common.collect.ImmutableList;
@@ -143,22 +142,6 @@
}
};
- /**
- * Implementation for the :java_launcher attribute. Note that the Java launcher is disabled by
- * default, so it returns null for the configuration-independent default value.
- */
- LateBoundLabel<BuildConfiguration> JAVA_LAUNCHER =
- new LateBoundLabel<BuildConfiguration>(JavaConfiguration.class) {
- @Override
- public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
- // don't read --java_launcher if this target overrides via a launcher attribute
- if (attributes != null && attributes.isAttributeValueExplicitlySpecified("launcher")) {
- return attributes.get("launcher", LABEL);
- }
- return configuration.getFragment(JavaConfiguration.class).getJavaLauncherLabel();
- }
- };
-
LateBoundLabelList<BuildConfiguration> JAVA_PLUGINS =
new LateBoundLabelList<BuildConfiguration>() {
@Override
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 bb630a3..0dc24e1 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
@@ -380,7 +380,7 @@
*
* @throws IllegalArgumentException
*/
- protected final void useConfiguration(String... args) throws Exception {
+ protected void useConfiguration(String... args) throws Exception {
masterConfig = createConfigurations(args);
targetConfig = getTargetConfiguration();
configurationArgs = Arrays.asList(args);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java
index a466c95..5b60e0f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java
@@ -25,14 +25,12 @@
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.util.FileType;
-
+import java.io.IOException;
+import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.io.IOException;
-import java.util.Arrays;
-
/**
* Tests for {@link Filegroup}.
*/
@@ -52,9 +50,11 @@
@Test
public void testDependencyGraph() throws Exception {
- scratch.file("java/com/google/test/BUILD",
+ scratch.file(
+ "java/com/google/test/BUILD",
"java_binary(name = 'test_app',",
" resources = [':data'],",
+ " create_executable = 0,",
" srcs = ['InputFile.java', 'InputFile2.java'])",
"filegroup(name = 'data',",
" srcs = ['b.txt', 'a.txt'])");