mirror of
https://github.com/skylot/jadx.git
synced 2024-11-23 12:50:02 +00:00
core: fix resolving the instance field in the 2nd and more nested inner class
This commit is contained in:
parent
2478fc3a1b
commit
128fe8a839
@ -129,8 +129,16 @@ public class InsnGen {
|
||||
}
|
||||
|
||||
private void instanceField(CodeWriter code, FieldInfo field, InsnArg arg) throws CodegenException {
|
||||
FieldNode fieldNode = mth.getParentClass().searchField(field);
|
||||
if (fieldNode != null) {
|
||||
ClassNode pCls = mth.getParentClass();
|
||||
FieldNode fieldNode = pCls.searchField(field);
|
||||
|
||||
while ((fieldNode == null)
|
||||
&& (pCls.getParentClass() != pCls) && (pCls.getParentClass() != null))
|
||||
{
|
||||
pCls = pCls.getParentClass();
|
||||
fieldNode = pCls.searchField(field);
|
||||
}
|
||||
if (fieldNode != null) {
|
||||
FieldReplaceAttr replace = fieldNode.get(AType.FIELD_REPLACE);
|
||||
if (replace != null) {
|
||||
FieldInfo info = replace.getFieldInfo();
|
||||
|
86
jadx-samples/src/main/java/jadx/samples/TestInner3.java
Normal file
86
jadx-samples/src/main/java/jadx/samples/TestInner3.java
Normal file
@ -0,0 +1,86 @@
|
||||
package jadx.samples;
|
||||
|
||||
public class TestInner3 extends AbstractTest {
|
||||
|
||||
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() {
|
||||
TestInner3.this.i0 = "i0";
|
||||
I0.this.i0 = "i1";
|
||||
I0.this.i1 = "i2";
|
||||
|
||||
i0 = "i0";
|
||||
i1 = "i1";
|
||||
i2 = "i2";
|
||||
}
|
||||
|
||||
public String i() {
|
||||
|
||||
String result = TestInner3.this.i0 + I0.this.i0 + I0.this.i1 + i0 + i1 + i2;
|
||||
|
||||
A a = new A() {
|
||||
|
||||
public String a() {
|
||||
TestInner3.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 TestInner3.this.i0 + I0.this.i0 + I0.this.i1 + I1.this.i0 + I1.this.i1 + I1.this.i2 + a;
|
||||
}
|
||||
};
|
||||
|
||||
return result + a.a();
|
||||
}
|
||||
}
|
||||
|
||||
public I0() {
|
||||
TestInner3.this.i0 = "i-";
|
||||
i0 = "i0";
|
||||
i1 = "i1";
|
||||
}
|
||||
|
||||
public String i() {
|
||||
String result = TestInner3.this.i0 + i0 + i1;
|
||||
return result + (new I1()).i();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean testRun() throws Exception {
|
||||
assertTrue((new I0()).i().equals("i-i0i1i0i1i2i0i1i2i1i2i3i1i2i3a"));
|
||||
assertTrue(i0.equals("i1"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
new TestInner2().testRun();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user