BackportedMethodRewriter performance
- Do not resolve each super invoke on D8
Bug: 147328434
Change-Id: I5f787b218d9f49fa7228a8b22230155c16e11f2a
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 8f33a5e..1da29d2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -128,12 +128,14 @@
// Due to emulated dispatch, we have to rewrite invoke-super differently or we end up in
// infinite loops. We do direct resolution. This is a very uncommon case.
- if (invoke.isInvokeSuper()) {
+ if (invoke.isInvokeSuper()
+ && rewritableMethods.matchesVirtualRewrite(invoke.getInvokedMethod())) {
DexEncodedMethod dexEncodedMethod =
appView
.appInfo()
.lookupSuperTarget(invoke.getInvokedMethod(), code.method.method.holder);
- if (!dexEncodedMethod.isFinal()) { // Final methods can be rewritten as a normal invoke.
+ // Final methods can be rewritten as a normal invoke.
+ if (dexEncodedMethod != null && !dexEncodedMethod.isFinal()) {
DexMethod retargetMethod =
appView
.options()