aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-22 07:03:03 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-22 07:04:36 -0700
commit8b6ddbbbe1c1a2f2b62979ffa4fdfed697258ac0 (patch)
treede8d909f3ccb3acc0d811972b4e72f71bedad548 /src/main/java/com/google/devtools/build/lib
parent5c4f3b59fb4aa06da2c368c764cf0d9056ab287a (diff)
Pass AndroidDataContext through new asset and resource pipelines
This is the first step towards using AndroidDataContext in all of Android data processing. This change does not actually modify the asset and resource processing action builders themselves - they will be migrated in an upcoming change. Also, add AndroidSemantics to some rules so they can make an AndroidDataContext. RELNOTES: none PiperOrigin-RevId: 197555938
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-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
16 files changed, 115 insertions, 98 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(