Java 查找if/Else块中的当前语句是否是THEN分支的最后一条语句
我使用解析以下代码的内容并确定语句的顺序:Java 查找if/Else块中的当前语句是否是THEN分支的最后一条语句,java,nodes,statements,javaparser,Java,Nodes,Statements,Javaparser,我使用解析以下代码的内容并确定语句的顺序: class X { void x() { int x = 1; if (x>4) { x=21; } else { if (x>1) { x=3; } else { x=212; } } if (x==4) { x=3; } }} 我用于分析上述
class X {
void x() {
int x = 1;
if (x>4) {
x=21;
} else {
if (x>1) {
x=3;
} else {
x=212;
}
}
if (x==4) {
x=3;
}
}}
我用于分析上述示例的代码:
private static void statements(BlockStmt block, State beforeState, State afterState) {
List<State> states = new ArrayList<>();
for (Statement statement : block.getStatements()) {
states.add(new State(statement));
}
beforeState.nextStates.add(states.get(0));
for (int i = 0; i < states.size(); i++) {
State currentState = states.get(i);
State nextState;
if (i == states.size() - 1) {
nextState = afterState;
} else {
nextState = states.get(i + 1);
}
currentState.statement.accept(new VoidVisitorWithDefaults<Void>() {
@Override
public void visit(ExpressionStmt n, Void arg) {
currentState.nextStates.add(nextState);
}
@Override
public void visit(IfStmt n, Void arg) {
statements(n.getThenStmt().asBlockStmt(), currentState, nextState);
n.getElseStmt().ifPresent(elseStmt ->
statements(elseStmt.asBlockStmt(), currentState, nextState));
}
}, null);
} }
它适用于if语句,但不适用于赋值。关于如何处理这个问题,有什么建议吗
ExpressionStmt exprStmt = (ExpressionStmt) currentState.statement;
Node exprStmtParent = exprStmt.getParent();
List<Node> exprStmtSibilings = exprStmtParent.getChildNodes();
Node lastNode = exprStmtSiblings.get(exprStmtSiblings.size() - 1);
boolean exprStmtIsLast = lastNode == ifStmt;