aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2015-09-15 10:52:42 +0000
committerGravatar John Field <jfield@google.com>2015-09-15 20:27:11 +0000
commit13fb7fd8959c57999b2d705ae041757ba1e90f12 (patch)
treeaeccee7a6eeb329d01d96a7cba03dd3f71549219 /src/main/java/com/google/devtools/build/lib
parent01fa070f2cc6625693f73ab671ea62bd59a08678 (diff)
Support java_import in AndroidStudioIdeInfoAspect
-- MOS_MIGRATED_REVID=103079877
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java98
1 files changed, 68 insertions, 30 deletions
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 fa26e5c598..80fb82cf5a 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,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
outputBuilder.addAllDependencies(transform(directDependencies, LABEL_TO_STRING));
outputBuilder.addAllTransitiveDependencies(transform(transitiveDependencies, LABEL_TO_STRING));
- if (ruleKind == Kind.JAVA_LIBRARY) {
+ if (ruleKind == Kind.JAVA_LIBRARY || ruleKind == Kind.JAVA_IMPORT) {
outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base));
} else if (ruleKind == Kind.ANDROID_SDK) {
outputBuilder.setAndroidSdkRuleInfo(
@@ -230,37 +230,16 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
JavaRuleOutputJarsProvider outputJarsProvider =
base.getProvider(JavaRuleOutputJarsProvider.class);
if (outputJarsProvider != null) {
- {
- LibraryArtifact.Builder jarsBuilder = LibraryArtifact.newBuilder();
- Artifact classJar = outputJarsProvider.getClassJar();
- if (classJar != null) {
- jarsBuilder.setJar(makeArtifactLocation(classJar));
- }
- Artifact srcJar = outputJarsProvider.getSrcJar();
- if (srcJar != null) {
- jarsBuilder.setSourceJar(makeArtifactLocation(srcJar));
- }
- if (jarsBuilder.hasJar() || jarsBuilder.hasSourceJar()) {
- builder.addJars(jarsBuilder.build());
- }
- }
-
- {
- LibraryArtifact.Builder genjarsBuilder = LibraryArtifact.newBuilder();
-
- Artifact genClassJar = outputJarsProvider.getGenClassJar();
- if (genClassJar != null) {
- genjarsBuilder.setJar(makeArtifactLocation(genClassJar));
- }
- Artifact gensrcJar = outputJarsProvider.getGensrcJar();
- if (gensrcJar != null) {
- genjarsBuilder.setSourceJar(makeArtifactLocation(gensrcJar));
- }
- if (genjarsBuilder.hasJar() || genjarsBuilder.hasSourceJar()) {
- builder.addJars(genjarsBuilder.build());
- }
+ // java_library
+ collectJarsFromOutputJarsProvider(builder, outputJarsProvider);
+ } else {
+ JavaSourceInfoProvider provider = base.getProvider(JavaSourceInfoProvider.class);
+ if (provider != null) {
+ // java_import
+ collectJarsFromSourceInfoProvider(builder, provider);
}
}
+
Collection<Artifact> sourceFiles = getSources(base);
for (Artifact sourceFile : sourceFiles) {
@@ -270,6 +249,63 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
return builder.build();
}
+ private static void collectJarsFromSourceInfoProvider(
+ JavaRuleIdeInfo.Builder builder, JavaSourceInfoProvider provider) {
+ Collection<Artifact> sourceJarsForJarFiles = provider.getSourceJarsForJarFiles();
+ // For java_import rule, we always have only one source jar specified.
+ // The intent is that that source jar provides sources for all imported jars,
+ // so we reflect that intent, adding that jar to all LibraryArtifacts we produce
+ // for java_import rule. We should consider supporting
+ // library=<collection of jars>+<collection of srcjars>
+ // mode in our AndroidStudio plugin (Android Studio itself supports that).
+ Artifact sourceJar;
+ if (sourceJarsForJarFiles.size() > 0) {
+ sourceJar = sourceJarsForJarFiles.iterator().next();
+ } else {
+ sourceJar = null;
+ }
+
+ for (Artifact artifact : provider.getJarFiles()) {
+ LibraryArtifact.Builder libraryBuilder = LibraryArtifact.newBuilder();
+ libraryBuilder.setJar(makeArtifactLocation(artifact));
+ if (sourceJar != null) {
+ libraryBuilder.setSourceJar(makeArtifactLocation(sourceJar));
+ }
+ builder.addJars(libraryBuilder.build());
+ }
+ }
+
+ private static void collectJarsFromOutputJarsProvider(
+ JavaRuleIdeInfo.Builder builder, JavaRuleOutputJarsProvider outputJarsProvider) {
+ LibraryArtifact.Builder jarsBuilder = LibraryArtifact.newBuilder();
+ Artifact classJar = outputJarsProvider.getClassJar();
+ if (classJar != null) {
+ jarsBuilder.setJar(makeArtifactLocation(classJar));
+ }
+ Artifact srcJar = outputJarsProvider.getSrcJar();
+ if (srcJar != null) {
+ jarsBuilder.setSourceJar(makeArtifactLocation(srcJar));
+ }
+ if (jarsBuilder.hasJar() || jarsBuilder.hasSourceJar()) {
+ builder.addJars(jarsBuilder.build());
+ }
+
+
+ LibraryArtifact.Builder genjarsBuilder = LibraryArtifact.newBuilder();
+
+ Artifact genClassJar = outputJarsProvider.getGenClassJar();
+ if (genClassJar != null) {
+ genjarsBuilder.setJar(makeArtifactLocation(genClassJar));
+ }
+ Artifact gensrcJar = outputJarsProvider.getGensrcJar();
+ if (gensrcJar != null) {
+ genjarsBuilder.setSourceJar(makeArtifactLocation(gensrcJar));
+ }
+ if (genjarsBuilder.hasJar() || genjarsBuilder.hasSourceJar()) {
+ builder.addGeneratedJars(genjarsBuilder.build());
+ }
+ }
+
private static Collection<Artifact> getSources(ConfiguredTarget base) {
// Calculate source files.
JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class);
@@ -289,6 +325,8 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
RuleIdeInfo.Kind kind;
if ("java_library".equals(rule.getRuleClassObject().getName())) {
kind = RuleIdeInfo.Kind.JAVA_LIBRARY;
+ } else if ("java_import".equals(rule.getRuleClassObject().getName())) {
+ kind = Kind.JAVA_IMPORT;
} else if (base.getProvider(AndroidSdkProvider.class) != null) {
kind = RuleIdeInfo.Kind.ANDROID_SDK;
} else {