From a6ed4c01d374bcf98bf39c1efc12a0f4f20fe313 Mon Sep 17 00:00:00 2001 From: elenairina Date: Fri, 24 Nov 2017 07:23:55 -0800 Subject: Create the output source jar in java_common.compile and expose transitive source jars to Skylark. Slightly refactor java classes to take in specific host javabase inputs and host java executable for creating the source jar, instead of always relying on fetching them from native java rules specific attributes. Creating the output source jar in java_common.compile makes the behavior more similar to java_library. Exposing the transitive_source_jars to Skylark helps with the Skylark migration from the old 'java' provider to JavaInfo. Progress on #2614. RELNOTES: transitive_source_jars is now exposed on JavaInfo. PiperOrigin-RevId: 176844750 --- .../devtools/build/lib/rules/java/JavaCommon.java | 18 ++++++ .../lib/rules/java/JavaCompilationHelper.java | 21 +++++++ .../devtools/build/lib/rules/java/JavaHelper.java | 14 +++++ .../devtools/build/lib/rules/java/JavaInfo.java | 20 +++++- .../build/lib/rules/java/JavaLibraryHelper.java | 47 +++++++++++--- .../build/lib/rules/java/JavaSkylarkCommon.java | 52 ++++++++++----- .../lib/rules/java/SingleJarActionBuilder.java | 73 +++++++++++++++------- .../lib/rules/java/proto/JavaLiteProtoAspect.java | 14 ++--- .../lib/rules/java/proto/JavaProtoAspect.java | 5 +- 9 files changed, 208 insertions(+), 56 deletions(-) (limited to 'src/main/java/com/google/devtools/build') 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 dbcccb88d0..10610aa4cf 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 @@ -473,6 +473,24 @@ public class JavaCommon { : ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(); } + /** + * Returns the host java executable. + * + *

The method looks for the executable in the following + * locations (in the specified order) and returns it immediately after it's found: + *

    + *
  1. The JavaRuntimeInfo in the given hostJavabase target + *
  2. The JVM fragment of the host configuration, retrieved from the given rule context + *
