diff options
author | kmb <kmb@google.com> | 2018-07-03 12:19:06 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-03 12:20:45 -0700 |
commit | 0d8136849d900af15f2b94eda4c04efb8ff13186 (patch) | |
tree | 545469c0c00fb83b8dcf92ea9ad3fdb7f4217c6c | |
parent | 88a20ee08c0af7cf187893bcafe0771e5a19ff9d (diff) |
supply transitive and direct deps for aar_import deps checking. This allows producing add_dep commands where possible and avoids the need for direct dependencies on supertypes of directly depended types
RELNOTES: None.
PiperOrigin-RevId: 203164113
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 |