[Retrace] Single pipeline for retracing source file

Change-Id: I8928b02dcb1312c327d4158fb9500e736447e884
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java b/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
index d1d3542..1536645 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
@@ -13,5 +13,5 @@
 
   String getSourceFile();
 
-  String getOrInferSourceFile();
+  String getOrInferSourceFile(String original);
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceThrownExceptionResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceThrownExceptionResultImpl.java
index e3d5dc2..3488823 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceThrownExceptionResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceThrownExceptionResultImpl.java
@@ -88,7 +88,7 @@
           }
         }
       }
-      return new RetracedSourceFileImpl(getRetracedClass().getClassReference(), sourceFile);
+      return new RetracedSourceFileImpl(getRetracedClass(), sourceFile);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
index 0180960..b339440 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceUtils.java
@@ -68,8 +68,7 @@
 
   public static RetracedSourceFile getSourceFile(
       RetracedClassReference holder, RetracerImpl retracer) {
-    ClassReference holderReference = holder.getClassReference();
-    return new RetracedSourceFileImpl(holderReference, retracer.getSourceFile(holderReference));
+    return new RetracedSourceFileImpl(holder, retracer.getSourceFile(holder.getClassReference()));
   }
 
   public static String inferSourceFile(
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedSourceFileImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedSourceFileImpl.java
index c7f2fae..9d4fa1e 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedSourceFileImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedSourceFileImpl.java
@@ -4,15 +4,15 @@
 
 package com.android.tools.r8.retrace.internal;
 
-import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.retrace.RetracedClassReference;
 import com.android.tools.r8.retrace.RetracedSourceFile;
 
 public class RetracedSourceFileImpl implements RetracedSourceFile {
 
-  private final ClassReference classReference;
+  private final RetracedClassReference classReference;
   private final String filename;
 
-  RetracedSourceFileImpl(ClassReference classReference, String filename) {
+  RetracedSourceFileImpl(RetracedClassReference classReference, String filename) {
     assert classReference != null;
     this.classReference = classReference;
     this.filename = filename;
@@ -29,10 +29,13 @@
   }
 
   @Override
-  public String getOrInferSourceFile() {
-    String sourceFile = getSourceFile();
+  public String getOrInferSourceFile(String original) {
+    String sourceFile = filename;
     return sourceFile != null
         ? sourceFile
-        : RetraceUtils.inferSourceFile(classReference.getTypeName(), "", true);
+        : RetraceUtils.inferSourceFile(
+            classReference.getTypeName(),
+            original == null ? "" : original,
+            classReference.isKnown());
   }
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
index 86e9046..18623af 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/StackTraceElementProxyRetracerImpl.java
@@ -437,13 +437,12 @@
 
     @Override
     public String getSourceFile() {
-      if (sourceFile != null && sourceFile.hasRetraceResult()) {
-        return sourceFile.getSourceFile();
+      if (sourceFile == null) {
+        assert originalItem.getSourceFile() == null;
+        return null;
       }
-      String originalSourceFile =
-          originalItem.getSourceFile() == null ? "" : originalItem.getSourceFile();
-      return RetraceUtils.inferSourceFile(
-          retracedClass.getTypeName(), originalSourceFile, retracedClass.isKnown());
+      return sourceFile.getOrInferSourceFile(
+          originalItem.getSourceFile() == null ? "" : originalItem.getSourceFile());
     }
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java
index 889f0d9..26fac27 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java
@@ -133,7 +133,7 @@
             + "."
             + getMethodName()
             + "("
-            + retracedProxy.getRetracedSourceFile().getOrInferSourceFile()
+            + retracedProxy.getRetracedSourceFile().getOrInferSourceFile(getSourceFile())
             + ")";
       }
     }
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetracePartitionRoundTripInlineTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetracePartitionRoundTripInlineTest.java
index 5d78d68..66cc1ef 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetracePartitionRoundTripInlineTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetracePartitionRoundTripInlineTest.java
@@ -111,7 +111,7 @@
       // Check that visiting all frames report all source files.
       List<String> allSourceFiles =
           retraceFrameElement.stream()
-              .map(x -> x.getSourceFile().getOrInferSourceFile())
+              .map(x -> x.getSourceFile().getOrInferSourceFile(""))
               .collect(Collectors.toList());
       assertEquals(Arrays.asList("InlineeClass.kt", "CallerClass.kt"), allSourceFiles);
     }
diff --git a/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionMultipleOutlineClassTest.java b/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionMultipleOutlineClassTest.java
index 9175f41..24dfbf3 100644
--- a/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionMultipleOutlineClassTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/partition/RetracePartitionMultipleOutlineClassTest.java
@@ -142,7 +142,7 @@
     // Check that visiting all frames report all source files.
     List<String> allSourceFiles =
         retraceFrameElement.stream()
-            .map(x -> x.getSourceFile().getOrInferSourceFile())
+            .map(x -> x.getSourceFile().getOrInferSourceFile(""))
             .collect(Collectors.toList());
     assertEquals(Arrays.asList("InlineeClass.kt", "CallerClass.kt"), allSourceFiles);
   }