Add support for source file provider in R8 partial
Fixes: b/390318315
Change-Id: If93450f5e4a06d80117f84ddae325ef4d4166275
diff --git a/src/main/java/com/android/tools/r8/R8Partial.java b/src/main/java/com/android/tools/r8/R8Partial.java
index 4c34715..281fa12 100644
--- a/src/main/java/com/android/tools/r8/R8Partial.java
+++ b/src/main/java/com/android/tools/r8/R8Partial.java
@@ -209,6 +209,7 @@
r8Options.getTestingOptions().enableEmbeddedKeepAnnotations =
options.getTestingOptions().enableEmbeddedKeepAnnotations;
r8Options.mapConsumer = options.mapConsumer;
+ r8Options.sourceFileProvider = options.sourceFileProvider;
if (options.androidResourceProvider != null) {
r8Options.androidResourceProvider = options.androidResourceProvider;
r8Options.androidResourceConsumer = options.androidResourceConsumer;
diff --git a/src/test/java/com/android/tools/r8/naming/sourcefile/SourceFileTemplateTest.java b/src/test/java/com/android/tools/r8/naming/sourcefile/SourceFileTemplateTest.java
index ebf329d..61c8264 100644
--- a/src/test/java/com/android/tools/r8/naming/sourcefile/SourceFileTemplateTest.java
+++ b/src/test/java/com/android/tools/r8/naming/sourcefile/SourceFileTemplateTest.java
@@ -9,19 +9,21 @@
import static org.hamcrest.CoreMatchers.startsWith;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assume.assumeFalse;
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.R8Command.Builder;
import com.android.tools.r8.R8CommandParser;
+import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.ThrowingConsumer;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.Arrays;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -32,11 +34,15 @@
public class SourceFileTemplateTest extends TestBase {
@Parameter(0)
+ public boolean enablePartialCompilation;
+
+ @Parameter(1)
public TestParameters parameters;
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withApiLevel(AndroidApiLevel.B).build();
+ @Parameters(name = "{1}, partial: {0}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ BooleanUtils.values(), getTestParameters().withAllRuntimes().withMaximumApiLevel().build());
}
@Test
@@ -44,15 +50,15 @@
String template = "MySourceFile";
compileWithSourceFileTemplate(
template,
- inspector -> {
- assertEquals(
- template,
- inspector.clazz(TestClass.class).getDexProgramClass().getSourceFile().toString());
- });
+ inspector ->
+ assertEquals(
+ template,
+ inspector.clazz(TestClass.class).getDexProgramClass().getSourceFile().toString()));
}
@Test
public void testInvalidVariables() {
+ assumeFalse(enablePartialCompilation);
TestDiagnosticMessagesImpl messages = new TestDiagnosticMessagesImpl();
parseSourceFileTemplate("My%Source%File", messages);
messages
@@ -65,6 +71,7 @@
@Test
public void testInvalidVariablesMix() {
+ assumeFalse(enablePartialCompilation);
TestDiagnosticMessagesImpl messages = new TestDiagnosticMessagesImpl();
parseSourceFileTemplate("My%%MAP_IDJUNK", messages);
messages
@@ -75,6 +82,7 @@
@Test
public void testNoEscape() {
+ assumeFalse(enablePartialCompilation);
TestDiagnosticMessagesImpl messages = new TestDiagnosticMessagesImpl();
parseSourceFileTemplate("My%%SourceFile", messages);
messages
@@ -127,8 +135,14 @@
private <E extends Exception> void compileWithSourceFileTemplate(
String template, ThrowingConsumer<CodeInspector, E> inspection) throws Exception {
- testForR8(parameters.getBackend())
- .addProgramClasses(TestClass.class)
+ R8TestBuilder<?, ?, ?> builder;
+ if (enablePartialCompilation) {
+ parameters.assumeR8PartialTestParameters();
+ builder = testForR8Partial(parameters.getBackend()).addR8IncludedClasses(TestClass.class);
+ } else {
+ builder = testForR8(parameters.getBackend()).addProgramClasses(TestClass.class);
+ }
+ builder
.addKeepMainRule(TestClass.class)
.setMinApi(parameters)
.setSourceFileTemplate(template)