aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-22 07:51:42 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-22 07:53:08 -0700
commit85a6f166cef1231f1e436978171870ce6b10a6d8 (patch)
treea9f505849e02ee455ff3fe9ca2418a630dd3f72b /src/main/java/com
parent8b6ddbbbe1c1a2f2b62979ffa4fdfed697258ac0 (diff)
Pass through AndroidDataContext in more places
As before, actual action builders will be changed in a future CL; this just starts moving AndroidDataContext in so it's available. RELNOTES: none PiperOrigin-RevId: 197561737
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java73
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java178
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java104
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java22
9 files changed, 256 insertions, 184 deletions
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 d70dbcaf7c..43805cd013 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
@@ -55,6 +55,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.rules.android.AndroidBinaryMobileInstall.MobileInstallResourceApks;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
@@ -208,10 +209,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
AndroidAaptVersion aaptVersion = AndroidAaptVersion.chooseTargetAaptVersion(ruleContext);
resourceApk =
ProcessedAndroidData.processBinaryDataFrom(
+ dataContext,
ruleContext,
manifest,
/* conditionalKeepRules = */ shouldShrinkResourceCycles(
- ruleContext, shrinkResources),
+ dataContext.getAndroidConfig(), ruleContext, shrinkResources),
applicationManifest.getManifestValues(),
aaptVersion,
AndroidResources.from(ruleContext, "resource_files"),
@@ -221,8 +223,18 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ResourceFilterFactory.fromRuleContextAndAttrs(ruleContext),
ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
- DataBinding.isEnabled(ruleContext))
- .generateRClass(ruleContext, aaptVersion);
+ DataBinding.isEnabled(ruleContext),
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
+ ? ruleContext
+ .getPrerequisite("feature_of", Mode.TARGET, ApkInfo.PROVIDER)
+ .getApk()
+ : null,
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
+ ? ruleContext
+ .getPrerequisite("feature_after", Mode.TARGET, ApkInfo.PROVIDER)
+ .getApk()
+ : null)
+ .generateRClass(dataContext, aaptVersion);
} else {
applicationManifest =
androidSemantics.getManifestForRule(ruleContext).mergeWith(ruleContext, resourceDeps);
@@ -247,7 +259,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
ProguardHelper.getProguardConfigArtifact(ruleContext, ""),
createMainDexProguardSpec(ruleContext),
- shouldShrinkResourceCycles(ruleContext, shrinkResources),
+ shouldShrinkResourceCycles(
+ dataContext.getAndroidConfig(), ruleContext, shrinkResources),
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP),
DataBinding.isEnabled(ruleContext)
@@ -329,6 +342,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
return createAndroidBinary(
ruleContext,
+ dataContext,
filesBuilder,
deployJar,
derivedJarFunction,
@@ -351,6 +365,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
public static RuleConfiguredTargetBuilder createAndroidBinary(
RuleContext ruleContext,
+ AndroidDataContext dataContext,
NestedSetBuilder<Artifact> filesBuilder,
Artifact binaryJar,
Function<Artifact, Artifact> derivedJarFunction,
@@ -373,7 +388,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ImmutableList<Artifact> proguardSpecs =
getProguardSpecs(
- ruleContext,
+ dataContext,
androidSemantics,
resourceApk.getResourceProguardConfig(),
applicationManifest.getManifest(),
@@ -407,7 +422,13 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
if (shrinkResources) {
resourceApk =
- shrinkResources(ruleContext, resourceApk, proguardSpecs, proguardOutput, filesBuilder);
+ shrinkResources(
+ ruleContext,
+ androidSemantics.makeContextForNative(ruleContext),
+ resourceApk,
+ proguardSpecs,
+ proguardOutput,
+ filesBuilder);
}
Artifact jarToDex = proguardOutput.getOutputJar();
@@ -771,7 +792,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
}
static ImmutableList<Artifact> getProguardSpecs(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
AndroidSemantics androidSemantics,
Artifact resourceProguardConfig,
Artifact mergedManifest,
@@ -781,20 +802,20 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ImmutableList<Artifact> proguardSpecs =
ProguardHelper.collectTransitiveProguardSpecs(
- ruleContext,
- Iterables.concat(
- ImmutableList.of(resourceProguardConfig), extraProguardSpecs),
+ dataContext.getRuleContext(),
+ Iterables.concat(ImmutableList.of(resourceProguardConfig), extraProguardSpecs),
localProguardSpecs,
proguardDeps);
- boolean assumeMinSdkVersion =
- ruleContext.getFragment(AndroidConfiguration.class).assumeMinSdkVersion();
+ boolean assumeMinSdkVersion = dataContext.getAndroidConfig().assumeMinSdkVersion();
if (!proguardSpecs.isEmpty() && assumeMinSdkVersion) {
// NB: Order here is important. We're including generated Proguard specs before the user's
// specs so that they can override values.
proguardSpecs =
ImmutableList.<Artifact>builder()
- .addAll(androidSemantics.getProguardSpecsForManifest(ruleContext, mergedManifest))
+ .addAll(
+ androidSemantics.getProguardSpecsForManifest(
+ dataContext.getRuleContext(), mergedManifest))
.addAll(proguardSpecs)
.build();
}
@@ -815,12 +836,12 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
}
/** Returns {@code true} if resource shrinking should be performed. */
- static boolean shouldShrinkResourceCycles(RuleContext ruleContext, boolean shrinkResources)
+ static boolean shouldShrinkResourceCycles(
+ AndroidConfiguration androidConfig, RuleErrorConsumer errorConsumer, boolean shrinkResources)
throws RuleErrorException {
- boolean global =
- ruleContext.getFragment(AndroidConfiguration.class).useAndroidResourceCycleShrinking();
+ boolean global = androidConfig.useAndroidResourceCycleShrinking();
if (global && !shrinkResources) {
- throw ruleContext.throwWithRuleError(
+ throw errorConsumer.throwWithRuleError(
"resource cycle shrinking can only be enabled when resource shrinking is enabled");
}
return global;
@@ -828,6 +849,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
private static ResourceApk shrinkResources(
RuleContext ruleContext,
+ AndroidDataContext dataContext,
ResourceApk resourceApk,
ImmutableList<Artifact> proguardSpecs,
ProguardOutput proguardOutput,
@@ -836,7 +858,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Optional<Artifact> maybeShrunkApk =
maybeShrinkResources(
- ruleContext,
+ dataContext,
resourceApk.getValidatedResources(),
resourceApk.getResourceDependencies(),
proguardSpecs,
@@ -856,7 +878,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
}
static Optional<Artifact> maybeShrinkResources(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
ValidatedAndroidData validatedResources,
ResourceDependencies resourceDeps,
ImmutableList<Artifact> proguardSpecs,
@@ -872,18 +894,15 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
}
return Optional.of(
- new ResourceShrinkerActionBuilder(ruleContext)
+ new ResourceShrinkerActionBuilder(dataContext.getRuleContext())
.setResourceApkOut(
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_APK))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_APK))
.setShrunkResourcesOut(
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_ZIP))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_ZIP))
.setLogOut(
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_RESOURCE_SHRINKER_LOG))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCE_SHRINKER_LOG))
.withResourceFiles(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP))
.withShrunkJar(proguardOutputJar)
.withProguardMapping(proguardMapping)
.withPrimary(validatedResources)
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 76687f93dd..0c8d4cf7cb 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
@@ -74,6 +74,7 @@ public final class AndroidBinaryMobileInstall {
incrementalResourceApk =
ProcessedAndroidData.processIncrementalBinaryDataFrom(
ruleContext,
+ dataContext,
manifest.addMobileInstallStubApplication(ruleContext),
ruleContext.getImplicitOutputArtifact(
AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK),
@@ -86,6 +87,7 @@ public final class AndroidBinaryMobileInstall {
splitResourceApk =
ProcessedAndroidData.processIncrementalBinaryDataFrom(
ruleContext,
+ dataContext,
manifest.createSplitManifest(ruleContext, "android_resources", false),
getMobileInstallArtifact(ruleContext, "android_resources.ap_"),
"incremental_split",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 9f9b442b84..53553feadd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigu
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
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.AndroidRobolectricTestDeprecationLevel;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode;
import com.google.devtools.build.lib.rules.cpp.CppOptions.DynamicModeConverter;
@@ -234,10 +235,20 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
if (ruleContext.getRule().isAttrDefined("aapt_version", STRING)) {
// On rules that can choose a version, test attribute then flag choose the aapt version
// target.
- return chooseTargetAaptVersion(
- ruleContext,
- ruleContext.getFragment(AndroidConfiguration.class),
- ruleContext.attributes().get("aapt_version", STRING));
+ AndroidAaptVersion flag =
+ AndroidCommon.getAndroidConfig(ruleContext).getAndroidAaptVersion();
+
+ AndroidAaptVersion version =
+ fromString(ruleContext.attributes().get("aapt_version", STRING));
+ // version is null if the value is "auto"
+ version = version == AndroidAaptVersion.AUTO ? flag : version;
+
+ if (version == AAPT2 && !hasAapt2) {
+ ruleContext.throwWithRuleError(
+ "aapt2 processing requested but not available on the android_sdk");
+ return null;
+ }
+ return version == AndroidAaptVersion.AUTO ? AAPT : version;
} else {
// On rules can't choose, assume aapt2 if aapt2 is present in the sdk.
return hasAapt2 ? AAPT2 : AAPT;
@@ -248,18 +259,20 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
@Nullable
public static AndroidAaptVersion chooseTargetAaptVersion(
- RuleContext ruleContext, AndroidConfiguration androidConfig, @Nullable String versionString)
+ AndroidDataContext dataContext,
+ RuleErrorConsumer errorConsumer,
+ @Nullable String versionString)
throws RuleErrorException {
- boolean hasAapt2 = AndroidSdkProvider.fromRuleContext(ruleContext).getAapt2() != null;
- AndroidAaptVersion flag = androidConfig.getAndroidAaptVersion();
+ boolean hasAapt2 = dataContext.getSdk().getAapt2() != null;
+ AndroidAaptVersion flag = dataContext.getAndroidConfig().getAndroidAaptVersion();
AndroidAaptVersion version = fromString(versionString);
// version is null if the value is "auto"
version = version == AndroidAaptVersion.AUTO ? flag : version;
if (version == AAPT2 && !hasAapt2) {
- ruleContext.throwWithRuleError(
+ errorConsumer.throwWithRuleError(
"aapt2 processing requested but not available on the android_sdk");
return null;
}
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 937c196ff8..924d3ae911 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
@@ -185,7 +185,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
// Process transitive resources so we can build artifacts needed to export an aar.
resourceApk =
ResourceApk.processFromTransitiveLibraryData(
- ruleContext,
+ dataContext,
resourceDeps,
assetDeps,
StampedAndroidManifest.createEmpty(ruleContext, /* exported = */ false));
@@ -207,7 +207,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
final Aar aar =
Aar.makeAar(
- ruleContext,
+ dataContext,
resourceApk,
proguardLibrary.collectLocalProguardSpecs(),
androidCommon.getClassJar());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index f38b40786e..5e3a6da7bc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -104,13 +104,13 @@ public class AndroidLibraryAarInfo extends NativeInfo {
}
static Aar makeAar(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
ResourceApk resourceApk,
ImmutableList<Artifact> localProguardSpecs,
Artifact libraryClassJar)
throws InterruptedException {
return makeAar(
- ruleContext,
+ dataContext,
resourceApk.getPrimaryResources(),
resourceApk.getPrimaryAssets(),
resourceApk.getProcessedManifest(),
@@ -120,7 +120,7 @@ public class AndroidLibraryAarInfo extends NativeInfo {
}
static Aar makeAar(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
AndroidResources primaryResources,
AndroidAssets primaryAssets,
ProcessedAndroidManifest manifest,
@@ -129,9 +129,9 @@ public class AndroidLibraryAarInfo extends NativeInfo {
ImmutableList<Artifact> localProguardSpecs)
throws InterruptedException {
Artifact aarOut =
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_AAR);
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_AAR);
- new AarGeneratorBuilder(ruleContext)
+ new AarGeneratorBuilder(dataContext.getRuleContext())
.withPrimaryResources(primaryResources)
.withPrimaryAssets(primaryAssets)
.withManifest(manifest.getManifest())
@@ -139,9 +139,8 @@ public class AndroidLibraryAarInfo extends NativeInfo {
.withClasses(libraryClassJar)
.setAAROut(aarOut)
.setProguardSpecs(localProguardSpecs)
- .setThrowOnResourceConflict(
- AndroidCommon.getAndroidConfig(ruleContext).throwOnResourceConflict())
- .build(ruleContext);
+ .setThrowOnResourceConflict(dataContext.getAndroidConfig().throwOnResourceConflict())
+ .build(dataContext.getActionConstructionContext());
return Aar.create(aarOut, manifest.getManifest());
}
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 c40940acea..884c89d998 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
@@ -96,7 +96,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
if (AndroidResources.decoupleDataProcessing(dataContext)) {
resourceApk =
buildResourceApk(
- ruleContext,
+ dataContext,
AndroidManifest.fromAttributes(ruleContext),
AndroidResources.from(ruleContext, "resource_files"),
AndroidAssets.from(ruleContext),
@@ -541,7 +541,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
}
static ResourceApk buildResourceApk(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
AndroidManifest manifest,
AndroidResources resources,
AndroidAssets assets,
@@ -553,10 +553,13 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
StampedAndroidManifest stamped =
manifest.mergeWithDeps(
- ruleContext, resourceDeps, manifestValues, /* useLegacyMerger = */ false);
+ dataContext.getRuleContext(),
+ resourceDeps,
+ manifestValues,
+ /* useLegacyMerger = */ false);
return ProcessedAndroidData.processLocalTestDataFrom(
- ruleContext,
+ dataContext,
stamped,
manifestValues,
aaptVersion,
@@ -564,7 +567,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
assets,
resourceDeps,
assetDeps)
- .generateRClass(ruleContext, aaptVersion);
+ .generateRClass(dataContext, aaptVersion);
}
private static NestedSet<Artifact> getLibraryResourceJars(RuleContext ruleContext) {
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 e0fd8a0de9..00094910e3 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
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.analysis.skylark.SkylarkErrorReporter;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
@@ -138,7 +139,7 @@ public abstract class AndroidSkylarkData {
pkg = AndroidManifest.getDefaultPackage(ctx.getRuleContext());
}
return ResourceApk.processFromTransitiveLibraryData(
- ctx.getRuleContext(),
+ ctx,
ResourceDependencies.fromProviders(deps, /* neverlink = */ neverlink),
AssetDependencies.empty(),
StampedAndroidManifest.createEmpty(ctx.getRuleContext(), pkg, /* exported = */ false))
@@ -248,6 +249,8 @@ public abstract class AndroidSkylarkData {
"Defaults to False. If passed as True, these assets will not be inherited by"
+ " targets that depend on this one.")
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Merges this target's assets together with assets inherited from dependencies. Note that,"
+ " by default, actions for validating the merge are created but may not be called."
@@ -258,11 +261,14 @@ public abstract class AndroidSkylarkData {
Object assets,
Object assetsDir,
SkylarkList<AndroidAssetsInfo> deps,
- boolean neverlink)
+ boolean neverlink,
+ Location location,
+ Environment env)
throws EvalException, InterruptedException {
- try {
+ try (SkylarkErrorReporter errorReporter =
+ SkylarkErrorReporter.from(ctx.getActionConstructionContext(), location, env)) {
return AndroidAssets.from(
- ctx.getRuleContext(),
+ errorReporter,
listFromNoneable(assets, ConfiguredTarget.class),
isNone(assetsDir) ? null : PathFragment.create(fromNoneable(assetsDir, String.class)))
.process(ctx, AssetDependencies.fromProviders(deps.getImmutableList(), neverlink))
@@ -313,6 +319,8 @@ public abstract class AndroidSkylarkData {
"Defaults to False. If True, processes data binding expressions in layout"
+ " resources."),
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Merges this target's resources together with resources inherited from dependencies."
+ " Returns a dict of provider type to actual info, with elements for"
@@ -328,14 +336,16 @@ public abstract class AndroidSkylarkData {
SkylarkList<ConfiguredTarget> resources,
SkylarkList<AndroidResourcesInfo> deps,
boolean neverlink,
- boolean enableDataBinding)
+ boolean enableDataBinding,
+ Location location,
+ Environment env)
throws EvalException, InterruptedException {
- try {
- AndroidAaptVersion aaptVersion =
- AndroidCommon.getAndroidConfig(ctx.getRuleContext()).getAndroidAaptVersion();
+ try (SkylarkErrorReporter errorReporter =
+ SkylarkErrorReporter.from(ctx.getActionConstructionContext(), location, env)) {
+ AndroidAaptVersion aaptVersion = ctx.getAndroidConfig().getAndroidAaptVersion();
ValidatedAndroidResources validated =
- AndroidResources.from(ctx.getRuleContext(), getFileProviders(resources), "resources")
+ AndroidResources.from(errorReporter, getFileProviders(resources), "resources")
.process(
ctx,
manifest.asStampedManifest(),
@@ -449,7 +459,7 @@ public abstract class AndroidSkylarkData {
}
return Aar.makeAar(
- ctx.getRuleContext(),
+ ctx,
resources,
assets,
resourcesInfo.getManifest(),
@@ -565,6 +575,7 @@ public abstract class AndroidSkylarkData {
"Dependency targets. Providers will be extracted from these dependencies for each"
+ " type of data."),
},
+ useLocation = true,
useEnvironment = true,
doc =
"Performs full processing of data for android_library or similar rules. Returns a dict"
@@ -582,6 +593,7 @@ public abstract class AndroidSkylarkData {
boolean enableDataBinding,
SkylarkList<ConfiguredTarget> proguardSpecs,
SkylarkList<ConfiguredTarget> deps,
+ Location location,
Environment env)
throws InterruptedException, EvalException {
@@ -621,10 +633,12 @@ public abstract class AndroidSkylarkData {
listFromNoneableOrEmpty(resources, ConfiguredTarget.class),
resourceDeps,
neverlink,
- enableDataBinding);
+ enableDataBinding,
+ location,
+ env);
resourcesInfo = (AndroidResourcesInfo) resourceOutput.get(AndroidResourcesInfo.PROVIDER);
- assetsInfo = mergeAssets(ctx, assets, assetsDir, assetDeps, neverlink);
+ assetsInfo = mergeAssets(ctx, assets, assetsDir, assetDeps, neverlink, location, env);
infoBuilder.putAll(resourceOutput);
}
@@ -680,8 +694,7 @@ public abstract class AndroidSkylarkData {
SkylarkList<ConfiguredTarget> deps)
throws InterruptedException {
- AndroidAaptVersion aaptVersion =
- AndroidCommon.getAndroidConfig(ctx.getRuleContext()).getAndroidAaptVersion();
+ AndroidAaptVersion aaptVersion = ctx.getAndroidConfig().getAndroidAaptVersion();
ValidatedAndroidResources validatedResources =
AndroidResources.forAarImport(resources)
@@ -788,6 +801,8 @@ public abstract class AndroidSkylarkData {
"Dependency targets. Providers will be extracted from these dependencies for each"
+ " type of data."),
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Processes resources, assets, and manifests for android_local_test and returns a dict"
+ " from provider type to the appropriate provider.")
@@ -800,8 +815,12 @@ public abstract class AndroidSkylarkData {
Object customPackage,
String aaptVersionString,
SkylarkDict<String, String> rawManifestValues,
- SkylarkList<ConfiguredTarget> deps)
+ SkylarkList<ConfiguredTarget> deps,
+ Location location,
+ Environment env)
throws InterruptedException, EvalException {
+ try (SkylarkErrorReporter errorReporter =
+ SkylarkErrorReporter.from(ctx.getActionConstructionContext(), location, env)) {
AndroidManifest rawManifest =
AndroidManifest.from(
@@ -810,15 +829,13 @@ public abstract class AndroidSkylarkData {
fromNoneable(customPackage, String.class),
/* exportsManifest = */ false);
- try {
ResourceApk resourceApk =
AndroidLocalTestBase.buildResourceApk(
- ctx.getRuleContext(),
+ ctx,
rawManifest,
- AndroidResources.from(
- ctx.getRuleContext(), getFileProviders(resources), "resource_files"),
+ AndroidResources.from(errorReporter, getFileProviders(resources), "resource_files"),
AndroidAssets.from(
- ctx.getRuleContext(),
+ errorReporter,
listFromNoneable(assets, ConfiguredTarget.class),
isNone(assetsDir)
? null
@@ -828,10 +845,7 @@ public abstract class AndroidSkylarkData {
AssetDependencies.fromProviders(
getProviders(deps, AndroidAssetsInfo.PROVIDER), /* neverlink = */ false),
ApplicationManifest.getManifestValues(ctx.getRuleContext(), rawManifestValues),
- AndroidAaptVersion.chooseTargetAaptVersion(
- ctx.getRuleContext(),
- AndroidCommon.getAndroidConfig(ctx.getRuleContext()),
- aaptVersionString));
+ AndroidAaptVersion.chooseTargetAaptVersion(ctx, errorReporter, aaptVersionString));
return getNativeInfosFrom(resourceApk, ctx.getLabel());
} catch (RuleErrorException e) {
@@ -892,6 +906,8 @@ public abstract class AndroidSkylarkData {
"The version of aapt to use. Defaults to 'auto'. 'aapt' and 'aapt2' are also"
+ " supported."),
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Returns a wrapper object containing various settings shared across multiple methods for"
+ " processing binary data.")
@@ -901,15 +917,16 @@ public abstract class AndroidSkylarkData {
SkylarkList<String> resourceConfigurationFilters,
SkylarkList<String> densities,
SkylarkList<String> rawNoCompressExtensions,
- String aaptVersionString)
+ String aaptVersionString,
+ Location location,
+ Environment env)
throws EvalException {
- AndroidConfiguration androidConfig = AndroidCommon.getAndroidConfig(ctx.getRuleContext());
AndroidAaptVersion aaptVersion;
- try {
+ try (SkylarkErrorReporter errorReporter =
+ SkylarkErrorReporter.from(ctx.getActionConstructionContext(), location, env)) {
aaptVersion =
- AndroidAaptVersion.chooseTargetAaptVersion(
- ctx.getRuleContext(), androidConfig, aaptVersionString);
+ AndroidAaptVersion.chooseTargetAaptVersion(ctx, errorReporter, aaptVersionString);
} catch (RuleErrorException e) {
throw new EvalException(Location.BUILTIN, e);
}
@@ -917,7 +934,7 @@ public abstract class AndroidSkylarkData {
return new BinaryDataSettings(
aaptVersion,
fromNoneableOrDefault(
- shrinkResources, Boolean.class, androidConfig.useAndroidResourceShrinking()),
+ shrinkResources, Boolean.class, ctx.getAndroidConfig().useAndroidResourceShrinking()),
ResourceFilterFactory.from(aaptVersion, resourceConfigurationFilters, densities),
ctx.getRuleContext()
.getExpander()
@@ -929,15 +946,17 @@ public abstract class AndroidSkylarkData {
* Helper method to get default {@link
* com.google.devtools.build.lib.rules.android.AndroidSkylarkData.BinaryDataSettings}.
*/
- private BinaryDataSettings defaultBinaryDataSettings(AndroidDataContext ctx)
- throws EvalException {
+ private BinaryDataSettings defaultBinaryDataSettings(
+ AndroidDataContext ctx, Location location, Environment env) throws EvalException {
return makeBinarySettings(
ctx,
Runtime.NONE,
SkylarkList.createImmutable(ImmutableList.of()),
SkylarkList.createImmutable(ImmutableList.of()),
SkylarkList.createImmutable(ImmutableList.of()),
- "auto");
+ "auto",
+ location,
+ env);
}
@SkylarkModule(
@@ -1070,6 +1089,8 @@ public abstract class AndroidSkylarkData {
"Defaults to False. If True, processes data binding expressions in layout"
+ " resources."),
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Processes resources, assets, and manifests for android_binary and returns the"
+ " appropriate providers.")
@@ -1085,12 +1106,16 @@ public abstract class AndroidSkylarkData {
String manifestMerger,
Object maybeSettings,
boolean crunchPng,
- boolean dataBindingEnabled)
- throws InterruptedException, RuleErrorException, EvalException {
+ boolean dataBindingEnabled,
+ Location location,
+ Environment env)
+ throws InterruptedException, EvalException {
+ try (SkylarkErrorReporter errorReporter =
+ SkylarkErrorReporter.from(ctx.getActionConstructionContext(), location, env)) {
BinaryDataSettings settings =
fromNoneableOrDefault(
- maybeSettings, BinaryDataSettings.class, defaultBinaryDataSettings(ctx));
+ maybeSettings, BinaryDataSettings.class, defaultBinaryDataSettings(ctx, location, env));
AndroidManifest rawManifest =
AndroidManifest.from(
@@ -1114,37 +1139,44 @@ public abstract class AndroidSkylarkData {
manifestValues,
ApplicationManifest.useLegacyMerging(ctx.getRuleContext(), manifestMerger));
- ResourceApk resourceApk =
- ProcessedAndroidData.processBinaryDataFrom(
- ctx.getRuleContext(),
- stampedManifest,
- AndroidBinary.shouldShrinkResourceCycles(
- ctx.getRuleContext(), settings.shrinkResources),
- manifestValues,
- settings.aaptVersion,
- AndroidResources.from(
- ctx.getRuleContext(), getFileProviders(resources), "resource_files"),
- AndroidAssets.from(
- ctx.getRuleContext(),
- listFromNoneable(assets, ConfiguredTarget.class),
- isNone(assetsDir)
- ? null
- : PathFragment.create(fromNoneable(assetsDir, String.class))),
- resourceDeps,
- AssetDependencies.fromProviders(
- getProviders(deps, AndroidAssetsInfo.PROVIDER), /* neverlink = */ false),
- settings.resourceFilterFactory,
- settings.noCompressExtensions,
- crunchPng,
- dataBindingEnabled)
- .generateRClass(ctx.getRuleContext(), settings.aaptVersion);
-
- return AndroidBinaryDataInfo.of(
- resourceApk.getArtifact(),
- resourceApk.getResourceProguardConfig(),
- resourceApk.toResourceInfo(ctx.getLabel()),
- resourceApk.toAssetsInfo(ctx.getLabel()).get(),
- resourceApk.toManifestInfo().get());
+ ResourceApk resourceApk =
+ ProcessedAndroidData.processBinaryDataFrom(
+ ctx,
+ errorReporter,
+ stampedManifest,
+ AndroidBinary.shouldShrinkResourceCycles(
+ ctx.getAndroidConfig(), errorReporter, settings.shrinkResources),
+ manifestValues,
+ settings.aaptVersion,
+ AndroidResources.from(
+ errorReporter, getFileProviders(resources), "resource_files"),
+ AndroidAssets.from(
+ errorReporter,
+ listFromNoneable(assets, ConfiguredTarget.class),
+ isNone(assetsDir)
+ ? null
+ : PathFragment.create(fromNoneable(assetsDir, String.class))),
+ resourceDeps,
+ AssetDependencies.fromProviders(
+ getProviders(deps, AndroidAssetsInfo.PROVIDER), /* neverlink = */ false),
+ settings.resourceFilterFactory,
+ settings.noCompressExtensions,
+ crunchPng,
+ dataBindingEnabled,
+ /* featureOf = */ null,
+ /* featureAfter = */ null)
+ .generateRClass(ctx, settings.aaptVersion);
+
+ return AndroidBinaryDataInfo.of(
+ resourceApk.getArtifact(),
+ resourceApk.getResourceProguardConfig(),
+ resourceApk.toResourceInfo(ctx.getLabel()),
+ resourceApk.toAssetsInfo(ctx.getLabel()).get(),
+ resourceApk.toManifestInfo().get());
+
+ } catch (RuleErrorException e) {
+ throw new EvalException(location, e);
+ }
}
@SkylarkCallable(
@@ -1193,6 +1225,8 @@ public abstract class AndroidSkylarkData {
"Additional proguard specs that should be added for top-level targets. This value"
+ " is controlled by Java configuration."),
},
+ useLocation = true,
+ useEnvironment = true,
doc =
"Possibly shrinks the data APK by removing resources that were marked as unused during"
+ " proguarding.")
@@ -1204,11 +1238,13 @@ public abstract class AndroidSkylarkData {
Object maybeSettings,
SkylarkList<ConfiguredTarget> deps,
SkylarkList<ConfiguredTarget> localProguardSpecs,
- SkylarkList<ConfiguredTarget> extraProguardSpecs)
+ SkylarkList<ConfiguredTarget> extraProguardSpecs,
+ Location location,
+ Environment env)
throws EvalException, InterruptedException {
BinaryDataSettings settings =
fromNoneableOrDefault(
- maybeSettings, BinaryDataSettings.class, defaultBinaryDataSettings(ctx));
+ maybeSettings, BinaryDataSettings.class, defaultBinaryDataSettings(ctx, location, env));
if (!settings.shrinkResources) {
return binaryDataInfo;
@@ -1216,7 +1252,7 @@ public abstract class AndroidSkylarkData {
ImmutableList<Artifact> proguardSpecs =
AndroidBinary.getProguardSpecs(
- ctx.getRuleContext(),
+ ctx,
getAndroidSemantics(),
binaryDataInfo.getResourceProguardConfig(),
binaryDataInfo.getManifestInfo().getManifest(),
@@ -1235,7 +1271,7 @@ public abstract class AndroidSkylarkData {
Optional<Artifact> maybeShrunkApk =
AndroidBinary.maybeShrinkResources(
- ctx.getRuleContext(),
+ ctx,
binaryDataInfo.getResourcesInfo().getDirectAndroidResources().toList().get(0),
ResourceDependencies.fromProviders(
getProviders(deps, AndroidResourcesInfo.PROVIDER), /* neverlink = */ false),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java b/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
index 3cffbf4dd3..7e468823eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
@@ -16,8 +16,6 @@ package com.google.devtools.build.lib.rules.android;
import com.google.common.collect.ImmutableMap;
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.analysis.configuredtargets.RuleConfiguredTarget.Mode;
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,7 +53,8 @@ public class ProcessedAndroidData {
/** Processes Android data (assets, resources, and manifest) for android_binary targets. */
public static ProcessedAndroidData processBinaryDataFrom(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
+ RuleErrorConsumer errorConsumer,
StampedAndroidManifest manifest,
boolean conditionalKeepRules,
Map<String, String> manifestValues,
@@ -67,41 +66,35 @@ public class ProcessedAndroidData {
ResourceFilterFactory resourceFilterFactory,
List<String> noCompressExtensions,
boolean crunchPng,
- boolean dataBindingEnabled)
+ boolean dataBindingEnabled,
+ @Nullable Artifact featureOf,
+ @Nullable Artifact featureAfter)
throws RuleErrorException, InterruptedException {
if (conditionalKeepRules && aaptVersion != AndroidAaptVersion.AAPT2) {
- throw ruleContext.throwWithRuleError(
+ throw errorConsumer.throwWithRuleError(
"resource cycle shrinking can only be enabled for builds with aapt2");
}
AndroidResourcesProcessorBuilder builder =
- builderForNonIncrementalTopLevelTarget(ruleContext, manifest, manifestValues, aaptVersion)
+ builderForNonIncrementalTopLevelTarget(dataContext, manifest, manifestValues, aaptVersion)
.setUseCompiledResourcesForMerge(
aaptVersion == AndroidAaptVersion.AAPT2
- && AndroidCommon.getAndroidConfig(ruleContext).skipParsingAction())
+ && dataContext.getAndroidConfig().skipParsingAction())
.setManifestOut(
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST))
.setMergedResourcesOut(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP))
- .setMainDexProguardOut(AndroidBinary.createMainDexProguardSpec(ruleContext))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP))
+ .setMainDexProguardOut(
+ AndroidBinary.createMainDexProguardSpec(dataContext.getRuleContext()))
.conditionalKeepRules(conditionalKeepRules)
.setDataBindingInfoZip(
- dataBindingEnabled ? DataBinding.getLayoutInfoFile(ruleContext) : null)
- .setFeatureOf(
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
- ? ruleContext
- .getPrerequisite("feature_of", Mode.TARGET, ApkInfo.PROVIDER)
- .getApk()
+ dataBindingEnabled
+ ? DataBinding.getLayoutInfoFile(dataContext.getRuleContext())
: null)
- .setFeatureAfter(
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
- ? ruleContext
- .getPrerequisite("feature_after", Mode.TARGET, ApkInfo.PROVIDER)
- .getApk()
- : null);
+ .setFeatureOf(featureOf)
+ .setFeatureAfter(featureAfter);
return buildActionForBinary(
- ruleContext,
+ errorConsumer,
builder,
manifest,
resources,
@@ -115,6 +108,7 @@ public class ProcessedAndroidData {
public static ProcessedAndroidData processIncrementalBinaryDataFrom(
RuleContext ruleContext,
+ AndroidDataContext dataContext,
StampedAndroidManifest manifest,
Artifact apkOut,
String proguardPrefix,
@@ -122,7 +116,7 @@ public class ProcessedAndroidData {
throws RuleErrorException {
AndroidResourcesProcessorBuilder builder =
- builderForTopLevelTarget(ruleContext, manifest, proguardPrefix, manifestValues)
+ builderForTopLevelTarget(dataContext, manifest, proguardPrefix, manifestValues)
.setApkOut(apkOut);
return buildActionForBinary(
@@ -169,7 +163,7 @@ public class ProcessedAndroidData {
/** Processes Android data (assets, resources, and manifest) for android_local_test targets. */
public static ProcessedAndroidData processLocalTestDataFrom(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
StampedAndroidManifest manifest,
Map<String, String> manifestValues,
AndroidAaptVersion aaptVersion,
@@ -180,14 +174,14 @@ public class ProcessedAndroidData {
throws InterruptedException {
return builderForNonIncrementalTopLevelTarget(
- ruleContext, manifest, manifestValues, aaptVersion)
+ dataContext, manifest, manifestValues, aaptVersion)
.setUseCompiledResourcesForMerge(
aaptVersion == AndroidAaptVersion.AAPT2
- && AndroidCommon.getAndroidConfig(ruleContext).skipParsingAction())
+ && dataContext.getAndroidConfig().skipParsingAction())
.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))
.setCrunchPng(false)
.withResourceDependencies(resourceDeps)
.withAssetDependencies(assetDeps)
@@ -196,7 +190,7 @@ public class ProcessedAndroidData {
/** Processes Android data (assets, resources, and manifest) for android_test targets. */
public static ProcessedAndroidData processTestDataFrom(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
StampedAndroidManifest manifest,
String packageUnderTest,
boolean hasLocalResourceFiles,
@@ -209,8 +203,9 @@ public class ProcessedAndroidData {
AndroidResourcesProcessorBuilder builder =
builderForNonIncrementalTopLevelTarget(
- ruleContext, manifest, ImmutableMap.of(), aaptVersion)
- .setMainDexProguardOut(AndroidBinary.createMainDexProguardSpec(ruleContext))
+ dataContext, manifest, ImmutableMap.of(), aaptVersion)
+ .setMainDexProguardOut(
+ AndroidBinary.createMainDexProguardSpec(dataContext.getRuleContext()))
.setPackageUnderTest(packageUnderTest)
.setIsTestWithResources(hasLocalResourceFiles)
.withResourceDependencies(resourceDeps)
@@ -225,22 +220,21 @@ public class ProcessedAndroidData {
* <p>The builder will be populated with commonly-used settings and outputs.
*/
private static AndroidResourcesProcessorBuilder builderForNonIncrementalTopLevelTarget(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
StampedAndroidManifest manifest,
Map<String, String> manifestValues,
AndroidAaptVersion aaptVersion)
throws InterruptedException {
- return builderForTopLevelTarget(ruleContext, manifest, "", manifestValues)
+ return builderForTopLevelTarget(dataContext, manifest, "", manifestValues)
.targetAaptVersion(aaptVersion)
// Outputs
- .setApkOut(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK))
- .setRTxtOut(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
+ .setApkOut(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK))
+ .setRTxtOut(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
.setSourceJarOut(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
- .setSymbols(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_MERGED_SYMBOLS));
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
+ .setSymbols(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_MERGED_SYMBOLS));
}
/**
@@ -249,22 +243,22 @@ public class ProcessedAndroidData {
* <p>The builder will be populated with commonly-used settings and outputs.
*/
private static AndroidResourcesProcessorBuilder builderForTopLevelTarget(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
StampedAndroidManifest manifest,
String proguardPrefix,
Map<String, String> manifestValues) {
- return new AndroidResourcesProcessorBuilder(ruleContext)
+ return new AndroidResourcesProcessorBuilder(dataContext.getRuleContext())
// Settings
- .setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
+ .setDebug(dataContext.useDebug())
.setJavaPackage(manifest.getPackage())
.setApplicationId(manifestValues.get("applicationId"))
.setVersionCode(manifestValues.get("versionCode"))
.setVersionName(manifestValues.get("versionName"))
- .setThrowOnResourceConflict(
- AndroidCommon.getAndroidConfig(ruleContext).throwOnResourceConflict())
+ .setThrowOnResourceConflict(dataContext.getAndroidConfig().throwOnResourceConflict())
// Output
- .setProguardOut(ProguardHelper.getProguardConfigArtifact(ruleContext, proguardPrefix));
+ .setProguardOut(
+ ProguardHelper.getProguardConfigArtifact(dataContext.getRuleContext(), proguardPrefix));
}
static ProcessedAndroidData of(
@@ -279,8 +273,16 @@ public class ProcessedAndroidData {
Artifact resourceProguardConfig,
@Nullable Artifact mainDexProguardConfig) {
return new ProcessedAndroidData(
- resources, assets, manifest, rTxt, sourceJar, apk, dataBindingInfoZip, resourceDeps,
- resourceProguardConfig, mainDexProguardConfig);
+ resources,
+ assets,
+ manifest,
+ rTxt,
+ sourceJar,
+ apk,
+ dataBindingInfoZip,
+ resourceDeps,
+ resourceProguardConfig,
+ mainDexProguardConfig);
}
private ProcessedAndroidData(
@@ -312,13 +314,13 @@ public class ProcessedAndroidData {
* <p>Registers an action to run R class generation, the last step needed in resource processing.
* Returns the fully processed data, including validated resources, wrapped in a ResourceApk.
*/
- public ResourceApk generateRClass(RuleContext ruleContext, AndroidAaptVersion aaptVersion)
+ public ResourceApk generateRClass(AndroidDataContext dataContext, AndroidAaptVersion aaptVersion)
throws InterruptedException {
- return new RClassGeneratorActionBuilder(ruleContext)
+ return new RClassGeneratorActionBuilder(dataContext.getRuleContext())
.targetAaptVersion(aaptVersion)
.withDependencies(resourceDeps)
.setClassJarOut(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR))
.build(this);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
index 95e7887873..46048e90a1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
@@ -16,8 +16,6 @@ package com.google.devtools.build.lib.rules.android;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.OutputGroupInfo;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import java.util.Optional;
@@ -270,8 +268,9 @@ public final class ResourceApk {
if (assetsInfo.isPresent()) {
builder.addNativeDeclaredProvider(assetsInfo.get());
if (assetsInfo.get().getValidationResult() != null) {
- // Asset merging output isn't consumed by anything. Require it to be run by top-level targets
- // so we can validate there are no asset merging conflicts.
+ // Asset merging output isn't consumed by anything. Require it to be run by top-level
+ // targets
+ // so we can validate there are no asset merging conflicts.
builder.addOutputGroup(
OutputGroupInfo.HIDDEN_TOP_LEVEL, assetsInfo.get().getValidationResult());
}
@@ -299,25 +298,24 @@ public final class ResourceApk {
* <p>Any local resources and assets will be ignored.
*/
public static ResourceApk processFromTransitiveLibraryData(
- RuleContext ruleContext,
+ AndroidDataContext dataContext,
ResourceDependencies resourceDeps,
AssetDependencies assetDeps,
StampedAndroidManifest manifest)
throws InterruptedException {
- return new AndroidResourcesProcessorBuilder(ruleContext)
+ return new AndroidResourcesProcessorBuilder(dataContext.getRuleContext())
.setLibrary(true)
- .setRTxtOut(ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
+ .setRTxtOut(dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT))
.setManifestOut(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST))
.setSourceJarOut(
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
+ dataContext.createOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR))
.setJavaPackage(manifest.getPackage())
.withResourceDependencies(resourceDeps)
.withAssetDependencies(assetDeps)
- .setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
- .setThrowOnResourceConflict(
- AndroidCommon.getAndroidConfig(ruleContext).throwOnResourceConflict())
+ .setDebug(dataContext.useDebug())
+ .setThrowOnResourceConflict(dataContext.getAndroidConfig().throwOnResourceConflict())
.buildWithoutLocalResources(manifest);
}
}