diff options
author | Liam Miller-Cushon <cushon@google.com> | 2016-08-10 20:03:43 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-08-11 09:14:52 +0000 |
commit | cf00c82a394e5a392a55c058ed01483d2e39c3db (patch) | |
tree | 8ffa90a1a8fd27f775bbcfa728454eb77c242b41 /src/main/java/com/google/devtools/build/lib | |
parent | 33faf91356e0b9d0326f5d0330c2cf7189cf4da1 (diff) |
Roll forward commit 94c86135d05a1844263c59f3ce6b1c1917e0f4c8
And don't provide a default value for :java_launcher
--
MOS_MIGRATED_REVID=129900898
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
5 files changed, 42 insertions, 35 deletions
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 e3d59df802..d47723828a 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.common.collect.ImmutableSet; 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; 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 @@ public class BazelJavaRuleClasses { 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 @@ public class BazelJavaRuleClasses { attr("launcher", LABEL) .allowedFileTypes(FileTypeSet.NO_FILE) .allowedRuleClasses("cc_binary")) - .add(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER)) // blaze flag + .add(attr(":cmdline_launcher", LABEL).value(JAVA_LAUNCHER)) .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 0de34ae90c..833d76d808 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 @@ public final class BazelJavaTestRule implements RuleDefinition { .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/JavaHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java index e4295674fb..d1c625e0b9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java @@ -68,19 +68,21 @@ public abstract class JavaHelper { return null; } // BUILD rule "launcher" attribute - if (ruleContext.getRule().isAttrDefined("launcher", BuildType.LABEL) - && ruleContext.attributes().get("launcher", BuildType.LABEL) != null) { - if (isJdkLauncher(ruleContext, ruleContext.attributes().get("launcher", BuildType.LABEL))) { - return null; + if (ruleContext.getRule().isAttrDefined("launcher", BuildType.LABEL)) { + Label launcher = ruleContext.attributes().get("launcher", BuildType.LABEL); + if (launcher != null) { + return isJdkLauncher(ruleContext, launcher) ? null : "launcher"; } - return "launcher"; } // Blaze flag --java_launcher - JavaConfiguration javaConfig = ruleContext.getFragment(JavaConfiguration.class); - if (ruleContext.getRule().isAttrDefined(":java_launcher", BuildType.LABEL) - && javaConfig.getJavaLauncherLabel() != null - && !isJdkLauncher(ruleContext, javaConfig.getJavaLauncherLabel())) { - return ":java_launcher"; + if (ruleContext.getRule().isAttrDefined("$default_launcher", BuildType.LABEL)) { + JavaConfiguration javaConfig = ruleContext.getFragment(JavaConfiguration.class); + if (javaConfig.getJavaLauncherLabel() != null) { + return isJdkLauncher(ruleContext, javaConfig.getJavaLauncherLabel()) + ? null + : ":cmdline_launcher"; + } + return "$default_launcher"; } return null; } 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 0c787bc713..65049fef5f 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 class JavaOptions extends FragmentOptions { ) 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 2e1435e0a1..c2b5875f49 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 @@ public interface JavaSemantics { } }; - /** - * 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 |