Ensure inliner has exact type information from class inliner

Bug: 142116551
Change-Id: Iaa4bd3a52b482f64baa52d6240dfd46d3172270e
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 61b64d5..1b51071 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -337,6 +337,11 @@
   }
 
   @Override
+  public DexEncodedMethod lookupSingleTarget(InvokeMethod invoke, DexType context) {
+    return invoke.lookupSingleTarget(appView, context);
+  }
+
+  @Override
   public InlineAction computeForInvokeWithReceiver(
       InvokeMethodWithReceiver invoke,
       DexEncodedMethod singleTarget,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
index 8849066..4f34bd3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.ir.optimize;
 
+import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
@@ -19,21 +20,35 @@
 import com.android.tools.r8.ir.optimize.Inliner.Reason;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.optimize.inliner.WhyAreYouNotInliningReporter;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import java.util.ListIterator;
 import java.util.Map;
 
 final class ForcedInliningOracle implements InliningOracle, InliningStrategy {
+
+  private final AppView<AppInfoWithLiveness> appView;
   private final DexEncodedMethod method;
   private final Map<InvokeMethod, Inliner.InliningInfo> invokesToInline;
 
-  ForcedInliningOracle(DexEncodedMethod method,
+  ForcedInliningOracle(
+      AppView<AppInfoWithLiveness> appView,
+      DexEncodedMethod method,
       Map<InvokeMethod, Inliner.InliningInfo> invokesToInline) {
+    this.appView = appView;
     this.method = method;
     this.invokesToInline = invokesToInline;
   }
 
   @Override
-  public void finish() {
+  public void finish() {}
+
+  @Override
+  public DexEncodedMethod lookupSingleTarget(InvokeMethod invoke, DexType context) {
+    Inliner.InliningInfo info = invokesToInline.get(invoke);
+    if (info != null) {
+      return info.target;
+    }
+    return invoke.lookupSingleTarget(appView, context);
   }
 
   @Override
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 3ed156a..27c3831 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
@@ -663,7 +663,7 @@
       IRCode code,
       Map<InvokeMethod, InliningInfo> invokesToInline) {
 
-    ForcedInliningOracle oracle = new ForcedInliningOracle(method, invokesToInline);
+    ForcedInliningOracle oracle = new ForcedInliningOracle(appView, method, invokesToInline);
     performInliningImpl(oracle, oracle, method, code, OptimizationFeedbackIgnore.getInstance());
   }
 
@@ -724,7 +724,8 @@
         Instruction current = iterator.next();
         if (current.isInvokeMethod()) {
           InvokeMethod invoke = current.asInvokeMethod();
-          DexEncodedMethod singleTarget = invoke.lookupSingleTarget(appView, context.method.holder);
+          // TODO(b/142116551): This should be equivalent to invoke.lookupSingleTarget()!
+          DexEncodedMethod singleTarget = oracle.lookupSingleTarget(invoke, context.method.holder);
           if (singleTarget == null) {
             WhyAreYouNotInliningReporter.handleInvokeWithUnknownTarget(invoke, appView, context);
             continue;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
index 3205552..f289b24 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
@@ -6,7 +6,9 @@
 
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.analysis.ClassInitializationAnalysis;
+import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.InvokeMethodWithReceiver;
 import com.android.tools.r8.ir.code.InvokeStatic;
 import com.android.tools.r8.ir.optimize.Inliner.InlineAction;
@@ -19,6 +21,9 @@
 
   void finish();
 
+  // TODO(b/142116551): This should be equivalent to invoke.lookupSingleTarget(appView, context)!
+  DexEncodedMethod lookupSingleTarget(InvokeMethod invoke, DexType context);
+
   InlineAction computeForInvokeWithReceiver(
       InvokeMethodWithReceiver invoke,
       DexEncodedMethod singleTarget,