diff options
18 files changed, 139 insertions, 112 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAarImport.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAarImport.java index debb555b30..4bdf59eba5 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAarImport.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAarImport.java @@ -20,6 +20,9 @@ import com.google.devtools.build.lib.rules.android.AarImport; /** Implementation of {@code aar_import} with Bazel semantics. */ public class BazelAarImport extends AarImport { public BazelAarImport() { - super(BazelJavaSemantics.INSTANCE, BazelAndroidMigrationSemantics.INSTANCE); + super( + BazelJavaSemantics.INSTANCE, + BazelAndroidSemantics.INSTANCE, + BazelAndroidMigrationSemantics.INSTANCE); } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java index 2f66c3f8d5..79ca83c0c7 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTa import com.google.devtools.build.lib.bazel.rules.java.BazelJavaSemantics; import com.google.devtools.build.lib.rules.android.AndroidLocalTestBase; import com.google.devtools.build.lib.rules.android.AndroidMigrationSemantics; +import com.google.devtools.build.lib.rules.android.AndroidSemantics; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaCompilationHelper; @@ -42,6 +43,11 @@ public class BazelAndroidLocalTest extends AndroidLocalTestBase { } @Override + protected AndroidSemantics createAndroidSemantics() { + return BazelAndroidSemantics.INSTANCE; + } + + @Override protected JavaSemantics createJavaSemantics() { return BazelJavaSemantics.INSTANCE; } 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 69ef0ff297..ed24747882 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 @@ -60,11 +60,15 @@ public class AarImport implements RuleConfiguredTargetFactory { private static final String MERGED_JAR = "classes_and_libs_merged.jar"; private final JavaSemantics javaSemantics; + private final AndroidSemantics androidSemantics; private final AndroidMigrationSemantics androidMigrationSemantics; protected AarImport( - JavaSemantics javaSemantics, AndroidMigrationSemantics androidMigrationSemantics) { + JavaSemantics javaSemantics, + AndroidSemantics androidSemantics, + AndroidMigrationSemantics androidMigrationSemantics) { this.javaSemantics = javaSemantics; + this.androidSemantics = androidSemantics; this.androidMigrationSemantics = androidMigrationSemantics; } @@ -93,16 +97,19 @@ public class AarImport implements RuleConfiguredTargetFactory { ruleContext.registerAction( createAarResourcesExtractorActions(ruleContext, aar, resources, assets)); + final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext); final ResourceApk resourceApk; - if (AndroidResources.decoupleDataProcessing(ruleContext)) { + if (AndroidResources.decoupleDataProcessing(dataContext)) { StampedAndroidManifest manifest = AndroidManifest.forAarImport(androidManifestArtifact); boolean neverlink = JavaCommon.isNeverLink(ruleContext); ValidatedAndroidResources validatedResources = - AndroidResources.forAarImport(resources).process(ruleContext, manifest, neverlink); + AndroidResources.forAarImport(resources) + .process(ruleContext, dataContext, manifest, neverlink); MergedAndroidAssets mergedAssets = - AndroidAssets.forAarImport(assets).process(ruleContext, neverlink); + AndroidAssets.forAarImport(assets) + .process(dataContext, AssetDependencies.fromRuleDeps(ruleContext, neverlink)); resourceApk = ResourceApk.of(validatedResources, mergedAssets, null, null); } else { 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 2a188a41ca..cd411b9d8e 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 @@ -163,19 +163,14 @@ public class AndroidAssets { return assetRoots; } - public ParsedAndroidAssets parse(RuleContext ruleContext) throws InterruptedException { - return ParsedAndroidAssets.parseFrom(ruleContext, this); + public ParsedAndroidAssets parse(AndroidDataContext dataContext) throws InterruptedException { + return ParsedAndroidAssets.parseFrom(dataContext, this); } /** Convenience method to do all of asset processing - parsing and merging. */ - public MergedAndroidAssets process(RuleContext ruleContext, boolean neverlink) + public MergedAndroidAssets process(AndroidDataContext dataContext, AssetDependencies assetDeps) throws InterruptedException { - return process(ruleContext, AssetDependencies.fromRuleDeps(ruleContext, neverlink)); - } - - MergedAndroidAssets process(RuleContext ruleContext, AssetDependencies assetDeps) - throws InterruptedException { - return parse(ruleContext).merge(ruleContext, assetDeps); + return parse(dataContext).merge(dataContext, assetDeps); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 5ab5c81b0e..d70dbcaf7c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -195,10 +195,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { // Retrieve and compile the resources defined on the android_binary rule. AndroidResources.validateRuleContext(ruleContext); + final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext); final ApplicationManifest applicationManifest; final ResourceApk resourceApk; - if (AndroidResources.decoupleDataProcessing(ruleContext)) { + if (AndroidResources.decoupleDataProcessing(dataContext)) { StampedAndroidManifest manifest = AndroidManifest.fromAttributes(ruleContext, androidSemantics).mergeWithDeps(ruleContext); applicationManifest = @@ -324,7 +325,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { MobileInstallResourceApks mobileInstallResourceApks = AndroidBinaryMobileInstall.createMobileInstallResourceApks( - ruleContext, applicationManifest, resourceDeps); + ruleContext, dataContext, applicationManifest, resourceDeps); return createAndroidBinary( ruleContext, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java index 1042e2c161..76687f93dd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java @@ -59,13 +59,14 @@ public final class AndroidBinaryMobileInstall { static MobileInstallResourceApks createMobileInstallResourceApks( RuleContext ruleContext, + AndroidDataContext dataContext, ApplicationManifest applicationManifest, ResourceDependencies resourceDeps) throws RuleErrorException, InterruptedException { final ResourceApk incrementalResourceApk; final ResourceApk splitResourceApk; - if (AndroidResources.decoupleDataProcessing(ruleContext)) { + if (AndroidResources.decoupleDataProcessing(dataContext)) { StampedAndroidManifest manifest = new StampedAndroidManifest( applicationManifest.getManifest(), /* pkg = */ null, /* exported = */ true); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java index 3466cb346c..e4a489eefd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext; import com.google.devtools.build.lib.analysis.actions.SpawnAction; +import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; @@ -117,4 +118,10 @@ public class AndroidDataContext { public AndroidConfiguration getAndroidConfig() { return actionConstructionContext.getConfiguration().getFragment(AndroidConfiguration.class); } + + /** Indicates whether Busybox actions should be passed the "--debug" flag */ + public boolean useDebug() { + return getActionConstructionContext().getConfiguration().getCompilationMode() + != CompilationMode.OPT; + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 54f20f389a..937c196ff8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -145,6 +145,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { ResourceDependencies resourceDeps = ResourceDependencies.fromRuleDeps(ruleContext, isNeverLink); AssetDependencies assetDeps = AssetDependencies.fromRuleDeps(ruleContext, isNeverLink); + final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext); final ResourceApk resourceApk; if (definesLocalResources) { if (androidConfig.decoupleDataProcessing()) { @@ -153,10 +154,10 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { ValidatedAndroidResources resources = AndroidResources.from(ruleContext, "resource_files") - .process(ruleContext, manifest, isNeverLink); + .process(ruleContext, dataContext, manifest, isNeverLink); MergedAndroidAssets assets = - AndroidAssets.from(ruleContext).process(ruleContext, isNeverLink); + AndroidAssets.from(ruleContext).process(dataContext, assetDeps); resourceApk = ResourceApk.of(resources, assets, null, null); } else { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 93cf70a9b9..c40940acea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -79,6 +79,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor ruleContext.checkSrcsSamePackage(true); JavaSemantics javaSemantics = createJavaSemantics(); + AndroidSemantics androidSemantics = createAndroidSemantics(); createAndroidMigrationSemantics().validateRuleContext(ruleContext); AndroidLocalTestConfiguration androidLocalTestConfiguration = ruleContext.getFragment(AndroidLocalTestConfiguration.class); @@ -89,9 +90,10 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor // since they run on a JVM, not an android device. JavaTargetAttributes.Builder attributesBuilder = javaCommon.initCommon(); + final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext); final ResourceApk resourceApk; - if (AndroidResources.decoupleDataProcessing(ruleContext)) { + if (AndroidResources.decoupleDataProcessing(dataContext)) { resourceApk = buildResourceApk( ruleContext, @@ -580,6 +582,8 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor /** Get JavaSemantics */ protected abstract JavaSemantics createJavaSemantics(); + protected abstract AndroidSemantics createAndroidSemantics(); + /** Get AndroidMigrationSemantics */ protected abstract AndroidMigrationSemantics createAndroidMigrationSemantics(); 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 7ae893c2e8..a22abd58ea 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 @@ -100,8 +100,8 @@ public class AndroidResources { validateManifest(ruleContext); } - public static boolean decoupleDataProcessing(RuleContext ruleContext) { - return AndroidCommon.getAndroidConfig(ruleContext).decoupleDataProcessing(); + public static boolean decoupleDataProcessing(AndroidDataContext dataContext) { + return dataContext.getAndroidConfig().decoupleDataProcessing(); } /** @@ -128,7 +128,7 @@ public class AndroidResources { public static AndroidResources from(RuleContext ruleContext, String resourcesAttr) throws RuleErrorException { - if (!hasLocalResourcesAttributes(ruleContext)) { + if (!hasLocalResourcesAttributes(ruleContext.attributes())) { return empty(); } @@ -160,8 +160,8 @@ public class AndroidResources { * target's resource attribute ("resource_files" in general, but local_resource_files for * android_test), not any other attributes. */ - private static boolean hasLocalResourcesAttributes(RuleContext ruleContext) { - return ruleContext.attributes().has("assets") || ruleContext.attributes().has("resource_files"); + private static boolean hasLocalResourcesAttributes(AttributeMap attrs) { + return attrs.has("assets") || attrs.has("resource_files"); } static AndroidResources empty() { @@ -401,13 +401,13 @@ public class AndroidResources { /** Parses these resources. */ public ParsedAndroidResources parse( - RuleContext ruleContext, + AndroidDataContext dataContext, StampedAndroidManifest manifest, boolean enableDataBinding, AndroidAaptVersion aaptVersion) throws InterruptedException { return ParsedAndroidResources.parseFrom( - ruleContext, this, manifest, enableDataBinding, aaptVersion); + dataContext, this, manifest, enableDataBinding, aaptVersion); } /** @@ -415,25 +415,29 @@ public class AndroidResources { * these resources. */ public ValidatedAndroidResources process( - RuleContext ruleContext, StampedAndroidManifest manifest, boolean neverlink) + RuleContext ruleContext, + AndroidDataContext dataContext, + StampedAndroidManifest manifest, + boolean neverlink) throws RuleErrorException, InterruptedException { - boolean enableDataBinding = DataBinding.isEnabled(ruleContext); - AndroidAaptVersion aaptVersion = AndroidAaptVersion.chooseTargetAaptVersion(ruleContext); - ResourceDependencies resourceDeps = ResourceDependencies.fromRuleDeps(ruleContext, neverlink); - - return process(ruleContext, manifest, resourceDeps, enableDataBinding, aaptVersion); + return process( + dataContext, + manifest, + ResourceDependencies.fromRuleDeps(ruleContext, neverlink), + DataBinding.isEnabled(ruleContext), + AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); } ValidatedAndroidResources process( - RuleContext ruleContext, + AndroidDataContext dataContext, StampedAndroidManifest manifest, ResourceDependencies resourceDeps, boolean enableDataBinding, AndroidAaptVersion aaptVersion) throws InterruptedException { - return parse(ruleContext, manifest, enableDataBinding, aaptVersion) - .merge(ruleContext, resourceDeps, enableDataBinding, aaptVersion) - .validate(ruleContext, aaptVersion); + return parse(dataContext, manifest, enableDataBinding, aaptVersion) + .merge(dataContext, resourceDeps, enableDataBinding, aaptVersion) + .validate(dataContext, aaptVersion); } @Override 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 64e1883b1b..e0fd8a0de9 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 @@ -265,10 +265,7 @@ public abstract class AndroidSkylarkData { ctx.getRuleContext(), listFromNoneable(assets, ConfiguredTarget.class), isNone(assetsDir) ? null : PathFragment.create(fromNoneable(assetsDir, String.class))) - .parse(ctx.getRuleContext()) - .merge( - ctx.getRuleContext(), - AssetDependencies.fromProviders(deps.getImmutableList(), neverlink)) + .process(ctx, AssetDependencies.fromProviders(deps.getImmutableList(), neverlink)) .toProvider(); } catch (RuleErrorException e) { throw new EvalException(Location.BUILTIN, e); @@ -340,12 +337,11 @@ public abstract class AndroidSkylarkData { ValidatedAndroidResources validated = AndroidResources.from(ctx.getRuleContext(), getFileProviders(resources), "resources") .process( - ctx.getRuleContext(), + ctx, manifest.asStampedManifest(), ResourceDependencies.fromProviders(deps, neverlink), enableDataBinding, - aaptVersion) - .validate(ctx.getRuleContext(), aaptVersion); + aaptVersion); JavaInfo javaInfo = getJavaInfoForRClassJar(validated.getClassJar()); @@ -633,7 +629,6 @@ public abstract class AndroidSkylarkData { infoBuilder.putAll(resourceOutput); } - AndroidLibraryAarInfo aarInfo = makeAar( ctx, @@ -683,7 +678,7 @@ public abstract class AndroidSkylarkData { SpecialArtifact assets, Artifact androidManifestArtifact, SkylarkList<ConfiguredTarget> deps) - throws EvalException, InterruptedException { + throws InterruptedException { AndroidAaptVersion aaptVersion = AndroidCommon.getAndroidConfig(ctx.getRuleContext()).getAndroidAaptVersion(); @@ -691,7 +686,7 @@ public abstract class AndroidSkylarkData { ValidatedAndroidResources validatedResources = AndroidResources.forAarImport(resources) .process( - ctx.getRuleContext(), + ctx, AndroidManifest.forAarImport(androidManifestArtifact), ResourceDependencies.fromProviders( getProviders(deps, AndroidResourcesInfo.PROVIDER), /* neverlink = */ false), @@ -700,9 +695,8 @@ public abstract class AndroidSkylarkData { MergedAndroidAssets mergedAssets = AndroidAssets.forAarImport(assets) - .parse(ctx.getRuleContext()) - .merge( - ctx.getRuleContext(), + .process( + ctx, AssetDependencies.fromProviders( getProviders(deps, AndroidAssetsInfo.PROVIDER), /* neverlink = */ false)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidAssets.java index 25c74122c5..7aa6196427 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidAssets.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidAssets.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; import java.util.Objects; /** Android assets that have been merged together with their dependencies. */ @@ -25,14 +24,15 @@ public class MergedAndroidAssets extends ParsedAndroidAssets { private final AssetDependencies assetDependencies; static MergedAndroidAssets mergeFrom( - RuleContext ruleContext, ParsedAndroidAssets parsed, AssetDependencies deps) + AndroidDataContext dataContext, ParsedAndroidAssets parsed, AssetDependencies deps) throws InterruptedException { Artifact mergedAssets = - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_ASSETS_ZIP); + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_ASSETS_ZIP); - BusyBoxActionBuilder builder = BusyBoxActionBuilder.create(ruleContext, "MERGE_ASSETS"); - if (AndroidCommon.getAndroidConfig(ruleContext).throwOnResourceConflict()) { + BusyBoxActionBuilder builder = + BusyBoxActionBuilder.create(dataContext.getRuleContext(), "MERGE_ASSETS"); + if (dataContext.getAndroidConfig().throwOnResourceConflict()) { builder.addFlag("--throwOnAssetConflict"); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java index 181752cdbb..cbe830244f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; @@ -38,14 +37,14 @@ public class MergedAndroidResources extends ParsedAndroidResources { private final ProcessedAndroidManifest manifest; public static MergedAndroidResources mergeFrom( - RuleContext ruleContext, + AndroidDataContext dataContext, ParsedAndroidResources parsed, ResourceDependencies resourceDeps, boolean enableDataBinding, AndroidAaptVersion aaptVersion) throws InterruptedException { - AndroidConfiguration androidConfiguration = AndroidCommon.getAndroidConfig(ruleContext); + AndroidConfiguration androidConfiguration = dataContext.getAndroidConfig(); boolean useCompiledMerge = aaptVersion == AndroidAaptVersion.AAPT2 && androidConfiguration.skipParsingAction(); @@ -55,24 +54,24 @@ public class MergedAndroidResources extends ParsedAndroidResources { "Should not use compiled merge if no compiled symbols are available!"); AndroidResourceMergingActionBuilder builder = - new AndroidResourceMergingActionBuilder(ruleContext) + new AndroidResourceMergingActionBuilder(dataContext.getRuleContext()) .setJavaPackage(parsed.getJavaPackage()) .withDependencies(resourceDeps) .setThrowOnResourceConflict(androidConfiguration.throwOnResourceConflict()) .setUseCompiledMerge(useCompiledMerge); if (enableDataBinding) { - builder.setDataBindingInfoZip(DataBinding.getLayoutInfoFile(ruleContext)); + builder.setDataBindingInfoZip(DataBinding.getLayoutInfoFile(dataContext.getRuleContext())); } return builder .setManifestOut( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST)) + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST)) .setMergedResourcesOut( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP)) + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP)) .setClassJarOut( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR)) - .build(ruleContext, parsed); + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR)) + .build(dataContext.getRuleContext(), parsed); } public static MergedAndroidResources of( @@ -145,12 +144,13 @@ public class MergedAndroidResources extends ParsedAndroidResources { /** * Validates and packages this rule's resources. * - * <p>See {@link ValidatedAndroidResources#validateFrom(RuleContext, MergedAndroidResources, - * AndroidAaptVersion)}. This method is a convenience method for calling that one. + * <p>See {@link ValidatedAndroidResources#validateFrom(AndroidDataContext, + * MergedAndroidResources, AndroidAaptVersion)}. This method is a convenience method for calling + * that one. */ - public ValidatedAndroidResources validate(RuleContext ruleContext, AndroidAaptVersion aaptVersion) - throws InterruptedException { - return ValidatedAndroidResources.validateFrom(ruleContext, this, aaptVersion); + public ValidatedAndroidResources validate( + AndroidDataContext dataContext, AndroidAaptVersion aaptVersion) throws InterruptedException { + return ValidatedAndroidResources.validateFrom(dataContext, this, aaptVersion); } @Override 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 ac5c19df2a..265f22f9d6 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 @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.cmdline.Label; import java.util.Objects; @@ -23,10 +22,10 @@ public class ParsedAndroidAssets extends AndroidAssets implements MergableAndroi private final Artifact symbols; private final Label label; - public static ParsedAndroidAssets parseFrom(RuleContext ruleContext, AndroidAssets assets) + public static ParsedAndroidAssets parseFrom(AndroidDataContext dataContext, AndroidAssets assets) throws InterruptedException { - return new AndroidResourceParsingActionBuilder(ruleContext) - .setOutput(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_ASSET_SYMBOLS)) + return new AndroidResourceParsingActionBuilder(dataContext.getRuleContext()) + .setOutput(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_ASSET_SYMBOLS)) .build(assets); } @@ -44,10 +43,9 @@ public class ParsedAndroidAssets extends AndroidAssets implements MergableAndroi this.label = label; } - /** Merges these assets with assets from dependencies. */ - MergedAndroidAssets merge(RuleContext ruleContext, AssetDependencies assetDeps) + MergedAndroidAssets merge(AndroidDataContext dataContext, AssetDependencies assetDeps) throws InterruptedException { - return MergedAndroidAssets.mergeFrom(ruleContext, this, assetDeps); + return MergedAndroidAssets.mergeFrom(dataContext, this, assetDeps); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java index 8778414076..4ff37879c9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.RuleErrorConsumer; @@ -32,7 +31,7 @@ public class ParsedAndroidResources extends AndroidResources private final StampedAndroidManifest manifest; public static ParsedAndroidResources parseFrom( - RuleContext ruleContext, + AndroidDataContext dataContext, AndroidResources resources, StampedAndroidManifest manifest, boolean enableDataBinding, @@ -42,20 +41,21 @@ public class ParsedAndroidResources extends AndroidResources boolean isAapt2 = aaptVersion == AndroidAaptVersion.AAPT2; AndroidResourceParsingActionBuilder builder = - new AndroidResourceParsingActionBuilder(ruleContext); + new AndroidResourceParsingActionBuilder(dataContext.getRuleContext()); if (enableDataBinding && isAapt2) { // TODO(corysmith): Centralize the data binding processing and zipping into a single // action. Data binding processing needs to be triggered here as well as the merger to // avoid aapt2 from throwing an error during compilation. - builder.setDataBindingInfoZip(DataBinding.getSuffixedInfoFile(ruleContext, "_unused")); + builder.setDataBindingInfoZip( + DataBinding.getSuffixedInfoFile(dataContext.getRuleContext(), "_unused")); } return builder - .setOutput(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_MERGED_SYMBOLS)) + .setOutput(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_MERGED_SYMBOLS)) .setCompiledSymbolsOutput( isAapt2 - ? ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS) + ? dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS) : null) .build(resources, manifest); } @@ -127,13 +127,13 @@ public class ParsedAndroidResources extends AndroidResources /** Merges this target's resources with resources from dependencies. */ MergedAndroidResources merge( - RuleContext ruleContext, + AndroidDataContext dataContext, ResourceDependencies resourceDeps, boolean enableDataBinding, AndroidAaptVersion aaptVersion) throws InterruptedException { return MergedAndroidResources.mergeFrom( - ruleContext, this, resourceDeps, enableDataBinding, aaptVersion); + dataContext, this, resourceDeps, enableDataBinding, aaptVersion); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java index 69ca6ace74..7abd103de8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java @@ -14,8 +14,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.config.CompilationMode; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; @@ -55,38 +53,36 @@ public class ValidatedAndroidResources extends MergedAndroidResources * </ul> */ public static ValidatedAndroidResources validateFrom( - RuleContext ruleContext, MergedAndroidResources merged, AndroidAaptVersion aaptVersion) + AndroidDataContext dataContext, MergedAndroidResources merged, AndroidAaptVersion aaptVersion) throws InterruptedException { AndroidResourceValidatorActionBuilder builder = - new AndroidResourceValidatorActionBuilder(ruleContext) + new AndroidResourceValidatorActionBuilder(dataContext.getRuleContext()) .setJavaPackage(merged.getJavaPackage()) - .setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT) + .setDebug(dataContext.useDebug()) .setMergedResources(merged.getMergedResources()) - .setRTxtOut(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT)) + .setRTxtOut(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT)) .setSourceJarOut( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR)) + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR)) // Request an APK so it can be inherited when a library is used in a binary's // resources attr. // TODO(b/30307842): Remove this once it is no longer needed for resources migration. - .setApkOut( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_APK)) + .setApkOut(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_APK)) .withDependencies(merged.getResourceDependencies()); if (aaptVersion == AndroidAaptVersion.AAPT2) { builder .setCompiledSymbols(merged.getCompiledSymbols()) .setAapt2RTxtOut( - ruleContext.getImplicitOutputArtifact( - AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT)) + dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT)) .setAapt2SourceJarOut( - ruleContext.getImplicitOutputArtifact( + dataContext.createOutputArtifact( AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_SOURCE_JAR)) .setStaticLibraryOut( - ruleContext.getImplicitOutputArtifact( + dataContext.createOutputArtifact( AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK)); } - return builder.build(ruleContext, merged); + return builder.build(dataContext.getRuleContext(), merged); } static ValidatedAndroidResources of( diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java index 9623fe1ff1..2da5c64606 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java @@ -34,7 +34,7 @@ public class AndroidAssetsTest extends ResourceTestBase { public void testParse() throws Exception { RuleContext ruleContext = getRuleContext(); AndroidAssets assets = getLocalAssets(); - ParsedAndroidAssets parsed = assets.parse(ruleContext); + ParsedAndroidAssets parsed = assets.parse(AndroidDataContext.forNative(ruleContext)); // Assets should be unchanged assertThat(parsed.getAssets()).isEqualTo(assets.getAssets()); @@ -53,7 +53,7 @@ public class AndroidAssetsTest extends ResourceTestBase { @Test public void testMergeNoDeps() throws Exception { RuleContext ruleContext = getRuleContext(); - ParsedAndroidAssets parsed = getLocalAssets().parse(ruleContext); + ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext)); MergedAndroidAssets merged = assertMerge(ruleContext, parsed, AssetDependencies.empty()); // The assets can be correctly built into a provider @@ -70,7 +70,7 @@ public class AndroidAssetsTest extends ResourceTestBase { @Test public void testMergeNeverlink() throws Exception { RuleContext ruleContext = getRuleContext(); - ParsedAndroidAssets parsed = getLocalAssets().parse(ruleContext); + ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext)); AssetDependencies deps = makeDeps(ruleContext, /* neverlink = */ true); MergedAndroidAssets merged = assertMerge(ruleContext, parsed, deps); @@ -88,7 +88,7 @@ public class AndroidAssetsTest extends ResourceTestBase { @Test public void testMerge() throws Exception { RuleContext ruleContext = getRuleContext(); - ParsedAndroidAssets parsed = getLocalAssets().parse(ruleContext); + ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext)); AssetDependencies deps = makeDeps(ruleContext, /* neverlink = */ false); MergedAndroidAssets merged = assertMerge(ruleContext, parsed, deps); @@ -140,7 +140,8 @@ public class AndroidAssetsTest extends ResourceTestBase { private MergedAndroidAssets assertMerge( RuleContext ruleContext, ParsedAndroidAssets parsed, AssetDependencies deps) throws InterruptedException { - MergedAndroidAssets merged = MergedAndroidAssets.mergeFrom(ruleContext, parsed, deps); + MergedAndroidAssets merged = + MergedAndroidAssets.mergeFrom(AndroidDataContext.forNative(ruleContext), parsed, deps); // Inherited values should be unchanged assertThat(new ParsedAndroidAssets(merged)).isEqualTo(parsed); diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java index ef238c1c56..b916c24b27 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java @@ -146,7 +146,11 @@ public class AndroidResourcesTest extends ResourceTestBase { RuleContext ruleContext = getRuleContext(); ValidatedAndroidResources unfiltered = new AndroidResources(unfilteredResources, getResourceRoots(unfilteredResources)) - .process(ruleContext, getManifest(), /* neverlink = */ false); + .process( + ruleContext, + AndroidDataContext.forNative(ruleContext), + getManifest(), + /* neverlink = */ false); Optional<? extends AndroidResources> maybeFiltered = assertFilter(unfiltered, filteredResources, /* isDependency = */ true); @@ -291,7 +295,7 @@ public class AndroidResourcesTest extends ResourceTestBase { ParsedAndroidResources parsed = assertParse(ruleContext); MergedAndroidResources merged = parsed.merge( - ruleContext, + AndroidDataContext.forNative(ruleContext), ResourceDependencies.empty(), /* enableDataBinding = */ true, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); @@ -328,7 +332,7 @@ public class AndroidResourcesTest extends ResourceTestBase { ParsedAndroidResources parsed = assertParse(ruleContext); MergedAndroidResources merged = parsed.merge( - ruleContext, + AndroidDataContext.forNative(ruleContext), ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false), DataBinding.isEnabled(ruleContext), AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); @@ -370,7 +374,9 @@ public class AndroidResourcesTest extends ResourceTestBase { MergedAndroidResources merged = makeMergedResources(ruleContext); ValidatedAndroidResources validated = - merged.validate(ruleContext, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); + merged.validate( + AndroidDataContext.forNative(ruleContext), + AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); // Inherited values should be equal assertThat(merged).isEqualTo(new MergedAndroidResources(validated)); @@ -397,7 +403,9 @@ public class AndroidResourcesTest extends ResourceTestBase { MergedAndroidResources merged = makeMergedResources(ruleContext); ValidatedAndroidResources validated = - merged.validate(ruleContext, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); + merged.validate( + AndroidDataContext.forNative(ruleContext), + AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); // Inherited values should be equal assertThat(merged).isEqualTo(new MergedAndroidResources(validated)); @@ -438,7 +446,8 @@ public class AndroidResourcesTest extends ResourceTestBase { ProcessedAndroidData processedData = ProcessedAndroidData.of( makeParsedResources(ruleContext), - AndroidAssets.from(ruleContext).process(ruleContext, /* neverlink = */ false), + AndroidAssets.from(ruleContext) + .process(AndroidDataContext.forNative(ruleContext), AssetDependencies.empty()), manifest, rTxt, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR), @@ -504,7 +513,7 @@ public class AndroidResourcesTest extends ResourceTestBase { ParsedAndroidResources parsed = raw.parse( - ruleContext, + AndroidDataContext.forNative(ruleContext), manifest, enableDataBinding, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); @@ -522,7 +531,7 @@ public class AndroidResourcesTest extends ResourceTestBase { throws RuleErrorException, InterruptedException { return makeParsedResources(ruleContext) .merge( - ruleContext, + AndroidDataContext.forNative(ruleContext), ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false), DataBinding.isEnabled(ruleContext), AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); @@ -540,7 +549,7 @@ public class AndroidResourcesTest extends ResourceTestBase { return new AndroidResources( resources, AndroidResources.getResourceRoots(ruleContext, resources, "resource_files")) .parse( - ruleContext, + AndroidDataContext.forNative(ruleContext), getManifest(), enableDataBinding, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)); |