From 39493f8f728db626c112f1bd6649c36c67842f49 Mon Sep 17 00:00:00 2001 From: Googler Date: Thu, 2 Jun 2016 13:28:01 +0000 Subject: Add java_toolchain to IDE aspect output. -- MOS_MIGRATED_REVID=123858617 --- .../lib/ideinfo/AndroidStudioInfoAspectTest.java | 145 ++++++++++-------- .../ideinfo/AndroidStudioInfoAspectTestBase.java | 17 ++- .../devtools/build/lib/ideinfo/intellij_info.bzl | 170 +++++++++++---------- 3 files changed, 186 insertions(+), 146 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/ideinfo') 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 a8bdeb1af4..f099c9e00d 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 @@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.ArtifactLocation; import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.CRuleIdeInfo; import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.CToolchainIdeInfo; @@ -33,6 +34,7 @@ import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.nio.file.Paths; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -52,7 +54,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['simple/Simple.java']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - assertThat(ruleIdeInfos.size()).isEqualTo(1); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( "//com/google/example:simple", ruleIdeInfos); ArtifactLocation location = ruleIdeInfo.getBuildFileArtifactLocation(); @@ -65,7 +66,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase } assertThat(ruleIdeInfo.getKind()).isEqualTo(Kind.JAVA_LIBRARY); assertThat(ruleIdeInfo.getKindString()).isEqualTo("java_library"); - assertThat(ruleIdeInfo.getDependenciesCount()).isEqualTo(0); assertThat(relativePathsForJavaSourcesOf(ruleIdeInfo)) .containsExactly("com/google/example/simple/Simple.java"); assertThat( @@ -76,8 +76,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(getIdeResolveFiles()).containsExactly( "com/google/example/libsimple.jar", "com/google/example/libsimple-ijar.jar", - "com/google/example/libsimple-src.jar" - ); + "com/google/example/libsimple-src.jar"); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath()) .isEqualTo("com/google/example/libsimple.jdeps"); } @@ -95,7 +94,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = ['simple/Simple.java']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - assertThat(ruleIdeInfos.size()).isEqualTo(1); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( "//com/google/example:simple", ruleIdeInfos); @@ -122,7 +120,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " srcs = [':gen_sources']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); - assertThat(ruleIdeInfos.size()).isEqualTo(1); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( "//com/google/example:simple", ruleIdeInfos); assertThat(ruleIdeInfo.getJavaRuleIdeInfo().hasPackageManifest()).isFalse(); @@ -143,7 +140,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:complex"); - assertThat(ruleIdeInfos.size()).isEqualTo(2); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); RuleIdeInfo complexRuleIdeInfo = getRuleInfoAndVerifyLabel( @@ -152,7 +148,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForJavaSourcesOf(complexRuleIdeInfo)) .containsExactly("com/google/example/complex/Complex.java"); assertThat(complexRuleIdeInfo.getDependenciesList()) - .containsExactly("//com/google/example:simple"); + .contains("//com/google/example:simple"); } @Test @@ -174,7 +170,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " deps = [':complex']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:extracomplex"); - assertThat(ruleIdeInfos.size()).isEqualTo(3); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); @@ -185,7 +180,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo)) .containsExactly("com/google/example/extracomplex/ExtraComplex.java"); assertThat(extraComplexRuleIdeInfo.getDependenciesList()) - .containsExactly("//com/google/example:complex"); + .contains("//com/google/example:complex"); assertThat(getIdeResolveFiles()).containsExactly( "com/google/example/libextracomplex.jar", @@ -196,8 +191,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/libcomplex-src.jar", "com/google/example/libsimple.jar", "com/google/example/libsimple-ijar.jar", - "com/google/example/libsimple-src.jar" - ); + "com/google/example/libsimple-src.jar"); } @Test @@ -224,7 +218,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " deps = [':complex', ':complex1']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:extracomplex"); - assertThat(ruleIdeInfos.size()).isEqualTo(4); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); @@ -235,8 +228,9 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForJavaSourcesOf(extraComplexRuleIdeInfo)) .containsExactly("com/google/example/extracomplex/ExtraComplex.java"); - assertThat(extraComplexRuleIdeInfo.getDependenciesList()) - .containsExactly("//com/google/example:complex", "//com/google/example:complex1"); + assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf( + "//com/google/example:complex", + "//com/google/example:complex1"); } @Test @@ -258,7 +252,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " deps = [':complex']", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:extracomplex"); - assertThat(ruleIdeInfos.size()).isEqualTo(3); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); @@ -269,11 +262,11 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "//com/google/example:extracomplex", ruleIdeInfos); assertThat(complexRuleIdeInfo.getDependenciesList()) - .containsExactly("//com/google/example:simple"); + .contains("//com/google/example:simple"); - assertThat(extraComplexRuleIdeInfo.getDependenciesList()) - .containsExactly("//com/google/example:simple", "//com/google/example:complex") - .inOrder(); + assertThat(extraComplexRuleIdeInfo.getDependenciesList()).containsAllOf( + "//com/google/example:simple", + "//com/google/example:complex"); assertThat(getIdeResolveFiles()).containsExactly( "com/google/example/libextracomplex.jar", "com/google/example/libextracomplex-ijar.jar", @@ -283,8 +276,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/libcomplex-src.jar", "com/google/example/libsimple.jar", "com/google/example/libsimple-ijar.jar", - "com/google/example/libsimple-src.jar" - ); + "com/google/example/libsimple-src.jar"); } @Test @@ -312,7 +304,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")" ); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:megacomplex"); - assertThat(ruleIdeInfos.size()).isEqualTo(4); getRuleInfoAndVerifyLabel("//com/google/example:simple", ruleIdeInfos); getRuleInfoAndVerifyLabel("//com/google/example:complex", ruleIdeInfos); @@ -323,12 +314,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForJavaSourcesOf(megaComplexRuleIdeInfo)) .containsExactly("com/google/example/megacomplex/MegaComplex.java"); - assertThat(megaComplexRuleIdeInfo.getDependenciesList()) - .containsExactly( - "//com/google/example:simple", - "//com/google/example:complex", - "//com/google/example:extracomplex") - .inOrder(); + assertThat(megaComplexRuleIdeInfo.getDependenciesList()).containsAllOf( + "//com/google/example:simple", + "//com/google/example:complex", + "//com/google/example:extracomplex"); } @Test @@ -349,9 +338,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib"); final RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos); RuleIdeInfo impInfo = getRuleInfoAndVerifyLabel("//com/google/example:imp", ruleIdeInfos); + assertThat(impInfo.getKind()).isEqualTo(Kind.JAVA_IMPORT); assertThat(impInfo.getKindString()).isEqualTo("java_import"); - assertThat(libInfo.getDependenciesList()).containsExactly("//com/google/example:imp"); + assertThat(libInfo.getDependenciesList()).contains("//com/google/example:imp"); JavaRuleIdeInfo javaRuleIdeInfo = impInfo.getJavaRuleIdeInfo(); assertThat(javaRuleIdeInfo).isNotNull(); @@ -368,8 +358,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/_ijar/imp/com/google/example/b-ijar.jar", "com/google/example/liblib.jar", "com/google/example/liblib-ijar.jar", - "com/google/example/liblib-src.jar" - ); + "com/google/example/liblib-src.jar"); } @Test @@ -398,10 +387,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(impInfo.getKind()).isEqualTo(Kind.JAVA_IMPORT); assertThat(impInfo.getKindString()).isEqualTo("java_import"); - assertThat(impInfo.getDependenciesList()).containsExactly("//com/google/example:foobar"); - assertThat(libInfo.getDependenciesList()) - .containsExactly("//com/google/example:foobar", "//com/google/example:imp") - .inOrder(); + assertThat(impInfo.getDependenciesList()).contains("//com/google/example:foobar"); + assertThat(libInfo.getDependenciesList()).containsAllOf( + "//com/google/example:foobar", + "//com/google/example:imp"); } @Test @@ -459,8 +448,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase 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" - ); + "com/google/example/gen_srcjar.jar"); } @Test @@ -504,7 +492,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForJavaSourcesOf(testInfo)) .containsExactly("java/com/google/example/FooBarTest.java"); assertThat(testInfo.getDependenciesList()).contains("//java/com/google/example:foobar"); - assertThat(testInfo.getDependenciesList()).hasSize(2); assertThat(transform(testInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) .containsExactly(jarString("java/com/google/example", "FooBarTest.jar", null, "FooBarTest-src.jar")); @@ -514,8 +501,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "java/com/google/example/libfoobar-ijar.jar", "java/com/google/example/libfoobar-src.jar", "java/com/google/example/FooBarTest.jar", - "java/com/google/example/FooBarTest-src.jar" - ); + "java/com/google/example/FooBarTest-src.jar"); assertThat(testInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath()) .isEqualTo("java/com/google/example/FooBarTest.jdeps"); @@ -539,12 +525,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:foobar-exe"); RuleIdeInfo binaryInfo = getRuleInfoAndVerifyLabel( "//com/google/example:foobar-exe", ruleIdeInfos); + assertThat(binaryInfo.getKind()).isEqualTo(Kind.JAVA_BINARY); assertThat(binaryInfo.getKindString()).isEqualTo("java_binary"); assertThat(relativePathsForJavaSourcesOf(binaryInfo)) .containsExactly("com/google/example/FooBarMain.java"); assertThat(binaryInfo.getDependenciesList()).contains("//com/google/example:foobar"); - assertThat(binaryInfo.getDependenciesList()).hasSize(2); + assertThat(transform(binaryInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) .containsExactly(jarString("com/google/example", "foobar-exe.jar", null, "foobar-exe-src.jar")); @@ -554,12 +541,55 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/libfoobar-ijar.jar", "com/google/example/libfoobar-src.jar", "com/google/example/foobar-exe.jar", - "com/google/example/foobar-exe-src.jar" - ); + "com/google/example/foobar-exe-src.jar"); assertThat(binaryInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath()) .isEqualTo("com/google/example/foobar-exe.jdeps"); } + @Test + public void testJavaToolchain() throws Exception { + scratch.file( + "com/google/example/BUILD", + "java_library(", + " name = 'a',", + " srcs = ['A.java'],", + " deps = [':b'],", + ")", + "java_library(", + " name = 'b',", + " srcs = ['B.java'],", + ")"); + + Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:a"); + + List javaToolChainInfos = findJavaToolchain(ruleIdeInfos); + assertThat(javaToolChainInfos).hasSize(1); // Ensure we don't get one instance per java_library + RuleIdeInfo toolChainInfo = Iterables.getOnlyElement(javaToolChainInfos); + assertThat(toolChainInfo.getJavaToolchainIdeInfo().getSourceVersion()).isNotEmpty(); + assertThat(toolChainInfo.getJavaToolchainIdeInfo().getTargetVersion()).isNotEmpty(); + + RuleIdeInfo a = ruleIdeInfos.get("//com/google/example:a"); + assertThat(a.getDependenciesList()).containsAllOf( + "//com/google/example:b", + toolChainInfo.getLabel()); + } + + @Test + public void testJavaToolchainForAndroid() throws Exception { + scratch.file( + "com/google/example/BUILD", + "android_library(", + " name = 'a',", + " srcs = ['A.java'],", + ")"); + + Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:a"); + assertThat(ruleIdeInfos).hasSize(2); + + List javaToolChainInfos = findJavaToolchain(ruleIdeInfos); + assertThat(javaToolChainInfos).hasSize(1); + } + @Test public void testAndroidLibrary() throws Exception { scratch.file( @@ -597,7 +627,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase .isEqualTo("com/google/example/AndroidManifest.xml"); assertThat(ruleInfo.getAndroidRuleIdeInfo().getJavaPackage()).isEqualTo("com.google.example"); - assertThat(ruleInfo.getDependenciesList()).containsExactly("//com/google/example:l1"); + assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1"); assertThat(getIdeResolveFiles()).containsExactly( "com/google/example/libl.jar", "com/google/example/libl-ijar.jar", @@ -609,8 +639,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/libl1-src.jar", "com/google/example/l1_resources.jar", "com/google/example/l1_resources-ijar.jar", - "com/google/example/l1_resources-src.jar" - ); + "com/google/example/l1_resources-src.jar"); assertThat(ruleInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath()) .isEqualTo("com/google/example/libl.jdeps"); } @@ -635,6 +664,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:b"); RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel("//com/google/example:b", ruleIdeInfos); + assertThat(ruleInfo.getKind()).isEqualTo(Kind.ANDROID_BINARY); assertThat(ruleInfo.getKindString()).isEqualTo("android_binary"); assertThat(relativePathsForJavaSourcesOf(ruleInfo)).containsExactly("com/google/example/Main.java"); @@ -657,7 +687,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1"); - assertThat(ruleInfo.getDependenciesList()).hasSize(2); assertThat(getIdeResolveFiles()).containsExactly( "com/google/example/libb.jar", @@ -670,8 +699,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/libl1-src.jar", "com/google/example/l1_resources.jar", "com/google/example/l1_resources-ijar.jar", - "com/google/example/l1_resources-src.jar" - ); + "com/google/example/l1_resources-src.jar"); assertThat(ruleInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath()) .isEqualTo("com/google/example/libb.jdeps"); } @@ -738,8 +766,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "java/com/google/example/libhas_idl-ijar.jar", "java/com/google/example/libhas_idl-src.jar", "java/com/google/example/libhas_idl-idl.jar", - "java/com/google/example/libhas_idl-idl.srcjar" - ); + "java/com/google/example/libhas_idl-idl.srcjar"); } @Test @@ -763,8 +790,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "com/google/example/lib_resources.jar", "com/google/example/lib_resources-ijar.jar", "com/google/example/lib_resources-src.jar", - "com/google/example/AndroidManifest.xml" - ); + "com/google/example/AndroidManifest.xml"); } @Test @@ -817,8 +843,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase "java/com/google/example/libtest-ijar.jar", "java/com/google/example/libtest-src.jar", "java/com/google/example/libtest-gen.jar", - "java/com/google/example/libtest-gensrc.jar" - ); + "java/com/google/example/libtest-gensrc.jar"); } @Test @@ -856,7 +881,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel( "//java/com/google/example:super", ruleIdeInfos); - assertThat(ruleInfo.getDependenciesList()).containsExactly( + assertThat(ruleInfo.getDependenciesList()).containsAllOf( "//java/com/google/example:forward", "//java/com/google/example:lib"); } @@ -911,8 +936,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase // Fails if aspect was not propagated getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos); - RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos); - assertThat(libInfo.getDependenciesList()).isEmpty(); + getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos); } @Test @@ -1312,11 +1336,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase " hdrs = ['simple/simple.h'],", ")"); Map ruleIdeInfos = buildRuleIdeInfo("//com/google/example:androidlib"); - assertThat(ruleIdeInfos.size()).isEqualTo(3); RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( "//com/google/example:androidlib", ruleIdeInfos); - assertThat(ruleIdeInfo.getDependenciesList()).containsExactly("//com/google/example:simple"); + assertThat(ruleIdeInfo.getDependenciesList()).contains("//com/google/example:simple"); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java index dfff8a8da6..41f3e962d1 100644 --- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java @@ -21,7 +21,6 @@ import static org.junit.Assert.assertFalse; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.Action; @@ -196,18 +195,18 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase { AndroidStudioInfoFilesProvider provider = configuredAspect.getProvider(AndroidStudioInfoFilesProvider.class); Iterable artifacts = provider.getIdeInfoFiles(); - ImmutableMap.Builder builder = ImmutableMap.builder(); + Map ruleIdeInfos = new HashMap<>(); for (Artifact artifact : artifacts) { Action generatingAction = getGeneratingAction(artifact); if (generatingAction instanceof BinaryFileWriteAction) { BinaryFileWriteAction writeAction = (BinaryFileWriteAction) generatingAction; RuleIdeInfo ruleIdeInfo = RuleIdeInfo.parseFrom(writeAction.getSource().openStream()); - builder.put(ruleIdeInfo.getLabel(), ruleIdeInfo); + ruleIdeInfos.put(ruleIdeInfo.getLabel(), ruleIdeInfo); } else { verifyPackageManifestSpawnAction(generatingAction); } } - return builder.build(); + return ruleIdeInfos; } else { BuildView.AnalysisResult analysisResult = update( ImmutableList.of(target), @@ -267,5 +266,15 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase { return getOutputGroupResult(AndroidStudioInfoAspect.IDE_RESOLVE); } + protected static List findJavaToolchain(Map ruleIdeInfos) { + List result = Lists.newArrayList(); + for (RuleIdeInfo ruleIdeInfo : ruleIdeInfos.values()) { + if (ruleIdeInfo.getKindString().equals("java_toolchain")) { + result.add(ruleIdeInfo); + } + } + return result; + } + protected abstract boolean isNativeTest(); } 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 7eca57a25b..c73e7f835b 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 @@ -17,86 +17,83 @@ # A map to convert rule names to a RuleIdeInfo.Kind # Deprecated - only here for backwards compatibility with the tests _kind_to_kind_id = { - "android_binary" : 0, - "android_library" : 1, - "android_test" : 2, - "android_robolectric_test" : 3, - "java_library" : 4, - "java_test" : 5, - "java_import" : 6, - "java_binary" : 7, - "proto_library" : 8, - "android_sdk" : 9, - "java_plugin" : 10, - "android_resources" : 11, - "cc_library" : 12, - "cc_binary" : 13, - "cc_test" : 14, - "cc_inc_library" : 15, - "cc_toolchain": 16, - "java_wrap_cc": 17, + "android_binary": 0, + "android_library": 1, + "android_test": 2, + "android_robolectric_test": 3, + "java_library": 4, + "java_test": 5, + "java_import": 6, + "java_binary": 7, + "proto_library": 8, + "android_sdk": 9, + "java_plugin": 10, + "android_resources": 11, + "cc_library": 12, + "cc_binary": 13, + "cc_test": 14, + "cc_inc_library": 15, + "cc_toolchain": 16, + "java_wrap_cc": 17, } # A map to convert JavaApiFlavor to ProtoLibraryLegacyJavaIdeInfo.ApiFlavor _api_flavor_to_id = { - "FLAVOR_NONE": 0, - "FLAVOR_IMMUTABLE": 1, - "FLAVOR_MUTABLE": 2, - "FLAVOR_BOTH": 3, + "FLAVOR_NONE": 0, + "FLAVOR_IMMUTABLE": 1, + "FLAVOR_MUTABLE": 2, + "FLAVOR_BOTH": 3, } -_unrecognized_rule = -1; +_unrecognized_rule = -1 def get_kind_legacy(target, ctx): """ Gets kind of a rule given a target and rule context. """ return _kind_to_kind_id.get(ctx.rule.kind, _unrecognized_rule) - # Compile-time dependency attributes, grouped by type. DEPS = struct( label = [ - "binary_under_test", # From android_test - "java_lib",# From proto_library - "_proto1_java_lib", # From proto_library - "_junit", # From android_robolectric_test - "_cc_toolchain", # From C rules - "module_target", + "binary_under_test", # From android_test + "java_lib", # From proto_library + "_proto1_java_lib", # From proto_library + "_junit", # From android_robolectric_test + "_cc_toolchain", # From C rules + "module_target", + "_java_toolchain", # From java rules ], label_list = [ - "deps", - "exports", - "_robolectric", # From android_robolectric_test + "deps", + "exports", + "_robolectric", # From android_robolectric_test ], ) - # Run-time dependency attributes, grouped by type. RUNTIME_DEPS = struct( label = [ - # todo(dslomov,tomlu): resources are tricky since they are sometimes labels and sometimes label_lists. - # "resources" + # todo(dslomov,tomlu): resources are tricky since they are sometimes labels and sometimes label_lists. + # "resources" ], label_list = [ - "runtime_deps", - ] + "runtime_deps", + ], ) # All dependency attributes along which the aspect propagates, grouped by type. ALL_DEPS = struct( - label = DEPS.label + RUNTIME_DEPS.label, - label_list = DEPS.label_list + RUNTIME_DEPS.label_list, + label = DEPS.label + RUNTIME_DEPS.label, + label_list = DEPS.label_list + RUNTIME_DEPS.label_list, ) def struct_omit_none(**kwargs): - """ A replacement for standard `struct` function that omits the fields with None value. - """ + """A replacement for standard `struct` function that omits the fields with None value.""" d = {name: kwargs[name] for name in kwargs if kwargs[name] != None} return struct(**d) def artifact_location(file): - """ Creates an ArtifactLocation proto from a File. - """ + """Creates an ArtifactLocation proto from a File.""" if file == None: return None return struct_omit_none( @@ -106,8 +103,7 @@ def artifact_location(file): ) def source_directory_tuple(resource_file): - """ Creates a tuple of (source directory, is_source, root execution path) from an android resource file. - """ + """Creates a tuple of (source directory, is_source, root execution path).""" return ( str(android_common.resource_source_directory(resource_file)), resource_file.is_source, @@ -115,7 +111,9 @@ def source_directory_tuple(resource_file): ) def all_unique_source_directories(resources): - """ Builds a list of ArtifactLocation protos for all source directories for a list of Android resources. + """Builds a list of ArtifactLocation protos. + + This is done for all source directories for a list of Android resources. """ # Sets can contain tuples, but cannot contain structs. # Use set of tuples to unquify source directories. @@ -126,16 +124,14 @@ def all_unique_source_directories(resources): for (relative_path, is_source, root_execution_path_fragment) in source_directory_tuples] def build_file_artifact_location(build_file_path): - """ Creates an ArtifactLocation proto representing a location of a given BUILD file. - """ + """Creates an ArtifactLocation proto representing a location of a given BUILD file.""" return struct( relative_path = build_file_path, is_source = True, ) def library_artifact(java_output): - """ Creates a LibraryArtifact representing a given java_output. - """ + """Creates a LibraryArtifact representing a given java_output.""" if java_output == None or java_output.class_jar == None: return None return struct_omit_none( @@ -145,24 +141,22 @@ def library_artifact(java_output): ) def annotation_processing_jars(annotation_processing): - """ Creates a LibraryArtifact representing Java annotation processing jars. - """ + """Creates a LibraryArtifact representing Java annotation processing jars.""" return struct_omit_none( jar = artifact_location(annotation_processing.class_jar), source_jar = artifact_location(annotation_processing.source_jar), ) def jars_from_output(output): - """ Collect jars for ide-resolve-files from Java output. - """ + """Collect jars for ide-resolve-files from Java output.""" if output == None: return [] return [jar for jar in [output.class_jar, output.ijar, output.source_jar] if jar != None and not jar.is_source] -def c_rule_ide_info(target, ctx): - """ Build CRuleIdeInfo. +def build_c_rule_ide_info(target, ctx): + """Build CRuleIdeInfo. Returns a pair of (CRuleIdeInfo proto, a set of ide-resolve-files). (or (None, empty set) if the rule is not a C rule). @@ -198,8 +192,8 @@ def c_rule_ide_info(target, ctx): ), ide_resolve_files) -def c_toolchain_ide_info(target, ctx): - """ Build CToolchainIdeInfo. +def build_c_toolchain_ide_info(target, ctx): + """Build CToolchainIdeInfo. Returns a pair of (CToolchainIdeInfo proto, a set of ide-resolve-files). (or (None, empty set) if the rule is not a cc_toolchain rule). @@ -244,8 +238,9 @@ def getSourcesFromRule(context): for file in src.files] return [] -def java_rule_ide_info(target, ctx): - """ Build JavaRuleIdeInfo. +def build_java_rule_ide_info(target, ctx): + """ + Build JavaRuleIdeInfo. Returns a pair of (JavaRuleIdeInfo proto, a set of ide-resolve-files). (or (None, empty set) if the rule is not Java rule). @@ -278,13 +273,14 @@ def java_rule_ide_info(target, ctx): ), ide_resolve_files) -def android_rule_ide_info(target, ctx): - """ Build AndroidRuleIdeInfo. +def build_android_rule_ide_info(target, ctx): + """ + Build AndroidRuleIdeInfo. Returns a pair of (AndroidRuleIdeInfo proto, a set of ide-resolve-files). (or (None, empty set) if the rule is not Android rule). """ - if not hasattr(target, 'android'): + if not hasattr(target, "android"): return (None, set()) ide_resolve_files = set(jars_from_output(target.android.idl.output)) return (struct_omit_none( @@ -299,8 +295,8 @@ def android_rule_ide_info(target, ctx): ), ide_resolve_files) -def test_info(target, ctx): - """ Build TestInfo """ +def build_test_info(target, ctx): + """Build TestInfo""" if not is_test_rule(ctx): return None return struct_omit_none( @@ -311,9 +307,9 @@ def is_test_rule(ctx): kind_string = ctx.rule.kind return kind_string.endswith("_test") -def proto_library_legacy_java_ide_info(target, ctx): - """ Build ProtoLibraryLegacyJavaIdeInfo.""" - if not hasattr(target, 'proto_legacy_java'): +def build_proto_library_legacy_java_ide_info(target, ctx): + """Build ProtoLibraryLegacyJavaIdeInfo.""" + if not hasattr(target, "proto_legacy_java"): return None proto_info = target.proto_legacy_java.legacy_info return struct_omit_none( @@ -324,8 +320,19 @@ def proto_library_legacy_java_ide_info(target, ctx): jars_immutable = [library_artifact(output) for output in proto_info.jars_immutable], ) +def build_java_toolchain_ide_info(target): + """Build JavaToolchainIdeInfo.""" + if not hasattr(target, "java_toolchain"): + return None + toolchain_info = target.java_toolchain + return struct_omit_none( + source_version = toolchain_info.source_version, + target_version = toolchain_info.target_version, + ) + def collect_labels(rule_attrs, attrs): - """ Collect labels from attribute values. + """ + Collect labels from attribute values. Assuming that values of attributes from attr_list in rule_atrs are label lists, collect a set of string representation of those labels. @@ -339,8 +346,7 @@ def collect_labels(rule_attrs, attrs): if hasattr(rule_attrs, attr_name)]) def collect_export_deps(rule_attrs): - """ Build a union of all export dependencies. - """ + """Build a union of all export dependencies.""" result = set() for attr_name in DEPS.label_list: if hasattr(rule_attrs, attr_name): @@ -354,8 +360,7 @@ def collect_export_deps(rule_attrs): return result def _aspect_impl(target, ctx): - """ Aspect implementation function - """ + """Aspect implementation function.""" kind_legacy = get_kind_legacy(target, ctx) kind_string = ctx.rule.kind rule_attrs = ctx.rule.attr @@ -383,24 +388,26 @@ def _aspect_impl(target, ctx): # Collect C-specific information - (c_rule_ide_info, c_ide_resolve_files) = c_rule_ide_info(target, ctx) + (c_rule_ide_info, c_ide_resolve_files) = build_c_rule_ide_info(target, ctx) ide_resolve_files = ide_resolve_files | c_ide_resolve_files - (c_toolchain_ide_info, c_toolchain_ide_resolve_files) = c_toolchain_ide_info(target, ctx) + (c_toolchain_ide_info, c_toolchain_ide_resolve_files) = build_c_toolchain_ide_info(target, ctx) ide_resolve_files = ide_resolve_files | c_toolchain_ide_resolve_files # Collect Java-specific information - (java_rule_ide_info, java_ide_resolve_files) = java_rule_ide_info(target, ctx) + (java_rule_ide_info, java_ide_resolve_files) = build_java_rule_ide_info(target, ctx) ide_resolve_files = ide_resolve_files | java_ide_resolve_files # Collect Android-specific information - (android_rule_ide_info, android_ide_resolve_files) = android_rule_ide_info(target, ctx) + (android_rule_ide_info, android_ide_resolve_files) = build_android_rule_ide_info(target, ctx) ide_resolve_files = ide_resolve_files | android_ide_resolve_files - proto_library_legacy_java_ide_info = proto_library_legacy_java_ide_info(target, ctx) + proto_library_legacy_java_ide_info = build_proto_library_legacy_java_ide_info(target, ctx) + + java_toolchain_ide_info = build_java_toolchain_ide_info(target) # Collect test info - test_info = test_info(target, ctx) + test_info = build_test_info(target, ctx) # Collect information about exports. export_deps = set() @@ -426,6 +433,7 @@ def _aspect_impl(target, ctx): tags = ctx.rule.attr.tags, test_info = test_info, proto_library_legacy_java_ide_info = proto_library_legacy_java_ide_info, + java_toolchain_ide_info = java_toolchain_ide_info, ) # Output the ide information file. @@ -449,7 +457,7 @@ def _aspect_impl(target, ctx): ) intellij_info_aspect = aspect( - implementation = _aspect_impl, attr_aspects = ALL_DEPS.label + ALL_DEPS.label_list, fragments = ["cpp"], + implementation = _aspect_impl, ) -- cgit v1.2.3