aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-09-30 23:59:17 +0000
committerGravatar David Chen <dzc@google.com>2015-10-01 12:16:56 +0000
commit78e485ae304d9413bbed01e7157349c6af08ddc3 (patch)
tree5bb969d6619aa169d42a11b05169f02571115618 /src/main/java/com/google
parentded77376e76a2bb0f9603a192c3db45339f8b319 (diff)
Correctly handle exports in AndroidStudioInfoAspect.
* Propagate aspects via exports property * Treat exports as direct dependencies -- MOS_MIGRATED_REVID=104350818
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java48
1 files changed, 24 insertions, 24 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 b6badb5fcb..dfab1955c0 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
@@ -22,6 +22,7 @@ import com.google.common.io.ByteSource;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
+import com.google.devtools.build.lib.analysis.AnalysisUtils;
import com.google.devtools.build.lib.analysis.Aspect;
import com.google.devtools.build.lib.analysis.Aspect.Builder;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
@@ -87,6 +88,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
public AspectDefinition getDefinition() {
return new AspectDefinition.Builder(NAME)
.attributeAspect("deps", AndroidStudioInfoAspect.class)
+ .attributeAspect("exports", AndroidStudioInfoAspect.class)
.build();
}
@@ -97,33 +99,31 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
AndroidStudioInfoFilesProvider.Builder providerBuilder =
new AndroidStudioInfoFilesProvider.Builder();
- // Collect ide build files and calculate dependencies.
NestedSetBuilder<Label> dependenciesBuilder = NestedSetBuilder.stableOrder();
- // todo(dslomov,tomlu): following current build info logic, this code enumerates dependencies
- // directly by iterating over deps attribute. The more robust way to do this might be
- // to iterate classpath as provided to build action.
+ ImmutableList.Builder<TransitiveInfoCollection> prerequisitesBuilder = ImmutableList.builder();
if (ruleContext.attributes().has("deps", BuildType.LABEL_LIST)) {
- Iterable<AndroidStudioInfoFilesProvider> androidStudioInfoFilesProviders =
- ruleContext.getPrerequisites("deps", Mode.TARGET, AndroidStudioInfoFilesProvider.class);
- for (AndroidStudioInfoFilesProvider depProvider : androidStudioInfoFilesProviders) {
- providerBuilder.ideBuildFilesBuilder().addTransitive(depProvider.getIdeBuildFiles());
- providerBuilder.transitiveDependenciesBuilder().addTransitive(
- depProvider.getTransitiveDependencies());
- providerBuilder.transitiveResourcesBuilder().addTransitive(
- depProvider.getTransitiveResources());
- }
- List<? extends TransitiveInfoCollection> deps =
- ruleContext.getPrerequisites("deps", Mode.TARGET);
- for (TransitiveInfoCollection dep : deps) {
- dependenciesBuilder.add(dep.getLabel());
- }
-
- Iterable<JavaExportsProvider> javaExportsProviders = ruleContext
- .getPrerequisites("deps", Mode.TARGET, JavaExportsProvider.class);
- for (JavaExportsProvider javaExportsProvider : javaExportsProviders) {
- dependenciesBuilder.addTransitive(javaExportsProvider.getTransitiveExports());
- }
+ prerequisitesBuilder.addAll(ruleContext.getPrerequisites("deps", Mode.TARGET));
+ }
+ if (ruleContext.attributes().has("exports", BuildType.LABEL_LIST)) {
+ prerequisitesBuilder.addAll(ruleContext.getPrerequisites("exports", Mode.TARGET));
+ }
+ List<TransitiveInfoCollection> prerequisites = prerequisitesBuilder.build();
+
+ for (AndroidStudioInfoFilesProvider depProvider :
+ AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) {
+ providerBuilder.ideBuildFilesBuilder().addTransitive(depProvider.getIdeBuildFiles());
+ providerBuilder.transitiveDependenciesBuilder().addTransitive(
+ depProvider.getTransitiveDependencies());
+ providerBuilder.transitiveResourcesBuilder().addTransitive(
+ depProvider.getTransitiveResources());
+ }
+ 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();