diff options
author | cushon <cushon@google.com> | 2017-06-08 02:17:53 -0400 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-06-08 10:53:07 -0400 |
commit | da56606563ee9df438db93392f681bf2abb4ac97 (patch) | |
tree | 3f53f49d8f23e77727bce9ba7e1cfe2a9fd8d3a5 | |
parent | 923d7df521f67d031b288180560848bd35e20976 (diff) |
Use JavaCompilationArtifacts instead of JavaCompilationArgs
to store Java compilation artifacts. Round-tripping through
JavaCompilationArgs loses dependency information that upstream
compilations use to optimize compile time classpaths.
PiperOrigin-RevId: 158360995
5 files changed, 31 insertions, 27 deletions
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 7a58f46c6e..ca960a950f 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 @@ -24,6 +24,8 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; 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; +import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode; import com.google.devtools.build.lib.util.Preconditions; import java.util.ArrayList; @@ -140,10 +142,8 @@ public final class JavaLibraryHelper { return this; } - /** - * Creates the compile actions. - */ - public JavaCompilationArgs build( + /** Creates the compile actions. */ + public JavaCompilationArtifacts build( JavaSemantics semantics, JavaToolchainProvider javaToolchainProvider, NestedSet<Artifact> hostJavabase, @@ -184,7 +184,7 @@ public final class JavaLibraryHelper { helper.createCompileTimeJarAction(output, artifactsBuilder); artifactsBuilder.addRuntimeJar(output); - return JavaCompilationArgs.builder().merge(artifactsBuilder.build()).build(); + return artifactsBuilder.build(); } /** @@ -199,7 +199,8 @@ public final class JavaLibraryHelper { * compilation. Contrast this with {@link #setCompilationStrictDepsMode}. */ public JavaCompilationArgsProvider buildCompilationArgsProvider( - JavaCompilationArgs directArgs, boolean isReportedAsStrict) { + JavaCompilationArtifacts artifacts, boolean isReportedAsStrict) { + JavaCompilationArgs directArgs = JavaCompilationArgs.builder().merge(artifacts).build(); JavaCompilationArgs transitiveArgs = JavaCompilationArgs.builder() .addTransitiveArgs(directArgs, BOTH) @@ -207,7 +208,10 @@ public final class JavaLibraryHelper { .build(); return JavaCompilationArgsProvider.create( - isReportedAsStrict ? directArgs : transitiveArgs, transitiveArgs); + isReportedAsStrict ? directArgs : transitiveArgs, + transitiveArgs, + NestedSetBuilder.create(Order.STABLE_ORDER, artifacts.getCompileTimeDependencyArtifact()), + NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); } private void addDepsToAttributes(JavaTargetAttributes.Builder attributes) { 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 4f975a1c76..60e38a8528 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 @@ -222,7 +222,7 @@ public class JavaSkylarkCommon { : hostJavabaseProvider.getMiddlemanArtifact(); JavaToolchainProvider javaToolchainProvider = checkNotNull(javaToolchain.getProvider(JavaToolchainProvider.class)); - JavaCompilationArgs artifacts = + JavaCompilationArtifacts artifacts = helper.build( javaSemantics, javaToolchainProvider, diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java index e76072a523..a6d05f99e8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java @@ -36,9 +36,9 @@ public abstract class ProtoJavaApiInfoProvider implements TransitiveInfoProvider JavaCompilationArgs transitiveJavaCompilationArgss1, JavaCompilationArgs transitiveJavaCompilationArgssMutable, JavaCompilationArgs transitiveJavaCompilationArgssImmutable, - JavaCompilationArgs javaCompilationArgs1, - JavaCompilationArgs javaCompilationArgsMutable, - JavaCompilationArgs javaCompilationArgsImmutable, + JavaCompilationArtifacts javaCompilationArgs1, + JavaCompilationArtifacts javaCompilationArgsMutable, + JavaCompilationArtifacts javaCompilationArgsImmutable, Artifact sourceJar1, Artifact sourceJarMutable, Artifact sourceJarImmutable, @@ -111,22 +111,20 @@ public abstract class ProtoJavaApiInfoProvider implements TransitiveInfoProvider */ public abstract JavaCompilationArgs getTransitiveJavaCompilationArgsImmutable(); - /** - * Returns the artifacts for java compilation (API version 1) for only this target. - */ - public abstract JavaCompilationArgs getJavaCompilationArgs1(); + /** Returns the artifacts for java compilation (API version 1) for only this target. */ + public abstract JavaCompilationArtifacts getJavaCompilationArtifacts1(); /** - * Returns the artifacts for java compilation (API version 2, code for mutable API) - * for only this target. + * Returns the artifacts for java compilation (API version 2, code for mutable API) for only this + * target. */ - public abstract JavaCompilationArgs getJavaCompilationArgsMutable(); + public abstract JavaCompilationArtifacts getJavaCompilationArtifactsMutable(); /** - * Returns the artifacts for java compilation (API version 2, code for immutable API) - * for only this target. + * Returns the artifacts for java compilation (API version 2, code for immutable API) for only + * this target. */ - public abstract JavaCompilationArgs getJavaCompilationArgsImmutable(); + public abstract JavaCompilationArtifacts getJavaCompilationArtifactsImmutable(); // The following 3 fields are the -src.jar artifact created by proto_library. If a certain // proto_library does not produce some artifact, it'll be null. This can happen for example when diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java index bb75a937d5..3dec6f0286 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.rules.java.JavaCompilationArgs; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider; import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider; @@ -52,7 +53,7 @@ public class ActionReuser { return false; } - JavaCompilationArgs directJars = javaApi.getJavaCompilationArgsImmutable(); + JavaCompilationArtifacts directJars = javaApi.getJavaCompilationArtifactsImmutable(); if (isEmpty(directJars.getCompileTimeJars()) || javaApi.sourceJarImmutable() == null) { return false; } @@ -61,7 +62,7 @@ public class ActionReuser { JavaCompilationArgs.builder() .addTransitiveArgs(javaApi.getTransitiveJavaCompilationArgsImmutable(), BOTH) .addTransitiveDependencies(javaApi.getProtoRuntimeImmutable(), true /* recursive */) - .addTransitiveArgs(directJars, BOTH) + .merge(directJars) .build(); Artifact outputJar = getOnlyElement(directJars.getRuntimeJars()); @@ -70,9 +71,10 @@ public class ActionReuser { JavaCompilationArgsProvider compilationArgsProvider = JavaCompilationArgsProvider.create( - directJars, + JavaCompilationArgs.builder().merge(directJars).build(), transitiveJars, - NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), + NestedSetBuilder.create( + Order.STABLE_ORDER, directJars.getCompileTimeDependencyArtifact()), NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); JavaSkylarkApiProvider.Builder skylarkApiProvider = 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 967756c490..debd453926 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 @@ -46,8 +46,8 @@ import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.Rule; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgs; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaCompilationHelper; import com.google.devtools.build.lib.rules.java.JavaConfiguration; import com.google.devtools.build.lib.rules.java.JavaHelper; @@ -255,7 +255,7 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured helper.addDep(runtime.getProvider(JavaCompilationArgsProvider.class)); } helper.setCompilationStrictDepsMode(StrictDepsMode.OFF); - JavaCompilationArgs artifacts = + JavaCompilationArtifacts artifacts = helper.build( javaSemantics, JavaCompilationHelper.getJavaToolchainProvider(ruleContext), |