diff options
Diffstat (limited to 'src/main')
6 files changed, 31 insertions, 18 deletions
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 d9a2bc456e..86908110de 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 @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.java; import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL_LIST; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.AnalysisUtils; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; @@ -159,8 +158,8 @@ public abstract class JavaHelper { /** Returns the artifacts required to invoke {@code javahome} relative binary in the action. */ public static NestedSet<Artifact> getHostJavabaseInputs( RuleContext ruleContext, String implicitAttributesSuffix) { - return AnalysisUtils.getMiddlemanFor( - ruleContext, ":host_jdk" + implicitAttributesSuffix, Mode.HOST); + return JavaLibraryHelper.getJavaBaseMiddleman(ruleContext.getPrerequisite( + ":host_jdk" + implicitAttributesSuffix, Mode.HOST)); } public static JavaRuntimeInfo getJavaRuntime(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java index 4e36c4d1e8..6bb75b64b1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java @@ -201,7 +201,7 @@ public final class JavaLibraryHelper { attributes, deps); } - NestedSet<Artifact> hostJavabaseArtifacts = getMiddleManFor(hostJavabase); + NestedSet<Artifact> hostJavabaseArtifacts = getJavaBaseMiddleman(hostJavabase); JavaCompilationArtifacts.Builder artifactsBuilder = new JavaCompilationArtifacts.Builder(); JavaCompilationHelper helper = new JavaCompilationHelper(ruleContext, semantics, javacOpts, attributes, @@ -233,15 +233,26 @@ public final class JavaLibraryHelper { return artifactsBuilder.build(); } - private static NestedSet<Artifact> getMiddleManFor(TransitiveInfoCollection prereq) { + static NestedSet<Artifact> getJavaBaseMiddleman(TransitiveInfoCollection prereq) { if (prereq == null) { return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } - MiddlemanProvider provider = prereq.getProvider(MiddlemanProvider.class); - if (provider == null) { - return NestedSetBuilder.emptySet(Order.STABLE_ORDER); + + JavaRuntimeInfo javaRuntimeInfo = prereq.get(JavaRuntimeInfo.PROVIDER); + if (javaRuntimeInfo != null) { + return javaRuntimeInfo.javaBaseInputsMiddleman(); } - return provider.getMiddlemanArtifact(); + + MiddlemanProvider middlemanProvider = prereq.getProvider(MiddlemanProvider.class); + if (middlemanProvider != null) { + // This branch is necessary so that we support the legacy case when the javabase is set to + // a filegroup (e.g. //tools/defaults:jdk). + // TODO(lberki): Remove when we have migrated everyone from //tools/defaults:jdk to + // //tools/jdk:current_{host_,}java_runtime. + return middlemanProvider.getMiddlemanArtifact(); + } + + return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java index fb661031e3..0b66fd19cd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java @@ -19,7 +19,6 @@ import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.CompilationHelper; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; @@ -73,7 +72,7 @@ public class JavaRuntime implements RuleConfiguredTargetFactory { .build(); JavaRuntimeInfo javaRuntime = new JavaRuntimeInfo( - filesToBuild, javaHome, javaBinaryExecPath, javaBinaryRunfilesPath); + filesToBuild, middleman, javaHome, javaBinaryExecPath, javaBinaryRunfilesPath); TemplateVariableInfo templateVariableInfo = new TemplateVariableInfo(ImmutableMap.of( "JAVA", javaBinaryExecPath.getPathString(), @@ -83,7 +82,6 @@ public class JavaRuntime implements RuleConfiguredTargetFactory { .addProvider(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) .setFilesToBuild(filesToBuild) .addNativeDeclaredProvider(javaRuntime) - .addProvider(MiddlemanProvider.class, new MiddlemanProvider(middleman)) .addNativeDeclaredProvider(templateVariableInfo) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java index 71fd2b6ccb..4914b3445f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java @@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileProvider; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; @@ -53,7 +52,6 @@ public class JavaRuntimeAlias implements RuleConfiguredTargetFactory { .addNativeDeclaredProvider(runtime.get(JavaRuntimeInfo.PROVIDER)) .addNativeDeclaredProvider(runtime.get(TemplateVariableInfo.PROVIDER)) .addProvider(RunfilesProvider.class, runtime.getProvider(RunfilesProvider.class)) - .addProvider(MiddlemanProvider.class, runtime.getProvider(MiddlemanProvider.class)) .setFilesToBuild(runtime.getProvider(FileProvider.class).getFilesToBuild()); } else { // This happens when --javabase is an absolute path (as opposed to a label). In this case, @@ -62,6 +60,7 @@ public class JavaRuntimeAlias implements RuleConfiguredTargetFactory { Jvm jvm = ruleContext.getFragment(Jvm.class); JavaRuntimeInfo runtimeInfo = new JavaRuntimeInfo( NestedSetBuilder.emptySet(Order.STABLE_ORDER), + NestedSetBuilder.emptySet(Order.STABLE_ORDER), jvm.getJavaHome(), jvm.getJavaExecutable(), jvm.getJavaExecutable()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java index 87df25f808..7016ecb3aa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java @@ -34,15 +34,18 @@ public class JavaRuntimeInfo extends NativeInfo { new NativeProvider<JavaRuntimeInfo>(JavaRuntimeInfo.class, SKYLARK_NAME) {}; private final NestedSet<Artifact> javaBaseInputs; + private final NestedSet<Artifact> javaBaseInputsMiddleman; private final PathFragment javaHome; private final PathFragment javaBinaryExecPath; private final PathFragment javaBinaryRunfilesPath; public JavaRuntimeInfo( - NestedSet<Artifact> javaBaseInputs, PathFragment javaHome, - PathFragment javaBinaryExecPath, PathFragment javaBinaryRunfilesPath) { + NestedSet<Artifact> javaBaseInputs, NestedSet<Artifact> javaBaseInputsMiddleman, + PathFragment javaHome, PathFragment javaBinaryExecPath, + PathFragment javaBinaryRunfilesPath) { super(PROVIDER, ImmutableMap.<String, Object>of()); this.javaBaseInputs = javaBaseInputs; + this.javaBaseInputsMiddleman = javaBaseInputsMiddleman; this.javaHome = javaHome; this.javaBinaryExecPath = javaBinaryExecPath; this.javaBinaryRunfilesPath = javaBinaryRunfilesPath; @@ -53,6 +56,11 @@ public class JavaRuntimeInfo extends NativeInfo { return javaBaseInputs; } + /** A middleman representing the javabase. */ + public NestedSet<Artifact> javaBaseInputsMiddleman() { + return javaBaseInputsMiddleman; + } + /** The root directory of the Java installation. */ public PathFragment javaHome() { return javaHome; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeSuite.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeSuite.java index f3bc6fd522..e3e990b6b7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeSuite.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeSuite.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.java; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileProvider; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; @@ -47,7 +46,6 @@ public class JavaRuntimeSuite implements RuleConfiguredTargetFactory { return new RuleConfiguredTargetBuilder(ruleContext) .addNativeDeclaredProvider(runtime.get(JavaRuntimeInfo.PROVIDER)) .addProvider(RunfilesProvider.class, runtime.getProvider(RunfilesProvider.class)) - .addProvider(MiddlemanProvider.class, runtime.getProvider(MiddlemanProvider.class)) .addNativeDeclaredProvider(templateVariableInfo) .setFilesToBuild(runtime.getProvider(FileProvider.class).getFilesToBuild()) .build(); |