fix: respect arg offset for type var mapping on invoke (PR #2698)

fix: respect arg offset for type var apping on invoke
This commit is contained in:
nitram84
2025-11-11 23:01:27 +01:00
committed by GitHub
parent ef99412de1
commit 7ea478e18a
2 changed files with 38 additions and 2 deletions
@@ -242,9 +242,9 @@ public class TypeUtils {
}
Map<ArgType, ArgType> map = new HashMap<>(1 + invokeInsn.getArgsCount());
addTypeVarMapping(map, mthDetails.getReturnType(), invokeInsn.getResult());
int argCount = Math.min(mthDetails.getArgTypes().size(), invokeInsn.getArgsCount());
int argCount = Math.min(mthDetails.getArgTypes().size(), invokeInsn.getArgsCount() - invokeInsn.getFirstArgOffset());
for (int i = 0; i < argCount; i++) {
addTypeVarMapping(map, mthDetails.getArgTypes().get(i), invokeInsn.getArg(i));
addTypeVarMapping(map, mthDetails.getArgTypes().get(i), invokeInsn.getArg(i + invokeInsn.getFirstArgOffset()));
}
return map;
}
@@ -0,0 +1,36 @@
package jadx.tests.integration.invoke;
import org.junit.jupiter.api.Test;
import jadx.tests.api.IntegrationTest;
import jadx.tests.api.utils.assertj.JadxAssertions;
public class TestOverloadedMethodInvoke2 extends IntegrationTest {
public static class AbstractItem {
public void doSomething(Container c, Item i) {
c.add(i);
}
public static class Container {
public <T extends AbstractItem> int add(T t) {
return 0;
}
public void add(AbstractItem... item) {
}
}
public static class Item extends AbstractItem {
}
}
@Test
public void test() {
JadxAssertions.assertThat(getClassNode(TestOverloadedMethodInvoke2.AbstractItem.class))
.code().containsOne("c.add(i);")
.doesNotContain("(Container)");
}
}