Merge "Refactor DexItemFactory.createCallSite() to handle altMetafactory()"
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 6f062cf..5a0d2c4 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "v1.2.4-dev";
+ public static final String LABEL = "v1.2.6-dev";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java b/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
index 45a62ef..e3753a7 100644
--- a/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
+++ b/src/main/java/com/android/tools/r8/dexsplitter/DexSplitter.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.utils.FeatureClassMapping.FeatureMappingException;
import com.android.tools.r8.utils.OptionsParsing;
import com.android.tools.r8.utils.OptionsParsing.ParseContext;
+import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -27,40 +28,80 @@
private static final boolean PRINT_ARGS = false;
public static class Options {
- List<String> inputArchives = new ArrayList<>();
- List<String> featureJars = new ArrayList<>();
- String splitBaseName = DEFAULT_OUTPUT_ARCHIVE_FILENAME;
- String featureSplitMapping;
- String proguardMap;
+ private List<String> inputArchives = new ArrayList<>();
+ private List<String> featureJars = new ArrayList<>();
+ private String splitBaseName = DEFAULT_OUTPUT_ARCHIVE_FILENAME;
+ private String featureSplitMapping;
+ private String proguardMap;
+
+ public String getSplitBaseName() {
+ return splitBaseName;
+ }
+
+ public void setSplitBaseName(String splitBaseName) {
+ this.splitBaseName = splitBaseName;
+ }
+
+ public String getFeatureSplitMapping() {
+ return featureSplitMapping;
+ }
+
+ public void setFeatureSplitMapping(String featureSplitMapping) {
+ this.featureSplitMapping = featureSplitMapping;
+ }
+
+ public String getProguardMap() {
+ return proguardMap;
+ }
+
+ public void setProguardMap(String proguardMap) {
+ this.proguardMap = proguardMap;
+ }
+
+ public void addInputArchive(String inputArchive) {
+ inputArchives.add(inputArchive);
+ }
+
+ public void addFeatureJar(String featureJar) {
+ featureJars.add(featureJar);
+ }
+
+ public ImmutableList<String> getInputArchives() {
+ return ImmutableList.copyOf(inputArchives);
+ }
+
+ public ImmutableList<String> getFeatureJars() {
+ return ImmutableList.copyOf(featureJars);
+ }
}
private static Options parseArguments(String[] args) throws IOException {
Options options = new Options();
ParseContext context = new ParseContext(args);
while (context.head() != null) {
- List<String> input = OptionsParsing.tryParseMulti(context, "--input");
- if (input != null) {
- options.inputArchives.addAll(input);
+ List<String> inputs = OptionsParsing.tryParseMulti(context, "--input");
+ if (inputs != null) {
+ inputs.stream().forEach(options::addInputArchive);
continue;
}
List<String> featureJars = OptionsParsing.tryParseMulti(context, "--feature-jar");
if (featureJars != null) {
- options.featureJars.addAll(featureJars);
+ featureJars.stream().forEach(options::addFeatureJar);
continue;
}
String output = OptionsParsing.tryParseSingle(context, "--output", "-o");
if (output != null) {
- options.splitBaseName = output;
+ options.setSplitBaseName(output);
continue;
}
String proguardMap = OptionsParsing.tryParseSingle(context, "--proguard-map", null);
if (proguardMap != null) {
- options.proguardMap = proguardMap;
+ options.setProguardMap(proguardMap);
continue;
}
String featureSplit = OptionsParsing.tryParseSingle(context, "--feature-splits", null);
if (featureSplit != null) {
- options.featureSplitMapping = featureSplit;
+ options.setFeatureSplitMapping(featureSplit);
continue;
}
throw new RuntimeException(String.format("Unknown options: '%s'.", context.head()));
@@ -70,8 +111,8 @@
private static FeatureClassMapping createFeatureClassMapping(Options options)
throws IOException, FeatureMappingException, ResourceException {
- if (options.featureSplitMapping != null) {
- return FeatureClassMapping.fromSpecification(Paths.get(options.featureSplitMapping));
+ if (options.getFeatureSplitMapping() != null) {
+ return FeatureClassMapping.fromSpecification(Paths.get(options.getFeatureSplitMapping()));
}
assert !options.featureJars.isEmpty();
return FeatureClassMapping.fromJarFiles(options.featureJars);
@@ -87,13 +128,13 @@
public static void run(Options options)
throws IOException, FeatureMappingException, ResourceException, CompilationException,
ExecutionException, CompilationFailedException {
- if (options.inputArchives.isEmpty()) {
+ if (options.getInputArchives().isEmpty()) {
throw new RuntimeException("Need at least one --input");
}
- if (options.featureSplitMapping == null && options.featureJars.isEmpty()) {
+ if (options.getFeatureSplitMapping() == null && options.getFeatureJars().isEmpty()) {
throw new RuntimeException("You must supply a feature split mapping or feature jars");
}
- if (options.featureSplitMapping != null && !options.featureJars.isEmpty()) {
+ if (options.getFeatureSplitMapping() != null && !options.getFeatureJars().isEmpty()) {
throw new RuntimeException("You can't supply both a feature split mapping and feature jars");
}
@@ -108,7 +149,7 @@
FeatureClassMapping featureClassMapping = createFeatureClassMapping(options);
DexSplitterHelper.run(
- builder.build(), featureClassMapping, options.splitBaseName, options.proguardMap);
+ builder.build(), featureClassMapping, options.getSplitBaseName(), options.getProguardMap());
}
public static void main(String[] args) {
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
index ce37763..25a84b6 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.shaking.RootSetBuilder.RootSet;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.MethodJavaSignatureEquivalence;
import com.android.tools.r8.utils.MethodSignatureEquivalence;
import com.android.tools.r8.utils.Timing;
import com.google.common.base.Equivalence;
@@ -88,13 +87,10 @@
*/
class MethodNameMinifier extends MemberNameMinifier<DexMethod, DexProto> {
- private final Equivalence<DexMethod> equivalence;
+ private final Equivalence<DexMethod> equivalence = MethodSignatureEquivalence.get();
MethodNameMinifier(AppInfoWithSubtyping appInfo, RootSet rootSet, InternalOptions options) {
super(appInfo, rootSet, options);
- equivalence = overloadAggressively
- ? MethodSignatureEquivalence.get()
- : MethodJavaSignatureEquivalence.get();
}
@Override
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
index 19a5ee2..cf87d46 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
@@ -89,9 +89,9 @@
if (useOptions) {
Options options = new Options();
- options.inputArchives.add(inputZip.toString());
- options.featureSplitMapping = splitSpec.toString();
- options.splitBaseName = output.toString();
+ options.addInputArchive(inputZip.toString());
+ options.setFeatureSplitMapping(splitSpec.toString());
+ options.setSplitBaseName(output.toString());
DexSplitter.run(options);
} else {
DexSplitter.main(
@@ -235,12 +235,12 @@
featureStream.close();
if (useOptions) {
Options options = new Options();
- options.inputArchives.add(inputZip.toString());
- options.splitBaseName = output.toString();
+ options.addInputArchive(inputZip.toString());
+ options.setSplitBaseName(output.toString());
if (explicitBase) {
- options.featureJars.add(baseJar.toString());
+ options.addFeatureJar(baseJar.toString());
}
- options.featureJars.add(featureJar.toString());
+ options.addFeatureJar(featureJar.toString());
DexSplitter.run(options);
} else {
List<String> args = Lists.newArrayList(
diff --git a/src/test/java/com/android/tools/r8/naming/InterfaceRenamingTestRunner.java b/src/test/java/com/android/tools/r8/naming/InterfaceRenamingTestRunner.java
index d25c061..6c054e5 100644
--- a/src/test/java/com/android/tools/r8/naming/InterfaceRenamingTestRunner.java
+++ b/src/test/java/com/android/tools/r8/naming/InterfaceRenamingTestRunner.java
@@ -24,7 +24,6 @@
public class InterfaceRenamingTestRunner extends TestBase {
static final Class CLASS = InterfaceRenamingTest.class;
static final Class[] CLASSES = InterfaceRenamingTest.CLASSES;
- private boolean bug = false;
@Test
public void testCfNoMinify() throws Exception {
@@ -33,7 +32,6 @@
@Test
public void testCfMinify() throws Exception {
- bug = true;
testCf(MinifyMode.JAVA);
}
@@ -49,7 +47,6 @@
@Test
public void testDexMinify() throws Exception {
- bug = true;
testDex(MinifyMode.JAVA);
}
@@ -65,11 +62,6 @@
Path outCf = temp.getRoot().toPath().resolve("cf.zip");
build(new ClassFileConsumer.ArchiveConsumer(outCf), minify);
ProcessResult runCf = ToolHelper.runJava(outCf, CLASS.getCanonicalName());
- if (bug) {
- assertNotEquals(-1, runCf.stderr.indexOf("java.lang.AbstractMethodError"));
- assertNotEquals(0, runCf.exitCode);
- return;
- }
assertEquals(runInput.toString(), runCf.toString());
}
@@ -79,12 +71,6 @@
assertEquals(0, runInput.exitCode);
Path outDex = temp.getRoot().toPath().resolve("dex.zip");
build(new DexIndexedConsumer.ArchiveConsumer(outDex), minify);
- if (bug) {
- ProcessResult runDex = ToolHelper.runArtRaw(outDex.toString(), CLASS.getCanonicalName());
- assertNotEquals(-1, runDex.stderr.indexOf("java.lang.AbstractMethodError"));
- assertNotEquals(0, runDex.exitCode);
- return;
- }
ProcessResult runDex =
ToolHelper.runArtNoVerificationErrorsRaw(outDex.toString(), CLASS.getCanonicalName());
assertEquals(runInput.stdout, runDex.stdout);