Fix incorrect handling of some CPX2 constant pool entries by JDIS, contributed by: mdegtyarev@gmail.com, reviewed by: leonid.kuskov@oracle.com

This commit is contained in:
lkuskov 2018-03-22 11:43:37 -07:00
parent 0c8feaab90
commit a489eeada4

@ -598,6 +598,10 @@ public class ConstantPool {
break; break;
} }
} }
public boolean refersClassMember() {
return tag == TAG.CONSTANT_FIELD || tag == TAG.CONSTANT_METHOD || tag == TAG.CONSTANT_INTERFACEMETHOD;
}
} }
/* -------------------------------------------------------- */ /* -------------------------------------------------------- */
@ -998,17 +1002,10 @@ public class ConstantPool {
if (cns == null) { if (cns == null) {
return "#" + cpx; return "#" + cpx;
} }
switch (cns.tag) { if (cns instanceof CPX2) {
case CONSTANT_METHODHANDLE: CPX2 cns2 = (CPX2) cns;
case CONSTANT_DYNAMIC: if (cns2.value1 == cd.this_cpx && cns2.refersClassMember()) {
case CONSTANT_INVOKEDYNAMIC: cpx = cns2.value2;
case CONSTANT_METHOD:
case CONSTANT_INTERFACEMETHOD:
case CONSTANT_FIELD: {
CPX2 cns2 = (CPX2) cns;
if (cns2.value1 == cd.this_cpx) {
cpx = cns2.value2;
}
} }
} }
return cns.tag.tagname + " " + StringValue(cpx); return cns.tag.tagname + " " + StringValue(cpx);