aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
diff options
context:
space:
mode:
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.java79
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,