aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar kmb <kmb@google.com>2017-09-28 18:57:54 -0400
committerGravatar John Cater <jcater@google.com>2017-09-29 12:14:27 -0400
commit910cb542086996f561092f9f16edeabb0af09fd5 (patch)
treedc2cae6ddeb3671a88c62fe91bc7de66b5d8483d /src/main
parentb09bc1245472d6cd7a5211779a39db611786b32f (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java10
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 =