[Partition] Return empty package name for primitive types
Bug: b/286001537
Change-Id: I740aba191f198ce0fc4c898f7be9aaa5d0a5e39b
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 2c6f535..19b4d38 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -456,8 +456,8 @@
* @return java package name i.e. "java.lang"
*/
public static String getPackageNameFromTypeName(String typeName) {
- return getPackageNameFromBinaryName(
- getClassBinaryNameFromDescriptor(javaTypeToDescriptor(typeName)));
+ int packageEndIndex = typeName.lastIndexOf(JAVA_PACKAGE_SEPARATOR);
+ return (packageEndIndex < 0) ? "" : typeName.substring(0, packageEndIndex);
}
/**
diff --git a/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionWithPrimitiveNameTest.java b/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionWithPrimitiveNameTest.java
index a7ee197..e848753 100644
--- a/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionWithPrimitiveNameTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionWithPrimitiveNameTest.java
@@ -4,16 +4,24 @@
package com.android.tools.r8.retrace.partition;
-import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.retrace.MappingPartitionMetadata;
+import com.android.tools.r8.retrace.PartitionMappingSupplier;
import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.RetraceOptions;
+import com.android.tools.r8.retrace.RetraceStackFrameAmbiguousResultWithContext;
+import com.android.tools.r8.retrace.RetraceStackTraceContext;
+import com.android.tools.r8.retrace.StringRetrace;
import com.android.tools.r8.retrace.internal.MappingPartitionKeyStrategy;
import com.android.tools.r8.retrace.internal.ProguardMapPartitionerOnClassNameToText.ProguardMapPartitionerBuilderImplInternal;
import com.android.tools.r8.utils.StringUtils;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -36,21 +44,34 @@
StringUtils.unixLines(
"# { id: 'com.android.tools.r8.mapping', version: '2.0' }",
"some.class1 -> int:",
- " void field -> a");
+ " void method() -> a");
@Test
- public void testPartitionAndRetrace() {
+ public void testPartitionAndRetrace() throws Exception {
ProguardMapProducer proguardMapProducer = ProguardMapProducer.fromString(mapping);
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
- // TODO(b/286001537): We need to handle minified names matching primitive types.
- assertThrows(
- AssertionError.class,
- () ->
- new ProguardMapPartitionerBuilderImplInternal(diagnosticsHandler)
- .setMappingPartitionKeyStrategy(MappingPartitionKeyStrategy.getDefaultStrategy())
- .setProguardMapProducer(proguardMapProducer)
- .setPartitionConsumer(partition -> {})
- .build()
- .run());
+ Map<String, byte[]> partitions = new HashMap<>();
+ MappingPartitionMetadata metadata =
+ new ProguardMapPartitionerBuilderImplInternal(diagnosticsHandler)
+ .setMappingPartitionKeyStrategy(MappingPartitionKeyStrategy.getDefaultStrategy())
+ .setProguardMapProducer(proguardMapProducer)
+ .setPartitionConsumer(
+ partition -> partitions.put(partition.getKey(), partition.getPayload()))
+ .build()
+ .run();
+
+ PartitionMappingSupplier mappingSupplier =
+ PartitionMappingSupplier.builder()
+ .setMetadata(metadata.getBytes())
+ .setMappingPartitionFromKeySupplier(partitions::get)
+ .build();
+
+ StringRetrace retracer =
+ StringRetrace.create(RetraceOptions.builder().setMappingSupplier(mappingSupplier).build());
+ RetraceStackFrameAmbiguousResultWithContext<String> result =
+ retracer.retraceFrame(" at int.a()", RetraceStackTraceContext.empty());
+ StringBuilder sb = new StringBuilder();
+ result.forEach(frames -> frames.forEach(sb::append));
+ assertEquals(" at some.class1.method(class1.java)", sb.toString());
}
}