diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java | 79 |
1 files changed, 52 insertions, 27 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 11786f54c0..cf16f33aad 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 @@ -99,6 +99,38 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { AndroidStudioInfoFilesProvider.Builder providerBuilder = new AndroidStudioInfoFilesProvider.Builder(); + + RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base); + + NestedSet<Label> directDependencies = processDependencies( + base, ruleContext, providerBuilder, ruleKind); + + AndroidStudioInfoFilesProvider provider; + if (ruleKind != RuleIdeInfo.Kind.UNRECOGNIZED) { + provider = + createIdeBuildArtifact( + base, + ruleContext, + ruleKind, + directDependencies, + providerBuilder); + } else { + provider = providerBuilder.build(); + } + + NestedSet<Artifact> ideInfoFiles = provider.getIdeBuildFiles(); + builder + .addOutputGroup(IDE_BUILD, ideInfoFiles) + .addProvider( + AndroidStudioInfoFilesProvider.class, + provider); + + return builder.build(); + } + + private NestedSet<Label> processDependencies( + ConfiguredTarget base, RuleContext ruleContext, + AndroidStudioInfoFilesProvider.Builder providerBuilder, RuleIdeInfo.Kind ruleKind) { NestedSetBuilder<Label> dependenciesBuilder = NestedSetBuilder.stableOrder(); ImmutableList.Builder<TransitiveInfoCollection> prerequisitesBuilder = ImmutableList.builder(); @@ -112,6 +144,8 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { for (AndroidStudioInfoFilesProvider depProvider : AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) { + dependenciesBuilder.addTransitive(depProvider.getExportedDeps()); + providerBuilder.ideBuildFilesBuilder().addTransitive(depProvider.getIdeBuildFiles()); providerBuilder.transitiveDependenciesBuilder().addTransitive( depProvider.getTransitiveDependencies()); @@ -121,37 +155,28 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { for (TransitiveInfoCollection dep : prerequisites) { dependenciesBuilder.add(dep.getLabel()); } - for (JavaExportsProvider javaExportsProvider : - AnalysisUtils.getProviders(prerequisites, JavaExportsProvider.class)) { - dependenciesBuilder.addTransitive(javaExportsProvider.getTransitiveExports()); - } - NestedSet<Label> directDependencies = dependenciesBuilder.build(); - providerBuilder.transitiveDependenciesBuilder().addTransitive(directDependencies); - - RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base); - - AndroidStudioInfoFilesProvider provider; - if (ruleKind != RuleIdeInfo.Kind.UNRECOGNIZED) { - provider = - createIdeBuildArtifact( - base, - ruleContext, - ruleKind, - directDependencies, - providerBuilder); - } else { - provider = providerBuilder.build(); + JavaExportsProvider javaExportsProvider = base.getProvider(JavaExportsProvider.class); + if (javaExportsProvider != null) { + providerBuilder.exportedDepsBuilder() + .addTransitive(javaExportsProvider.getTransitiveExports()); } - NestedSet<Artifact> ideInfoFiles = provider.getIdeBuildFiles(); - builder - .addOutputGroup(IDE_BUILD, ideInfoFiles) - .addProvider( - AndroidStudioInfoFilesProvider.class, - provider); + // android_library without sources exports all its deps + if (ruleKind == Kind.ANDROID_LIBRARY) { + JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class); + boolean hasSources = sourceInfoProvider != null + && !sourceInfoProvider.getSourceFiles().isEmpty(); + if (!hasSources) { + for (TransitiveInfoCollection dep : prerequisites) { + providerBuilder.exportedDepsBuilder().add(dep.getLabel()); + } + } + } - return builder.build(); + NestedSet<Label> directDependencies = dependenciesBuilder.build(); + providerBuilder.transitiveDependenciesBuilder().addTransitive(directDependencies); + return directDependencies; } private static AndroidSdkRuleInfo makeAndroidSdkRuleInfo(RuleContext ruleContext, |