diff options
author | Googler <noreply@google.com> | 2015-10-01 13:14:31 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-10-01 19:44:10 +0000 |
commit | 793011b354cdbd1fc73655d6b87d0b4679ebe6db (patch) | |
tree | bc2ddd6279986844fcaf836629b1a8414e6b8b50 /src/main | |
parent | e96dbe6bc4d19f03979b26aaa35712834837cd42 (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')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java | 79 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java | 14 |
2 files changed, 66 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, diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java index 66e625eaf6..408d377922 100644 --- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.Source public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvider { private final NestedSet<Artifact> ideBuildFiles; private final NestedSet<Label> transitiveDependencies; + private final NestedSet<Label> exportedDeps; private final NestedSet<AndroidIdeInfoProvider.SourceDirectory> transitiveResources; /** @@ -38,12 +39,14 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi public static class Builder { private final NestedSetBuilder<Artifact> ideBuildFilesBuilder; private final NestedSetBuilder<Label> transitiveDependenciesBuilder; + private NestedSetBuilder<Label> exportedDepsBuilder; private NestedSetBuilder<AndroidIdeInfoProvider.SourceDirectory> transitiveResourcesBuilder; private NestedSet<AndroidIdeInfoProvider.SourceDirectory> transitiveResources; public Builder() { ideBuildFilesBuilder = NestedSetBuilder.stableOrder(); transitiveDependenciesBuilder = NestedSetBuilder.stableOrder(); + exportedDepsBuilder = NestedSetBuilder.stableOrder(); transitiveResourcesBuilder = NestedSetBuilder.stableOrder(); transitiveResources = null; } @@ -56,6 +59,10 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi return transitiveDependenciesBuilder; } + public NestedSetBuilder<Label> exportedDepsBuilder() { + return exportedDepsBuilder; + } + public NestedSetBuilder<SourceDirectory> transitiveResourcesBuilder() { return transitiveResourcesBuilder; } @@ -77,6 +84,7 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi return new AndroidStudioInfoFilesProvider( ideBuildFilesBuilder.build(), transitiveDependenciesBuilder.build(), + exportedDepsBuilder.build(), getTransitiveResources() ); } @@ -85,9 +93,11 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi private AndroidStudioInfoFilesProvider( NestedSet<Artifact> ideBuildFiles, NestedSet<Label> transitiveDependencies, + NestedSet<Label> exportedDeps, NestedSet<SourceDirectory> transitiveResources) { this.ideBuildFiles = ideBuildFiles; this.transitiveDependencies = transitiveDependencies; + this.exportedDeps = exportedDeps; this.transitiveResources = transitiveResources; } @@ -99,6 +109,10 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi return transitiveDependencies; } + public NestedSet<Label> getExportedDeps() { + return exportedDeps; + } + public NestedSet<SourceDirectory> getTransitiveResources() { return transitiveResources; } |