Add a test for imprecise retracing of fields
Bug: 169829306
Bug: 169953605
Change-Id: If89f16969e2646ccb32d08b6ffd6e33258e681ae
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
new file mode 100644
index 0000000..3a6ffe6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
@@ -0,0 +1,25 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.retrace;
+
+import com.android.tools.r8.TestDiagnosticMessagesImpl;
+import com.android.tools.r8.retrace.mappings.FieldsWithSameMinifiedNameMapping;
+import com.android.tools.r8.retrace.mappings.MappingForTest;
+import java.util.function.Consumer;
+import org.junit.Test;
+
+public class RetraceFieldTests {
+
+ @Test
+ public void testFieldsWithSameMinifiedName() throws Exception {
+ FieldsWithSameMinifiedNameMapping mapping = new FieldsWithSameMinifiedNameMapping();
+ runRetraceTest(mapping, mapping::inspect);
+ }
+
+ private void runRetraceTest(MappingForTest mappingForTest, Consumer<RetraceApi> inspection)
+ throws Exception {
+ inspection.accept(Retracer.create(mappingForTest::mapping, new TestDiagnosticMessagesImpl()));
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/retrace/mappings/FieldsWithSameMinifiedNameMapping.java b/src/test/java/com/android/tools/r8/retrace/mappings/FieldsWithSameMinifiedNameMapping.java
new file mode 100644
index 0000000..488a00a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/mappings/FieldsWithSameMinifiedNameMapping.java
@@ -0,0 +1,56 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.retrace.mappings;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import com.android.tools.r8.references.FieldReference;
+import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.retrace.RetraceApi;
+import com.android.tools.r8.retrace.RetraceFieldResult;
+import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class FieldsWithSameMinifiedNameMapping implements MappingForTest {
+
+ @Override
+ public String mapping() {
+ // TODO(b/169953605): Add enough information to the map to allow precise retracing.
+ return StringUtils.lines(
+ "foo.bar.Baz -> foo.bar.Baz:", " java.lang.Object f1 -> a", " java.lang.String f2 -> a");
+ }
+
+ public void inspect(RetraceApi retracer) {
+ FieldReference f1FieldReference =
+ Reference.field(
+ Reference.classFromTypeName("foo.bar.Baz"),
+ "f1",
+ Reference.classFromTypeName("java.lang.Object"));
+ FieldReference f2FieldReference =
+ Reference.field(
+ Reference.classFromTypeName("foo.bar.Baz"),
+ "f2",
+ Reference.classFromTypeName("java.lang.String"));
+
+ FieldReference mappedF1FieldReference =
+ Reference.field(
+ Reference.classFromTypeName("foo.bar.Baz"),
+ "a",
+ Reference.classFromTypeName("java.lang.Object"));
+
+ RetraceFieldResult result = retracer.retrace(mappedF1FieldReference);
+ // TODO(b/169829306): Result should not be ambigious.
+ assertTrue(result.isAmbiguous());
+
+ List<FieldReference> retracedFields =
+ result.stream()
+ .map(f -> f.getField().asKnown().getFieldReference())
+ .collect(Collectors.toList());
+ assertEquals(ImmutableList.of(f1FieldReference, f2FieldReference), retracedFields);
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/retrace/mappings/MappingForTest.java b/src/test/java/com/android/tools/r8/retrace/mappings/MappingForTest.java
new file mode 100644
index 0000000..8008ee4
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/mappings/MappingForTest.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.retrace.mappings;
+
+public interface MappingForTest {
+
+ String mapping();
+}