diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
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) |