Use Android.jar passed as path as much as possible
Bug: b/274414020
Change-Id: I3c7002f231806ae26c3865a1536b1d0736857bc7
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
index 9c46517d..58f8ac7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/AbstractGenerateFiles.java
@@ -134,6 +134,8 @@
StringUtils.joinLines(
"Invalid invocation.",
"Usage: AbstractGenerateFiles [--generate-api-docs] <desugar configuration> <desugar"
- + " implementation> <output directory> [<android jar path>]"));
+ + " implementation> <output directory> [<android jar path for Android "
+ + MAX_TESTED_ANDROID_API_LEVEL
+ + " or higher>]"));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
index 31ba7e1..fab7228 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateHtmlDoc.java
@@ -557,7 +557,7 @@
new PrintStream(Files.newOutputStream(outputDirectory.resolve(outputFileName)));
SupportedClasses supportedClasses =
- new SupportedClassesGenerator(options)
+ new SupportedClassesGenerator(options, androidJar)
.run(desugaredLibraryImplementation, desugaredLibrarySpecificationPath);
// Full classes added.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
index 4654124d..b5edd71 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/GenerateLintFiles.java
@@ -261,7 +261,7 @@
AndroidApiLevel compilationLevel =
desugaredLibrarySpecification.getRequiredCompilationApiLevel();
SupportedClasses supportedMethods =
- new SupportedClassesGenerator(options)
+ new SupportedClassesGenerator(options, androidJar)
.run(desugaredLibraryImplementation, desugaredLibrarySpecificationPath);
System.out.println("Generating lint files for compile API " + compilationLevel);
generateLintFiles(compilationLevel, AndroidApiLevel.B, supportedMethods);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
index cb24e59..ccbcfed 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
@@ -58,9 +58,13 @@
private static final String ANDROID_JAR_PATTERN = "third_party/android_jar/lib-v%d/android.jar";
private final InternalOptions options;
+ private final Path androidJar;
- public SupportedClassesGenerator(InternalOptions options) {
+ private DexApplication loadingAppCache;
+
+ public SupportedClassesGenerator(InternalOptions options, Path androidJar) {
this.options = options;
+ this.androidJar = androidJar;
}
public SupportedClasses run(Collection<Path> desugaredLibraryImplementation, Path specification)
@@ -69,10 +73,7 @@
// First analyze everything which is supported when desugaring for api 1.
collectSupportedMembersInB(desugaredLibraryImplementation, specification, builder);
// Second annotate all apis which are partially and/or fully supported.
- AndroidApp library =
- AndroidApp.builder()
- .addProgramFiles(getAndroidJarPath(MAX_TESTED_ANDROID_API_LEVEL))
- .build();
+ AndroidApp library = AndroidApp.builder().addProgramFiles(androidJar).build();
DirectMappedDexApplication appForMax =
new ApplicationReader(library, options, Timing.empty()).read().toDirect();
annotateMethodsNotOnLatestAndroidJar(appForMax, builder);
@@ -245,10 +246,7 @@
DirectMappedDexApplication implementationApplication =
new ApplicationReader(implementation, options, Timing.empty()).read().toDirect();
- AndroidApp library =
- AndroidApp.builder()
- .addLibraryFiles(getAndroidJarPath(MAX_TESTED_ANDROID_API_LEVEL))
- .build();
+ AndroidApp library = AndroidApp.builder().addLibraryFiles(androidJar).build();
DirectMappedDexApplication amendedAppForMax =
new ApplicationReader(library, options, Timing.empty()).read().toDirect();
@@ -402,15 +400,21 @@
options.reporter,
false,
api.getLevel());
- Path androidJarPath = getAndroidJarPath(librarySpecification.getRequiredCompilationApiLevel());
- DexApplication app = createLoadingApp(androidJarPath, options);
+ DexApplication app = getLoadingApp(androidJar, options);
return librarySpecification.toMachineSpecification(app, Timing.empty());
}
- private DexApplication createLoadingApp(Path androidLib, InternalOptions options)
+ private DexApplication getLoadingApp(Path androidJar, InternalOptions options)
+ throws IOException {
+ return loadingAppCache == null
+ ? loadingAppCache = createLoadingApp(androidJar, options)
+ : loadingAppCache;
+ }
+
+ private DexApplication createLoadingApp(Path androidJar, InternalOptions options)
throws IOException {
AndroidApp.Builder builder = AndroidApp.builder();
- AndroidApp inputApp = builder.addLibraryFiles(androidLib).build();
+ AndroidApp inputApp = builder.addLibraryFiles(androidJar).build();
ApplicationReader applicationReader = new ApplicationReader(inputApp, options, Timing.empty());
ExecutorService executorService = ThreadUtils.getExecutorService(options);
assert !options.ignoreJavaLibraryOverride;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
index dd7c1cf..4ad1523 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
@@ -12,6 +12,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexMember;
@@ -129,7 +130,8 @@
@Test
public void test() throws Exception {
SupportedClasses supportedClasses =
- new SupportedClassesGenerator(new InternalOptions())
+ new SupportedClassesGenerator(
+ new InternalOptions(), ToolHelper.getAndroidJar(AndroidApiLevel.U))
.run(librarySpecification.getDesugarJdkLibs(), librarySpecification.getSpecification());
for (AndroidApiLevel api : getRelevantApiLevels()) {
@@ -205,10 +207,6 @@
&& api.isLessThan(AndroidApiLevel.T)) {
expectedFailures.addAll(FAILURES_TO_ARRAY);
}
- if (librarySpecification == JDK8 && api.isLessThan(AndroidApiLevel.T)) {
- // Interestingly that was added somehow to JDK8 desugared library at some point...
- expectedFailures.addAll(FAILURES_TO_ARRAY);
- }
if (jdk11NonMinimal
&& api.isGreaterThanOrEqualTo(AndroidApiLevel.O)
&& api.isLessThan(AndroidApiLevel.U)) {