aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java15
-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/AndroidResourceMergingActionBuilder.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java10
6 files changed, 59 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java
index b0ffa9e5b5..c311d82f0f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java
@@ -40,6 +40,7 @@ public class AarGeneratorBuilder {
private Artifact classes;
private Artifact aarOut;
+ private boolean throwOnResourceConflict;
private final RuleContext ruleContext;
private final SpawnAction.Builder builder;
@@ -79,6 +80,11 @@ public class AarGeneratorBuilder {
return this;
}
+ public AarGeneratorBuilder setThrowOnResourceConflict(boolean throwOnResourceConflict) {
+ this.throwOnResourceConflict = throwOnResourceConflict;
+ return this;
+ }
+
public void build(ActionConstructionContext context) {
List<Artifact> outs = new ArrayList<>();
List<Artifact> ins = new ArrayList<>();
@@ -115,6 +121,10 @@ public class AarGeneratorBuilder {
args.add(aarOut.getExecPathString());
outs.add(aarOut);
+ if (throwOnResourceConflict) {
+ args.add("--throwOnResourceConflict");
+ }
+
ruleContext.registerAction(
this.builder
.addInputs(ImmutableList.<Artifact>copyOf(ins))
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 4820e03710..03878f5bfe 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
@@ -648,6 +648,15 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
)
public boolean generateRobolectricRClass;
+ @Option(
+ name = "experimental_android_throw_on_resource_conflict",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help = "If passed, resource merge conflicts will be treated as errors instead of warnings"
+ )
+ public boolean throwOnResourceConflict;
+
@Override
public FragmentOptions getHost(boolean fallback) {
Options host = (Options) super.getHost(fallback);
@@ -725,6 +734,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean exportsManifestDefault;
private final AndroidAaptVersion androidAaptVersion;
private final boolean generateRobolectricRClass;
+ private final boolean throwOnResourceConflict;
private final boolean useParallelDex2Oat;
AndroidConfiguration(Options options) throws InvalidConfigurationException {
@@ -760,6 +770,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.exportsManifestDefault = options.exportsManifestDefault;
this.androidAaptVersion = options.androidAaptVersion;
this.generateRobolectricRClass = options.generateRobolectricRClass;
+ this.throwOnResourceConflict = options.throwOnResourceConflict;
this.useParallelDex2Oat = options.useParallelDex2Oat;
if (!dexoptsSupportedInIncrementalDexing.contains("--no-locals")) {
@@ -889,6 +900,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return generateRobolectricRClass;
}
+ boolean throwOnResourceConflict() {
+ return throwOnResourceConflict;
+ }
+
@Override
public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) {
globalMakeEnvBuilder.put("ANDROID_CPU", cpu);
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 98fcb45946..83cc88ec6c 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
@@ -180,6 +180,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
.withPrimary(resourceContainer)
.withDependencies(resourceApk.getResourceDependencies())
.setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
+ .setThrowOnResourceConflict(
+ ruleContext.getFragment(AndroidConfiguration.class).throwOnResourceConflict())
.build(ruleContext);
}
@@ -189,6 +191,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
.withRtxt(primaryResources.getRTxt())
.withClasses(classesJar)
.setAAROut(aarOut)
+ .setThrowOnResourceConflict(
+ ruleContext.getFragment(AndroidConfiguration.class).throwOnResourceConflict())
.build(ruleContext);
RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java
index e86cae2441..5b63f24af6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceMergingActionBuilder.java
@@ -65,6 +65,7 @@ public class AndroidResourceMergingActionBuilder {
// Flags
private String customJavaPackage;
+ private boolean throwOnResourceConflict;
/** @param ruleContext The RuleContext that was used to create the SpawnAction.Builder. */
public AndroidResourceMergingActionBuilder(RuleContext ruleContext) {
@@ -116,6 +117,12 @@ public class AndroidResourceMergingActionBuilder {
return this;
}
+ public AndroidResourceMergingActionBuilder setThrowOnResourceConflict(
+ boolean throwOnResourceConflict) {
+ this.throwOnResourceConflict = throwOnResourceConflict;
+ return this;
+ }
+
public ResourceContainer build(ActionConstructionContext context) {
CustomCommandLine.Builder builder = new CustomCommandLine.Builder();
@@ -170,6 +177,10 @@ public class AndroidResourceMergingActionBuilder {
outs.add(dataBindingInfoZip);
}
+ if (throwOnResourceConflict) {
+ builder.add("--throwOnResourceConflict");
+ }
+
SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder();
// Create the spawn action.
ruleContext.registerAction(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
index b61bee6269..fd827b6962 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
@@ -110,6 +110,7 @@ public class AndroidResourcesProcessorBuilder {
private Artifact featureOf;
private Artifact featureAfter;
private AndroidAaptVersion aaptVersion;
+ private boolean throwOnResourceConflict;
/**
* @param ruleContext The RuleContext that was used to create the SpawnAction.Builder.
@@ -232,6 +233,12 @@ public class AndroidResourcesProcessorBuilder {
return this;
}
+ public AndroidResourcesProcessorBuilder setThrowOnResourceConflict(
+ boolean throwOnResourceConflict) {
+ this.throwOnResourceConflict = throwOnResourceConflict;
+ return this;
+ }
+
public ResourceContainer build(ActionConstructionContext context) {
if (aaptVersion == AndroidAaptVersion.AAPT2) {
return createAapt2ApkAction(context);
@@ -467,5 +474,9 @@ public class AndroidResourcesProcessorBuilder {
builder.addExecPath("--featureAfter", featureAfter);
inputs.add(featureAfter);
}
+
+ if (throwOnResourceConflict) {
+ builder.add("--throwOnResourceConflict");
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index a9d096ee2a..1ef2406f50 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -603,7 +603,10 @@ public final class ApplicationManifest {
.setMergedResourcesOut(mergedResources)
.setManifestOut(manifestOut)
.setClassJarOut(rJavaClassJar)
- .setDataBindingInfoZip(dataBindingInfoZip);
+ .setDataBindingInfoZip(dataBindingInfoZip)
+ .setThrowOnResourceConflict(
+ ruleContext.getConfiguration()
+ .getFragment(AndroidConfiguration.class).throwOnResourceConflict());
ResourceContainer merged = resourcesMergerBuilder.build(ruleContext);
processed =
@@ -642,7 +645,10 @@ public final class ApplicationManifest {
.setVersionCode(manifestValues.get("versionCode"))
.setVersionName(manifestValues.get("versionName"))
.setFeatureOf(featureOf)
- .setFeatureAfter(featureAfter);
+ .setFeatureAfter(featureAfter)
+ .setThrowOnResourceConflict(
+ ruleContext.getConfiguration()
+ .getFragment(AndroidConfiguration.class).throwOnResourceConflict());
if (!incremental) {
builder
.targetAaptVersion(AndroidAaptVersion.AAPT)