aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2017-06-08 02:17:53 -0400
committerGravatar John Cater <jcater@google.com>2017-06-08 10:53:07 -0400
commitda56606563ee9df438db93392f681bf2abb4ac97 (patch)
tree3f53f49d8f23e77727bce9ba7e1cfe2a9fd8d3a5
parent923d7df521f67d031b288180560848bd35e20976 (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
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java4
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),