aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
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
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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java79
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java14
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;
}