aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Gjesse <sgjesse@google.com>2017-10-26 12:27:38 +0200
committerSøren Gjesse <sgjesse@google.com>2017-10-26 12:27:38 +0200
commit98428700225db72588375358dd3c747f0bef650a (patch)
tree9e80b26db10004e2bc42fbe78e02925b7648dd5d
parent6b06bfbaf7e8bbb3cddfe3889c04aa0f0fba4106 (diff)
downloadr8-98428700225db72588375358dd3c747f0bef650a.tar.gz
Update compat proguard to ignore missing classes when not shrinking
It seems that Proguard does not warn about missing classes when -dontshrink is set. This change tries to mimic that behaviour for compat proguard. Also add the explicit --ignore-missing-classes flag to compat proguard. Bug: 68249935 Change-Id: I1134d368803b394cb7312e060afaf56cbd988ba8
-rw-r--r--src/main/java/com/android/tools/r8/R8Command.java14
-rw-r--r--src/main/java/com/android/tools/r8/compatproguard/CompatProguard.java12
-rw-r--r--src/main/java/com/android/tools/r8/compatproguard/CompatProguardCommandBuilder.java5
-rw-r--r--src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java2
4 files changed, 26 insertions, 7 deletions
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index d24eb43c9..fef695eb8 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -35,6 +35,7 @@ public class R8Command extends BaseCompilerCommand {
private Optional<Boolean> treeShaking = Optional.empty();
private Optional<Boolean> discardedChecker = Optional.empty();
private Optional<Boolean> minification = Optional.empty();
+ private boolean ignoreMissingClassesWhenNotShrinking = false;
private boolean ignoreMissingClasses = false;
private boolean forceProguardCompatibility = false;
private Path proguardMapOutput = null;
@@ -43,9 +44,12 @@ public class R8Command extends BaseCompilerCommand {
super(CompilationMode.RELEASE);
}
- protected Builder(boolean ignoreDexInArchive, boolean forceProguardCompatibility) {
+ protected Builder(boolean ignoreDexInArchive, boolean forceProguardCompatibility,
+ boolean ignoreMissingClassesWhenNotShrinking, boolean ignoreMissingClasses) {
super(CompilationMode.RELEASE, ignoreDexInArchive);
this.forceProguardCompatibility = forceProguardCompatibility;
+ this.ignoreMissingClassesWhenNotShrinking = ignoreMissingClassesWhenNotShrinking;
+ this.ignoreMissingClasses = ignoreMissingClasses;
}
private Builder(AndroidApp app) {
@@ -256,6 +260,7 @@ public class R8Command extends BaseCompilerCommand {
useMinification,
ignoreMissingClasses,
forceProguardCompatibility,
+ ignoreMissingClassesWhenNotShrinking,
proguardMapOutput);
}
}
@@ -297,6 +302,7 @@ public class R8Command extends BaseCompilerCommand {
private final boolean useMinification;
private final boolean ignoreMissingClasses;
private final boolean forceProguardCompatibility;
+ private final boolean ignoreMissingClassesWhenNotShrinking;
private final Path proguardMapOutput;
public static Builder builder() {
@@ -415,6 +421,7 @@ public class R8Command extends BaseCompilerCommand {
boolean useMinification,
boolean ignoreMissingClasses,
boolean forceProguardCompatibility,
+ boolean ignoreMissingClassesWhenNotShrinking,
Path proguardMapOutput) {
super(inputApp, outputPath, outputMode, mode, minApiLevel, diagnosticsHandler,
enableDesugaring);
@@ -429,6 +436,7 @@ public class R8Command extends BaseCompilerCommand {
this.useMinification = useMinification;
this.ignoreMissingClasses = ignoreMissingClasses;
this.forceProguardCompatibility = forceProguardCompatibility;
+ this.ignoreMissingClassesWhenNotShrinking = ignoreMissingClassesWhenNotShrinking;
this.proguardMapOutput = proguardMapOutput;
}
@@ -442,6 +450,7 @@ public class R8Command extends BaseCompilerCommand {
useMinification = false;
ignoreMissingClasses = false;
forceProguardCompatibility = false;
+ ignoreMissingClassesWhenNotShrinking = false;
proguardMapOutput = null;
}
public boolean useTreeShaking() {
@@ -479,6 +488,9 @@ public class R8Command extends BaseCompilerCommand {
assert !internal.ignoreMissingClasses;
internal.ignoreMissingClasses = ignoreMissingClasses;
internal.ignoreMissingClasses |= proguardConfiguration.isIgnoreWarnings();
+ internal.ignoreMissingClasses |=
+ ignoreMissingClassesWhenNotShrinking && !proguardConfiguration.isShrinking();
+
assert !internal.verbose;
internal.mainDexKeepRules = mainDexKeepRules;
internal.minimalMainDex = internal.debug;
diff --git a/src/main/java/com/android/tools/r8/compatproguard/CompatProguard.java b/src/main/java/com/android/tools/r8/compatproguard/CompatProguard.java
index 4c49a6a1b..a6b45ae17 100644
--- a/src/main/java/com/android/tools/r8/compatproguard/CompatProguard.java
+++ b/src/main/java/com/android/tools/r8/compatproguard/CompatProguard.java
@@ -33,14 +33,16 @@ public class CompatProguard {
public final String output;
public final int minApi;
public final boolean forceProguardCompatibility;
+ public final boolean ignoreMissingClasses;
public final boolean multiDex;
public final List<String> proguardConfig;
CompatProguardOptions(List<String> proguardConfig, String output, int minApi,
- boolean multiDex, boolean forceProguardCompatibility) {
+ boolean multiDex, boolean forceProguardCompatibility, boolean ignoreMissingClasses) {
this.output = output;
this.minApi = minApi;
this.forceProguardCompatibility = forceProguardCompatibility;
+ this.ignoreMissingClasses = ignoreMissingClasses;
this.multiDex = multiDex;
this.proguardConfig = proguardConfig;
}
@@ -49,6 +51,7 @@ public class CompatProguard {
String output = null;
int minApi = 1;
boolean forceProguardCompatibility = false;
+ boolean ignoreMissingClasses = false;
boolean multiDex = false;
boolean coreLibrary = false;
@@ -62,6 +65,8 @@ public class CompatProguard {
minApi = Integer.valueOf(args[++i]);
} else if (arg.equals("--force-proguard-compatibility")) {
forceProguardCompatibility = true;
+ } else if (arg.equals("--ignore-missing-classes")) {
+ ignoreMissingClasses = true;
} else if (arg.equals("--output")) {
output = args[++i];
} else if (arg.equals("--multi-dex")) {
@@ -82,7 +87,7 @@ public class CompatProguard {
builder.add(currentLine.toString());
}
return new CompatProguardOptions(builder.build(), output, minApi, multiDex,
- forceProguardCompatibility);
+ forceProguardCompatibility, ignoreMissingClasses);
}
}
@@ -95,7 +100,8 @@ public class CompatProguard {
// Run R8 passing all the options from the command line as a Proguard configuration.
CompatProguardOptions options = CompatProguardOptions.parse(args);
R8Command.Builder builder =
- new CompatProguardCommandBuilder(options.forceProguardCompatibility);
+ new CompatProguardCommandBuilder(
+ options.forceProguardCompatibility, options.ignoreMissingClasses);
builder.setOutputPath(Paths.get(options.output))
.addProguardConfiguration(options.proguardConfig)
.setMinApiLevel(options.minApi);
diff --git a/src/main/java/com/android/tools/r8/compatproguard/CompatProguardCommandBuilder.java b/src/main/java/com/android/tools/r8/compatproguard/CompatProguardCommandBuilder.java
index 71bc6eb0d..18ec474ac 100644
--- a/src/main/java/com/android/tools/r8/compatproguard/CompatProguardCommandBuilder.java
+++ b/src/main/java/com/android/tools/r8/compatproguard/CompatProguardCommandBuilder.java
@@ -7,8 +7,9 @@ package com.android.tools.r8.compatproguard;
import com.android.tools.r8.R8Command;
public class CompatProguardCommandBuilder extends R8Command.Builder {
- public CompatProguardCommandBuilder(boolean forceProguardCompatibility) {
- super(true, forceProguardCompatibility);
+ public CompatProguardCommandBuilder(boolean forceProguardCompatibility,
+ boolean ignoreMissingClasses) {
+ super(true, forceProguardCompatibility, true, ignoreMissingClasses);
setEnableDesugaring(false);
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
index 1519f6c8a..298876ff3 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
@@ -55,7 +55,7 @@ public class ForceProguardCompatibilityTest extends TestBase {
private void runAnnotationsTest(boolean forceProguardCompatibility, boolean keepAnnotations) throws Exception {
R8Command.Builder builder =
- new CompatProguardCommandBuilder(forceProguardCompatibility);
+ new CompatProguardCommandBuilder(forceProguardCompatibility, false);
// Add application classes including the annotation class.
Class mainClass = TestMain.class;
Class mentionedClassWithAnnotations = TestMain.MentionedClassWithAnnotation.class;