/** * @param node The node we want to have wrapped. * @return The (new) node parent (the block probably) */ private AstNode makeSureBlockExistsAround(AstNode node) { AstNode parent = node.getParent(); if (parent instanceof IfStatement) { /* the parent is an if and there are no braces, so we should make a new block */ IfStatement i = (IfStatement) parent; /* replace the if or the then, depending on what the current node is */ if (i.getThenPart().equals(node)) { i.setThenPart(createBlockWithNode(node)); } else if (i.getElsePart() != null) { if (i.getElsePart().equals(node)) i.setElsePart(createBlockWithNode(node)); } } else if (parent instanceof WhileLoop) { /* the parent is a while and there are no braces, so we should make a new block */ /* I don't think you can find this in the real world, but just to be sure */ WhileLoop w = (WhileLoop) parent; if (w.getBody().equals(node)) w.setBody(createBlockWithNode(node)); } else if (parent instanceof ForLoop) { /* the parent is a for and there are no braces, so we should make a new block */ /* I don't think you can find this in the real world, but just to be sure */ ForLoop f = (ForLoop) parent; if (f.getBody().equals(node)) f.setBody(createBlockWithNode(node)); } return node.getParent(); }
public void testLinenoIf() { AstRoot root = parse( "\nif\n" + " (a == 3)\n" + " {\n" + " b = 0;\n" + " }\n" + " else\n" + " {\n" + " c = 1;\n" + " }\n"); IfStatement ifStmt = (IfStatement) root.getFirstChild(); AstNode condClause = ifStmt.getCondition(); AstNode thenClause = ifStmt.getThenPart(); AstNode elseClause = ifStmt.getElsePart(); assertEquals(1, ifStmt.getLineno()); assertEquals(2, condClause.getLineno()); assertEquals(3, thenClause.getLineno()); assertEquals(7, elseClause.getLineno()); }