Also consider structural optimizations during Proguard map construction

Change-Id: Ifb666aaff2d8e74dfbb82ed293e7a0b38195756e
diff --git a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
index ffbe255..bddb2e2 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -168,7 +168,7 @@
     // Collect which files contain which classes that need to have their line numbers optimized.
     for (DexProgramClass clazz : application.classes()) {
       IdentityHashMap<DexString, List<DexEncodedMethod>> methodsByRenamedName =
-          groupMethodsByRenamedName(namingLens, clazz);
+          groupMethodsByRenamedName(appView.graphLense(), namingLens, clazz);
 
       // At this point we don't know if we really need to add this class to the builder.
       // It depends on whether any methods/fields are renamed or some methods contain positions.
@@ -366,14 +366,19 @@
   }
 
   private static IdentityHashMap<DexString, List<DexEncodedMethod>> groupMethodsByRenamedName(
-      NamingLens namingLens, DexProgramClass clazz) {
+      GraphLense graphLens, NamingLens namingLens, DexProgramClass clazz) {
     IdentityHashMap<DexString, List<DexEncodedMethod>> methodsByRenamedName =
         new IdentityHashMap<>(clazz.directMethods().size() + clazz.virtualMethods().size());
-    for (DexEncodedMethod method : clazz.methods()) {
-      // Add method only if renamed or contains positions.
-      DexString renamedName = namingLens.lookupName(method.method);
-      if (renamedName != method.method.name || doesContainPositions(method)) {
-        methodsByRenamedName.computeIfAbsent(renamedName, key -> new ArrayList<>()).add(method);
+    for (DexEncodedMethod encodedMethod : clazz.methods()) {
+      // Add method only if renamed, moved, or contains positions.
+      DexMethod method = encodedMethod.method;
+      DexString renamedName = namingLens.lookupName(method);
+      if (renamedName != method.name
+          || graphLens.getOriginalMethodSignature(method) != method
+          || doesContainPositions(encodedMethod)) {
+        methodsByRenamedName
+            .computeIfAbsent(renamedName, key -> new ArrayList<>())
+            .add(encodedMethod);
       }
     }
     return methodsByRenamedName;