aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAarImport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLocalTest.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidAssets.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java24
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java11
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java27
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));