diff options
author | Googler <noreply@google.com> | 2015-10-26 15:39:10 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-10-27 11:47:34 +0000 |
commit | c140f9f29c9eb15a10208922080100272015901f (patch) | |
tree | 31250c6624676e3760eb0c4d9482386f7b206892 /src | |
parent | ca2ee182bbf8b581fe1eea44dc737e98881dc3b1 (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.java | 43 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java | 21 |
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(); + } } |