Add enableServiceLoader() to D8TestBuilder
Change-Id: I8b851bf0f3e78ece27ada4aa1eef064cf39ad559
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 6664691..7d7227d 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -239,7 +239,7 @@
executor);
}
- if (options.testing.enableD8ResourcesPassThrough) {
+ if (options.testing.enableD8MetaInfServicesPassThrough) {
appView.setAppServices(AppServices.builder(appView).build());
}
timing.end();
diff --git a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
index 90e458c..e9b35f4 100644
--- a/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
+++ b/src/main/java/com/android/tools/r8/dex/ResourceAdapter.java
@@ -76,7 +76,7 @@
public DataDirectoryResource adaptIfNeeded(DataDirectoryResource directory) {
// First check if this directory should even be in the output.
if (options.getProguardConfiguration() == null) {
- assert options.testing.enableD8ResourcesPassThrough;
+ assert options.testing.enableD8MetaInfServicesPassThrough;
return null;
}
if (!options.getProguardConfiguration().getKeepDirectories().matches(directory.getName())) {
@@ -91,7 +91,7 @@
Function<ProguardConfiguration, ProguardPathFilter> getFilter) {
final ProguardConfiguration proguardConfiguration = options.getProguardConfiguration();
if (proguardConfiguration == null) {
- assert options.testing.enableD8ResourcesPassThrough;
+ assert options.testing.enableD8MetaInfServicesPassThrough;
return false;
}
ProguardPathFilter filter = getFilter.apply(proguardConfiguration);
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 5997bc3..74b8fd1 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -2387,9 +2387,10 @@
public boolean testEnableTestAssertions = false;
public boolean keepMetadataInR8IfNotRewritten = true;
- // Flag to allow processing of resources in D8. A data resource consumer still needs to be
- // specified.
- public boolean enableD8ResourcesPassThrough = false;
+ // Flag to pass through the resources in META-INF/services in D8. A data resource consumer
+ // still needs to be specified as well. Please consider using enableServiceLoader() on the
+ // TestBuilder if possible.
+ public boolean enableD8MetaInfServicesPassThrough = false;
public boolean verifyKeptGraphInfo = false;
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/HelloWorldCompiledOnArtTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/HelloWorldCompiledOnArtTest.java
index 8ea8e39..1f89e1e 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/HelloWorldCompiledOnArtTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/HelloWorldCompiledOnArtTest.java
@@ -127,11 +127,7 @@
return testForDesugaredLibrary(
parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
+ .enableServiceLoader()
.setTrackDesugaredApiConversions()
.compile()
.inspectDiagnosticMessages(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
index 52b9842..fdab037 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
@@ -86,14 +86,10 @@
.addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
.addProgramFiles(kotlinc.getKotlinStdlibJar())
.addProgramFiles(kotlinc.getKotlinReflectJar())
+ .enableServiceLoader()
.applyIf(
compilationSpecification.isProgramShrink(),
builder -> builder.addProgramFiles(kotlinc.getKotlinAnnotationJar()))
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
.addKeepMainRule(PKG + ".MainKt")
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
index 54f2a97..9362fb1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
@@ -134,12 +134,7 @@
.addProgramFiles(kotlinc.getKotlinStdlibJar(), kotlinc.getKotlinReflectJar(), jar)
.setMinApi(parameters)
.setProgramConsumer(programConsumer)
- .addOptionsModification(
- options -> {
- // Needed for passing kotlin_builtin files to output.
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
+ .enableServiceLoader()
.run(parameters.getRuntime(), PKG_NESTED_REFLECT + ".MainKt")
.assertSuccessWithOutput(expected);
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/syntheticmethodforannotations/KotlinMetadataTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/syntheticmethodforannotations/KotlinMetadataTest.java
index dfd2bd9..18440e9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/syntheticmethodforannotations/KotlinMetadataTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/syntheticmethodforannotations/KotlinMetadataTest.java
@@ -90,11 +90,7 @@
.addProgramFiles(kotlinc.getKotlinReflectJar())
.addProgramFiles(kotlinc.getKotlinAnnotationJar())
.setMinApi(parameters)
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
+ .enableServiceLoader()
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
@@ -121,11 +117,6 @@
.allowUnusedDontWarnPatterns()
.allowDiagnosticMessages()
.setMinApi(parameters)
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
.compile()
.inspect(this::verifyRewrittenExtension)
.run(parameters.getRuntime(), MAIN)
@@ -186,11 +177,6 @@
.allowUnusedDontWarnPatterns()
.allowDiagnosticMessages()
.setMinApi(parameters)
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
.compile()
.run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutputLines(EXPECTED_FALSE_OUTPUT);
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
index 2149835..c30873e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
@@ -77,11 +77,7 @@
.addProgramFiles(kotlinc.getKotlinReflectJar())
.setProgramConsumer(new ArchiveConsumer(output.toPath(), true))
.setMinApi(parameters)
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
+ .enableServiceLoader()
.run(parameters.getRuntime(), PKG + ".SimpleReflectKt")
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
index ab5b651..ce78703 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
@@ -80,11 +80,7 @@
.addProgramFiles(kotlinc.getKotlinStdlibJar())
.addProgramFiles(kotlinc.getKotlinReflectJar())
.setMinApi(parameters)
- .addOptionsModification(
- options -> {
- options.testing.enableD8ResourcesPassThrough = true;
- options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
- })
+ .enableServiceLoader()
.run(parameters.getRuntime(), MAIN_CLASS)
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
}
diff --git a/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
index 57aa6cc..73265f7 100644
--- a/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
@@ -41,6 +41,7 @@
private List<ExternalArtProfile> residualArtProfiles = new ArrayList<>();
private Box<D8BuildMetadata> buildMetadata;
private boolean androidPlatformBuild = false;
+ private boolean serviceLoaderSupport = false;
@Override
public boolean isD8TestBuilder() {
@@ -97,6 +98,14 @@
builder.setBuildMetadataConsumer(buildMetadata::set);
}
builder.setEnableExperimentalMissingLibraryApiModeling(enableMissingLibraryApiModeling);
+ if (serviceLoaderSupport) {
+ optionsConsumer =
+ optionsConsumer.andThen(
+ options -> {
+ options.testing.enableD8MetaInfServicesPassThrough = true;
+ options.dataResourceConsumer = options.programConsumer.getDataResourceConsumer();
+ });
+ }
ToolHelper.runAndBenchmarkD8(builder, optionsConsumer, benchmarkResults);
return new D8TestCompileResult(
getState(),
@@ -192,4 +201,9 @@
androidPlatformBuild = true;
return self();
}
+
+ public D8TestBuilder enableServiceLoader() {
+ serviceLoaderSupport = true;
+ return self();
+ }
}
diff --git a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 3ef85b4..2fa54ac 100644
--- a/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -681,4 +681,9 @@
new ArtProfileForRewriting(artProfileProvider, residualArtProfileConsumer));
return this;
}
+
+ public DesugaredLibraryTestBuilder<T> enableServiceLoader() {
+ withD8TestBuilder(D8TestBuilder::enableServiceLoader);
+ return this;
+ }
}