Use original method signatures in getOutermostCaller() checks

Change-Id: Id6d026c1bf160ef05a0c87546bc9dd6ba7b9effb
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index ed002ea..e41120d 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -241,14 +241,11 @@
         new CfSourceCode(
             this,
             encodedMethod,
+            graphLense.getOriginalMethodSignature(encodedMethod.method),
             callerPosition,
             origin,
             options.lineNumberOptimization == LineNumberOptimization.ON);
-    IRBuilder builder =
-        (generator == null)
-            ? new IRBuilder(encodedMethod, appInfo, source, options)
-            : new IRBuilder(encodedMethod, appInfo, source, options, generator);
-    return builder.build();
+    return new IRBuilder(encodedMethod, appInfo, source, options, generator).build();
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 7c6e01e..4a0a483 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -171,7 +171,11 @@
       Origin origin) {
     DexSourceCode source =
         new DexSourceCode(
-            this, encodedMethod, null, options.lineNumberOptimization == LineNumberOptimization.ON);
+            this,
+            encodedMethod,
+            graphLense.getOriginalMethodSignature(encodedMethod.method),
+            null,
+            options.lineNumberOptimization == LineNumberOptimization.ON);
     IRBuilder builder = new IRBuilder(encodedMethod, appInfo, source, options);
     return builder.build();
   }
@@ -189,6 +193,7 @@
         new DexSourceCode(
             this,
             encodedMethod,
+            graphLense.getOriginalMethodSignature(encodedMethod.method),
             callerPosition,
             options.lineNumberOptimization == LineNumberOptimization.ON);
     IRBuilder builder =
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index ef0dbf7..28143ad 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -162,13 +162,14 @@
     if (!options.debug) {
       node.localVariables.clear();
     }
-    JarSourceCode source = new JarSourceCode(
-        method.getHolder(), node, application, encodedMethod.method, callerPosition);
-    IRBuilder builder =
-        (generator == null)
-            ? new IRBuilder(encodedMethod, appInfo, source, options)
-            : new IRBuilder(encodedMethod, appInfo, source, options, generator);
-    return builder.build();
+    JarSourceCode source =
+        new JarSourceCode(
+            method.getHolder(),
+            node,
+            application,
+            graphLense.getOriginalMethodSignature(encodedMethod.method),
+            callerPosition);
+    return new IRBuilder(encodedMethod, appInfo, source, options, generator).build();
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index bc2222f..7892afb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -20,6 +20,7 @@
 import com.android.tools.r8.graph.DebugLocalInfo;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.code.CanonicalPositions;
 import com.android.tools.r8.ir.code.CatchHandlers;
@@ -199,6 +200,7 @@
   public CfSourceCode(
       CfCode code,
       DexEncodedMethod method,
+      DexMethod originalMethod,
       Position callerPosition,
       Origin origin,
       boolean preserveCaller) {
@@ -217,7 +219,7 @@
     }
     this.state = new CfState(origin);
     canonicalPositions =
-        new CanonicalPositions(callerPosition, preserveCaller, cfPositionCount, this.method.method);
+        new CanonicalPositions(callerPosition, preserveCaller, cfPositionCount, originalMethod);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 10bf6a5..94516a2 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -75,26 +75,30 @@
 
   private List<DexDebugEntry> debugEntries = null;
   // In case of inlining the position of the invoke in the caller.
-  private final DexMethod method;
+  private final DexMethod originalMethod;
 
   public DexSourceCode(
-      DexCode code, DexEncodedMethod method, Position callerPosition, boolean preserveCaller) {
+      DexCode code,
+      DexEncodedMethod method,
+      DexMethod originalMethod,
+      Position callerPosition,
+      boolean preserveCaller) {
     this.code = code;
     this.proto = method.method.proto;
     this.accessFlags = method.accessFlags;
-    this.method = method.method;
+    this.originalMethod = originalMethod;
 
     argumentTypes = computeArgumentTypes();
     DexDebugInfo info = code.getDebugInfo();
     if (info != null) {
-      debugEntries = info.computeEntries(method.method);
+      debugEntries = info.computeEntries(originalMethod);
     }
     canonicalPositions =
         new CanonicalPositions(
             callerPosition,
             preserveCaller,
             debugEntries == null ? 0 : debugEntries.size(),
-            this.method);
+            originalMethod);
   }
 
   @Override
