Merge "Cleanup constant uses for API version."
diff --git a/src/main/java/com/android/tools/r8/BaseOutput.java b/src/main/java/com/android/tools/r8/BaseOutput.java
index 16e8264..b1b9166 100644
--- a/src/main/java/com/android/tools/r8/BaseOutput.java
+++ b/src/main/java/com/android/tools/r8/BaseOutput.java
@@ -8,6 +8,7 @@
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.List;
abstract class BaseOutput {
@@ -39,9 +40,9 @@
* resources.get(N - 1) ~=~ classesN.dex (where N > 0).
* </pre>
*
- * @return list of compiled DEX resources.
+ * @return an immutable list of compiled DEX resources.
*/
- public ImmutableList<Resource> getDexResources() {
+ public List<Resource> getDexResources() {
return ImmutableList.copyOf(app.getDexProgramResources());
}
diff --git a/src/main/java/com/android/tools/r8/DexSegments.java b/src/main/java/com/android/tools/r8/DexSegments.java
index 9902d3b..3827cae 100644
--- a/src/main/java/com/android/tools/r8/DexSegments.java
+++ b/src/main/java/com/android/tools/r8/DexSegments.java
@@ -110,7 +110,7 @@
Map<String, Integer> result = new HashMap<>();
try (Closer closer = Closer.create()) {
for (Resource resource : app.getDexProgramResources()) {
- for (Segment segment: DexFileReader.parseMapFrom(resource.getStream(closer))) {
+ for (Segment segment: DexFileReader.parseMapFrom(closer.register(resource.getStream()))) {
int value = result.computeIfAbsent(segment.typeName(), (key) -> 0);
result.put(segment.typeName(), value + segment.size());
}
diff --git a/src/main/java/com/android/tools/r8/Resource.java b/src/main/java/com/android/tools/r8/Resource.java
index eaabc99..3208e52 100644
--- a/src/main/java/com/android/tools/r8/Resource.java
+++ b/src/main/java/com/android/tools/r8/Resource.java
@@ -4,7 +4,6 @@
package com.android.tools.r8;
-import com.google.common.io.Closer;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
@@ -48,7 +47,7 @@
public abstract Set<String> getClassDescriptors();
/** Get the resource as a stream. */
- public abstract InputStream getStream(Closer closer) throws IOException;
+ public abstract InputStream getStream() throws IOException;
/** File based application resource. */
private static class FileResource extends Resource {
@@ -66,8 +65,8 @@
}
@Override
- public InputStream getStream(Closer closer) throws IOException {
- return closer.register(new FileInputStream(file.toFile()));
+ public InputStream getStream() throws IOException {
+ return new FileInputStream(file.toFile());
}
}
@@ -89,8 +88,7 @@
}
@Override
- public InputStream getStream(Closer closer) throws IOException {
- // Note: closing a byte-array input stream is a no-op.
+ public InputStream getStream() throws IOException {
return new ByteArrayInputStream(bytes);
}
}
diff --git a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
index c871e75..6bbb406 100644
--- a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
+++ b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
@@ -472,8 +472,7 @@
+ "Reduce the input-program size or run with --multi-dex enabled");
}
if (isDexFile(output)) {
- try (Closer closer = Closer.create()) {
- InputStream stream = result.getDexResources().get(0).getStream(closer);
+ try (InputStream stream = result.getDexResources().get(0).getStream()) {
Files.copy(stream, output, StandardCopyOption.REPLACE_EXISTING);
}
return;
@@ -544,7 +543,7 @@
// Add dex files.
List<Resource> dexProgramSources = output.getDexResources();
for (int i = 0; i < dexProgramSources.size(); i++) {
- addEntry(getDexFileName(i), dexProgramSources.get(i).getStream(closer), out);
+ addEntry(getDexFileName(i), closer.register(dexProgramSources.get(i).getStream()), out);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index 36b65d7..355080f 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -183,7 +183,7 @@
List<DexFileReader> fileReaders = new ArrayList<>(dexSources.size());
int computedMinApiLevel = options.minApiLevel;
for (Resource input : dexSources) {
- DexFile file = new DexFile(input.getStream(closer));
+ DexFile file = new DexFile(closer.register(input.getStream()));
computedMinApiLevel = verifyOrComputeMinApiLevel(computedMinApiLevel, file);
fileReaders.add(new DexFileReader(file, classKind, itemFactory));
}
@@ -207,7 +207,7 @@
JarClassFileReader reader = new JarClassFileReader(
application, classKind.bridgeConsumer(classes::add));
for (Resource input : classSources) {
- reader.read(DEFAULT_DEX_FILENAME, classKind, input.getStream(closer));
+ reader.read(DEFAULT_DEX_FILENAME, classKind, closer.register(input.getStream()));
}
}
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index 15ca87b..e767030 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -182,7 +182,7 @@
* Get the input stream of the dead-code resource if exists.
*/
public InputStream getDeadCode(Closer closer) throws IOException {
- return deadCode == null ? null : deadCode.getStream(closer);
+ return deadCode == null ? null : closer.register(deadCode.getStream());
}
/**
@@ -196,7 +196,7 @@
* Get the input stream of the proguard-map resource if it exists.
*/
public InputStream getProguardMap(Closer closer) throws IOException {
- return proguardMap == null ? null : proguardMap.getStream(closer);
+ return proguardMap == null ? null : closer.register(proguardMap.getStream());
}
/**
@@ -210,7 +210,7 @@
* Get the input stream of the proguard-seeds resource if it exists.
*/
public InputStream getProguardSeeds(Closer closer) throws IOException {
- return proguardSeeds == null ? null : proguardSeeds.getStream(closer);
+ return proguardSeeds == null ? null : closer.register(proguardSeeds.getStream());
}
/**
@@ -224,7 +224,7 @@
* Get the input stream of the package distribution resource if it exists.
*/
public InputStream getPackageDistribution(Closer closer) throws IOException {
- return packageDistribution == null ? null : packageDistribution.getStream(closer);
+ return packageDistribution == null ? null : closer.register(packageDistribution.getStream());
}
/**
@@ -238,7 +238,7 @@
* Get the input stream of the main dex list resource if it exists.
*/
public InputStream getMainDexList(Closer closer) throws IOException {
- return mainDexList == null ? null : mainDexList.getStream(closer);
+ return mainDexList == null ? null : closer.register(mainDexList.getStream());
}
/**
@@ -271,7 +271,7 @@
if (!Files.exists(filePath.getParent())) {
Files.createDirectories(filePath.getParent());
}
- Files.copy(dexProgramSources.get(i).getStream(closer), filePath, options);
+ Files.copy(closer.register(dexProgramSources.get(i).getStream()), filePath, options);
}
}
}
@@ -307,7 +307,7 @@
List<Resource> dexProgramSources = getDexProgramResources();
for (int i = 0; i < dexProgramSources.size(); i++) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
- ByteStreams.copy(dexProgramSources.get(i).getStream(closer), out);
+ ByteStreams.copy(closer.register(dexProgramSources.get(i).getStream()), out);
dex.add(out.toByteArray());
}
// TODO(sgjesse): Add Proguard map and seeds.
@@ -326,7 +326,8 @@
List<Resource> dexProgramSources = getDexProgramResources();
for (int i = 0; i < dexProgramSources.size(); i++) {
ZipEntry zipEntry = new ZipEntry(outputMode.getOutputPath(dexProgramSources.get(i), i));
- byte[] bytes = ByteStreams.toByteArray(dexProgramSources.get(i).getStream(closer));
+ byte[] bytes =
+ ByteStreams.toByteArray(closer.register(dexProgramSources.get(i).getStream()));
zipEntry.setSize(bytes.length);
out.putNextEntry(zipEntry);
out.write(bytes);
diff --git a/src/main/java/com/android/tools/r8/utils/ClassProvider.java b/src/main/java/com/android/tools/r8/utils/ClassProvider.java
index 25abdce..63a847a 100644
--- a/src/main/java/com/android/tools/r8/utils/ClassProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/ClassProvider.java
@@ -100,7 +100,7 @@
try (Closer closer = Closer.create()) {
JarClassFileReader classReader =
new JarClassFileReader(reader, classKind.bridgeConsumer(classConsumer));
- classReader.read(DEFAULT_DEX_FILENAME, classKind, resource.getStream(closer));
+ classReader.read(DEFAULT_DEX_FILENAME, classKind, closer.register(resource.getStream()));
} catch (IOException e) {
throw new CompilationError("Failed to load class: " + descriptor, e);
}
diff --git a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
index d8b9bbc..803d760 100644
--- a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
@@ -294,7 +294,7 @@
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[16384];
try (Closer closer = Closer.create()) {
- InputStream stream = resource.getStream(closer);
+ InputStream stream = closer.register(resource.getStream());
int read;
while ((read = stream.read(buffer, 0, buffer.length)) != -1) {
output.write(buffer, 0, read);
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
index 8fdcfa5..fc9ee3f 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreDeterministicTest.java
@@ -62,8 +62,8 @@
List<Resource> files2 = app2.getDexProgramResources();
assertEquals(files1.size(), files2.size());
for (int index = 0; index < files1.size(); index++) {
- InputStream file1 = files1.get(index).getStream(closer);
- InputStream file2 = files2.get(index).getStream(closer);
+ InputStream file1 = closer.register(files1.get(index).getStream());
+ InputStream file2 = closer.register(files2.get(index).getStream());
byte[] bytes1 = ByteStreams.toByteArray(file1);
byte[] bytes2 = ByteStreams.toByteArray(file2);
assertArrayEquals("File index " + index, bytes1, bytes2);
diff --git a/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
index d28c37d..fa193d4 100644
--- a/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/R8GMSCoreTreeShakeJarVerificationTest.java
@@ -34,7 +34,7 @@
int bytes = 0;
try (Closer closer = Closer.create()) {
for (Resource dex : app.getDexProgramResources()) {
- bytes += ByteStreams.toByteArray(dex.getStream(closer)).length;
+ bytes += ByteStreams.toByteArray(closer.register(dex.getStream())).length;
}
}
assertTrue("Expected max size of " + maxSize + ", got " + bytes, bytes < maxSize);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeTreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeTreeShakeJarVerificationTest.java
index b26d1aa..8ee3674 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeTreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeTreeShakeJarVerificationTest.java
@@ -36,7 +36,7 @@
int bytes = 0;
try (Closer closer = Closer.create()) {
for (Resource dex : app.getDexProgramResources()) {
- bytes += ByteStreams.toByteArray(dex.getStream(closer)).length;
+ bytes += ByteStreams.toByteArray(closer.register(dex.getStream())).length;
}
}
assertTrue("Expected max size of " + maxSize + ", got " + bytes, bytes < maxSize);