diff options
author | Adam Michael <ajmichael@google.com> | 2016-09-22 20:01:06 +0000 |
---|---|---|
committer | Laszlo Csomor <laszlocsomor@google.com> | 2016-09-23 08:15:52 +0000 |
commit | 0ddbd710b03200d9867f7c7297ed187cd1e66f89 (patch) | |
tree | a6f36654dc11b08381debc139803844c2fd1c2e2 | |
parent | 3621ab6e3c9d9458d03927d76bf785431217554e (diff) |
Adds exports attribute to aar_import allowing aar_import and java_import.
Manually propagates class jars in AarImport. Resource propagation is handled by magic in AndroidCommon.
--
MOS_MIGRATED_REVID=133988946
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImport.java | 27 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java | 6 |
2 files changed, 22 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImport.java index a6277301c6..02781401fb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImport.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; +import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.PopulateTreeArtifactAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -35,6 +36,7 @@ import com.google.devtools.build.lib.rules.android.ResourceApk; import com.google.devtools.build.lib.rules.android.ResourceDependencies; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; +import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.vfs.PathFragment; /** @@ -91,21 +93,24 @@ public class AarImport implements RuleConfiguredTargetFactory { ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST), ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP)); + NestedSetBuilder<Artifact> filesToBuildBuilder = + NestedSetBuilder.<Artifact>stableOrder().add(resources).add(classesJar); + + JavaRuleOutputJarsProvider.Builder jarProviderBuilder = new JavaRuleOutputJarsProvider.Builder() + .addOutputJar(classesJar, null, null); + for (TransitiveInfoCollection export : ruleContext.getPrerequisites("exports", Mode.TARGET)) { + for (OutputJar jar : export.getProvider(JavaRuleOutputJarsProvider.class).getOutputJars()) { + jarProviderBuilder.addOutputJar(jar); + filesToBuildBuilder.add(jar.getClassJar()); + } + } + return ruleBuilder - .setFilesToBuild( - NestedSetBuilder - .<Artifact>stableOrder() - .add(resources) - .add(classesJar) - .build()) + .setFilesToBuild(filesToBuildBuilder.build()) .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY) .addProvider( AndroidResourcesProvider.class, resourceApk.toResourceProvider(ruleContext.getLabel())) - .addProvider( - JavaRuleOutputJarsProvider.class, - new JavaRuleOutputJarsProvider.Builder() - .addOutputJar(classesJar, null, null) - .build()) + .addProvider(JavaRuleOutputJarsProvider.class, jarProviderBuilder.build()) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java index c47f6a692a..dfc4483f1b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java @@ -13,9 +13,11 @@ // limitations under the License. package com.google.devtools.build.lib.bazel.rules.android; +import static com.google.devtools.build.lib.packages.Attribute.ANY_EDGE; import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; +import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleDefinition; @@ -38,6 +40,10 @@ public class AarImportRule implements RuleDefinition { .add(attr("aar", LABEL) .mandatory() .allowedFileTypes(FileType.of(".aar"))) + .add(attr("exports", LABEL_LIST) + .allowedRuleClasses("aar_import", "java_import") + .allowedFileTypes() + .validityPredicate(ANY_EDGE)) .add(attr("$zip_manifest_creator", LABEL) .cfg(HOST) .exec() |