Reland "Don't read DEX code from archives in any R8 compilation."
This reverts commit 80e57b53298b99e9cae466c0e60e997d2d685dc8.
Bug: b/132422247
Change-Id: Iff94e6ff02094d79be2006f22f76b81a161b765d
diff --git a/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java b/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
index b638235..80f679b 100644
--- a/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
+++ b/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
@@ -15,7 +15,6 @@
boolean forceProguardCompatibility, DiagnosticsHandler diagnosticsHandler) {
super(diagnosticsHandler);
setProguardCompatibility(forceProguardCompatibility);
- setIgnoreDexInArchive(true);
}
public CompatProguardCommandBuilder(boolean forceProguardCompatibility) {
@@ -26,6 +25,5 @@
boolean forceProguardCompatibility, boolean disableVerticalClassMerging) {
setProguardCompatibility(forceProguardCompatibility);
setDisableVerticalClassMerging(disableVerticalClassMerging);
- setIgnoreDexInArchive(true);
}
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 7923102..1496f40 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -127,14 +127,17 @@
Builder(DiagnosticsHandler diagnosticsHandler) {
super(diagnosticsHandler);
+ setIgnoreDexInArchive(true);
}
private Builder(AndroidApp app) {
super(app);
+ setIgnoreDexInArchive(true);
}
private Builder(AndroidApp app, DiagnosticsHandler diagnosticsHandler) {
super(app, diagnosticsHandler);
+ setIgnoreDexInArchive(true);
}
// Internal
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index 013a15b..f375004 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -22,6 +22,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestCompilerBuilder;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ThrowableConsumer;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.references.Reference;
@@ -60,16 +61,15 @@
private static final String EXAMPLE_SRC_DIR = ToolHelper.EXAMPLES_DIR;
private static final String EXAMPLE_O_SRC_DIR = ToolHelper.EXAMPLES_ANDROID_O_DIR;
- @Parameters(name = "{0}, {1}")
- public static List<Object[]> data() {
- return buildParameters(getTestParameters().withNoneRuntime().build(), Backend.values());
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withNoneRuntime().build();
}
- private final Backend backend;
+ private final Backend backend = Backend.CF;
- public MainDexTracingTest(TestParameters parameters, Backend backend) {
+ public MainDexTracingTest(TestParameters parameters) {
parameters.assertNoneRuntime();
- this.backend = backend;
}
private Path getInputJar(Path cfJar) throws Exception {
diff --git a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
deleted file mode 100644
index 67e965d..0000000
--- a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.smali;
-
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.graph.DexCode;
-import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.collect.ImmutableList;
-import java.nio.file.Path;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public class RemoveWriteOfUnusedFieldsTest extends SmaliTestBase {
-
- private final TestParameters parameters;
-
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withDexRuntimes().build();
- }
-
- public RemoveWriteOfUnusedFieldsTest(TestParameters parameters) {
- this.parameters = parameters;
- }
-
- @Test
- public void unreadStaticFieldsRemoved() throws Exception {
- SmaliBuilder builder = new SmaliBuilder(DEFAULT_CLASS_NAME);
-
- // All these static fields are set but never read.
- builder.addStaticField("booleanField", "Z");
- builder.addStaticField("byteField", "B");
- builder.addStaticField("shortField", "S");
- builder.addStaticField("intField", "I");
- builder.addStaticField("longField", "J");
- builder.addStaticField("floatField", "F");
- builder.addStaticField("doubleField", "D");
- builder.addStaticField("charField", "C");
- builder.addStaticField("objectField", "Ljava/lang/Object;");
- builder.addStaticField("stringField", "Ljava/lang/String;");
- builder.addStaticField("testField", "LTest;");
-
- builder.addStaticMethod("void", "test", ImmutableList.of(),
- 2,
- "const v0, 0", // single non-float typed zero (ie, int type)
- "sput-boolean v0, LTest;->booleanField:Z",
- "sput-byte v0, LTest;->byteField:B",
- "sput-char v0, LTest;->charField:C",
- "sput-short v0, LTest;->shortField:S",
- "sput v0, LTest;->intField:I",
- "const v0, 0", // float typed zero
- "sput v0, LTest;->floatField:F",
- "const v0, 0", // reference typed null
- "sput-object v0, LTest;->objectField:Ljava/lang/Object;",
- "sput-object v0, LTest;->stringField:Ljava/lang/String;",
- "sput-object v0, LTest;->testField:LTest;",
- "const-wide v0, 0", // wide typed long
- "sput-wide v0, LTest;->longField:J",
- "const-wide v0, 0", // wide typed double
- "sput-wide v0, LTest;->doubleField:D",
- "return-void");
-
- builder.addMainMethod(
- 0,
- " invoke-static { }, LTest;->test()V",
- " return-void ");
-
- AndroidApp input =
- AndroidApp.builder().addDexProgramData(builder.compile(), Origin.unknown()).build();
-
- Path inputPath = temp.getRoot().toPath().resolve("input.zip");
- input.writeToZip(inputPath, OutputMode.DexIndexed);
- ToolHelper.runArtNoVerificationErrors(inputPath.toString(), DEFAULT_CLASS_NAME);
-
- testForR8(parameters.getBackend())
- .addProgramFiles(inputPath)
- .addKeepMainRule("Test")
- .setMinApi(parameters.getRuntime())
- .compile()
- .inspect(
- inspector -> {
- MethodSubject method =
- inspector.clazz("Test").method("void", "test", ImmutableList.of());
- assertThat(
- "Expected method to be removed entirely because it does not have side effects",
- method,
- not(isPresent()));
- });
- }
-
- @Test
- public void unreadInstanceFieldsRemoved() throws Exception {
- SmaliBuilder builder = new SmaliBuilder(DEFAULT_CLASS_NAME);
-
- // All these instance fields are set but never read.
- builder.addInstanceField("booleanField", "Z");
- builder.addInstanceField("byteField", "B");
- builder.addInstanceField("shortField", "S");
- builder.addInstanceField("intField", "I");
- builder.addInstanceField("longField", "J");
- builder.addInstanceField("floatField", "F");
- builder.addInstanceField("doubleField", "D");
- builder.addInstanceField("charField", "C");
- builder.addInstanceField("objectField", "Ljava/lang/Object;");
- builder.addInstanceField("stringField", "Ljava/lang/String;");
- builder.addInstanceField("testField", "LTest;");
-
- builder.addInstanceMethod("void", "test", ImmutableList.of(),
- 2,
- "const v0, 0",
- "iput-boolean v0, p0, LTest;->booleanField:Z",
- "iput-byte v0, p0, LTest;->byteField:B",
- "iput-char v0, p0, LTest;->charField:C",
- "iput-short v0, p0, LTest;->shortField:S",
- "iput v0, p0, LTest;->intField:I",
- "const v0, 0",
- "iput v0, p0, LTest;->floatField:F",
- "const v0, 0",
- "iput-object v0, p0, LTest;->objectField:Ljava/lang/Object;",
- "iput-object v0, p0, LTest;->stringField:Ljava/lang/String;",
- "iput-object v0, p0, LTest;->testField:LTest;",
- "const-wide v0, 0",
- "iput-wide v0, p0, LTest;->longField:J",
- "const-wide v0, 0",
- "iput-wide v0, p0, LTest;->doubleField:D",
- "return-void");
-
- builder.addInitializer(ImmutableList.of(), 0,
- "invoke-direct {p0}, Ljava/lang/Object;-><init>()V",
- "return-void"
- );
-
- builder.addMainMethod(
- 1,
- " new-instance v0, LTest;",
- " invoke-direct { v0 }, LTest;-><init>()V",
- " invoke-virtual { v0 }, LTest;->test()V",
- " return-void ");
-
- AndroidApp input =
- AndroidApp.builder().addDexProgramData(builder.compile(), Origin.unknown()).build();
-
- Path inputPath = temp.getRoot().toPath().resolve("input.zip");
- input.writeToZip(inputPath, OutputMode.DexIndexed);
- ToolHelper.runArtNoVerificationErrors(inputPath.toString(), DEFAULT_CLASS_NAME);
-
- testForR8(parameters.getBackend())
- .addProgramFiles(inputPath)
- .addKeepMainRule("Test")
- .addKeepRules("-keep class Test { void test(); }")
- .setMinApi(parameters.getRuntime())
- .compile()
- .inspect(
- inspector -> {
- MethodSubject method =
- inspector.clazz("Test").method("void", "test", ImmutableList.of());
- DexCode code = method.getMethod().getCode().asDexCode();
- assertTrue(code.isEmptyVoidMethod());
- });
- }
-}