fix: incorrect init values of inherited fields
This commit is contained in:
@@ -92,7 +92,7 @@ public class ExtractFieldInit extends AbstractVisitor {
|
||||
List<InsnNode> initInsns = getFieldAssigns(classInitMth, field, InsnType.SPUT);
|
||||
if (initInsns.size() == 1) {
|
||||
InsnNode insn = initInsns.get(0);
|
||||
if (checkInsn(insn)) {
|
||||
if (checkInsn(cls, insn)) {
|
||||
InsnArg arg = insn.getArg(0);
|
||||
if (arg instanceof InsnWrapArg) {
|
||||
((InsnWrapArg) arg).getWrapInsn().add(AFlag.DECLARE_VAR);
|
||||
@@ -137,7 +137,7 @@ public class ExtractFieldInit extends AbstractVisitor {
|
||||
// TODO: check not only first block
|
||||
BlockNode blockNode = constrMth.getBasicBlocks().get(0);
|
||||
for (InsnNode insn : blockNode.getInstructions()) {
|
||||
if (insn.getType() == InsnType.IPUT && checkInsn(insn)) {
|
||||
if (insn.getType() == InsnType.IPUT && checkInsn(cls, insn)) {
|
||||
info.getPutInsns().add(insn);
|
||||
} else if (!info.getPutInsns().isEmpty()) {
|
||||
break;
|
||||
@@ -199,7 +199,22 @@ public class ExtractFieldInit extends AbstractVisitor {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean checkInsn(InsnNode insn) {
|
||||
private static boolean checkInsn(ClassNode cls, InsnNode insn) {
|
||||
if (insn instanceof IndexInsnNode) {
|
||||
FieldInfo fieldInfo = (FieldInfo) ((IndexInsnNode) insn).getIndex();
|
||||
if (!fieldInfo.getDeclClass().equals(cls.getClassInfo())) {
|
||||
// exclude fields from super classes
|
||||
return false;
|
||||
}
|
||||
FieldNode fieldNode = cls.dex().resolveField(fieldInfo);
|
||||
if (fieldNode == null) {
|
||||
// exclude inherited fields (not declared in this class)
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
InsnArg arg = insn.getArg(0);
|
||||
if (arg.isInsnWrap()) {
|
||||
InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn();
|
||||
|
||||
Reference in New Issue
Block a user