aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java29
1 files changed, 21 insertions, 8 deletions
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;
}