Expression expr = expStmt.getExpression(); ReturnStatement ret = new ReturnStatement(expr); ret.setSourcePosition(expr); ret.setStatementLabel(statement.getStatementLabel()); listener.returnStatementAdded(ret); ret.setSourcePosition(block); listener.returnStatementAdded(ret); return ret;
/** * Gets a list of {@link org.codehaus.groovy.ast.stmt.ReturnStatement} instances from the given {@link MethodNode}. * * @param method the {@link org.codehaus.groovy.ast.MethodNode} that holds the given <tt>lastStatement</tt> * @return a {@link org.codehaus.groovy.ast.stmt.ReturnStatement} or <tt>null</tt> */ public static List<ReturnStatement> getReturnStatements(MethodNode method) { final ReturnStatementVisitor returnStatementVisitor = new ReturnStatementVisitor(); returnStatementVisitor.visitMethod(method); final List<ReturnStatement> returnStatements = returnStatementVisitor.getReturnStatements(); final BlockStatement blockStatement = (BlockStatement) method.getCode(); if (returnStatements.isEmpty()) { final int statementCount = blockStatement.getStatements().size(); if (statementCount > 0) { final Statement lastStatement = blockStatement.getStatements().get(statementCount - 1); if (lastStatement instanceof ExpressionStatement) { final ReturnStatement returnStatement = new ReturnStatement((ExpressionStatement) lastStatement); returnStatement.setSourcePosition(lastStatement); blockStatement.getStatements().remove(lastStatement); blockStatement.addStatement(returnStatement); returnStatements.add(returnStatement); } } } return returnStatements; }
Expression expr = expStmt.getExpression(); ReturnStatement ret = new ReturnStatement(expr); ret.setSourcePosition(expr); return ret; ret.setSourcePosition(block); return ret;
@Override public void visitBlockStatement(BlockStatement block) { blockStatement = block; blockStatementCopy = new BlockStatement(new ArrayList<Statement>(blockStatement.getStatements()), blockStatement.getVariableScope()); blockStatementCopy.copyNodeMetaData(blockStatement); blockStatementCopy.setSourcePosition(blockStatement); for (Statement statement : blockStatementCopy.getStatements()) { if (statement == returnStatement) { blockStatement.getStatements().remove(statement); final VariableExpression $_gc_result = new VariableExpression("$_gc_result", ClassHelper.DYNAMIC_TYPE); $_gc_result.setAccessedVariable($_gc_result); blockStatement.addStatement(new ExpressionStatement( new DeclarationExpression($_gc_result, Token.newSymbol(Types.ASSIGN, -1, -1), returnStatement.getExpression()) )); blockStatement.addStatement(assertionCallStatement); ReturnStatement gcResultReturn = new ReturnStatement($_gc_result); gcResultReturn.setSourcePosition(returnStatement); blockStatement.addStatement(gcResultReturn); return; // we found the return statement under target, let's cancel tree traversal } } super.visitBlockStatement(blockStatement); } }
Expression expr = expStmt.getExpression(); ReturnStatement ret = new ReturnStatement(expr); ret.setSourcePosition(expr); node.setCode(ret); ExpressionStatement expStmt = (ExpressionStatement) last; ReturnStatement ret = new ReturnStatement(expStmt); ret.setSourcePosition(expStmt); list.set(idx, ret); } else if (!(last instanceof ReturnStatement)) {
Expression expr = expStmt.getExpression(); ReturnStatement ret = new ReturnStatement(expr); ret.setSourcePosition(expr); ret.setStatementLabel(statement.getStatementLabel()); return ret; ret.setSourcePosition(block); return ret;
Expression expr = expStmt.getExpression(); ReturnStatement ret = new ReturnStatement(expr); ret.setSourcePosition(expr); ret.setStatementLabel(statement.getStatementLabel()); return ret; ret.setSourcePosition(block); return ret;
public void call(ArgumentListExpression arguments, Parameter[] newParams, MethodNode method) { MethodCallExpression expression = new MethodCallExpression(VariableExpression.THIS_EXPRESSION, method.getName(), arguments); expression.setImplicitThis(true); Statement code = null; if (method.isVoidMethod()) { code = new ExpressionStatement(expression); } else { ReturnStatement ret = new ReturnStatement(expression); ret.setSourcePosition(expression); code = ret; } MethodNode newMethod = new MethodNode(method.getName(), method.getModifiers(), method.getReturnType(), newParams, method.getExceptions(), code); MethodNode oldMethod = node.getDeclaredMethod(method.getName(), newParams); if (oldMethod!=null) { throw new RuntimeParserException( "The method with default parameters \""+ method.getTypeDescriptor()+ "\" defines a method \""+ newMethod.getTypeDescriptor()+ "\" that is already defined.", method); } node.addMethod(newMethod); } });