diff options
author | Googler <noreply@google.com> | 2016-10-13 23:10:40 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-10-14 09:33:25 +0000 |
commit | fe868010626115a9c6978c337f19549278965872 (patch) | |
tree | 2b06715efbd160e0d7ba55bb3793a2c61609bc48 /src/test | |
parent | 78c19807d2cbb308b830022dcdcc8b03f19f90a9 (diff) |
Support input srcjar in filtered gen jar.
This supports genrules that output srcjars that
are then inputs to java_libraries.
Also add support to produce a source jar with
the contents of the gen jar.
--
MOS_MIGRATED_REVID=136099457
Diffstat (limited to 'src/test')
3 files changed, 453 insertions, 302 deletions
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java index 64cdc6e005..cdca1a6406 100644 --- a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java +++ b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java @@ -15,82 +15,224 @@ package com.google.devtools.build.android.ideinfo; import static com.google.common.truth.Truth.assertThat; +import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import com.google.devtools.build.android.ideinfo.JarFilter.JarFilterOptions; import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation; import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.JavaSourcePackage; import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.PackageManifest; - import java.io.File; -import java.nio.file.Paths; +import java.io.FileOutputStream; +import java.util.Enumeration; import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Unit tests for {@link JarFilter} - */ +/** Unit tests for {@link JarFilter} */ @RunWith(JUnit4.class) public class JarFilterTest { + @Rule public TemporaryFolder folder = new TemporaryFolder(); + @Test - public void testParseCommandLineArguments() throws Exception { - String[] args = new String[]{ - "--jars", - "/tmp/1.jar" + File.pathSeparator + "/tmp/2.jar", - "--output", - "/tmp/out.jar", - "--manifest", - "/tmp/manifest.file", - }; - JarFilter.JarFilterOptions options = JarFilter.parseArgs(args); - assertThat(options.jars).containsExactly( - Paths.get("/tmp/1.jar"), - Paths.get("/tmp/2.jar") - ); - assertThat(options.output.toString()).isEqualTo(Paths.get("/tmp/out.jar").toString()); - assertThat(options.manifest.toString()).isEqualTo(Paths.get("/tmp/manifest.file").toString()); + public void testFilterMethod() throws Exception { + List<String> prefixes = + ImmutableList.of("com/google/foo/Foo", "com/google/bar/Bar", "com/google/baz/Baz"); + assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo.class")).isTrue(); + assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo$Inner.class")).isTrue(); + assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/bar/Bar.class")).isTrue(); + assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo/NotFoo.class")).isFalse(); + assertThat(JarFilter.shouldKeepClass(prefixes, "wrong/com/google/foo/Foo.class")).isFalse(); } @Test - public void testFilterMethod() throws Exception { - List<String> prefixes = ImmutableList.of( - "com/google/foo/Foo", - "com/google/bar/Bar", - "com/google/baz/Baz" - ); - assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo.class")).isTrue(); - assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo$Inner.class")).isTrue(); - assertThat(JarFilter.shouldKeep(prefixes, "com/google/bar/Bar.class")).isTrue(); - assertThat(JarFilter.shouldKeep(prefixes, "com/google/foo/Foo/NotFoo.class")).isFalse(); - assertThat(JarFilter.shouldKeep(prefixes, "wrong/com/google/foo/Foo.class")).isFalse(); + public void legacyIntegrationTest() throws Exception { + PackageManifest packageManifest = + PackageManifest.newBuilder() + .addSources( + JavaSourcePackage.newBuilder() + .setArtifactLocation( + ArtifactLocation.newBuilder() + .setIsSource(true) + .setRelativePath("com/google/foo/Foo.java")) + .setPackageString("com.google.foo")) + .addSources( + JavaSourcePackage.newBuilder() + .setArtifactLocation( + ArtifactLocation.newBuilder() + .setIsSource(true) + .setRelativePath("com/google/bar/Bar.java")) + .setPackageString("com.google.bar")) + .addSources( + JavaSourcePackage.newBuilder() + .setArtifactLocation( + ArtifactLocation.newBuilder() + .setIsSource(true) + .setRelativePath("some/path/Test.java")) + .setPackageString("com.google.test")) + .build(); + assertThat(JarFilter.parsePackageManifest(packageManifest)) + .containsExactly("com/google/foo/Foo", "com/google/bar/Bar", "com/google/test/Test"); + File manifest = folder.newFile("foo.manifest"); + try (FileOutputStream outputStream = new FileOutputStream(manifest)) { + packageManifest.writeTo(outputStream); + } + + File filterJar = folder.newFile("foo.jar"); + try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterJar))) { + zo.putNextEntry(new ZipEntry("com/google/foo/Foo.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/Foo$Inner.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/bar/Bar.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/test/Test.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.class")); + zo.closeEntry(); + } + + File outputJar = folder.newFile("foo-filtered-gen.jar"); + + String[] args = + new String[] { + "--jars", + filterJar.getPath(), + "--output", + outputJar.getPath(), + "--manifest", + manifest.getPath() + }; + JarFilter.JarFilterOptions options = JarFilter.parseArgs(args); + JarFilter.main(options); + + List<String> filteredJarNames = Lists.newArrayList(); + try (ZipFile zipFile = new ZipFile(outputJar)) { + Enumeration<? extends ZipEntry> entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry zipEntry = entries.nextElement(); + filteredJarNames.add(zipEntry.getName()); + } + } + + assertThat(filteredJarNames) + .containsExactly( + "com/google/foo/Foo.class", + "com/google/foo/Foo$Inner.class", + "com/google/bar/Bar.class", + "com/google/test/Test.class"); } @Test - public void testManifestParser() throws Exception { - PackageManifest packageManifest = PackageManifest.newBuilder() - .addSources(JavaSourcePackage.newBuilder() - .setArtifactLocation(ArtifactLocation.newBuilder() - .setIsSource(true) - .setRelativePath("com/google/foo/Foo.java")) - .setPackageString("com.google.foo")) - .addSources(JavaSourcePackage.newBuilder() - .setArtifactLocation(ArtifactLocation.newBuilder() - .setIsSource(true) - .setRelativePath("com/google/bar/Bar.java")) - .setPackageString("com.google.bar")) - .addSources(JavaSourcePackage.newBuilder() - .setArtifactLocation(ArtifactLocation.newBuilder() - .setIsSource(true) - .setRelativePath("some/path/Test.java")) - .setPackageString("com.google.test")) - .build(); - assertThat(JarFilter.parsePackageManifest(packageManifest)).containsExactly( - "com/google/foo/Foo", - "com/google/bar/Bar", - "com/google/test/Test" - ); + public void fullIntegrationTest() throws Exception { + File fooJava = folder.newFile("Foo.java"); + Files.write("package com.google.foo; class Foo { class Inner {} }".getBytes(UTF_8), fooJava); + + File barJava = folder.newFile("Bar.java"); + Files.write("package com.google.foo.bar; class Bar {}".getBytes(UTF_8), barJava); + + File srcJar = folder.newFile("gen.srcjar"); + try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(srcJar))) { + zo.putNextEntry(new ZipEntry("com/google/foo/gen/Gen.java")); + zo.write("package gen; class Gen {}".getBytes(UTF_8)); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/gen/Gen2.java")); + zo.write("package gen; class Gen2 {}".getBytes(UTF_8)); + zo.closeEntry(); + } + + File filterJar = folder.newFile("foo.jar"); + try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterJar))) { + zo.putNextEntry(new ZipEntry("com/google/foo/Foo.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/Foo$Inner.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("gen/Gen.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("gen/Gen2.class")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.class")); + zo.closeEntry(); + } + File filterSrcJar = folder.newFile("foo-src.jar"); + try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterSrcJar))) { + zo.putNextEntry(new ZipEntry("com/google/foo/Foo.java")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar.java")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("gen/Gen.java")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("gen/Gen2.java")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.java")); + zo.closeEntry(); + zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar2.java")); + zo.closeEntry(); + } + + File filteredJar = folder.newFile("foo-filtered-gen.jar"); + File filteredSourceJar = folder.newFile("foo-filtered-gen-src.jar"); + + String[] args = + new String[] { + "--keep_java_files", + fooJava.getPath() + File.pathSeparator + barJava.getPath(), + "--keep_source_jars", + srcJar.getPath(), + "--filter_jars", + filterJar.getPath(), + "--filter_source_jars", + filterSrcJar.getPath(), + "--filtered_jar", + filteredJar.getPath(), + "--filtered_source_jar", + filteredSourceJar.getPath() + }; + JarFilterOptions options = JarFilter.parseArgs(args); + JarFilter.main(options); + + List<String> filteredJarNames = Lists.newArrayList(); + try (ZipFile zipFile = new ZipFile(filteredJar)) { + Enumeration<? extends ZipEntry> entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry zipEntry = entries.nextElement(); + filteredJarNames.add(zipEntry.getName()); + } + } + + List<String> filteredSourceJarNames = Lists.newArrayList(); + try (ZipFile zipFile = new ZipFile(filteredSourceJar)) { + Enumeration<? extends ZipEntry> entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry zipEntry = entries.nextElement(); + filteredSourceJarNames.add(zipEntry.getName()); + } + } + + assertThat(filteredJarNames) + .containsExactly( + "com/google/foo/Foo.class", + "com/google/foo/Foo$Inner.class", + "com/google/foo/bar/Bar.class", + "gen/Gen.class", + "gen/Gen2.class"); + + assertThat(filteredSourceJarNames) + .containsExactly( + "com/google/foo/Foo.java", + "com/google/foo/bar/Bar.java", + "gen/Gen.java", + "gen/Gen2.java"); } } - diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java index bd5f2414e0..1dbb6d9a6c 100644 --- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java +++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java @@ -37,9 +37,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Tests for {@link AndroidStudioInfoAspect} validating proto's contents. - */ +/** Tests for {@link AndroidStudioInfoAspect} validating proto's contents. */ @RunWith(JUnit4.class) public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase { @@ -57,8 +55,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['simple/Simple.java']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) .isEqualTo(Paths.get("com/google/example/BUILD").toString()); @@ -90,9 +88,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['simple/Simple.java']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); - + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); + ArtifactLocation packageManifest = ruleIdeInfo.getJavaRuleIdeInfo().getPackageManifest(); assertNotNull(packageManifest); assertEquals(packageManifest.getRelativePath(), "com/google/example/simple.manifest"); @@ -112,8 +110,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = [':gen_sources']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasPackageManifest()).isFalse(); } @@ -126,8 +124,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['Test.java']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasFilteredGenJar()).isFalse(); } @@ -145,13 +143,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = [':gen_sources']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasFilteredGenJar()).isFalse(); } @Test - public void testFilteredGenJarIsCreatedForMixedGenAndSourcesRule() throws Exception { + public void testFilteredGenJar() throws Exception { scratch.file( "com/google/example/BUILD", "genrule(", @@ -159,15 +157,23 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " outs = ['Gen.java'],", " cmd = '',", ")", + "genrule(", + " name = 'gen_srcjar',", + " outs = ['gen.srcjar'],", + " cmd = '',", + ")", "java_library(", - " name = 'simple',", - " srcs = [':gen_sources', 'Test.java']", + " name = 'lib',", + " srcs = [':gen_sources', ':gen_srcjar', 'Test.java']", ")"); - Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); + RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); + assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasFilteredGenJar()).isTrue(); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getFilteredGenJar().getJar().getRelativePath()) - .isEqualTo("com/google/example/simple-filtered-gen.jar"); + .isEqualTo("com/google/example/lib-filtered-gen.jar"); + assertThat( + ruleIdeInfo.getJavaRuleIdeInfo().getFilteredGenJar().getSourceJar().getRelativePath()) + .isEqualTo("com/google/example/lib-filtered-gen-src.jar"); } @Test @@ -187,15 +193,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:complex"); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); - RuleIdeInfo complexRuleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:complex", ruleIdeInfos); + RuleIdeInfo complexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); assertThat(relativePathsForJavaSourcesOf(complexRuleIdeInfo)) .containsExactly("com/google/example/complex/Complex.java"); - assertThat(complexRuleIdeInfo.getDependenciesList()) - .contains("//com/google/example:simple"); + assertThat(complexRuleIdeInfo.getDependenciesList()).contains("//com/google/example:simple"); } - + @Test public void testJavaLibraryWithTransitiveDependencies() throws Exception { scratch.file( @@ -219,8 +224,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); - RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:extracomplex", ruleIdeInfos); + RuleIdeInfo extraComplexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos); assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo)) .containsExactly("com/google/example/extracomplex/ExtraComplex.java"); @@ -269,14 +274,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex1", ruleIdeInfos); - RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:extracomplex", ruleIdeInfos); + RuleIdeInfo extraComplexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos); assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo)) .containsExactly("com/google/example/extracomplex/ExtraComplex.java"); - assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf( - "//com/google/example:complex", - "//com/google/example:complex1"); + assertThat(extraComplexRuleIdeInfo.getDependenciesList()) + .containsAllOf("//com/google/example:complex", "//com/google/example:complex1"); } @Test @@ -302,17 +306,15 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); - RuleIdeInfo complexRuleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:complex", - ruleIdeInfos); - RuleIdeInfo extraComplexRuleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:extracomplex", ruleIdeInfos); + RuleIdeInfo complexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); + RuleIdeInfo extraComplexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos); - assertThat(complexRuleIdeInfo.getDependenciesList()) - .contains("//com/google/example:simple"); + assertThat(complexRuleIdeInfo.getDependenciesList()).contains("//com/google/example:simple"); - assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf( - "//com/google/example:simple", - "//com/google/example:complex"); + assertThat(extraComplexRuleIdeInfo.getDependenciesList()) + .containsAllOf("//com/google/example:simple", "//com/google/example:complex"); assertThat(getIdeResolveFiles()) .containsExactly( "com/google/example/libextracomplex.jar", @@ -348,23 +350,23 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " name = 'megacomplex',", " srcs = ['megacomplex/MegaComplex.java'],", " deps = [':extracomplex'],", - ")" - ); + ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:megacomplex"); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:extracomplex", ruleIdeInfos); - RuleIdeInfo megaComplexRuleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:megacomplex", ruleIdeInfos); + RuleIdeInfo megaComplexRuleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:megacomplex", ruleIdeInfos); assertThat(relativePathsForJavaSourcesOf(megaComplexRuleIdeInfo)) .containsExactly("com/google/example/megacomplex/MegaComplex.java"); - assertThat(megaComplexRuleIdeInfo.getDependenciesList()).containsAllOf( - "//com/google/example:simple", - "//com/google/example:complex", - "//com/google/example:extracomplex"); + assertThat(megaComplexRuleIdeInfo.getDependenciesList()) + .containsAllOf( + "//com/google/example:simple", + "//com/google/example:complex", + "//com/google/example:extracomplex"); } @Test @@ -396,18 +398,25 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(javaRuleIdeInfo).isNotNull(); assertThat(transform(javaRuleIdeInfo.getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) .containsExactly( - jarString("com/google/example", - "a.jar", "_ijar/imp/com/google/example/a-ijar.jar", "impsrc.jar"), - jarString("com/google/example", - "b.jar", "_ijar/imp/com/google/example/b-ijar.jar", "impsrc.jar")) + jarString( + "com/google/example", + "a.jar", + "_ijar/imp/com/google/example/a-ijar.jar", + "impsrc.jar"), + jarString( + "com/google/example", + "b.jar", + "_ijar/imp/com/google/example/b-ijar.jar", + "impsrc.jar")) .inOrder(); - assertThat(getIdeResolveFiles()).containsExactly( - "com/google/example/_ijar/imp/com/google/example/a-ijar.jar", - "com/google/example/_ijar/imp/com/google/example/b-ijar.jar", - "com/google/example/liblib.jar", - "com/google/example/liblib-hjar.jar", - "com/google/example/liblib-src.jar"); + assertThat(getIdeResolveFiles()) + .containsExactly( + "com/google/example/_ijar/imp/com/google/example/a-ijar.jar", + "com/google/example/_ijar/imp/com/google/example/b-ijar.jar", + "com/google/example/liblib.jar", + "com/google/example/liblib-hjar.jar", + "com/google/example/liblib-src.jar"); } @Test @@ -439,9 +448,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase } assertThat(impInfo.getKindString()).isEqualTo("java_import"); assertThat(impInfo.getDependenciesList()).contains("//com/google/example:foobar"); - assertThat(libInfo.getDependenciesList()).containsAllOf( - "//com/google/example:foobar", - "//com/google/example:imp"); + assertThat(libInfo.getDependenciesList()) + .containsAllOf("//com/google/example:foobar", "//com/google/example:imp"); } @Test @@ -463,11 +471,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['Lib.java'],", " deps = [':imp'],", ")"); - + Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); RuleIdeInfo impInfo = getRuleInfoAndVerifyLabel("//com/google/example:imp", ruleIdeInfos); - + assertThat(!impInfo.getJavaRuleIdeInfo().hasPackageManifest()).isTrue(); assertThat(libInfo.getJavaRuleIdeInfo().hasPackageManifest()).isTrue(); } @@ -492,10 +500,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " cmd = '',", ")"); buildTarget("//com/google/example:imp"); - assertThat(getIdeResolveFiles()).containsExactly( - "com/google/example/_ijar/imp/com/google/example/gen_jar-ijar.jar", - "com/google/example/gen_jar.jar", - "com/google/example/gen_srcjar.jar"); + assertThat(getIdeResolveFiles()) + .containsExactly( + "com/google/example/_ijar/imp/com/google/example/gen_jar-ijar.jar", + "com/google/example/gen_jar.jar", + "com/google/example/gen_srcjar.jar"); } @Test @@ -530,10 +539,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " size = 'large',", " deps = [':foobar'],", ")"); - Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo( - "//java/com/google/example:FooBarTest"); - RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel( - "//java/com/google/example:FooBarTest", ruleIdeInfos); + Map<String, RuleIdeInfo> ruleIdeInfos = + buildRuleIdeInfo("//java/com/google/example:FooBarTest"); + RuleIdeInfo testInfo = + getRuleInfoAndVerifyLabel("//java/com/google/example:FooBarTest", ruleIdeInfos); if (testLegacyAswbPluginVersionCompatibility()) { assertThat(testInfo.getKind()).isEqualTo(Kind.JAVA_TEST); } @@ -542,8 +551,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase .containsExactly("java/com/google/example/FooBarTest.java"); assertThat(testInfo.getDependenciesList()).contains("//java/com/google/example:foobar"); assertThat(transform(testInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) - .containsExactly(jarString("java/com/google/example", - "FooBarTest.jar", null, "FooBarTest-src.jar")); + .containsExactly( + jarString("java/com/google/example", "FooBarTest.jar", null, "FooBarTest-src.jar")); assertThat(getIdeResolveFiles()) .containsExactly( @@ -573,8 +582,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " deps = [':foobar'],", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:foobar-exe"); - RuleIdeInfo binaryInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:foobar-exe", ruleIdeInfos); + RuleIdeInfo binaryInfo = + getRuleInfoAndVerifyLabel("//com/google/example:foobar-exe", ruleIdeInfos); if (testLegacyAswbPluginVersionCompatibility()) { assertThat(binaryInfo.getKind()).isEqualTo(Kind.JAVA_BINARY); @@ -585,8 +594,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(binaryInfo.getDependenciesList()).contains("//com/google/example:foobar"); assertThat(transform(binaryInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) - .containsExactly(jarString("com/google/example", - "foobar-exe.jar", null, "foobar-exe-src.jar")); + .containsExactly( + jarString("com/google/example", "foobar-exe.jar", null, "foobar-exe-src.jar")); assertThat(getIdeResolveFiles()) .containsExactly( @@ -622,9 +631,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(toolChainInfo.getJavaToolchainIdeInfo().getTargetVersion()).isNotEmpty(); RuleIdeInfo a = ruleIdeInfos.get("//com/google/example:a"); - assertThat(a.getDependenciesList()).containsAllOf( - "//com/google/example:b", - toolChainInfo.getLabel()); + assertThat(a.getDependenciesList()) + .containsAllOf("//com/google/example:b", toolChainInfo.getLabel()); } @Test @@ -667,7 +675,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(ruleInfo.getKind()).isEqualTo(Kind.ANDROID_LIBRARY); } assertThat(ruleInfo.getKindString()).isEqualTo("android_library"); - assertThat(relativePathsForJavaSourcesOf(ruleInfo)).containsExactly("com/google/example/Main.java"); + assertThat(relativePathsForJavaSourcesOf(ruleInfo)) + .containsExactly("com/google/example/Main.java"); assertThat(transform(ruleInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) .containsExactly( jarString("com/google/example", "libl.jar", "libl-hjar.jar", "libl-src.jar"), @@ -680,9 +689,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase .isEqualTo("com/google/example/AndroidManifest.xml"); assertThat(ruleInfo.getAndroidRuleIdeInfo().getJavaPackage()).isEqualTo("com.google.example"); assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(ruleInfo.getAndroidRuleIdeInfo().getResourceJar())) - .isEqualTo(jarString("com/google/example", - "l_resources.jar", null, "l_resources-src.jar" - )); + .isEqualTo(jarString("com/google/example", "l_resources.jar", null, "l_resources-src.jar")); assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1"); assertThat(getIdeResolveFiles()) @@ -725,7 +732,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(ruleInfo.getKind()).isEqualTo(Kind.ANDROID_BINARY); } assertThat(ruleInfo.getKindString()).isEqualTo("android_binary"); - assertThat(relativePathsForJavaSourcesOf(ruleInfo)).containsExactly("com/google/example/Main.java"); + assertThat(relativePathsForJavaSourcesOf(ruleInfo)) + .containsExactly("com/google/example/Main.java"); assertThat(transform(ruleInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) .containsExactly( jarString("com/google/example", "libb.jar", "libb-hjar.jar", "libb-src.jar"), @@ -741,7 +749,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(ruleInfo.getAndroidRuleIdeInfo().getApk().getRelativePath()) .isEqualTo("com/google/example/b.apk"); - assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1"); assertThat(getIdeResolveFiles()) @@ -788,8 +795,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "android_library(", " name = 'no_idl',", " srcs = ['Test.java'],", - ")" - ); + ")"); String noIdlTarget = "//java/com/google/example:no_idl"; Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(noIdlTarget); RuleIdeInfo noIdlRuleInfo = getRuleInfoAndVerifyLabel(noIdlTarget, ruleIdeInfos); @@ -804,18 +810,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "android_library(", " name = 'has_idl',", " idl_srcs = ['a.aidl'],", - ")" - ); + ")"); String idlTarget = "//java/com/google/example:has_idl"; Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(idlTarget); RuleIdeInfo idlRuleInfo = getRuleInfoAndVerifyLabel(idlTarget, ruleIdeInfos); assertThat(idlRuleInfo.getAndroidRuleIdeInfo().getHasIdlSources()).isTrue(); assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(idlRuleInfo.getAndroidRuleIdeInfo().getIdlJar())) - .isEqualTo(jarString("java/com/google/example", - "libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar")); - assertThat(relativePathsForJavaSourcesOf(idlRuleInfo)) - .isEmpty(); + .isEqualTo( + jarString( + "java/com/google/example", "libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar")); + assertThat(relativePathsForJavaSourcesOf(idlRuleInfo)).isEmpty(); assertThat(getIdeResolveFiles()) .containsExactly( "java/com/google/example/libhas_idl.jar", @@ -869,12 +874,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " cmd = '',", ")"); buildTarget("//com/google/example:lib"); - assertThat(getIdeResolveFiles()).containsExactly( - "com/google/example/liblib.jar", - "com/google/example/liblib-src.jar", - "com/google/example/lib_resources.jar", - "com/google/example/lib_resources-src.jar", - "com/google/example/AndroidManifest.xml"); + assertThat(getIdeResolveFiles()) + .containsExactly( + "com/google/example/liblib.jar", + "com/google/example/liblib-src.jar", + "com/google/example/lib_resources.jar", + "com/google/example/lib_resources-src.jar", + "com/google/example/AndroidManifest.xml"); } @Test @@ -884,14 +890,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "java_library(", " name = 'no_plugin',", " srcs = ['Test.java'],", - ")" - ); + ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:no_plugin"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//java/com/google/example:no_plugin", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//java/com/google/example:no_plugin", ruleIdeInfos); - assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList()) - .isEmpty(); + assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList()).isEmpty(); } @Test @@ -911,17 +915,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "java_library(", " name = 'plugin_lib',", " srcs = ['Plugin.java'],", - ")" - ); + ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:test"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//java/com/google/example:test", ruleIdeInfos); - - assertThat(transform( - ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(), - LIBRARY_ARTIFACT_TO_STRING)) - .containsExactly(jarString("java/com/google/example", - "libtest-gen.jar", null, "libtest-gensrc.jar")); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//java/com/google/example:test", ruleIdeInfos); + + assertThat( + transform( + ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(), + LIBRARY_ARTIFACT_TO_STRING)) + .containsExactly( + jarString("java/com/google/example", "libtest-gen.jar", null, "libtest-gensrc.jar")); assertThat(getIdeResolveFiles()) .containsExactly( "java/com/google/example/libtest.jar", @@ -942,8 +946,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); - assertThat(ruleIdeInfo.getTagsList()) - .containsExactly("a", "b", "c", "d"); + assertThat(ruleIdeInfo.getTagsList()).containsExactly("a", "b", "c", "d"); } @Test @@ -963,12 +966,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " deps = [':forward'],", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:super"); - RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel( - "//java/com/google/example:super", ruleIdeInfos); + RuleIdeInfo ruleInfo = + getRuleInfoAndVerifyLabel("//java/com/google/example:super", ruleIdeInfos); - assertThat(ruleInfo.getDependenciesList()).containsAllOf( - "//java/com/google/example:forward", - "//java/com/google/example:lib"); + assertThat(ruleInfo.getDependenciesList()) + .containsAllOf("//java/com/google/example:forward", "//java/com/google/example:lib"); } @Test @@ -991,10 +993,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); RuleIdeInfo javaToolchain = Iterables.getOnlyElement(findJavaToolchain(ruleIdeInfos)); - assertThat(ruleInfo.getDependenciesList()).containsExactly( - javaToolchain.getLabel(), - "//com/google/example:middle" - ); + assertThat(ruleInfo.getDependenciesList()) + .containsExactly(javaToolchain.getLabel(), "//com/google/example:middle"); } @Test @@ -1013,17 +1013,18 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); // todo(dslomov): Skylark aspect implementation does not yet return a correct root path. - assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getSourcesList()).containsExactly( - ArtifactLocation.newBuilder() - .setRootExecutionPathFragment( - targetConfig.getGenfilesDirectory(RepositoryName.MAIN).getExecPathString()) - .setRelativePath("com/google/example/gen.java") - .setIsSource(false) - .build(), - ArtifactLocation.newBuilder() - .setRelativePath("com/google/example/Test.java") - .setIsSource(true) - .build()); + assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getSourcesList()) + .containsExactly( + ArtifactLocation.newBuilder() + .setRootExecutionPathFragment( + targetConfig.getGenfilesDirectory(RepositoryName.MAIN).getExecPathString()) + .setRelativePath("com/google/example/gen.java") + .setIsSource(false) + .build(), + ArtifactLocation.newBuilder() + .setRelativePath("com/google/example/Test.java") + .setIsSource(true) + .build()); } @Test @@ -1100,12 +1101,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:neither"); - RuleIdeInfo neither = getRuleInfoAndVerifyLabel( - "//java/com/google/example:neither", ruleIdeInfos); - RuleIdeInfo resourceFiles = getRuleInfoAndVerifyLabel( - "//java/com/google/example:resource_files", ruleIdeInfos); - RuleIdeInfo manifest = getRuleInfoAndVerifyLabel( - "//java/com/google/example:manifest", ruleIdeInfos); + RuleIdeInfo neither = + getRuleInfoAndVerifyLabel("//java/com/google/example:neither", ruleIdeInfos); + RuleIdeInfo resourceFiles = + getRuleInfoAndVerifyLabel("//java/com/google/example:resource_files", ruleIdeInfos); + RuleIdeInfo manifest = + getRuleInfoAndVerifyLabel("//java/com/google/example:manifest", ruleIdeInfos); assertThat(neither.getAndroidRuleIdeInfo().getGenerateResourceClass()).isFalse(); assertThat(resourceFiles.getAndroidRuleIdeInfo().getGenerateResourceClass()).isTrue(); @@ -1120,11 +1121,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " name = 'plugin',", " srcs = ['Plugin.java'],", " processor_class = 'com.google.example.Plugin',", - ")" - ); + ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:plugin"); - RuleIdeInfo plugin = getRuleInfoAndVerifyLabel( - "//java/com/google/example:plugin", ruleIdeInfos); + RuleIdeInfo plugin = + getRuleInfoAndVerifyLabel("//java/com/google/example:plugin", ruleIdeInfos); if (testLegacyAswbPluginVersionCompatibility()) { assertThat(plugin.getKind()).isEqualTo(Kind.JAVA_PLUGIN); @@ -1151,12 +1151,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", - ruleIdeInfos - ); - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); ArtifactLocation location = ruleInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) @@ -1178,8 +1175,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) .isEqualTo(Paths.get("com/google/example/BUILD").toString()); @@ -1220,8 +1217,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo(); @@ -1229,8 +1226,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(cRuleIdeInfo.getRuleIncludeList()).containsExactly("foo/bar"); // Make sure our understanding of where this attributes show up in other providers is correct. - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue(); CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo(); @@ -1266,8 +1263,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo(); @@ -1275,8 +1272,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(cRuleIdeInfo.getRuleCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/"); // Make sure our understanding of where this attributes show up in other providers is correct. - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue(); CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo(); @@ -1305,8 +1302,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = ruleIdeInfo.getCRuleIdeInfo(); @@ -1328,8 +1325,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) .isEqualTo(Paths.get("com/google/example/BUILD").toString()); @@ -1363,8 +1360,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) .isEqualTo(Paths.get("com/google/example/BUILD").toString()); @@ -1407,14 +1404,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(3); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.getDependenciesList()).contains("//com/google/example:lib"); assertThat(ruleIdeInfo.getDependenciesList()).hasSize(2); - assertThat(getIdeCompileFiles()).containsExactly( - "com/google/example/_objs/simple/com/google/example/simple/simple.o"); + assertThat(getIdeCompileFiles()) + .containsExactly("com/google/example/_objs/simple/com/google/example/simple/simple.o"); } @Test @@ -1432,8 +1429,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " hdrs = ['simple/simple.h'],", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:androidlib"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:androidlib", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:androidlib", ruleIdeInfos); assertThat(ruleIdeInfo.getDependenciesList()).contains("//com/google/example:simple"); } @@ -1457,8 +1454,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1"); assertThat(ruleIdeInfos).hasSize(3); - RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel( - "//com/google/example:lib1", ruleIdeInfos); + RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos); assertThat(lib1.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo(); @@ -1466,8 +1462,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(cRuleIdeInfo.getRuleIncludeList()).containsExactly("foo/bar"); // Make sure our understanding of where this attributes show up in other providers is correct. - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue(); CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo(); @@ -1518,8 +1514,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1"); assertThat(ruleIdeInfos).hasSize(3); - RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel( - "//com/google/example:lib1", ruleIdeInfos); + RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos); assertThat(lib1.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo(); @@ -1527,8 +1522,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(cRuleIdeInfo.getRuleCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/"); // Make sure our understanding of where this attributes show up in other providers is correct. - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue(); CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo(); @@ -1570,8 +1565,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib1"); assertThat(ruleIdeInfos).hasSize(3); - RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel( - "//com/google/example:lib1", ruleIdeInfos); + RuleIdeInfo lib1 = getRuleInfoAndVerifyLabel("//com/google/example:lib1", ruleIdeInfos); assertThat(lib1.hasCRuleIdeInfo()).isTrue(); CRuleIdeInfo cRuleIdeInfo = lib1.getCRuleIdeInfo(); @@ -1601,8 +1595,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " name = 'simple',", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//java/com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//java/com/google/example:simple", ruleIdeInfos); if (testLegacyAswbPluginVersionCompatibility()) { assertThat(ruleIdeInfo.getKind()).isEqualTo(Kind.ANDROID_BINARY); } @@ -1635,12 +1629,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); assertThat(ruleIdeInfos).hasSize(2); - RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", - ruleIdeInfos - ); - Entry<String, RuleIdeInfo> toolchainEntry = getCcToolchainRuleAndVerifyThereIsOnlyOne( - ruleIdeInfos); + RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); + Entry<String, RuleIdeInfo> toolchainEntry = + getCcToolchainRuleAndVerifyThereIsOnlyOne(ruleIdeInfos); RuleIdeInfo toolchainInfo = toolchainEntry.getValue(); ArtifactLocation location = ruleInfo.getBuildFileArtifactLocation(); assertThat(Paths.get(location.getRelativePath()).toString()) @@ -1659,8 +1650,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['simple/Simple.java']", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:simple", ruleIdeInfos); + RuleIdeInfo ruleIdeInfo = + getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isFalse(); } @@ -1686,10 +1677,8 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['Real.java'],", ")"); Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:test"); - RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel( - "//com/google/example:test", ruleIdeInfos); - assertThat(testInfo.getDependenciesList()) - .contains("//com/google/example:real"); + RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel("//com/google/example:test", ruleIdeInfos); + assertThat(testInfo.getDependenciesList()).contains("//com/google/example:real"); assertThat(getRuleInfoAndVerifyLabel("//com/google/example:real", ruleIdeInfos)).isNotNull(); } @@ -1703,8 +1692,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "foo = rule(", " implementation=impl,", " attrs={'deps': attr.label_list(cfg='data')},", - ")" - ); + ")"); scratch.file( "com/google/example/BUILD", "load('//com/google/example:foo.bzl', 'foo')", @@ -1715,18 +1703,15 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase } /** - * Returns true if we are testing the native aspect, not the Skylark one. - * Eventually Skylark aspect will be equivalent to a native one, and this method - * will be removed. + * Returns true if we are testing the native aspect, not the Skylark one. Eventually Skylark + * aspect will be equivalent to a native one, and this method will be removed. */ @Override protected boolean isNativeTest() { return true; } - /** - * Test for Skylark version of the aspect. - */ + /** Test for Skylark version of the aspect. */ @RunWith(JUnit4.class) public static class IntelliJSkylarkAspectTest extends AndroidStudioInfoAspectTest { diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl index f179b68727..364429559f 100644 --- a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl +++ b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl @@ -287,7 +287,13 @@ def build_java_rule_ide_info(target, ctx): jdeps = artifact_location(target.java.outputs.jdeps) - java_sources, gen_java_sources = java_sources_for_package_manifest(ctx) + java_sources, gen_java_sources, srcjars = divide_java_sources(ctx) + + # HACK -- android_library rules with the resources attribute do not support srcjar inputs + # to the filtered gen jar generation, because we don't want all resource classes in this jar. + # This can be removed once android_resources is deleted + if hasattr(ctx.rule.attr, LEGACY_RESOURCE_ATTR) and ctx.rule.kind.startswith("android_"): + srcjars = [] package_manifest = None if java_sources: @@ -295,29 +301,14 @@ def build_java_rule_ide_info(target, ctx): ide_info_files = ide_info_files | set([package_manifest]) filtered_gen_jar = None - if java_sources and gen_java_sources: - gen_package_manifest = build_java_package_manifest( + if java_sources and (gen_java_sources or srcjars): + filtered_gen_jar, filtered_gen_resolve_files = build_filtered_gen_jar( ctx, target, gen_java_sources, - "-filtered-gen.manifest" - ) - jar_artifacts = [] - for jar in target.java.outputs.jars: - if jar.ijar: - jar_artifacts.append(jar.ijar) - elif jar.class_jar: - jar_artifacts.append(jar.class_jar) - filtered_gen_jar_artifact = build_filtered_gen_jar( - ctx, - target, - jar_artifacts, - gen_package_manifest - ) - ide_resolve_files = ide_resolve_files | set([filtered_gen_jar_artifact]) - filtered_gen_jar = struct( - jar=artifact_location(filtered_gen_jar_artifact), + srcjars ) + ide_resolve_files = ide_resolve_files | filtered_gen_resolve_files java_rule_ide_info = struct_omit_none( sources = sources, @@ -351,34 +342,67 @@ def build_java_package_manifest(ctx, target, source_files, suffix): ) return output -def build_filtered_gen_jar(ctx, target, jars, manifest): +def build_filtered_gen_jar(ctx, target, gen_java_sources, srcjars): """Filters the passed jar to contain only classes from the given manifest.""" - output = ctx.new_file(target.label.name + "-filtered-gen.jar") + jar_artifacts = [] + source_jar_artifacts = [] + for jar in target.java.outputs.jars: + if jar.ijar: + jar_artifacts.append(jar.ijar) + elif jar.class_jar: + jar_artifacts.append(jar.class_jar) + if jar.source_jar: + source_jar_artifacts.append(jar.source_jar) + + filtered_jar = ctx.new_file(target.label.name + "-filtered-gen.jar") + filtered_source_jar = ctx.new_file(target.label.name + "-filtered-gen-src.jar") args = [] - args += ["--jars"] - args += [":".join([jar.path for jar in jars])] - args += ["--manifest", manifest.path] - args += ["--output", output.path] + args += ["--filter_jars"] + args += [":".join([jar.path for jar in jar_artifacts])] + args += ["--filter_source_jars"] + args += [":".join([jar.path for jar in source_jar_artifacts])] + args += ["--filtered_jar", filtered_jar.path] + args += ["--filtered_source_jar", filtered_source_jar.path] + if gen_java_sources: + args += ["--keep_java_files"] + args += [":".join([java_file.path for java_file in gen_java_sources])] + if srcjars: + args += ["--keep_source_jars"] + args += [":".join([source_jar.path for source_jar in srcjars])] ctx.action( - inputs = jars + [manifest], - outputs = [output], + inputs = jar_artifacts + source_jar_artifacts + gen_java_sources + srcjars, + outputs = [filtered_jar, filtered_source_jar], executable = ctx.executable._jar_filter, arguments = args, mnemonic = "JarFilter", progress_message = "Filtering generated code for " + str(target.label), ) - return output + output_jar = struct( + jar=artifact_location(filtered_jar), + source_jar=artifact_location(filtered_source_jar), + ) + ide_resolve_files = set([filtered_jar, filtered_source_jar]) + return output_jar, ide_resolve_files -def java_sources_for_package_manifest(ctx): - """Get the list of non-generated java sources to go in the package manifest.""" +def divide_java_sources(ctx): + """Divide sources into plain java, generated java, and srcjars.""" + java_sources = [] + gen_java_sources = [] + srcjars = [] if hasattr(ctx.rule.attr, "srcs"): srcs = ctx.rule.attr.srcs - all_java_sources = [f for src in srcs for f in src.files if f.basename.endswith(".java")] - java_sources = [f for f in all_java_sources if f.is_source] - gen_java_sources = [f for f in all_java_sources if not f.is_source] - return java_sources, gen_java_sources - return [], [] + for src in srcs: + for f in src.files: + if f.basename.endswith(".java"): + if f.is_source: + java_sources.append(f) + else: + gen_java_sources.append(f) + elif f.basename.endswith(".srcjar"): + srcjars.append(f) + + return java_sources, gen_java_sources, srcjars def build_android_rule_ide_info(target, ctx, legacy_resource_label): """Build AndroidRuleIdeInfo. |