aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java23
3 files changed, 89 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;
}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index 10d4a731ef..ab10e259b7 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -592,4 +592,27 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.containsExactly("a", "b", "c", "d");
}
+ public void testAndroidLibraryWithoutSourcesExportsDependencies() throws Exception {
+ scratch.file(
+ "java/com/google/example/BUILD",
+ "android_library(",
+ " name = 'lib',",
+ " srcs = ['Test.java']",
+ ")",
+ "android_library(",
+ " name = 'forward',",
+ " deps = [':lib'],",
+ ")",
+ "android_library(",
+ " name = 'super',",
+ " deps = [':forward'],",
+ ")");
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:super");
+ RuleIdeInfo ruleInfo = getRuleInfoAndVerifyLabel(
+ "//java/com/google/example:super", ruleIdeInfos);
+
+ assertThat(ruleInfo.getDependenciesList()).containsExactly(
+ "//java/com/google/example:forward",
+ "//java/com/google/example:lib");
+ }
}