Skip to content

Commit

Permalink
fix: force type var short form as a key in generic resolve mapping (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
skylot committed Dec 22, 2024
1 parent 7a2dad8 commit de62954
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,10 @@ public Map<ArgType, ArgType> getTypeVariablesMapping(ArgType clsType) {
for (int i = 0; i < genericParamsCount; i++) {
ArgType actualType = actualTypes.get(i);
ArgType typeVar = typeParameters.get(i);
if (typeVar.getExtendTypes() != null) {
// force short form (only type var name)
typeVar = ArgType.genericType(typeVar.getObject());
}
replaceMap.put(typeVar, actualType);
}
return replaceMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package jadx.tests.integration.types;

import org.junit.jupiter.api.Test;

import jadx.tests.api.IntegrationTest;

import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;

public class TestGenerics8 extends IntegrationTest {

public static class TestCls<T> {

public abstract static class Class2<S extends I1 & I2> extends Parent2<S> {
public void test() {
S s = get();
s.i1();
s.i2();
}
}

static class Parent2<T extends I1> {
T t;

protected T get() {
return t;
}
}

interface I1 {
void i1();
}

interface I2 {
void i2();
}
}

@Test
public void test() {
noDebugInfo();
assertThat(getClassNode(TestCls.class))
.code()
.containsOne("S s = get();")
.containsOne("s.i1();")
.containsOne("s.i2();");
}
}

0 comments on commit de62954

Please sign in to comment.