Account for inlined positions in outlines

Change-Id: I60d9ca1ef762b077a66767218da59e74ccba0bd7
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 b16cfc4..e0ecef3 100644
--- a/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/LineNumberOptimizer.java
@@ -477,10 +477,10 @@
                       m, key -> MethodSignature.fromDexMethod(m, m.holder != clazz.getType()));
 
           // Check if mapped position is an outline
-          if (mappedPositions.get(0).isOutline) {
+          DexMethod outlineMethod = getOutlineMethod(mappedPositions.get(0));
+          if (outlineMethod != null) {
             outlinesToFix
-                .computeIfAbsent(
-                    mappedPositions.get(0).method, ignored -> new OutlineFixupBuilder())
+                .computeIfAbsent(outlineMethod, ignored -> new OutlineFixupBuilder())
                 .setMappedPositionsOutline(mappedPositions);
             methodMappingInfo.add(OutlineMappingInformation.builder().build());
           }
@@ -597,6 +597,17 @@
     return classNameMapperBuilder.build();
   }
 
+  private static DexMethod getOutlineMethod(MappedPosition mappedPosition) {
+    if (mappedPosition.isOutline) {
+      return mappedPosition.method;
+    }
+    if (mappedPosition.caller == null) {
+      return null;
+    }
+    Position outermostCaller = mappedPosition.caller.getOutermostCaller();
+    return outermostCaller.isOutline() ? outermostCaller.getMethod() : null;
+  }
+
   private static MappedRange getMappedRangesForPosition(
       DexItemFactory factory,
       Function<DexMethod, MethodSignature> getOriginalMethodSignature,