Attempt at fixing character issues on windows.
Change-Id: I5be0b383d5a3e8fc0230109cb9560869a58b1b3b
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index dccd176..fd51973 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -329,6 +329,10 @@
return className.replace(JAVA_PACKAGE_SEPARATOR, DESCRIPTOR_PACKAGE_SEPARATOR);
}
+ public static String getJavaTypeFromBinaryName(String className) {
+ return className.replace(DESCRIPTOR_PACKAGE_SEPARATOR, JAVA_PACKAGE_SEPARATOR);
+ }
+
public static String getBinaryNameFromDescriptor(String classDescriptor) {
assert isClassDescriptor(classDescriptor);
return classDescriptor.substring(1, classDescriptor.length() - 1);
diff --git a/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java b/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
index 146c94f..8e4700b 100644
--- a/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
+++ b/src/test/java/com/android/tools/r8/dexfilemerger/NonAsciiClassNameChecksumTest.java
@@ -11,9 +11,11 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import java.io.IOException;
import java.nio.file.Path;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -22,7 +24,7 @@
@RunWith(Parameterized.class)
public class NonAsciiClassNameChecksumTest extends TestBase {
- static final String EXPECTED = StringUtils.lines("Hello, world");
+ static final String EXPECTED = StringUtils.lines("Hello æ");
private final TestParameters parameters;
@@ -35,26 +37,42 @@
this.parameters = parameters;
}
+ private String getTransformedName(Class<?> clazz) {
+ return getTransformedName(clazz.getTypeName());
+ }
+
+ private String getTransformedName(String typeName) {
+ return NonAsciiClassNameChecksumTest.class.getTypeName()
+ + "$"
+ + (typeName.equals(TestClaass.class.getTypeName()) ? "TestClåss" : "TæstClass");
+ }
+
+ private byte[] getTransform(Class<?> clazz) throws IOException {
+ return transformer(clazz)
+ .setClassDescriptor(DescriptorUtils.javaTypeToDescriptor(getTransformedName(clazz)))
+ .transform();
+ }
+
@Test
public void test() throws Exception {
- Path intermediate1 = compileIntermediate(TæstClass.class);
- Path intermediate2 = compileIntermediate(TestClåss.class);
+ Path intermediate1 = compileIntermediate(TaestClass.class);
+ Path intermediate2 = compileIntermediate(TestClaass.class);
testForD8()
.addProgramFiles(intermediate1, intermediate2)
.setMinApi(parameters.getApiLevel())
.setIncludeClassesChecksum(true)
- .run(parameters.getRuntime(), TæstClass.class)
+ .run(parameters.getRuntime(), getTransformedName(TaestClass.class))
.assertSuccessWithOutput(EXPECTED)
.inspect(inspector -> {
- checkIncludesChecksum(inspector, TæstClass.class);
- checkIncludesChecksum(inspector, TestClåss.class);
+ checkIncludesChecksum(inspector, TaestClass.class);
+ checkIncludesChecksum(inspector, TestClaass.class);
});
}
private Path compileIntermediate(Class<?> clazz) throws Exception {
return testForD8()
.setOutputMode(OutputMode.DexFilePerClassFile)
- .addProgramClasses(clazz)
+ .addProgramClassFileData(getTransform(clazz))
.setMinApi(parameters.getApiLevel())
.setIncludeClassesChecksum(true)
.compile()
@@ -63,20 +81,20 @@
}
private void checkIncludesChecksum(CodeInspector inspector, Class<?> clazz) {
- ClassSubject classSubject = inspector.clazz(clazz);
+ ClassSubject classSubject = inspector.clazz(getTransformedName(clazz));
assertThat(classSubject, isPresent());
assertTrue(classSubject.getDexClass().asProgramClass().getChecksum() > 0);
}
- static class TæstClass {
+ static class TaestClass {
public static void main(String[] args) {
- new TestClåss().foo();
+ System.out.println("Hello æ");
}
}
- static class TestClåss {
- public void foo() {
- System.out.println("Hello, world");
+ static class TestClaass {
+ public static void main(String[] args) {
+ System.out.println("Hello å");
}
}
}
\ No newline at end of file
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
index 3d653d0..598f6f1 100644
--- a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
+++ b/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
@@ -166,6 +166,31 @@
});
}
+ /** Unconditionally replace the descriptor (ie, qualified name) of a class. */
+ public ClassFileTransformer setClassDescriptor(String descriptor) {
+ assert DescriptorUtils.isClassDescriptor(descriptor);
+ return addClassTransformer(
+ new ClassTransformer() {
+ @Override
+ public void visit(
+ int version,
+ int access,
+ String ignoredName,
+ String signature,
+ String superName,
+ String[] interfaces) {
+ super.visit(
+ version,
+ access,
+ DescriptorUtils.getBinaryNameFromDescriptor(descriptor),
+ signature,
+ superName,
+ interfaces);
+ }
+ });
+ }
+
+
public ClassFileTransformer setMinVersion(CfVm jdk) {
return setMinVersion(jdk.getClassfileVersion());
}