fix: don't inline anonymous in self inner class (#1645)
This commit is contained in:
@@ -222,6 +222,10 @@ public class ProcessAnonymous extends AbstractVisitor {
|
||||
// exclude self usage
|
||||
return null;
|
||||
}
|
||||
if (ctrUseCls.getTopParentClass().equals(cls)) {
|
||||
// exclude usage inside inner classes
|
||||
return null;
|
||||
}
|
||||
for (MethodNode mth : cls.getMethods()) {
|
||||
if (mth == ctr) {
|
||||
continue;
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package jadx.tests.integration.inner;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import jadx.api.JadxInternalAccess;
|
||||
import jadx.api.JavaClass;
|
||||
import jadx.core.dex.attributes.AType;
|
||||
import jadx.core.dex.nodes.ClassNode;
|
||||
import jadx.tests.api.IntegrationTest;
|
||||
|
||||
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
|
||||
|
||||
public class TestAnonymousClass20 extends IntegrationTest {
|
||||
|
||||
@SuppressWarnings({ "unused", "checkstyle:TypeName", "Convert2Lambda", "Anonymous2MethodRef" })
|
||||
public static class Test$Cls {
|
||||
public Runnable test() {
|
||||
return new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
new Test$Cls();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
ClassNode cls = getClassNode(Test$Cls.class);
|
||||
assertThat(cls.get(AType.ANONYMOUS_CLASS)).isNull();
|
||||
|
||||
JavaClass javaClass = JadxInternalAccess.convertClassNode(jadxDecompiler, cls);
|
||||
assertThat(javaClass.getTopParentClass()).isEqualTo(javaClass);
|
||||
|
||||
assertThat(cls)
|
||||
.code()
|
||||
.containsOne("new TestAnonymousClass20$Test$Cls();");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user