Skip to content

Commit da56606

Browse files
cushonkatre
authored andcommitted
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
1 parent 923d7df commit da56606

File tree

5 files changed

+31
-27
lines changed

5 files changed

+31
-27
lines changed

src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.devtools.build.lib.analysis.RuleContext;
2525
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode;
2626
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
27+
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
28+
import com.google.devtools.build.lib.collect.nestedset.Order;
2729
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
2830
import com.google.devtools.build.lib.util.Preconditions;
2931
import java.util.ArrayList;
@@ -140,10 +142,8 @@ public JavaLibraryHelper setCompilationStrictDepsMode(StrictDepsMode strictDepsM
140142
return this;
141143
}
142144

143-
/**
144-
* Creates the compile actions.
145-
*/
146-
public JavaCompilationArgs build(
145+
/** Creates the compile actions. */
146+
public JavaCompilationArtifacts build(
147147
JavaSemantics semantics,
148148
JavaToolchainProvider javaToolchainProvider,
149149
NestedSet<Artifact> hostJavabase,
@@ -184,7 +184,7 @@ public JavaCompilationArgs build(
184184
helper.createCompileTimeJarAction(output, artifactsBuilder);
185185
artifactsBuilder.addRuntimeJar(output);
186186

187-
return JavaCompilationArgs.builder().merge(artifactsBuilder.build()).build();
187+
return artifactsBuilder.build();
188188
}
189189

190190
/**
@@ -199,15 +199,19 @@ public JavaCompilationArgs build(
199199
* compilation. Contrast this with {@link #setCompilationStrictDepsMode}.
200200
*/
201201
public JavaCompilationArgsProvider buildCompilationArgsProvider(
202-
JavaCompilationArgs directArgs, boolean isReportedAsStrict) {
202+
JavaCompilationArtifacts artifacts, boolean isReportedAsStrict) {
203+
JavaCompilationArgs directArgs = JavaCompilationArgs.builder().merge(artifacts).build();
203204
JavaCompilationArgs transitiveArgs =
204205
JavaCompilationArgs.builder()
205206
.addTransitiveArgs(directArgs, BOTH)
206207
.addTransitiveDependencies(deps, true /* recursive */)
207208
.build();
208209

209210
return JavaCompilationArgsProvider.create(
210-
isReportedAsStrict ? directArgs : transitiveArgs, transitiveArgs);
211+
isReportedAsStrict ? directArgs : transitiveArgs,
212+
transitiveArgs,
213+
NestedSetBuilder.create(Order.STABLE_ORDER, artifacts.getCompileTimeDependencyArtifact()),
214+
NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER));
211215
}
212216

