aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-10 12:13:47 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-10 12:15:36 -0700
commit4f0051c61045bedab87253b1c8db61cd22926708 (patch)
tree28243f886ef1e7f0c3348b2d068fc73e374b8b23
parentb5cd7065aeb0370fb6c341bc2578315ca1c62297 (diff)
Expose aar_import data processing methods to Skylark
Because of the special nature of aar_import, I don't think it makes much sense to split up the different parts - you always get everything out of the AAR. RELNOTES: none PiperOrigin-RevId: 196152640
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java64
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java6
6 files changed, 77 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 9cacebfc08..859d296297 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -97,7 +97,7 @@ public class AarImport implements RuleConfiguredTargetFactory {
final ResourceApk resourceApk;
if (AndroidResources.decoupleDataProcessing(ruleContext)) {
StampedAndroidManifest manifest =
- AndroidManifest.forAarImport(ruleContext, androidManifestArtifact);
+ AndroidManifest.forAarImport(androidManifestArtifact);
boolean neverlink = JavaCommon.isNeverLink(ruleContext);
ValidatedAndroidResources validatedResources =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
index 11ddc1bd61..2a188a41ca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
@@ -170,7 +170,12 @@ public class AndroidAssets {
/** Convenience method to do all of asset processing - parsing and merging. */
public MergedAndroidAssets process(RuleContext ruleContext, boolean neverlink)
throws InterruptedException {
- return parse(ruleContext).merge(ruleContext, neverlink);
+ return process(ruleContext, AssetDependencies.fromRuleDeps(ruleContext, neverlink));
+ }
+
+ MergedAndroidAssets process(RuleContext ruleContext, AssetDependencies assetDeps)
+ throws InterruptedException {
+ return parse(ruleContext).merge(ruleContext, assetDeps);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
index fc5cd5ebfb..9b98259822 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
@@ -34,7 +34,7 @@ public class AndroidManifest {
@Nullable private final String pkg;
private final boolean exported;
- public static StampedAndroidManifest forAarImport(RuleContext ruleContext, Artifact manifest) {
+ public static StampedAndroidManifest forAarImport(Artifact manifest) {
return new StampedAndroidManifest(manifest, /* pkg = */ null, /* exported = */ true);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
index 842b4ed5ab..7ae893c2e8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
@@ -421,6 +421,16 @@ public class AndroidResources {
AndroidAaptVersion aaptVersion = AndroidAaptVersion.chooseTargetAaptVersion(ruleContext);
ResourceDependencies resourceDeps = ResourceDependencies.fromRuleDeps(ruleContext, neverlink);
+ return process(ruleContext, manifest, resourceDeps, enableDataBinding, aaptVersion);
+ }
+
+ ValidatedAndroidResources process(
+ RuleContext ruleContext,
+ StampedAndroidManifest manifest,
+ ResourceDependencies resourceDeps,
+ boolean enableDataBinding,
+ AndroidAaptVersion aaptVersion)
+ throws InterruptedException {
return parse(ruleContext, manifest, enableDataBinding, aaptVersion)
.merge(ruleContext, resourceDeps, enableDataBinding, aaptVersion)
.validate(ruleContext, aaptVersion);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
index 827daaa3c0..293a952e62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.android;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
@@ -380,13 +381,9 @@ public abstract class AndroidSkylarkData {
ValidatedAndroidResources validated =
AndroidResources.from(ctx.getRuleContext(), getFileProviders(resources), "resources")
- .parse(
+ .process(
ctx.getRuleContext(),
manifest.asStampedManifest(),
- enableDataBinding,
- aaptVersion)
- .merge(
- ctx.getRuleContext(),
ResourceDependencies.fromProviders(deps, neverlink),
enableDataBinding,
aaptVersion)
@@ -722,6 +719,63 @@ public abstract class AndroidSkylarkData {
}
/**
+ * Skylark API for doing all resource, asset, and manifest processing for an aar_import target
+ *
+ * <p>TODO(b/79159379): Stop passing SkylarkRuleContext here
+ *
+ * @param ctx the SkylarkRuleContext. We will soon change to using an ActionConstructionContext
+ * instead. See b/79159379
+ */
+ @SkylarkCallable(
+ name = "process_aar_import_data",
+ // context, resource and asset TreeArtifacts, and manifest artifact are all mandatory
+ mandatoryPositionals = 4,
+ parameters = {
+ @Param(
+ name = "deps",
+ type = SkylarkList.class,
+ generic1 = ConfiguredTarget.class,
+ named = true,
+ positional = false,
+ defaultValue = "[]",
+ doc = "Targets to inherit asset and resource dependencies from.")
+ },
+ doc = "Processes assets, resources, and manifest for aar_import targets")
+ public SkylarkDict<NativeProvider<?>, NativeInfo> processAarImportData(
+ SkylarkRuleContext ctx,
+ SpecialArtifact resources,
+ SpecialArtifact assets,
+ Artifact androidManifestArtifact,
+ SkylarkList<ConfiguredTarget> deps)
+ throws EvalException, InterruptedException {
+
+ AndroidAaptVersion aaptVersion =
+ AndroidCommon.getAndroidConfig(ctx.getRuleContext()).getAndroidAaptVersion();
+
+ ValidatedAndroidResources validatedResources =
+ AndroidResources.forAarImport(resources)
+ .process(
+ ctx.getRuleContext(),
+ AndroidManifest.forAarImport(androidManifestArtifact),
+ ResourceDependencies.fromProviders(
+ getProviders(deps, AndroidResourcesInfo.PROVIDER), /* neverlink = */ false),
+ /* enableDataBinding = */ false,
+ aaptVersion);
+
+ MergedAndroidAssets mergedAssets =
+ AndroidAssets.forAarImport(assets)
+ .parse(ctx.getRuleContext())
+ .merge(
+ ctx.getRuleContext(),
+ AssetDependencies.fromProviders(
+ getProviders(deps, AndroidAssetsInfo.PROVIDER), /* neverlink = */ false));
+
+ ResourceApk resourceApk = ResourceApk.of(validatedResources, mergedAssets, null, null);
+
+ return getNativeInfosFrom(resourceApk, ctx.getLabel());
+ }
+
+ /**
* Skylark API for processing assets, resources, and manifest for android_local_test
*
* <p>TODO(b/79159379): Stop passing SkylarkRuleContext here
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java
index 696643328f..ac5c19df2a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java
@@ -45,12 +45,6 @@ public class ParsedAndroidAssets extends AndroidAssets implements MergableAndroi
}
/** Merges these assets with assets from dependencies. */
- public MergedAndroidAssets merge(RuleContext ruleContext, boolean neverlink)
- throws InterruptedException {
- return MergedAndroidAssets.mergeFrom(
- ruleContext, this, AssetDependencies.fromRuleDeps(ruleContext, neverlink));
- }
-
MergedAndroidAssets merge(RuleContext ruleContext, AssetDependencies assetDeps)
throws InterruptedException {
return MergedAndroidAssets.mergeFrom(ruleContext, this, assetDeps);