diff options
author | 2017-07-07 09:48:58 -0400 | |
---|---|---|
committer | 2017-07-07 13:37:45 -0400 | |
commit | 38f74a23738f8f1e0e0e3bc49d41a479f311dbe9 (patch) | |
tree | f19a5bef9900c4f5830f38b0953849feff7da8ac | |
parent | 06152ea49275609996578be999d7abc20a1a76bc (diff) |
Remove all non-essential call sites of methods on Jvm.
This is so that we can eventually route the information it now contains through JavaRuntimeProvider.
RELNOTES: None.
PiperOrigin-RevId: 161196809
16 files changed, 51 insertions, 49 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index 43307fb12f..49fface0ea 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -261,7 +261,7 @@ public class BazelJavaSemantics implements JavaSemantics { arguments.add(Substitution.of("%workspace_prefix%", workspacePrefix)); arguments.add(Substitution.of("%javabin%", javaExecutable)); arguments.add(Substitution.of("%needs_runfiles%", - ruleContext.getFragment(Jvm.class).getJavaExecutable().isAbsolute() ? "0" : "1")); + JavaCommon.getJavaExecutable(ruleContext).isAbsolute() ? "0" : "1")); TransitiveInfoCollection testSupport = getTestSupport(ruleContext); NestedSet<Artifact> testSupportJars = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index 6b9663bba0..202f6507e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -38,7 +38,6 @@ import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider; import com.google.devtools.build.lib.rules.java.JavaToolchainProvider; -import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.vfs.PathFragment; /** @@ -283,7 +282,7 @@ public class AarImport implements RuleConfiguredTargetFactory { if (singleJar.getFilename().endsWith(".jar")) { builder .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions()) .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 71a7c79a11..5623e55630 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -67,7 +67,6 @@ import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; import com.google.devtools.build.lib.rules.java.JavaTargetAttributes; import com.google.devtools.build.lib.rules.java.JavaToolchainProvider; -import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.rules.java.ProguardHelper; import com.google.devtools.build.lib.rules.java.ProguardHelper.ProguardOutput; import com.google.devtools.build.lib.syntax.Type; @@ -1586,7 +1585,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { if (singleJar.getFilename().endsWith(".jar")) { builder .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions()) .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 6e764477b5..b562eac1ea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -186,8 +186,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor getJvmFlags(ruleContext, testClass), executable, mainClass, - JavaCommon.getJavaBinSubstitution( - ruleContext, JavaHelper.getJavaRuntime(ruleContext), launcher)); + JavaCommon.getJavaBinSubstitution(ruleContext, launcher)); Artifact deployJar = ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_DEPLOY_JAR); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index 5f8e1de21b..038974b993 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -21,9 +21,9 @@ import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.ApkSigningMethod; +import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaHelper; import com.google.devtools.build.lib.rules.java.JavaToolchainProvider; -import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.PathFragment; @@ -410,7 +410,7 @@ public class ApkActionsBuilder { if (singleJar.getFilename().endsWith(".jar")) { builder .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions()) .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index e110a34174..5aa4340af5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java @@ -278,7 +278,7 @@ public class DeployArchiveBuilder { .addOutput(outputJar) .setResources(resourceSet) .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singlejar, jvmArgs) .setCommandLine(commandLine) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index 8142ce6c3b..c734e0a9b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -232,8 +232,6 @@ public class JavaBinary implements RuleConfiguredTargetFactory { CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext) .getDynamicRuntimeLinkInputs(); - JavaRuntimeProvider javaRuntime = JavaHelper.getJavaRuntime(ruleContext); - Iterables.addAll(jvmFlags, semantics.getJvmFlags(ruleContext, common.getSrcsArtifacts(), userJvmFlags)); if (ruleContext.hasErrors()) { @@ -250,7 +248,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory { jvmFlags, executableForRunfiles, mainClass, - JavaCommon.getJavaBinSubstitution(ruleContext, javaRuntime, launcher)); + JavaCommon.getJavaBinSubstitution(ruleContext, launcher)); if (!executableToRun.equals(executableForRunfiles)) { filesBuilder.add(executableToRun); runfilesBuilder.addArtifact(executableToRun); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 02d6f935fa..5779e65cfc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -466,14 +466,29 @@ public class JavaCommon { .collect(toImmutableList()); } + public static PathFragment getHostJavaExecutable(RuleContext ruleContext) { + JavaRuntimeProvider javaRuntime = JavaHelper.getHostJavaRuntime(ruleContext); + return javaRuntime != null + ? javaRuntime.javaBinaryExecPath() + : ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(); + } + + public static PathFragment getJavaExecutable(RuleContext ruleContext) { + JavaRuntimeProvider javaRuntime = JavaHelper.getJavaRuntime(ruleContext); + return javaRuntime != null + ? javaRuntime.javaBinaryExecPath() + : ruleContext.getFragment(Jvm.class).getJavaExecutable(); + } + /** * Returns the string that the stub should use to determine the JVM * @param launcher if non-null, the cc_binary used to launch the Java Virtual Machine */ public static String getJavaBinSubstitution( - RuleContext ruleContext, JavaRuntimeProvider javaRuntime, @Nullable Artifact launcher) { + RuleContext ruleContext, @Nullable Artifact launcher) { Preconditions.checkState(ruleContext.getConfiguration().hasFragment(Jvm.class)); PathFragment javaExecutable; + JavaRuntimeProvider javaRuntime = JavaHelper.getJavaRuntime(ruleContext); if (launcher != null) { javaExecutable = launcher.getRootRelativePath(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index cd622dff0c..e6cdecf6d4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -457,10 +457,7 @@ public final class JavaCompilationHelper { .addOutput(genClassJar) .addTransitiveInputs(getHostJavabaseInputs(getRuleContext())) .setJarExecutable( - getRuleContext() - .getHostConfiguration() - .getFragment(Jvm.class) - .getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), getGenClassJar(ruleContext), javaToolchain.getJvmOptions()) .setCommandLine( @@ -543,8 +540,7 @@ public final class JavaCompilationHelper { private JavaCompileAction.Builder createJavaCompileActionBuilder( JavaSemantics semantics) { JavaCompileAction.Builder builder = new JavaCompileAction.Builder(ruleContext, semantics); - builder.setJavaExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable()); + builder.setJavaExecutable(JavaCommon.getHostJavaExecutable(ruleContext)); builder.setJavaBaseInputs( NestedSetBuilder .fromNestedSet(hostJavabase) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java index a82ca291a3..93f1da06bc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java @@ -387,7 +387,7 @@ public class JavaHeaderCompileAction extends SpawnAction { .addOutputs(outputs) .setCommandLine(commandLine.build()) .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), javaToolchain.getHeaderCompiler(), ImmutableList.<String>builder() .add("-Xbootclasspath/p:" + javacJar.getExecPath()) @@ -486,7 +486,7 @@ public class JavaHeaderCompileAction extends SpawnAction { private CustomCommandLine.Builder getBaseArgs(JavaToolchainProvider javaToolchain) { return CustomCommandLine.builder() - .addPath(ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable()) + .addPath(JavaCommon.getHostJavaExecutable(ruleContext)) .add("-Xverify:none") .add(javaToolchain.getJvmOptions()) .addPaths("-Xbootclasspath/p:%s", javacJar.getExecPath()) 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 c6e16e1911..cb06a32b1f 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 @@ -155,11 +155,16 @@ public abstract class JavaHelper { } TransitiveInfoCollection jvm = ruleContext.getPrerequisite(":jvm", Mode.TARGET); - if (jvm == null) { + return jvm == null ? null : jvm.getProvider(JavaRuntimeProvider.class); + } + + public static JavaRuntimeProvider getHostJavaRuntime(RuleContext ruleContext) { + if (!ruleContext.attributes().has(":host_jdk", BuildType.LABEL)) { return null; } - return jvm.getProvider(JavaRuntimeProvider.class); + TransitiveInfoCollection jvm = ruleContext.getPrerequisite(":host_jdk", Mode.HOST); + return jvm == null ? null : jvm.getProvider(JavaRuntimeProvider.class); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java index 1661e8dcc9..a5c5ec7170 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.rules.java; import com.google.common.collect.ImmutableMap.Builder; +import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -41,7 +42,7 @@ public final class Jvm extends BuildConfiguration.Fragment { private final Label jvmLabel; private final PathFragment java; - private static final String BIN_JAVA = "bin/java" + OsUtils.executableExtension(); + public static final String BIN_JAVA = "bin/java" + OsUtils.executableExtension(); /** * Creates a Jvm instance. Either the {@code javaHome} parameter is absolute, @@ -56,15 +57,11 @@ public final class Jvm extends BuildConfiguration.Fragment { } /** - * Returns a path fragment that determines the path to the installation - * directory. It is either absolute or relative to the execution root. - */ - public PathFragment getJavaHome() { - return javaHome; - } - - /** * Returns the path to the java binary. + * + * <p>Don't use this method because it relies on package loading during configuration creation. + * Use {@link JavaCommon#getHostJavaExecutable(RuleContext)} and + * {@link JavaCommon#getJavaExecutable(RuleContext)} instead. */ @SkylarkCallable(name = "java_executable", structField = true, doc = "The java executable, i.e. bin/java relative to the Java home.") diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java index 28c0709cfc..eaa06555fb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java @@ -92,7 +92,7 @@ public class ResourceJarActionBuilder { if (singleJar.getFilename().endsWith(".jar")) { builder .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singleJar, javaToolchain.getJvmOptions()) .addTransitiveInputs(javabase); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java index 4586ac543d..578f94b6e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java @@ -62,7 +62,7 @@ public final class SingleJarActionBuilder { builder .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)) .setJarExecutable( - ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(), + JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions()) .setExecutionInfo(ExecutionRequirements.WORKER_MODE_ENABLED); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 81b9bfb19d..60a24514e0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -54,6 +54,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider; +import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider; import com.google.devtools.build.lib.rules.java.JavaHelper; @@ -476,7 +477,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF JavaCompilationArgsProvider compArgsProvider, J2ObjcSource j2ObjcSource) { CustomCommandLine.Builder argBuilder = CustomCommandLine.builder(); - PathFragment javaExecutable = ruleContext.getFragment(Jvm.class, HOST).getJavaExecutable(); + PathFragment javaExecutable = JavaCommon.getHostJavaExecutable(ruleContext); argBuilder.add("--java").add(javaExecutable.getPathString()); Artifact j2ObjcDeployJar = ruleContext.getPrerequisiteArtifact("$j2objc", Mode.HOST); diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleConfiguredTargetTest.java index 5db130848c..c2dee96a2b 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRuleConfiguredTargetTest.java @@ -28,12 +28,10 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileConfiguredTarget; import com.google.devtools.build.lib.analysis.actions.SpawnAction; -import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; -import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.List; import java.util.regex.Matcher; @@ -335,18 +333,13 @@ public class GenRuleConfiguredTargetTest extends BuildViewTestCase { Artifact javaOutput = getFileConfiguredTarget("//foo:java.txt").getArtifact(); Artifact javabaseOutput = getFileConfiguredTarget("//foo:javabase.txt").getArtifact(); - String expectedPattern = "echo %s > %s"; + String javaCommand = + ((SpawnAction) getGeneratingAction(javaOutput)).getArguments().get(2); + assertThat(javaCommand).containsMatch("jdk/bin/java(.exe)? >"); - BuildConfiguration hostConfig = getHostConfiguration(); - String expectedJava = hostConfig.getFragment(Jvm.class).getJavaExecutable().getPathString(); - String expectedJavabase = hostConfig.getFragment(Jvm.class).getJavaHome().getPathString(); - - assertCommandEquals( - String.format(expectedPattern, expectedJava, javaOutput.getExecPathString()), - ((SpawnAction) getGeneratingAction(javaOutput)).getArguments().get(2)); - assertCommandEquals( - String.format(expectedPattern, expectedJavabase, javabaseOutput.getExecPathString()), - ((SpawnAction) getGeneratingAction(javabaseOutput)).getArguments().get(2)); + String javabaseCommand = + ((SpawnAction) getGeneratingAction(javabaseOutput)).getArguments().get(2); + assertThat(javabaseCommand).contains("jdk >"); } // Returns the expansion of 'cmd' for the specified genrule. |