package jadx.tests.integration.inner; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; import org.junit.Test; import static jadx.tests.api.utils.JadxMatchers.containsOne; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; public class TestInnerClass5 extends IntegrationTest { public static class TestCls { private String i0; public class A { protected String a; public A() { a = ""; } public String a() { return ""; } } public class I0 { private String i0; private String i1; public class I1 { private String i0; private String i1; private String i2; public I1() { TestCls.this.i0 = "i0"; I0.this.i0 = "i1"; I0.this.i1 = "i2"; i0 = "i0"; i1 = "i1"; i2 = "i2"; } public String i() { String result = TestCls.this.i0 + I0.this.i0 + I0.this.i1 + i0 + i1 + i2; A a = new A() { public String a() { TestCls.this.i0 = "i1"; I0.this.i0 = "i2"; I0.this.i1 = "i3"; I1.this.i0 = "i1"; I1.this.i1 = "i2"; I1.this.i2 = "i3"; a = "a"; return TestCls.this.i0 + I0.this.i0 + I0.this.i1 + I1.this.i0 + I1.this.i1 + I1.this.i2 + a; } }; return result + a.a(); } } public I0() { TestCls.this.i0 = "i-"; i0 = "i0"; i1 = "i1"; } public String i() { String result = TestCls.this.i0 + i0 + i1; return result + new I1().i(); } } public void check() throws Exception { assertTrue(new I0().i().equals("i-i0i1i0i1i2i0i1i2i1i2i3i1i2i3a")); assertTrue(i0.equals("i1")); } } @Test public void test() { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); assertThat(code, containsOne("public class I0 {")); assertThat(code, containsOne("public class I1 {")); } }