Merge "Let MinifiedNameMapPrinter use StringBuilder"
diff --git a/src/main/java/com/android/tools/r8/errors/Unreachable.java b/src/main/java/com/android/tools/r8/errors/Unreachable.java
index 4b17eba..0eb71d2 100644
--- a/src/main/java/com/android/tools/r8/errors/Unreachable.java
+++ b/src/main/java/com/android/tools/r8/errors/Unreachable.java
@@ -14,4 +14,8 @@
public Unreachable(String s) {
super(s);
}
+
+ public Unreachable(Throwable cause) {
+ super(cause);
+ }
}
diff --git a/src/main/java/com/android/tools/r8/naming/MemberNaming.java b/src/main/java/com/android/tools/r8/naming/MemberNaming.java
index 6fb166f..711672c 100644
--- a/src/main/java/com/android/tools/r8/naming/MemberNaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MemberNaming.java
@@ -6,6 +6,7 @@
import static com.android.tools.r8.utils.DescriptorUtils.javaTypeToDescriptor;
import com.android.tools.r8.dex.Constants;
+import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
@@ -112,7 +113,8 @@
write(writer);
return writer.toString();
} catch (IOException e) {
- return e.toString();
+ // StringWriter is not throwing IOException
+ throw new Unreachable(e);
}
}
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java b/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
index 5d34ca4..3ae9d06 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
@@ -14,11 +14,6 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.collect.Sets;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -27,6 +22,7 @@
public class MinifiedNameMapPrinter {
+ private static final String NEW_LINE = "\n";
private final DexApplication application;
private final NamingLens namingLens;
private final Set<DexType> seenTypes = Sets.newIdentityHashSet();
@@ -42,13 +38,13 @@
return copy;
}
- private void writeClass(DexProgramClass clazz, PrintStream out) {
+ private void writeClass(DexProgramClass clazz, StringBuilder out) {
seenTypes.add(clazz.type);
DexString descriptor = namingLens.lookupDescriptor(clazz.type);
- out.print(DescriptorUtils.descriptorToJavaType(clazz.type.descriptor.toSourceString()));
- out.print(" -> ");
- out.print(DescriptorUtils.descriptorToJavaType(descriptor.toSourceString()));
- out.println(":");
+ out.append(DescriptorUtils.descriptorToJavaType(clazz.type.descriptor.toSourceString()));
+ out.append(" -> ");
+ out.append(DescriptorUtils.descriptorToJavaType(descriptor.toSourceString()));
+ out.append(":").append(NEW_LINE);
writeFields(sortedCopy(
clazz.instanceFields(), Comparator.comparing(DexEncodedField::toSourceString)), out);
writeFields(sortedCopy(
@@ -59,39 +55,39 @@
clazz.virtualMethods(), Comparator.comparing(DexEncodedMethod::toSourceString)), out);
}
- private void writeType(DexType type, PrintStream out) {
+ private void writeType(DexType type, StringBuilder out) {
if (type.isClassType() && seenTypes.add(type)) {
DexString descriptor = namingLens.lookupDescriptor(type);
- out.print(DescriptorUtils.descriptorToJavaType(type.descriptor.toSourceString()));
- out.print(" -> ");
- out.print(DescriptorUtils.descriptorToJavaType(descriptor.toSourceString()));
- out.println(":");
+ out.append(DescriptorUtils.descriptorToJavaType(type.descriptor.toSourceString()));
+ out.append(" -> ");
+ out.append(DescriptorUtils.descriptorToJavaType(descriptor.toSourceString()));
+ out.append(":").append(NEW_LINE);
}
}
- private void writeFields(DexEncodedField[] fields, PrintStream out) {
+ private void writeFields(DexEncodedField[] fields, StringBuilder out) {
for (DexEncodedField encodedField : fields) {
DexField field = encodedField.field;
DexString renamed = namingLens.lookupName(field);
if (renamed != field.name) {
- out.print(" ");
- out.print(field.type.toSourceString());
- out.print(" ");
- out.print(field.name.toSourceString());
- out.print(" -> ");
- out.println(renamed.toSourceString());
+ out.append(" ");
+ out.append(field.type.toSourceString());
+ out.append(" ");
+ out.append(field.name.toSourceString());
+ out.append(" -> ");
+ out.append(renamed.toSourceString()).append(NEW_LINE);
}
}
}
- private void writeMethod(MethodSignature signature, String renamed, PrintStream out) {
- out.print(" ");
- out.print(signature);
- out.print(" -> ");
- out.println(renamed);
+ private void writeMethod(MethodSignature signature, String renamed, StringBuilder out) {
+ out.append(" ");
+ out.append(signature.toString());
+ out.append(" -> ");
+ out.append(renamed).append(NEW_LINE);
}
- private void writeMethods(DexEncodedMethod[] methods, PrintStream out) {
+ private void writeMethods(DexEncodedMethod[] methods, StringBuilder out) {
for (DexEncodedMethod encodedMethod : methods) {
DexMethod method = encodedMethod.method;
DexString renamed = namingLens.lookupName(method);
@@ -103,7 +99,7 @@
}
}
- public void write(PrintStream out) {
+ public void write(StringBuilder out) {
// First write out all classes that have been renamed.
List<DexProgramClass> classes = new ArrayList<>(application.classes());
classes.sort(Comparator.comparing(DexProgramClass::toSourceString));
@@ -111,11 +107,4 @@
// Now write out all types only mentioned in descriptors that have been renamed.
namingLens.forAllRenamedTypes(type -> writeType(type, out));
}
-
- public void write(Path destination) throws IOException {
- PrintStream out = new PrintStream(Files.newOutputStream(destination), true,
- StandardCharsets.UTF_8.name());
- write(out);
- }
-
}
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
index f394e76..3863c14 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapSupplier.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexApplication;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Writer;
@@ -47,11 +46,9 @@
assert namingLens != null && application != null;
// TODO(herhut): Should writing of the proguard-map file be split like this?
if (!namingLens.isIdentityLens()) {
- ByteArrayOutputStream bytes = new ByteArrayOutputStream();
- PrintStream stream = new PrintStream(bytes);
- new MinifiedNameMapPrinter(application, namingLens).write(stream);
- stream.flush();
- return bytes.toString();
+ StringBuilder map = new StringBuilder();
+ new MinifiedNameMapPrinter(application, namingLens).write(map);
+ return map.toString();
}
if (application.getProguardMap() != null) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();