/** * Visits the specified statement. If the statement's visit method calls * replaceVisitedMethodWith(), the statement will be replaced. */ public Statement replace(Statement stat) { replacement = null; stat.visit(this); Statement result = replacement == null ? stat : replacement; replacement = null; return result; }
@Override public void visitStatement(Statement node) { if (node.getStatementLabel() != null) { addNode(statements, node.getStatementLabel(), node); if (node instanceof ExpressionStatement) addNode(expressions, node.getStatementLabel(), ((ExpressionStatement)node).getExpression()); } super.visitStatement(node); }
@Override public void visitClosureExpression(final ClosureExpression expression) { super.visitClosureExpression(expression); if (inBuilderMethod) { Statement oldCode = expression.getCode(); BlockStatement block = oldCode instanceof BlockStatement? ((BlockStatement)oldCode): new BlockStatement(Arrays.asList(oldCode), new VariableScope()); List<Statement> statements = block.getStatements(); if (!statements.isEmpty()) { Statement first = statements.get(0); Statement last = statements.get(statements.size()-1); if (expression.getLineNumber()<first.getLineNumber()) { // there's a new line between { -> ... and the first statement statements.add(0,createNewLine(expression)); } if (expression.getLastLineNumber()>last.getLastLineNumber()) { // there's a new line between { -> ... and the first statement statements.add(createNewLine(expression)); } } expression.setCode(block); } }
private Block addBlock(Method method, Statement stat) throws InvalidSpecCompileException { String label = stat.getStatementLabel(); for (BlockParseInfo blockInfo: BlockParseInfo.values()) { if (!label.equals(blockInfo.toString())) continue; checkIsValidSuccessor(method, blockInfo, stat.getLineNumber(), stat.getColumnNumber()); Block block = blockInfo.addNewBlock(method); String description = getDescription(stat); if (description == null) block.getAst().add(stat); else block.getDescriptions().add(description); return block; } throw new InvalidSpecCompileException(stat, "Unrecognized block label: " + label); }
protected Statement labelledStatement(AST labelNode) { AST node = labelNode.getFirstChild(); String label = identifier(node); Statement statement = statement(node.getNextSibling()); if (statement.getStatementLabel() == null) // if statement has multiple labels, retain the last one statement.setStatementLabel(label); return statement; }
&& ((code.getLineNumber() < 0 && code.getColumnNumber() < 0) || (code.getLastLineNumber() < 0 && code.getLastColumnNumber() < 0))) { BlockStatement block = (BlockStatement) code; List statements = block.getStatements(); if (statements != null && !statements.isEmpty()) { if (code.getLineNumber() < 0 && code.getColumnNumber() < 0) { Statement first = (Statement) statements.get(0); code.setLineNumber(first.getLineNumber()); code.setColumnNumber(first.getColumnNumber()); if (code.getLastLineNumber() < 0 && code.getLastColumnNumber() < 0) { code.setLastLineNumber(node.getLastLineNumber()); int lastColumn = node.getLastColumnNumber(); if (lastColumn > 0) { lastColumn--; code.setLastColumnNumber(lastColumn);
public ModuleNode buildAST(SourceUnit sourceUnit, ClassLoader classLoader, Reduction cst) throws ParserException { setClassLoader(classLoader); makeModule(); try { convertGroovy(ast); if (output.getStatementBlock().isEmpty() && output.getMethods().isEmpty() && output.getClasses().isEmpty()) { output.addStatement(ReturnStatement.RETURN_NULL_OR_VOID); } // set the script source position ClassNode scriptClassNode = output.getScriptClassDummy(); if (scriptClassNode != null) { List<Statement> statements = output.getStatementBlock().getStatements(); if (!statements.isEmpty()) { Statement firstStatement = statements.get(0); Statement lastStatement = statements.get(statements.size() - 1); scriptClassNode.setSourcePosition(firstStatement); scriptClassNode.setLastColumnNumber(lastStatement.getLastColumnNumber()); scriptClassNode.setLastLineNumber(lastStatement.getLastLineNumber()); } } } catch (ASTRuntimeException e) { throw new ASTParserException(e.getMessage() + ". File: " + sourceUnit.getName(), e); } return output; }
public String getText() { StringBuilder buffer = new StringBuilder("{ "); boolean first = true; for (Statement statement : statements) { if (first) { first = false; } else { buffer.append("; "); } buffer.append(statement.getText()); } buffer.append(" }"); return buffer.toString(); }
new SyntaxException(failMessage, statement.getLineNumber(), statement.getColumnNumber()), sourceUnit ); new SyntaxException(makePluginManagementError(failureMessage), statement.getLineNumber(), statement.getColumnNumber()), sourceUnit); ); sourceUnit.getErrorCollector().addError( new SyntaxException(message, statement.getLineNumber(), statement.getColumnNumber()), sourceUnit );
protected Statement labelledStatement(AST labelNode) { AST node = labelNode.getFirstChild(); String label = identifier(node); Statement statement = statement(node.getNextSibling()); statement.setStatementLabel(label); return statement; }
protected Statement labelledStatement(AST labelNode) { AST node = labelNode.getFirstChild(); String label = identifier(node); Statement statement = statement(node.getNextSibling()); if (statement.getStatementLabel() == null) // if statement has multiple labels, retain the last one statement.setStatementLabel(label); return statement; }
public ModuleNode buildAST(SourceUnit sourceUnit, ClassLoader classLoader, Reduction cst) throws ParserException { setClassLoader(classLoader); makeModule(); try { convertGroovy(ast); if (output.getStatementBlock().isEmpty() && output.getMethods().isEmpty() && output.getClasses().isEmpty()) { output.addStatement(ReturnStatement.RETURN_NULL_OR_VOID); } // set the script source position ClassNode scriptClassNode = output.getScriptClassDummy(); if (scriptClassNode != null) { List<Statement> statements = output.getStatementBlock().getStatements(); if (statements.size() > 0) { Statement firstStatement = statements.get(0); Statement lastStatement = statements.get(statements.size() - 1); scriptClassNode.setSourcePosition(firstStatement); scriptClassNode.setLastColumnNumber(lastStatement.getLastColumnNumber()); scriptClassNode.setLastLineNumber(lastStatement.getLastLineNumber()); } } } catch (ASTRuntimeException e) { throw new ASTParserException(e.getMessage() + ". File: " + sourceUnit.getName(), e); } return output; }
public String getText() { StringBuffer buffer = new StringBuffer("{ "); boolean first = true; for (Statement statement : statements) { if (first) { first = false; } else { buffer.append("; "); } buffer.append(statement.getText()); } buffer.append(" }"); return buffer.toString(); }
private static void checkReturnInObjectInitializer(List<Statement> init) { CodeVisitorSupport cvs = new CodeVisitorSupport() { @Override public void visitClosureExpression(ClosureExpression expression) { // return is OK in closures in object initializers } public void visitReturnStatement(ReturnStatement statement) { throw new RuntimeParserException("'return' is not allowed in object initializer", statement); } }; for (Statement stm : init) { stm.visit(cvs); } }
private boolean isFeatureMethod(MethodNode method) { for (Statement stat : AstUtil.getStatements(method)) { String label = stat.getStatementLabel(); if (label == null) continue; // assertion: is (meant to be) a feature method, so we'll return true in the end if (method.isStatic()) errorReporter.error(method, "Feature methods must not be static"); return true; } return false; }
protected Statement labelledStatement(AST labelNode) { AST node = labelNode.getFirstChild(); String label = identifier(node); Statement statement = statement(node.getNextSibling()); if (statement.getStatementLabel() == null) // if statement has multiple labels, retain the last one statement.setStatementLabel(label); return statement; }
@Override public void visitClosureExpression(final ClosureExpression expression) { super.visitClosureExpression(expression); if (inBuilderMethod) { Statement oldCode = expression.getCode(); BlockStatement block = oldCode instanceof BlockStatement? ((BlockStatement)oldCode): new BlockStatement(Collections.singletonList(oldCode), new VariableScope()); List<Statement> statements = block.getStatements(); if (!statements.isEmpty()) { Statement first = statements.get(0); Statement last = statements.get(statements.size()-1); if (expression.getLineNumber()<first.getLineNumber()) { // there's a new line between { -> ... and the first statement statements.add(0,createNewLine(expression)); } if (expression.getLastLineNumber()>last.getLastLineNumber()) { // there's a new line between { -> ... and the first statement statements.add(createNewLine(expression)); } } expression.setCode(block); } }
public String getText() { StringBuffer buffer = new StringBuffer("{ "); boolean first = true; for (Iterator iter = statements.iterator(); iter.hasNext(); ) { if (first) { first = false; } else { buffer.append("; "); } Statement statement = (Statement) iter.next(); buffer.append(statement.getText()); } buffer.append(" }"); return buffer.toString(); }
protected void visitClassCodeContainer(Statement code) { if (code != null) code.visit(this); }
protected void writeStatementLabel(Statement statement) { String name = statement.getStatementLabel(); if (name != null) { Label label = controller.getCompileStack().createLocalLabel(name); controller.getMethodVisitor().visitLabel(label); } }