Unify codepaths of backport desugaring
Test: tools/test.py --dex_vm all --no-internal -v *corelib* *Backport*
Change-Id: Ia1453818cd97f1236e5566a3246151a1591c252f
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 8541088..b178863 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
@@ -93,32 +93,26 @@
if (rewritableMethods.isEmpty()) {
return; // Nothing to do!
}
+
InstructionIterator iterator = code.instructionIterator();
while (iterator.hasNext()) {
Instruction instruction = iterator.next();
- if (instruction.isInvokeMethod() && !instruction.isInvokeStatic()) {
- InvokeMethod invoke = instruction.asInvokeMethod();
- MethodProvider provider = getMethodProviderOrNull(invoke.getInvokedMethod());
- if (provider != null) {
- assert !provider.requiresGenerationOfCode();
- iterator.replaceCurrentInstruction(
- new InvokeStatic(
- provider.provideMethod(factory), invoke.outValue(), invoke.inValues()));
- }
- continue;
- } else if (!instruction.isInvokeStatic()) {
+ if (!instruction.isInvokeMethod()) {
continue;
}
- InvokeStatic invoke = instruction.asInvokeStatic();
- DexMethod method = invoke.getInvokedMethod();
- MethodProvider provider = getMethodProviderOrNull(method);
+
+ InvokeMethod invoke = instruction.asInvokeMethod();
+ MethodProvider provider = getMethodProviderOrNull(invoke.getInvokedMethod());
if (provider == null) {
continue;
}
+
+ DexMethod newMethod = provider.provideMethod(factory);
iterator.replaceCurrentInstruction(
- new InvokeStatic(provider.provideMethod(factory), invoke.outValue(), invoke.inValues()));
+ new InvokeStatic(newMethod, invoke.outValue(), invoke.inValues()));
+
if (provider.requiresGenerationOfCode()) {
- methodProviders.putIfAbsent(provider.provideMethod(factory), provider);
+ methodProviders.putIfAbsent(newMethod, provider);
holders.add(code.method.method.holder);
}
}