fit for ternary operation in object constructor parameter

This commit is contained in:
金戟 2021-02-27 00:59:22 +08:00
parent 2976ca0211
commit e50633b884

View File

@ -74,6 +74,9 @@ public class SourceClassHandler extends BaseClassHandler {
// it's a new operation and an inject method for it exist // it's a new operation and an inject method for it exist
int rangeStart = getConstructorStart(instructions, node.owner, i); int rangeStart = getConstructorStart(instructions, node.owner, i);
if (rangeStart >= 0) { if (rangeStart >= 0) {
if (rangeStart < i) {
handleFrameStackChange(mn, newOperatorInjectMethod, rangeStart, i);
}
instructions = replaceNewOps(mn, newOperatorInjectMethod, instructions, rangeStart, i); instructions = replaceNewOps(mn, newOperatorInjectMethod, instructions, rangeStart, i);
i = rangeStart; i = rangeStart;
} }
@ -284,8 +287,17 @@ public class SourceClassHandler extends BaseClassHandler {
AbstractInsnNode curInsn = mn.instructions.get(start); AbstractInsnNode curInsn = mn.instructions.get(start);
AbstractInsnNode endInsn = mn.instructions.get(end); AbstractInsnNode endInsn = mn.instructions.get(end);
do { do {
if (curInsn instanceof FrameNode && ((FrameNode)curInsn).type == F_FULL) { if (curInsn instanceof FrameNode) {
((FrameNode)curInsn).stack.add(0, mockMethod.getMockClass()); FrameNode fn = (FrameNode)curInsn;
if (fn.type == F_FULL) {
fn.stack.add(0, mockMethod.getMockClass());
// remove label reference in stack of frame node
for (int i = fn.stack.size() - 1; i >= 0; i--) {
if (fn.stack.get(i) instanceof LabelNode) {
fn.stack.remove(i);
}
}
}
} }
curInsn = curInsn.getNext(); curInsn = curInsn.getNext();
} while (!curInsn.equals(endInsn)); } while (!curInsn.equals(endInsn));