diff options
author | 2018-05-10 12:13:47 -0700 | |
---|---|---|
committer | 2018-05-10 12:15:36 -0700 | |
commit | 4f0051c61045bedab87253b1c8db61cd22926708 (patch) | |
tree | 28243f886ef1e7f0c3348b2d068fc73e374b8b23 | |
parent | b5cd7065aeb0370fb6c341bc2578315ca1c62297 (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
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); |