From 2b1531802f90de3d46aea9b5d331899c1d459765 Mon Sep 17 00:00:00 2001 From: cushon Date: Fri, 10 Nov 2017 01:22:14 +0100 Subject: Allow JavaBuilder to be an arbitrary executable. instead of assuming it is a deploy jar. PiperOrigin-RevId: 175229774 --- .../lib/rules/java/JavaCompilationHelper.java | 5 ++--- .../build/lib/rules/java/JavaCompileAction.java | 26 ++++++++++++++-------- .../build/lib/rules/java/JavaToolchain.java | 3 ++- .../lib/rules/java/JavaToolchainProvider.java | 6 ++--- .../build/lib/rules/java/JavaToolchainRule.java | 1 - 5 files changed, 24 insertions(+), 17 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') 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 compilationArgsProviders = new LinkedList<>(); + List 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 executionInfo, StrictDepsMode strictJavaDeps, NestedSet 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 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 bootclasspathEntries = ImmutableList.of(); private ImmutableList sourcePathEntries = ImmutableList.of(); private ImmutableList extdirInputs = ImmutableList.of(); - private Artifact javaBuilderJar; + private FilesToRunProvider javaBuilder; private Artifact langtoolsJar; private NestedSet toolsJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER); private ImmutableList 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.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 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 defaultJavacFlags, Artifact javac, NestedSet 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 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()) /* -- cgit v1.2.3