@@ -253,7 +257,7 @@
   private Position getCanonicalPositionAppendCaller(DexDebugEntry entry) {
     // If this instruction has already been inlined then this.method must be the outermost caller.
     assert entry.callerPosition == null
-        || entry.callerPosition.getOutermostCaller().method == method;
+        || entry.callerPosition.getOutermostCaller().method == originalMethod;
 
     return canonicalPositions.getCanonical(
         new Position(
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index f2875d5..98b4502 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -344,7 +344,8 @@
     this.method = method;
     this.appInfo = appInfo;
     this.source = source;
-    this.valueNumberGenerator = valueNumberGenerator;
+    this.valueNumberGenerator =
+        valueNumberGenerator != null ? valueNumberGenerator : new ValueNumberGenerator();
     this.options = options;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index 1170dab..85a0f99 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -187,20 +187,20 @@
   // Cooked position to indicate positions in synthesized code (ie, for synchronization).
   private Position syntheticPosition = null;
 
-  private final DexMethod method;
+  private final DexMethod originalMethod;
   private final Position callerPosition;
 
   public JarSourceCode(
       DexType clazz,
       MethodNode node,
       JarApplicationReader application,
-      DexMethod method,
+      DexMethod originalMethod,
       Position callerPosition) {
     assert node != null;
     assert node.desc != null;
     this.node = node;
     this.application = application;
-    this.method = method;
+    this.originalMethod = originalMethod;
     this.clazz = clazz;
     this.callerPosition = callerPosition;
     parameterTypes = Arrays.asList(application.getArgumentTypes(node.desc));
@@ -2862,12 +2862,12 @@
 
   private Position getCanonicalPosition(int line) {
     return canonicalPositions.computeIfAbsent(
-        line, l -> new Position(l, null, method, callerPosition));
+        line, l -> new Position(l, null, originalMethod, callerPosition));
   }
 
   private Position getPreamblePosition() {
     if (preamblePosition == null) {
-      preamblePosition = Position.synthetic(0, method, null);
+      preamblePosition = Position.synthetic(0, originalMethod, null);
     }
     return preamblePosition;
   }
@@ -2891,8 +2891,8 @@
       }
       syntheticPosition =
           (min == Integer.MAX_VALUE)
-              ? Position.noneWithMethod(method, callerPosition)
-              : Position.synthetic(min < max ? min - 1 : min, method, callerPosition);
+              ? Position.noneWithMethod(originalMethod, callerPosition)
+              : Position.synthetic(min < max ? min - 1 : min, originalMethod, callerPosition);
     }
     return syntheticPosition;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index ee8e38d..12baa2c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -587,7 +587,8 @@
               invokePosition = Position.noneWithMethod(method.method, null);
             }
             assert invokePosition.callerPosition == null
-                || invokePosition.getOutermostCaller().method == method.method;
+                || invokePosition.getOutermostCaller().method
+                    == graphLense.getOriginalMethodSignature(method.method);
 
             IRCode inlinee =
                 result.buildInliningIR(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 45b7903..5f8fd6b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -1171,8 +1171,7 @@
         InternalOptions options,
         Origin origin) {
       OutlineSourceCode source = new OutlineSourceCode(outline);
-      IRBuilder builder = new IRBuilder(encodedMethod, appInfo, source, options);
-      return builder.build();
+      return new IRBuilder(encodedMethod, appInfo, source, options).build();
     }
 
     @Override