+ */ + public static PathFragment getHostJavaExecutable( + RuleContext ruleContext, TransitiveInfoCollection hostJavabase) { + JavaRuntimeInfo javaRuntime = hostJavabase.get(JavaRuntimeInfo.PROVIDER); + return javaRuntime != null + ? javaRuntime.javaBinaryExecPath() + : ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(); + } + public static PathFragment getJavaExecutable(RuleContext ruleContext) { JavaRuntimeInfo javaRuntime = JavaHelper.getJavaRuntime(ruleContext); return javaRuntime != null 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 d0fd5b862b..64140170cf 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 @@ -582,7 +582,28 @@ public final class JavaCompilationHelper { * @param outputJar the Artifact to create with the Action * @param gensrcJar the generated sources jar Artifact that should be included with the * sources in the output Artifact. May be null. + * @param javaToolchainProvider is used by SingleJarActionBuilder to retrieve jvm options + * @param hostJavabaseInputs Artifacts required to invoke java executable in the SingleJar action + * @param hostJavaExecutable the jar executable of the SingleJar action */ + public void createSourceJarAction( + Artifact outputJar, + @Nullable Artifact gensrcJar, + JavaToolchainProvider javaToolchainProvider, + NestedSet hostJavabaseInputs, + PathFragment hostJavaExecutable) { + JavaTargetAttributes attributes = getAttributes(); + NestedSetBuilder resourceJars = NestedSetBuilder.stableOrder(); + resourceJars.addAll(attributes.getSourceJars()); + if (gensrcJar != null) { + resourceJars.add(gensrcJar); + } + SingleJarActionBuilder.createSourceJarAction( + ruleContext, semantics, attributes.getSourceFiles(), + resourceJars.build(), outputJar, javaToolchainProvider, + hostJavabaseInputs, hostJavaExecutable); + } + public void createSourceJarAction(Artifact outputJar, @Nullable Artifact gensrcJar) { JavaTargetAttributes attributes = getAttributes(); NestedSetBuilder resourceJars = NestedSetBuilder.stableOrder(); 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 91dbb09897..d9a2bc456e 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 @@ -137,6 +137,20 @@ public abstract class JavaHelper { return rootRelativePath.relativeTo(prefix); } + /** Returns the configured target found under the {@code :host_jdk} attribute of a given rule. */ + public static TransitiveInfoCollection getHostJavabaseTarget(RuleContext ruleContext) { + return getHostJavabaseTarget(ruleContext, ""); + } + + /** + * Returns the configured target found under the {@code :host_jdk + implicitAttributesSuffix} + * attribute of a given rule. + * */ + public static TransitiveInfoCollection getHostJavabaseTarget( + RuleContext ruleContext, String implicitAttributesSuffix) { + return ruleContext.getPrerequisite(":host_jdk" + implicitAttributesSuffix, Mode.HOST); + } + /** Returns the artifacts required to invoke {@code javahome} relative binary in the action. */ public static NestedSet getHostJavabaseInputs(RuleContext ruleContext) { return getHostJavabaseInputs(ruleContext, ""); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index 9384d0cbdf..d93f4ba52c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -22,6 +22,9 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap; import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; @@ -31,7 +34,6 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import javax.annotation.Nullable; @@ -119,7 +121,7 @@ public final class JavaInfo extends NativeInfo { */ public static List fetchProvidersFromList( Iterable javaProviders, Class providersClass) { - List fetchedProviders = new LinkedList<>(); + List fetchedProviders = new ArrayList<>(); for (JavaInfo javaInfo : javaProviders) { C provider = javaInfo.getProvider(providersClass); if (provider != null) { @@ -271,6 +273,20 @@ public final class JavaInfo extends NativeInfo { providers.getProvider(JavaSourceJarsProvider.class).getSourceJars()); } + @SkylarkCallable( + name = "transitive_source_jars", + doc = "Returns the Jars containing Java source files for the target and all of its " + + "transitive dependencies.", + structField = true + ) + public NestedSet getTransitiveSourceJars() { + JavaSourceJarsProvider sourceJarsProvider = getProvider(JavaSourceJarsProvider.class); + if (sourceJarsProvider == null) { + return NestedSetBuilder.emptySet(Order.STABLE_ORDER); + } + return sourceJarsProvider.getTransitiveSourceJars(); + } + @SkylarkCallable( name = "outputs", doc = "Returns information about outputs of this Java target.", 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 941e7b6e98..ae0e58a437 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 @@ -22,7 +22,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -32,6 +34,7 @@ import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.Outpu import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import javax.annotation.Nullable; /** * A class to create Java compile actions in a way that is consistent with java_library. Rules that @@ -156,15 +159,24 @@ public final class JavaLibraryHelper { } /** - * Creates the compile actions. Also fills in the {@link JavaRuleOutputJarsProvider.Builder} with - * the corresponding compilation outputs. + * Creates the compile actions (including the ones for ijar and source jar). Also fills in the + * {@link JavaRuleOutputJarsProvider.Builder} with the corresponding compilation outputs. + * + * @param semantics implementation specific java rules semantics + * @param javaToolchainProvider used for retrieving misc java tools + * @param hostJavabase the target of the host javabase used to retrieve the java executable and + * its necessary inputs + * @param jacocoInstrumental jacoco jars needed when running coverage + * @param outputJarsBuilder populated with the outputs of the created actions + * @param outputSourceJar if not-null, the output of an source jar action that will be created */ public JavaCompilationArtifacts build( JavaSemantics semantics, JavaToolchainProvider javaToolchainProvider, - NestedSet hostJavabase, + TransitiveInfoCollection hostJavabase, Iterable jacocoInstrumental, - JavaRuleOutputJarsProvider.Builder outputJarsBuilder) { + JavaRuleOutputJarsProvider.Builder outputJarsBuilder, + @Nullable Artifact outputSourceJar) { Preconditions.checkState(output != null, "must have an output file; use setOutput()"); JavaTargetAttributes.Builder attributes = new JavaTargetAttributes.Builder(semantics); attributes.addSourceJars(sourceJars); @@ -185,11 +197,12 @@ public final class JavaLibraryHelper { attributes, deps); } + NestedSet hostJavabaseArtifacts = getMiddleManFor(hostJavabase); JavaCompilationArtifacts.Builder artifactsBuilder = new JavaCompilationArtifacts.Builder(); JavaCompilationHelper helper = new JavaCompilationHelper(ruleContext, semantics, javacOpts, attributes, javaToolchainProvider, - hostJavabase, + hostJavabaseArtifacts, jacocoInstrumental); Artifact outputDepsProto = helper.createOutputDepsProtoArtifact(output, artifactsBuilder); helper.createCompileAction( @@ -198,17 +211,35 @@ public final class JavaLibraryHelper { null /* gensrcOutputJar */, outputDepsProto, null /* outputMetadata */); + Artifact iJar = helper.createCompileTimeJarAction(output, artifactsBuilder); artifactsBuilder.addRuntimeJar(output); - outputJarsBuilder - .addOutputJar(new OutputJar(output, iJar, sourceJars)) - .setJdeps(outputDepsProto); + if (outputSourceJar != null) { + helper.createSourceJarAction(outputSourceJar, null, + javaToolchainProvider, hostJavabaseArtifacts, + JavaCommon.getHostJavaExecutable(ruleContext, hostJavabase)); + ImmutableList outputSourceJars = ImmutableList.of(outputSourceJar); + outputJarsBuilder + .addOutputJar(new OutputJar(output, iJar, outputSourceJars)) + .setJdeps(outputDepsProto); + } return artifactsBuilder.build(); } + private static NestedSet getMiddleManFor(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); + } + return provider.getMiddlemanArtifact(); + } + /** * Returns a JavaCompilationArgsProvider that fully encapsulates this compilation, based on the * result of a call to build(). (that is, it contains the compile-time and runtime jars, separated diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java index a061157513..a79f498c59 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java @@ -20,7 +20,6 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; @@ -403,7 +402,11 @@ public class JavaSkylarkCommon { ConfiguredTarget javaToolchain, ConfiguredTarget hostJavabase, SkylarkList sourcepathEntries, - SkylarkList resources) throws EvalException { + SkylarkList resources) throws EvalException, InterruptedException { + if (sourceJars.isEmpty() && sourceFiles.isEmpty() && exports.isEmpty()) { + throw new EvalException( + null, "source_jars, sources and exports cannot be simultaneous empty"); + } JavaLibraryHelper helper = new JavaLibraryHelper(skylarkRuleContext.getRuleContext()) @@ -421,25 +424,27 @@ public class JavaSkylarkCommon { helper.addAllDeps(depsCompilationArgsProviders); helper.addAllExports(exportsCompilationArgsProviders); helper.setCompilationStrictDepsMode(getStrictDepsMode(strictDepsMode.toUpperCase())); - MiddlemanProvider hostJavabaseProvider = hostJavabase.getProvider(MiddlemanProvider.class); helper.addAllPlugins( JavaInfo.fetchProvidersFromList(plugins, JavaPluginInfoProvider.class)); helper.addAllPlugins(JavaInfo.fetchProvidersFromList(deps, JavaPluginInfoProvider.class)); - NestedSet hostJavabaseArtifacts = - hostJavabaseProvider == null - ? NestedSetBuilder.emptySet(Order.STABLE_ORDER) - : hostJavabaseProvider.getMiddlemanArtifact(); - JavaToolchainProvider javaToolchainProvider = getJavaToolchainProvider(javaToolchain); JavaRuleOutputJarsProvider.Builder outputJarsBuilder = JavaRuleOutputJarsProvider.builder(); + + boolean generateMergedSourceJar = (sourceJars.size() > 1 || !sourceFiles.isEmpty()) + || (sourceJars.isEmpty() && sourceFiles.isEmpty() && !exports.isEmpty()); + Artifact outputSourceJar = + generateMergedSourceJar ? getSourceJar(skylarkRuleContext) : sourceJars.get(0); + JavaCompilationArtifacts artifacts = helper.build( javaSemantics, - javaToolchainProvider, - hostJavabaseArtifacts, + getJavaToolchainProvider(javaToolchain), + hostJavabase, SkylarkList.createImmutable(ImmutableList.of()), - outputJarsBuilder); + outputJarsBuilder, + generateMergedSourceJar ? outputSourceJar : null); + JavaCompilationArgsProvider javaCompilationArgsProvider = helper.buildCompilationArgsProvider(artifacts, true); Runfiles runfiles = @@ -456,15 +461,30 @@ public class JavaSkylarkCommon { JavaPluginInfoProvider.class, exports) )); + ImmutableList outputSourceJars = ImmutableList.of(outputSourceJar); + + NestedSetBuilder transitiveSourceJars = + NestedSetBuilder.stableOrder().addAll(outputSourceJars); + for (JavaSourceJarsProvider sourceJarsProvider : + JavaInfo.getProvidersFromListOfJavaProviders(JavaSourceJarsProvider.class, deps)) { + transitiveSourceJars.addTransitive(sourceJarsProvider.getTransitiveSourceJars()); + } + return JavaInfo.Builder.create() .addProvider(JavaCompilationArgsProvider.class, javaCompilationArgsProvider) - .addProvider(JavaSourceJarsProvider.class, createJavaSourceJarsProvider(sourceJars)) + .addProvider(JavaSourceJarsProvider.class, + createJavaSourceJarsProvider(outputSourceJars, transitiveSourceJars.build())) .addProvider(JavaRuleOutputJarsProvider.class, outputJarsBuilder.build()) .addProvider(JavaRunfilesProvider.class, new JavaRunfilesProvider(runfiles)) .addProvider(JavaPluginInfoProvider.class, transitivePluginsProvider) .build(); } + private static Artifact getSourceJar(SkylarkRuleContext skylarkRuleContext) throws EvalException { + return skylarkRuleContext.getRuleContext() + .getBinArtifact("lib" + skylarkRuleContext.getLabel().getName() + "-src.jar"); + } + private static Artifact buildIjar( SkylarkActionFactory actions, Artifact inputJar, @@ -487,13 +507,13 @@ public class JavaSkylarkCommon { return interfaceJar; } /** - * Creates a {@link JavaSourceJarsProvider} from the given list of source jars. + * Creates a {@link JavaSourceJarsProvider} from the given lists of source jars. */ - private static JavaSourceJarsProvider createJavaSourceJarsProvider(List sourceJars) { + private static JavaSourceJarsProvider createJavaSourceJarsProvider( + List sourceJars, NestedSet transitiveSourceJars) { NestedSet javaSourceJars = NestedSetBuilder.stableOrder().addAll(sourceJars).build(); - return JavaSourceJarsProvider.create( - NestedSetBuilder.emptySet(Order.STABLE_ORDER), javaSourceJars); + return JavaSourceJarsProvider.create(transitiveSourceJars, javaSourceJars); } @SkylarkCallable( 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 61ee42d124..1897453608 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 @@ -28,7 +28,7 @@ import com.google.devtools.build.lib.analysis.actions.ParamFileInfo; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import javax.annotation.Nullable; +import com.google.devtools.build.lib.vfs.PathFragment; /** * Helper class to create singlejar actions - singlejar can merge multiple zip files without @@ -45,19 +45,22 @@ public final class SingleJarActionBuilder { "--warn_duplicate_resources"); /** Constructs the base spawn for a singlejar action. */ - private static SpawnAction.Builder singleJarActionBuilder(RuleContext ruleContext) { - Artifact singleJar = JavaToolchainProvider.from(ruleContext).getSingleJar(); + private static SpawnAction.Builder singleJarActionBuilder( + JavaToolchainProvider provider, + NestedSet hostJavabaseInputs, + PathFragment hostJavaExecutable) { + Artifact singleJar = provider.getSingleJar();; SpawnAction.Builder builder = new SpawnAction.Builder(); // If singlejar's name ends with .jar, it is Java application, otherwise it is native. // TODO(asmundak): once https://github.com/bazelbuild/bazel/issues/2241 is fixed (that is, // the native singlejar is used on windows) remove support for the Java implementation if (singleJar.getFilename().endsWith(".jar")) { builder - .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext)) + .addTransitiveInputs(hostJavabaseInputs) .setJarExecutable( - JavaCommon.getHostJavaExecutable(ruleContext), + hostJavaExecutable, singleJar, - JavaToolchainProvider.from(ruleContext).getJvmOptions()) + provider.getJvmOptions()) .setExecutionInfo(ExecutionRequirements.WORKER_MODE_ENABLED); } else { builder.setExecutable(singleJar); @@ -68,26 +71,50 @@ public final class SingleJarActionBuilder { /** * Creates an Action that packages files into a Jar file. * - * @param semantics the current Java semantics, which must be non-{@code null} if {@code - * resources} is non-empty - * @param resources the resources to put into the Jar + * @param resources the resources to put into the Jar. * @param resourceJars the resource jars to merge into the jar * @param outputJar the Jar to create */ public static void createSourceJarAction( RuleContext ruleContext, - @Nullable JavaSemantics semantics, + JavaSemantics semantics, ImmutableCollection resources, NestedSet resourceJars, Artifact outputJar) { + createSourceJarAction( + ruleContext, semantics, resources, resourceJars, outputJar, + JavaToolchainProvider.from(ruleContext), + JavaHelper.getHostJavabaseInputs(ruleContext), + JavaCommon.getHostJavaExecutable(ruleContext)); + } + + /** + * Creates an Action that packages files into a Jar file. + * + * @param resources the resources to put into the Jar. + * @param resourceJars the resource jars to merge into the jar + * @param outputJar the Jar to create + * @param toolchainProvider is used to retrieve jvm options + * @param hostJavabaseInputs Artifacts required to invoke java executable in the created action + * @param hostJavaExecutable the jar executable of the created action + */ + public static void createSourceJarAction( + RuleContext ruleContext, + JavaSemantics semantics, + ImmutableCollection resources, + NestedSet resourceJars, + Artifact outputJar, + JavaToolchainProvider toolchainProvider, + NestedSet hostJavabaseInputs, + PathFragment hostJavaExecutable) { requireNonNull(ruleContext); requireNonNull(resourceJars); requireNonNull(outputJar); if (!resources.isEmpty()) { requireNonNull(semantics); } - SpawnAction.Builder builder = - singleJarActionBuilder(ruleContext) + SpawnAction.Builder builder = singleJarActionBuilder( + toolchainProvider, hostJavabaseInputs, hostJavaExecutable) .addOutput(outputJar) .addInputs(resources) .addTransitiveInputs(resourceJars) @@ -111,15 +138,18 @@ public final class SingleJarActionBuilder { requireNonNull(jars); requireNonNull(output); SpawnAction.Builder builder = - singleJarActionBuilder(ruleContext) - .addOutput(output) - .addInputs(jars) - .addCommandLine( - sourceJarCommandLine( - output, /* semantics= */ null, /* resources= */ ImmutableList.of(), jars), - ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).setUseAlways(true).build()) - .setProgressMessage("Building singlejar jar %s", output.prettyPrint()) - .setMnemonic("JavaSingleJar"); + singleJarActionBuilder( + JavaToolchainProvider.from(ruleContext), + JavaHelper.getHostJavabaseInputs(ruleContext), + JavaCommon.getHostJavaExecutable(ruleContext)) + .addOutput(output) + .addInputs(jars) + .addCommandLine( + sourceJarCommandLine( + output, /* semantics= */ null, /* resources= */ ImmutableList.of(), jars), + ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).setUseAlways(true).build()) + .setProgressMessage("Building singlejar jar %s", output.prettyPrint()) + .setMnemonic("JavaSingleJar"); ruleContext.registerAction(builder.build(ruleContext)); } @@ -146,3 +176,4 @@ public final class SingleJarActionBuilder { semantics.getDefaultJavaResourcePath(resource.getRootRelativePath())); } } + diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java index 7d87f9891d..2392d68af5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java @@ -264,13 +264,13 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured } } - JavaCompilationArtifacts artifacts = - helper.build( - javaSemantics, - JavaCompilationHelper.getJavaToolchainProvider(ruleContext), - JavaHelper.getHostJavabaseInputs(ruleContext), - JavaCompilationHelper.getInstrumentationJars(ruleContext), - JavaRuleOutputJarsProvider.builder()); + JavaCompilationArtifacts artifacts = helper.build( + javaSemantics, + JavaCompilationHelper.getJavaToolchainProvider(ruleContext), + JavaHelper.getHostJavabaseTarget(ruleContext), + JavaCompilationHelper.getInstrumentationJars(ruleContext), + JavaRuleOutputJarsProvider.builder(), + /*outputSourceJar=*/ null); return helper.buildCompilationArgsProvider(artifacts, true /* isReportedAsStrict */); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java index 4603add72f..7185d2e302 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java @@ -306,9 +306,10 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe helper.build( javaSemantics, JavaCompilationHelper.getJavaToolchainProvider(ruleContext), - JavaHelper.getHostJavabaseInputs(ruleContext), + JavaHelper.getHostJavabaseTarget(ruleContext), JavaCompilationHelper.getInstrumentationJars(ruleContext), - JavaRuleOutputJarsProvider.builder()), + JavaRuleOutputJarsProvider.builder(), + /*outputSourceJar=*/ null), true /* isReportedAsStrict */); } -- cgit v1.2.3