aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-10-26 15:39:10 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-10-27 11:47:34 +0000
commitc140f9f29c9eb15a10208922080100272015901f (patch)
tree31250c6624676e3760eb0c4d9482386f7b206892 /src
parentca2ee182bbf8b581fe1eea44dc737e98881dc3b1 (diff)
Propagate Android aspect across runtime_deps.
-- MOS_MIGRATED_REVID=106302500
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java43
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java21
2 files changed, 50 insertions, 14 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 fa67df1a45..c01100b26d 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
@@ -95,6 +95,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
return new AspectDefinition.Builder(NAME)
.attributeAspect("deps", AndroidStudioInfoAspect.class)
.attributeAspect("exports", AndroidStudioInfoAspect.class)
+ .attributeAspect("runtime_deps", AndroidStudioInfoAspect.class)
.build();
}
@@ -138,48 +139,62 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
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();
+ // Calculate direct dependencies
+ ImmutableList.Builder<TransitiveInfoCollection> directDepsBuilder = ImmutableList.builder();
if (ruleContext.attributes().has("deps", BuildType.LABEL_LIST)) {
- prerequisitesBuilder.addAll(ruleContext.getPrerequisites("deps", Mode.TARGET));
+ directDepsBuilder.addAll(ruleContext.getPrerequisites("deps", Mode.TARGET));
}
if (ruleContext.attributes().has("exports", BuildType.LABEL_LIST)) {
- prerequisitesBuilder.addAll(ruleContext.getPrerequisites("exports", Mode.TARGET));
+ directDepsBuilder.addAll(ruleContext.getPrerequisites("exports", Mode.TARGET));
}
- List<TransitiveInfoCollection> prerequisites = prerequisitesBuilder.build();
+ List<TransitiveInfoCollection> directDeps = directDepsBuilder.build();
+ // Add exports from direct dependencies
+ NestedSetBuilder<Label> dependenciesBuilder = NestedSetBuilder.stableOrder();
for (AndroidStudioInfoFilesProvider depProvider :
- AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) {
+ AnalysisUtils.getProviders(directDeps, AndroidStudioInfoFilesProvider.class)) {
dependenciesBuilder.addTransitive(depProvider.getExportedDeps());
-
- providerBuilder.ideInfoFilesBuilder().addTransitive(depProvider.getIdeInfoFiles());
- providerBuilder.ideInfoTextFilesBuilder().addTransitive(depProvider.getIdeInfoTextFiles());
- providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
}
- for (TransitiveInfoCollection dep : prerequisites) {
+ for (TransitiveInfoCollection dep : directDeps) {
dependenciesBuilder.add(dep.getLabel());
}
+ NestedSet<Label> dependencies = dependenciesBuilder.build();
+ // Propagate my own exports
JavaExportsProvider javaExportsProvider = base.getProvider(JavaExportsProvider.class);
if (javaExportsProvider != null) {
providerBuilder.exportedDepsBuilder()
.addTransitive(javaExportsProvider.getTransitiveExports());
}
-
// 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) {
+ for (TransitiveInfoCollection dep : directDeps) {
providerBuilder.exportedDepsBuilder().add(dep.getLabel());
}
}
}
- return dependenciesBuilder.build();
+ // Propagate providers from all prerequisites (deps + runtime_deps)
+ ImmutableList.Builder<TransitiveInfoCollection> prerequisitesBuilder = ImmutableList.builder();
+ prerequisitesBuilder.addAll(directDeps);
+ if (ruleContext.attributes().has("runtime_deps", BuildType.LABEL_LIST)) {
+ prerequisitesBuilder.addAll(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET));
+ }
+ List<TransitiveInfoCollection> prerequisites = prerequisitesBuilder.build();
+
+ for (AndroidStudioInfoFilesProvider depProvider :
+ AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) {
+ providerBuilder.ideInfoFilesBuilder().addTransitive(depProvider.getIdeInfoFiles());
+ providerBuilder.ideInfoTextFilesBuilder().addTransitive(depProvider.getIdeInfoTextFiles());
+ providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
+ }
+
+ return dependencies;
}
private static AndroidSdkRuleInfo makeAndroidSdkRuleInfo(AndroidSdkProvider provider) {
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 3b67a07faf..62ed07ae53 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
@@ -736,4 +736,25 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.setIsSource(true)
.build());
}
+
+ public void testAspectIsPropagatedAcrossRuntimeDeps() throws Exception {
+ scratch.file(
+ "com/google/example/BUILD",
+ "java_library(",
+ " name = 'foobar',",
+ " srcs = ['FooBar.java'],",
+ ")",
+ "java_library(",
+ " name = 'lib',",
+ " srcs = ['Lib.java'],",
+ " runtime_deps = [':foobar'],",
+ ")");
+
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
+ // Fails if aspect was not propagated
+ getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos);
+
+ RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos);
+ assertThat(libInfo.getDependenciesList()).isEmpty();
+ }
}