aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-10-01 13:14:31 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-10-01 19:44:10 +0000
commit793011b354cdbd1fc73655d6b87d0b4679ebe6db (patch)
treebc2ddd6279986844fcaf836629b1a8414e6b8b50 /src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
parente96dbe6bc4d19f03979b26aaa35712834837cd42 (diff)
Support android_library dep forwarding in Android aspect.
android_libraries without sources export all their deps. Support this, and merge with the java export mechanism. -- MOS_MIGRATED_REVID=104391924
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,