in src/main/java/com/ql/util/express/instruction/NewInstructionFactory.java [14:40]
public boolean createInstruction(ExpressRunner expressRunner, InstructionSet result,
Stack<ForRelBreakContinue> forStack, ExpressNode node, boolean isRoot) throws Exception {
OperatorBase op = expressRunner.getOperatorFactory().newInstance("new");
ExpressNode[] children = node.getChildrenArray();
if (node.isTypeEqualsOrChild("NEW_ARRAY")) {
StringBuilder tempStr = new StringBuilder(children[0].getValue());
for (int i = 0; i < children.length - 1; i++) {
tempStr.append("[]");
}
children[0].setValue(tempStr.toString());
children[0].setOriginalValue(tempStr.toString());
children[0].setObjectValue(ExpressUtil.getJavaClass(tempStr.toString()));
} else if (node.isTypeEqualsOrChild("anonymousNewArray")) {
op = expressRunner.getOperatorFactory().newInstance("anonymousNewArray");
}
boolean returnVal = false;
// 需要重新获取数据
children = node.getChildrenArray();
for (ExpressNode child : children) {
boolean tmpHas = expressRunner.createInstructionSetPrivate(result, forStack, child, false);
returnVal = returnVal || tmpHas;
}
result.addInstruction(new InstructionOperator(op, children.length).setLine(node.getLine()));
return returnVal;
}