Remove Guava types from the public API.
This should make it possible for us to repackage the jar so that
we are sure that D8 is using the version of Guava that is in our own
jar.
R=gavra@google.com, jmhenaff@google.com, zerny@google.com
Change-Id: I56b36d284f4e8dca394bb83b53601d5654486692
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);