aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2017-11-10 01:22:14 +0100
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-11-10 23:27:50 +0100
commit2b1531802f90de3d46aea9b5d331899c1d459765 (patch)
treeb5b4f7bb719cda26a527a1a7f5e825048c4db8d7 /src/main/java/com/google/devtools/build/lib
parentd76b395e9f1062a7dafce9fcac9fb85a64ed1bfa (diff)
Allow JavaBuilder to be an arbitrary executable.
instead of assuming it is a deploy jar. PiperOrigin-RevId: 175229774
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java1
5 files changed, 24 insertions, 17 deletions
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 be2c218d7c..0ba822fb4c 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
@@ -45,7 +45,6 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.LinkedList;
import java.util.List;
import javax.annotation.Nullable;
@@ -203,7 +202,7 @@ public final class JavaCompilationHelper {
builder.setExtdirInputs(getExtdirInputs());
builder.setLangtoolsJar(javaToolchain.getJavac());
builder.setToolsJars(javaToolchain.getTools());
- builder.setJavaBuilderJar(javaToolchain.getJavaBuilder());
+ builder.setJavaBuilder(javaToolchain.getJavaBuilder());
builder.setOutputJar(classJar);
builder.setManifestProtoOutput(manifestProtoOutput);
builder.setGensrcOutputJar(gensrcOutputJar);
@@ -678,7 +677,7 @@ public final class JavaCompilationHelper {
JavaClasspathMode classpathMode = getJavaConfiguration().getReduceJavaClasspath();
if (isStrict() && classpathMode != JavaClasspathMode.OFF) {
- List<JavaCompilationArgsProvider> compilationArgsProviders = new LinkedList<>();
+ List<JavaCompilationArgsProvider> compilationArgsProviders = new ArrayList<>();
for (TransitiveInfoCollection dep : deps) {
JavaCompilationArgsProvider provider =
JavaInfo.getProvider(JavaCompilationArgsProvider.class, dep);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 499d39e520..20324ac641 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -34,13 +34,14 @@ import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
-import com.google.devtools.build.lib.actions.EmptyRunfilesSupplier;
import com.google.devtools.build.lib.actions.ParameterFile;
import com.google.devtools.build.lib.actions.ResourceSet;
import com.google.devtools.build.lib.actions.Root;
+import com.google.devtools.build.lib.actions.RunfilesSupplier;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
import com.google.devtools.build.lib.actions.extra.JavaCompileInfo;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
+import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
@@ -191,7 +192,8 @@ public final class JavaCompileAction extends SpawnAction {
Map<String, String> executionInfo,
StrictDepsMode strictJavaDeps,
NestedSet<Artifact> compileTimeDependencyArtifacts,
- CharSequence progressMessage) {
+ CharSequence progressMessage,
+ RunfilesSupplier runfiles) {
super(
owner,
tools,
@@ -204,7 +206,7 @@ public final class JavaCompileAction extends SpawnAction {
UTF8_ACTION_ENVIRONMENT,
ImmutableMap.copyOf(executionInfo),
progressMessage,
- EmptyRunfilesSupplier.INSTANCE,
+ runfiles,
"Javac",
false /*executeUnconditionally*/,
null /*extraActionInfoSupplier*/);
@@ -438,6 +440,11 @@ public final class JavaCompileAction extends SpawnAction {
public Iterable<String> argv() {
checkNotNull(javaBuilderJar);
+ if (!javaBuilderJar.getExtension().equals("jar")) {
+ // JavaBuilder is a non-deploy.jar executable.
+ return ImmutableList.of(javaBuilderJar.getExecPathString());
+ }
+
CustomCommandLine.Builder builder =
CustomCommandLine.builder().addPath(javaExecutable).addAll(javaBuilderJvmFlags);
if (!instrumentationJars.isEmpty()) {
@@ -517,7 +524,7 @@ public final class JavaCompileAction extends SpawnAction {
private ImmutableList<Artifact> bootclasspathEntries = ImmutableList.of();
private ImmutableList<Artifact> sourcePathEntries = ImmutableList.of();
private ImmutableList<Artifact> extdirInputs = ImmutableList.of();
- private Artifact javaBuilderJar;
+ private FilesToRunProvider javaBuilder;
private Artifact langtoolsJar;
private NestedSet<Artifact> toolsJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
private ImmutableList<Artifact> instrumentationJars = ImmutableList.of();
@@ -609,7 +616,7 @@ public final class JavaCompileAction extends SpawnAction {
CustomMultiArgv spawnCommandLineBase =
spawnCommandLineBase(
javaExecutable,
- javaBuilderJar,
+ javaBuilder.getExecutable(),
instrumentationJars,
javacJvmOpts,
semantics.getJavaBuilderMainClass(),
@@ -626,7 +633,7 @@ public final class JavaCompileAction extends SpawnAction {
NestedSetBuilder.<Artifact>stableOrder()
.add(langtoolsJar)
.addTransitive(toolsJars)
- .add(javaBuilderJar)
+ .addTransitive(javaBuilder.getFilesToRun())
.addAll(instrumentationJars)
.build();
@@ -667,7 +674,8 @@ public final class JavaCompileAction extends SpawnAction {
executionInfo,
strictJavaDeps,
compileTimeDependencyArtifacts,
- getProgressMessage());
+ getProgressMessage(),
+ javaBuilder.getRunfilesSupplier());
}
private CustomCommandLine buildParamFileContents(Collection<String> javacOpts) {
@@ -985,8 +993,8 @@ public final class JavaCompileAction extends SpawnAction {
return this;
}
- public Builder setJavaBuilderJar(Artifact javaBuilderJar) {
- this.javaBuilderJar = javaBuilderJar;
+ public Builder setJavaBuilder(FilesToRunProvider javaBuilder) {
+ this.javaBuilder = javaBuilder;
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
index 8e03989803..bd02c857a1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
@@ -57,7 +57,8 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory {
boolean javacSupportsWorkers =
ruleContext.attributes().get("javac_supports_workers", Type.BOOLEAN);
Artifact javac = ruleContext.getPrerequisiteArtifact("javac", Mode.HOST);
- Artifact javabuilder = ruleContext.getPrerequisiteArtifact("javabuilder", Mode.HOST);
+ FilesToRunProvider javabuilder =
+ ruleContext.getExecutablePrerequisite("javabuilder", Mode.HOST);
Artifact headerCompiler = ruleContext.getPrerequisiteArtifact("header_compiler", Mode.HOST);
boolean forciblyDisableHeaderCompilation =
ruleContext.attributes().get("forcibly_disable_header_compilation", Type.BOOLEAN);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 1c7c9b2f57..d9fb72fb17 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -47,7 +47,7 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider {
List<String> defaultJavacFlags,
Artifact javac,
NestedSet<Artifact> tools,
- Artifact javaBuilder,
+ FilesToRunProvider javaBuilder,
@Nullable Artifact headerCompiler,
boolean forciblyDisableHeaderCompilation,
Artifact singleJar,
@@ -112,8 +112,8 @@ public abstract class JavaToolchainProvider implements TransitiveInfoProvider {
/** Returns the {@link Artifact}s of compilation tools. */
public abstract NestedSet<Artifact> getTools();
- /** Returns the {@link Artifact} of the JavaBuilder deploy jar */
- public abstract Artifact getJavaBuilder();
+ /** Returns the {@link FilesToRunProvider} of JavaBuilder */
+ public abstract FilesToRunProvider getJavaBuilder();
/** @return the {@link Artifact} of the Header Compiler deploy jar */
@Nullable public abstract Artifact getHeaderCompiler();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index 4068aa4671..408ca4c432 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -115,7 +115,6 @@ public final class JavaToolchainRule implements RuleDefinition {
attr("javabuilder", LABEL_LIST)
.mandatory()
.cfg(HOST)
- .singleArtifact()
.allowedFileTypes(FileTypeSet.ANY_FILE)
.exec())
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(singlejar) -->