213217
private void addDepsToAttributes(JavaTargetAttributes.Builder attributes) {

src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ public JavaProvider createJavaCompileAction(
222222
: hostJavabaseProvider.getMiddlemanArtifact();
223223
JavaToolchainProvider javaToolchainProvider =
224224
checkNotNull(javaToolchain.getProvider(JavaToolchainProvider.class));
225-
JavaCompilationArgs artifacts =
225+
JavaCompilationArtifacts artifacts =
226226
helper.build(
227227
javaSemantics,
228228
javaToolchainProvider,

src/main/java/com/google/devtools/build/lib/rules/java/ProtoJavaApiInfoProvider.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public static ProtoJavaApiInfoProvider create(
3636
JavaCompilationArgs transitiveJavaCompilationArgss1,
3737
JavaCompilationArgs transitiveJavaCompilationArgssMutable,
3838
JavaCompilationArgs transitiveJavaCompilationArgssImmutable,
39-
JavaCompilationArgs javaCompilationArgs1,
40-
JavaCompilationArgs javaCompilationArgsMutable,
41-
JavaCompilationArgs javaCompilationArgsImmutable,
39+
JavaCompilationArtifacts javaCompilationArgs1,
40+
JavaCompilationArtifacts javaCompilationArgsMutable,
41+
JavaCompilationArtifacts javaCompilationArgsImmutable,
4242
Artifact sourceJar1,
4343
Artifact sourceJarMutable,
4444
Artifact sourceJarImmutable,
@@ -111,22 +111,20 @@ public static ProtoJavaApiInfoProvider create(
111111
*/
112112
public abstract JavaCompilationArgs getTransitiveJavaCompilationArgsImmutable();
113113

114-
/**
115-
* Returns the artifacts for java compilation (API version 1) for only this target.
116-
*/
117-
public abstract JavaCompilationArgs getJavaCompilationArgs1();
114+
/** Returns the artifacts for java compilation (API version 1) for only this target. */
115+
public abstract JavaCompilationArtifacts getJavaCompilationArtifacts1();
118116

119117
/**
120-
* Returns the artifacts for java compilation (API version 2, code for mutable API)
121-
* for only this target.
118+
* Returns the artifacts for java compilation (API version 2, code for mutable API) for only this
119+
* target.
122120
*/
123-
public abstract JavaCompilationArgs getJavaCompilationArgsMutable();
121+
public abstract JavaCompilationArtifacts getJavaCompilationArtifactsMutable();
124122

125123
/**
126-
* Returns the artifacts for java compilation (API version 2, code for immutable API)
127-
* for only this target.
124+
* Returns the artifacts for java compilation (API version 2, code for immutable API) for only
125+
* this target.
128126
*/
129-
public abstract JavaCompilationArgs getJavaCompilationArgsImmutable();
127+
public abstract JavaCompilationArtifacts getJavaCompilationArtifactsImmutable();
130128

131129
// The following 3 fields are the -src.jar artifact created by proto_library. If a certain
132130
// proto_library does not produce some artifact, it'll be null. This can happen for example when

src/main/java/com/google/devtools/build/lib/rules/java/proto/ActionReuser.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.devtools.build.lib.collect.nestedset.Order;
3333
import com.google.devtools.build.lib.rules.java.JavaCompilationArgs;
3434
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
35+
import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts;
3536
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
3637
import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
3738
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
@@ -52,7 +53,7 @@ public static boolean reuseExistingActions(
5253
return false;
5354
}
5455

55-
JavaCompilationArgs directJars = javaApi.getJavaCompilationArgsImmutable();
56+
JavaCompilationArtifacts directJars = javaApi.getJavaCompilationArtifactsImmutable();
5657
if (isEmpty(directJars.getCompileTimeJars()) || javaApi.sourceJarImmutable() == null) {
5758
return false;
5859
}
@@ -61,7 +62,7 @@ public static boolean reuseExistingActions(
6162
JavaCompilationArgs.builder()
6263
.addTransitiveArgs(javaApi.getTransitiveJavaCompilationArgsImmutable(), BOTH)
6364
.addTransitiveDependencies(javaApi.getProtoRuntimeImmutable(), true /* recursive */)
64-
.addTransitiveArgs(directJars, BOTH)
65+
.merge(directJars)
6566
.build();
6667

6768
Artifact outputJar = getOnlyElement(directJars.getRuntimeJars());
@@ -70,9 +71,10 @@ public static boolean reuseExistingActions(
7071

7172
JavaCompilationArgsProvider compilationArgsProvider =
7273
JavaCompilationArgsProvider.create(
73-
directJars,
74+
JavaCompilationArgs.builder().merge(directJars).build(),
7475
transitiveJars,
75-
NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER),
76+
NestedSetBuilder.create(
77+
Order.STABLE_ORDER, directJars.getCompileTimeDependencyArtifact()),
7678
NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER));
7779

7880
JavaSkylarkApiProvider.Builder skylarkApiProvider =

src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
import com.google.devtools.build.lib.packages.AttributeMap;
4747
import com.google.devtools.build.lib.packages.NativeAspectClass;
4848
import com.google.devtools.build.lib.packages.Rule;
49-
import com.google.devtools.build.lib.rules.java.JavaCompilationArgs;
5049
import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
50+
import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts;
5151
import com.google.devtools.build.lib.rules.java.JavaCompilationHelper;
5252
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
5353
import com.google.devtools.build.lib.rules.java.JavaHelper;
@@ -255,7 +255,7 @@ private JavaCompilationArgsProvider createJavaCompileAction(
255255
helper.addDep(runtime.getProvider(JavaCompilationArgsProvider.class));
256256
}
257257
helper.setCompilationStrictDepsMode(StrictDepsMode.OFF);
258-
JavaCompilationArgs artifacts =
258+
JavaCompilationArtifacts artifacts =
259259
helper.build(
260260
javaSemantics,
261261
JavaCompilationHelper.getJavaToolchainProvider(ruleContext),

0 commit comments

Comments
 (0)