aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Adam Michael <ajmichael@google.com>2016-09-22 20:01:06 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-09-23 08:15:52 +0000
commit0ddbd710b03200d9867f7c7297ed187cd1e66f89 (patch)
treea6f36654dc11b08381debc139803844c2fd1c2e2
parent3621ab6e3c9d9458d03927d76bf785431217554e (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.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AarImportRule.java6
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()