aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ImportDepsCheckActionBuilder.java12
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java10
3 files changed, 25 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 1d9c75987e..220df0e5e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -174,14 +174,12 @@ public class AarImport implements RuleConfiguredTargetFactory {
.build());
JavaConfiguration javaConfig = ruleContext.getFragment(JavaConfiguration.class);
- // TODO(cnsun): need to pass the transitive classpath too to emit add dep command.
- NestedSet<Artifact> directDeps = getCompileTimeJarsFromCollection(targets, /*isStrict=*/ true);
- NestedSet<Artifact> bootclasspath = getBootclasspath(ruleContext);
Artifact depsCheckerResult =
createAarArtifact(ruleContext, "aar_import_deps_checker_result.txt");
ImportDepsCheckActionBuilder.newBuilder()
- .bootcalsspath(bootclasspath)
- .declareDeps(directDeps)
+ .bootcalsspath(getBootclasspath(ruleContext))
+ .declareDeps(getCompileTimeJarsFromCollection(targets, /*isDirect=*/ true))
+ .transitiveDeps(getCompileTimeJarsFromCollection(targets, /*isDirect=*/ false))
.checkJars(NestedSetBuilder.<Artifact>stableOrder().add(mergedJar).build())
.outputArtifiact(depsCheckerResult)
.importDepsCheckingLevel(javaConfig.getImportDepsCheckingLevel())
@@ -235,10 +233,10 @@ public class AarImport implements RuleConfiguredTargetFactory {
return ruleBuilder.build();
}
- private NestedSet<Artifact> getCompileTimeJarsFromCollection(
- ImmutableList<TransitiveInfoCollection> deps, boolean isStrict) {
+ private static NestedSet<Artifact> getCompileTimeJarsFromCollection(
+ ImmutableList<TransitiveInfoCollection> deps, boolean isDirect) {
JavaCompilationArgsProvider provider = JavaCompilationArgsProvider.legacyFromTargets(deps);
- return isStrict ? provider.getDirectCompileTimeJars() : provider.getTransitiveCompileTimeJars();
+ return isDirect ? provider.getDirectCompileTimeJars() : provider.getTransitiveCompileTimeJars();
}
private NestedSet<Artifact> getBootclasspath(RuleContext ruleContext) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ImportDepsCheckActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ImportDepsCheckActionBuilder.java
index 0cc64da096..0ed123e90d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ImportDepsCheckActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ImportDepsCheckActionBuilder.java
@@ -39,6 +39,7 @@ public final class ImportDepsCheckActionBuilder {
private NestedSet<Artifact> jarsToCheck;
private NestedSet<Artifact> bootclasspath;
private NestedSet<Artifact> declaredDeps;
+ private NestedSet<Artifact> transitiveDeps;
private ImportDepsCheckingLevel importDepsCheckingLevel;
private ImportDepsCheckActionBuilder() {}
@@ -86,11 +87,18 @@ public final class ImportDepsCheckActionBuilder {
return this;
}
+ public ImportDepsCheckActionBuilder transitiveDeps(NestedSet<Artifact> transitiveDeps) {
+ checkState(this.transitiveDeps == null);
+ this.transitiveDeps = checkNotNull(transitiveDeps);
+ return this;
+ }
+
public void buildAndRegister(RuleContext ruleContext) {
checkNotNull(outputArtifact);
checkNotNull(jarsToCheck);
checkNotNull(bootclasspath);
checkNotNull(declaredDeps);
+ checkNotNull(transitiveDeps);
checkNotNull(importDepsCheckingLevel);
checkNotNull(jdepsArtifact);
checkNotNull(ruleLabel);
@@ -101,6 +109,7 @@ public final class ImportDepsCheckActionBuilder {
.setExecutable(ruleContext.getExecutablePrerequisite("$import_deps_checker", Mode.HOST))
.addTransitiveInputs(jarsToCheck)
.addTransitiveInputs(declaredDeps)
+ .addTransitiveInputs(transitiveDeps)
.addTransitiveInputs(bootclasspath)
.addOutput(outputArtifact)
.addOutput(jdepsArtifact)
@@ -120,7 +129,8 @@ public final class ImportDepsCheckActionBuilder {
return CustomCommandLine.builder()
.addExecPath("--output", outputArtifact)
.addExecPaths(VectorArg.addBefore("--input").each(jarsToCheck))
- .addExecPaths(VectorArg.addBefore("--classpath_entry").each(declaredDeps))
+ .addExecPaths(VectorArg.addBefore("--directdep").each(declaredDeps))
+ .addExecPaths(VectorArg.addBefore("--classpath_entry").each(transitiveDeps))
.addExecPaths(VectorArg.addBefore("--bootclasspath_entry").each(bootclasspath))
.addDynamicString(convertErrorFlag(importDepsCheckingLevel))
.addExecPath("--jdeps_output", jdepsArtifact)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
index 82b9455473..b94c2e3025 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
@@ -231,6 +231,7 @@ public class AarImportTest extends BuildViewTestCase {
.containsAllOf(
"--bootclasspath_entry",
"--classpath_entry",
+ "--directdep",
"--input",
"--output",
"--checking_mode=error",
@@ -239,7 +240,9 @@ public class AarImportTest extends BuildViewTestCase {
ensureArgumentsHaveClassEntryOptionWithSuffix(
arguments, "/intermediate/classes_and_libs_merged.jar");
assertThat(arguments.stream().filter(arg -> "--classpath_entry".equals(arg)).count())
- .isEqualTo(1);
+ .isEqualTo(5); // transitive classpath
+ assertThat(arguments.stream().filter(arg -> "--directdep".equals(arg)).count())
+ .isEqualTo(1); // 1 declared dep
}
@Test
@@ -270,6 +273,7 @@ public class AarImportTest extends BuildViewTestCase {
.containsAllOf(
"--bootclasspath_entry",
"--classpath_entry",
+ "--directdep",
"--input",
"--output",
"--checking_mode=error",
@@ -278,7 +282,9 @@ public class AarImportTest extends BuildViewTestCase {
ensureArgumentsHaveClassEntryOptionWithSuffix(
arguments, "/intermediate/classes_and_libs_merged.jar");
assertThat(arguments.stream().filter(arg -> "--classpath_entry".equals(arg)).count())
- .isEqualTo(1);
+ .isEqualTo(5); // transitive classpath
+ assertThat(arguments.stream().filter(arg -> "--directdep".equals(arg)).count())
+ .isEqualTo(1); // 1 declared dep
}
@Test