Support java_test and java_binary in AndroidStudioInfoAspect. -- MOS_MIGRATED_REVID=103089400
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java index 80fb82c..c2fe68c 100644 --- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -189,7 +189,10 @@ outputBuilder.addAllDependencies(transform(directDependencies, LABEL_TO_STRING)); outputBuilder.addAllTransitiveDependencies(transform(transitiveDependencies, LABEL_TO_STRING)); - if (ruleKind == Kind.JAVA_LIBRARY || ruleKind == Kind.JAVA_IMPORT) { + if (ruleKind == Kind.JAVA_LIBRARY + || ruleKind == Kind.JAVA_IMPORT + || ruleKind == Kind.JAVA_TEST + || ruleKind == Kind.JAVA_BINARY) { outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base)); } else if (ruleKind == Kind.ANDROID_SDK) { outputBuilder.setAndroidSdkRuleInfo( @@ -323,10 +326,15 @@ private RuleIdeInfo.Kind getRuleKind(Rule rule, ConfiguredTarget base) { RuleIdeInfo.Kind kind; - if ("java_library".equals(rule.getRuleClassObject().getName())) { + String ruleClassName = rule.getRuleClassObject().getName(); + if ("java_library".equals(ruleClassName)) { kind = RuleIdeInfo.Kind.JAVA_LIBRARY; - } else if ("java_import".equals(rule.getRuleClassObject().getName())) { + } else if ("java_import".equals(ruleClassName)) { kind = Kind.JAVA_IMPORT; + } else if ("java_test".equals(ruleClassName)) { + kind = Kind.JAVA_TEST; + } else if ("java_binary".equals(ruleClassName)) { + kind = Kind.JAVA_BINARY; } else if (base.getProvider(AndroidSdkProvider.class) != null) { kind = RuleIdeInfo.Kind.ANDROID_SDK; } else {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index 48423fc..f6d7b51 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -210,6 +210,10 @@ semantics.addProviders(ruleContext, common, jvmFlags, classJar, srcJar, genClassJar, gensrcJar, ImmutableMap.<Artifact, Artifact>of(), helper, filesBuilder, builder); + builder.add( + JavaRuleOutputJarsProvider.class, + new JavaRuleOutputJarsProvider(classJar, srcJar, genClassJar, gensrcJar)); + NestedSet<Artifact> filesToBuild = filesBuilder.build(); collectDefaultRunfiles(runfilesBuilder, ruleContext, common, filesToBuild, launcher, @@ -276,10 +280,14 @@ .setFilesToBuild(filesToBuild) .add(RunfilesProvider.class, runfilesProvider) .setRunfilesSupport(runfilesSupport, executable) - .add(JavaRuntimeClasspathProvider.class, + .add( + JavaRuntimeClasspathProvider.class, new JavaRuntimeClasspathProvider(common.getRuntimeClasspath())) - .add(JavaSourceJarsProvider.class, - new JavaSourceJarsProvider(transitiveSourceJars, srcJars)) + .add( + JavaSourceInfoProvider.class, + JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) + .add( + JavaSourceJarsProvider.class, new JavaSourceJarsProvider(transitiveSourceJars, srcJars)) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars) .addOutputGroup(JavaSemantics.GENERATED_JARS_OUTPUT_GROUP, genClassJar) .build();
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto index b7dcda2..e81db55 100644 --- a/src/main/protobuf/android_studio_ide_info.proto +++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -52,8 +52,9 @@ JAVA_LIBRARY = 4; JAVA_TEST = 5; JAVA_IMPORT = 6; - PROTO_LIBRARY = 7; - ANDROID_SDK = 8; + JAVA_BINARY = 7; + PROTO_LIBRARY = 8; + ANDROID_SDK = 9; } string label = 1;
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 7d7ee50..0071a6b 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
@@ -338,6 +338,84 @@ "<jar:com/google/example/b.jar><source:com/google/example/impsrc.jar>"); } + public void testJavaImportWithExports() throws Exception { + scratch.file( + "com/google/example/BUILD", + "java_library(", + " name = \"foobar\",", + " srcs = [\"FooBar.java\"],", + ")", + "java_import(", + " name = \"imp\",", + " jars = [\"a.jar\", \"b.jar\"],", + " deps = [\":foobar\"],", + " exports = [\":foobar\"],", + ")", + "java_library(", + " name = \"lib\",", + " 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.getKind()).isEqualTo(Kind.JAVA_IMPORT); + assertThat(impInfo.getDependenciesList()).containsExactly("//com/google/example:foobar"); + assertThat(libInfo.getDependenciesList()) + .containsExactly("//com/google/example:imp", "//com/google/example:foobar"); + } + + public void testJavaTest() throws Exception { + scratch.file( + "com/google/example/BUILD", + "java_library(", + " name = \"foobar\",", + " srcs = [\"FooBar.java\"],", + ")", + "java_test(", + " name = \"foobar-test\",", + " test_class = \"MyTestClass\",", + " srcs = [\"FooBarTest.java\"],", + " deps = [\":foobar\"],", + ")"); + String target = "//com/google/example:foobar-test"; + Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(target); + RuleIdeInfo testInfo = getRuleInfoAndVerifyLabel(target, ruleIdeInfos); + assertThat(testInfo.getKind()).isEqualTo(Kind.JAVA_TEST); + assertThat(relativePathsForSourcesOf(testInfo)) + .containsExactly("com/google/example/FooBarTest.java"); + assertThat(testInfo.getDependenciesList()).containsExactly("//com/google/example:foobar"); + assertThat(transform(testInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) + .containsExactly( + "<jar:com/google/example/foobar-test.jar><source:com/google/example/foobar-test-src.jar>"); + } + + public void testJavaBinary() throws Exception { + scratch.file( + "com/google/example/BUILD", + "java_library(", + " name = \"foobar\",", + " srcs = [\"FooBar.java\"],", + ")", + "java_binary(", + " name = \"foobar-exe\",", + " main_class = \"MyMainClass\",", + " srcs = [\"FooBarMain.java\"],", + " deps = [\":foobar\"],", + ")"); + String target = "//com/google/example:foobar-exe"; + Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(target); + RuleIdeInfo binaryInfo = getRuleInfoAndVerifyLabel(target, ruleIdeInfos); + assertThat(binaryInfo.getKind()).isEqualTo(Kind.JAVA_BINARY); + assertThat(relativePathsForSourcesOf(binaryInfo)) + .containsExactly("com/google/example/FooBarMain.java"); + assertThat(binaryInfo.getDependenciesList()).containsExactly("//com/google/example:foobar"); + assertThat(transform(binaryInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING)) + .containsExactly( + "<jar:com/google/example/foobar-exe.jar><source:com/google/example/foobar-exe-src.jar>"); + } + private Map<String, RuleIdeInfo> buildRuleIdeInfo(String target) throws Exception { AnalysisResult analysisResult = update(