diff options
author | 2017-09-28 18:57:54 -0400 | |
---|---|---|
committer | 2017-09-29 12:14:27 -0400 | |
commit | 910cb542086996f561092f9f16edeabb0af09fd5 (patch) | |
tree | dc2cae6ddeb3671a88c62fe91bc7de66b5d8483d /src/main | |
parent | b09bc1245472d6cd7a5211779a39db611786b32f (diff) |
Add flag to Blaze to double-check correct desugaring in Android deploy.jars
(without affecting other uses of singlejar)
PiperOrigin-RevId: 170411730
Diffstat (limited to 'src/main')
5 files changed, 38 insertions, 8 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 1385b16a7b..dd9ed457ce 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 @@ -125,8 +125,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { /** * Checks expected rule invariants, throws rule errors if anything is set wrong. */ - private static void validateRuleContext(RuleContext ruleContext) - throws InterruptedException, RuleErrorException { + private static void validateRuleContext(RuleContext ruleContext) throws RuleErrorException { if (getMultidexMode(ruleContext) != MultidexMode.LEGACY && ruleContext.attributes().isAttributeValueExplicitlySpecified( "main_dex_proguard_specs")) { @@ -747,6 +746,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .setAttributes(attributes) .addRuntimeJars(common.getRuntimeJars()) .setDerivedJarFunction(derivedJarFunction) + .setCheckDesugarDeps(AndroidCommon.getAndroidConfig(ruleContext).checkDesugarDeps()) .build(); return deployJar; } @@ -845,7 +845,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { } /** Returns {@code true} if resource shrinking should be performed. */ - private static boolean shouldShrinkResources(RuleContext ruleContext) throws RuleErrorException { + private static boolean shouldShrinkResources(RuleContext ruleContext) { TriState state = ruleContext.attributes().get("shrink_resources", BuildType.TRISTATE); if (state == TriState.AUTO) { boolean globalShrinkResources = 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 2b2e3f9203..4cde375390 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 @@ -380,6 +380,7 @@ public final class AndroidBinaryMobileInstall { .setOutputJar(stubDeployJar) .setAttributes(attributes) .setDerivedJarFunction(desugaredJars) + .setCheckDesugarDeps(AndroidCommon.getAndroidConfig(ruleContext).checkDesugarDeps()) .build(); Artifact stubDex = 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 1a8b70c62f..23ee749849 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 @@ -390,6 +390,16 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { ) public boolean desugarJava8; + // This flag is intended to be flipped globally. + @Option( + name = "experimental_check_desugar_deps", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = "Whether to double-check correct desugaring at Android binary level." + ) + public boolean checkDesugarDeps; + @Option( name = "incremental_dexing", defaultValue = "true", @@ -737,6 +747,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { host.fatApkCpus = ImmutableList.of(); // Fat APK archs don't apply to the host. host.desugarJava8 = desugarJava8; + host.checkDesugarDeps = checkDesugarDeps; host.incrementalDexing = incrementalDexing; host.incrementalDexingBinaries = incrementalDexingBinaries; host.incrementalDexingForLiteProtos = incrementalDexingForLiteProtos; @@ -791,6 +802,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { private final ImmutableList<String> dexoptsSupportedInDexMerger; private final boolean useWorkersWithDexbuilder; private final boolean desugarJava8; + private final boolean checkDesugarDeps; private final boolean useRexToCompressDexFiles; private final boolean allowAndroidLibraryDepsWithoutSrcs; private final boolean useAndroidResourceShrinking; @@ -830,6 +842,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { this.dexoptsSupportedInDexMerger = ImmutableList.copyOf(options.dexoptsSupportedInDexMerger); this.useWorkersWithDexbuilder = options.useWorkersWithDexbuilder; this.desugarJava8 = options.desugarJava8; + this.checkDesugarDeps = options.checkDesugarDeps; this.allowAndroidLibraryDepsWithoutSrcs = options.allowAndroidLibraryDepsWithoutSrcs; this.useAndroidResourceShrinking = options.useAndroidResourceShrinking || options.useExperimentalAndroidResourceShrinking; @@ -930,6 +943,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { return desugarJava8; } + public boolean checkDesugarDeps() { + return checkDesugarDeps; + } + public boolean useRexToCompressDexFiles() { return useRexToCompressDexFiles; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index 8f4a8ff45c..e7649f71da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -371,13 +371,15 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu ImmutableList<Artifact> bootclasspath, NestedSet<Artifact> classpath, Artifact result) { - CustomCommandLine args = - new Builder() + CustomCommandLine.Builder args = + new CustomCommandLine.Builder() .addExecPath("--input", jar) .addExecPath("--output", result) .addExecPaths(VectorArg.addBefore("--classpath_entry").each(classpath)) - .addExecPaths(VectorArg.addBefore("--bootclasspath_entry").each(bootclasspath)) - .build(); + .addExecPaths(VectorArg.addBefore("--bootclasspath_entry").each(bootclasspath)); + if (getAndroidConfig(ruleContext).checkDesugarDeps()) { + args.add("--emit_dependency_metadata_as_needed"); + } // Just use params file, since classpaths can get long Artifact paramFile = @@ -387,7 +389,7 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu new ParameterFileWriteAction( ruleContext.getActionOwner(), paramFile, - args, + args.build(), ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1)); ruleContext.registerAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index f88603e4ad..651b9a267c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java @@ -64,6 +64,7 @@ public class DeployArchiveBuilder { private ImmutableList<String> deployManifestLines = ImmutableList.of(); @Nullable private Artifact launcher; @Nullable private Function<Artifact, Artifact> derivedJars = null; + private boolean checkDesugarDeps; /** * Type of compression to apply to output archive. @@ -164,6 +165,12 @@ public class DeployArchiveBuilder { return this; } + /** Whether singlejar should process META-INF/desugar_deps files and fail upon inconsistencies. */ + public DeployArchiveBuilder setCheckDesugarDeps(boolean checkDesugarDeps) { + this.checkDesugarDeps = checkDesugarDeps; + return this; + } + public static CustomCommandLine.Builder defaultSingleJarCommandLine( Artifact outputJar, String javaMainClass, @@ -290,6 +297,9 @@ public class DeployArchiveBuilder { includeBuildData, compression, launcher); + if (checkDesugarDeps) { + commandLine = CommandLine.concat(commandLine, ImmutableList.of("--check_desugar_deps")); + } List<String> jvmArgs = ImmutableList.of(SINGLEJAR_MAX_MEMORY); ResourceSet resourceSet = |