未验证 提交 ce5d8eef 编写于 作者: S Skylot

fix: don't inline anonymous in self inner class (#1645)

上级 894e0e61
......@@ -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;
......
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();");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册