aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-12-07 08:10:03 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-07 08:12:04 -0800
commit8e3ef748768cb81c53680e1a8093f6249b00a096 (patch)
tree86c63efc60dd0b68e807b0698d9bdb8a46b8edcb /src/main
parent45db110383c8dccb03979ea1745cd087c344a5a9 (diff)
Move the javabase middleman to within JavaRuntimeInfo.
This is necessary bacause //tools/jdk:current_host_java_runtime is implemented in Skylark, and we don't (and shouldn't) have a way to create MiddlemanProvider from there. However, we are planning to move to the the java_runtime_alias/java_host_runtime_alias rules as the exclusive representation of the javabase, so we need to be able to make one from Skylark. Previously, this wasn't a problem, because if the javabase was a filegroup (like //tools/defaults:jdk), the path to the Java binary was taken from the configuration and the middleman from the filegroup, but since we are removing that information from the configuration, we can't do that anymore. RELNOTES: None. PiperOrigin-RevId: 178242307
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeAlias.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeSuite.java2
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();