Example usage for org.eclipse.jdt.core.dom MethodDeclaration BODY_PROPERTY

List of usage examples for org.eclipse.jdt.core.dom MethodDeclaration BODY_PROPERTY

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom MethodDeclaration BODY_PROPERTY.

Prototype

ChildPropertyDescriptor BODY_PROPERTY

To view the source code for org.eclipse.jdt.core.dom MethodDeclaration BODY_PROPERTY.

Click Source Link

Document

The "body" structural property of this node type (child type: Block ).

Usage

From source file:org.eclipse.emf.codegen.merge.java.facade.ast.ASTJMethod.java

License:Open Source License

public void setBody(String body) {
    this.body = body;
    setTrackedNodeProperty(getASTNode(), body, MethodDeclaration.BODY_PROPERTY, ASTNode.BLOCK);
}

From source file:org.eclipse.wb.core.eval.ExecutionFlowUtils.java

License:Open Source License

/**
 * Visit {@link ASTNode}'s "unconditionally accessible" starting from given {@link Statement}.
 *///  ww  w. ja v a  2  s.  c  om
private static void visitStatement(VisitingContext context, ExecutionFlowDescription flowDescription,
        Statement statement, ExecutionFlowFrameVisitor visitor) {
    // check if we already visited MethodDeclaration
    if (statement.getLocationInParent() == MethodDeclaration.BODY_PROPERTY) {
        MethodDeclaration methodDeclaration = (MethodDeclaration) statement.getParent();
        if (context.visitedMethods.contains(methodDeclaration)) {
            return;
        }
        context.visitedMethods.add(methodDeclaration);
    }
    // visit "binary flow" methods that should be visited BEFORE current Statement
    visitBinaryFlowMethods(true, context, flowDescription, statement, visitor);
    // visit current Statement
    flowDescription.enterStatement(statement);
    try {
        visitStatement0(context, flowDescription, statement, visitor);
    } finally {
        flowDescription.leaveStatement(statement);
    }
    // visit "binary flow" methods that should be visited AFTER current Statement
    visitBinaryFlowMethods(false, context, flowDescription, statement, visitor);
}

From source file:org.eclipse.wb.internal.core.utils.ast.AstEditor.java

License:Open Source License

/**
 * Move statement to given {@link StatementTarget}.
 * //from  ww  w  .  j a  va2  s.co  m
 * @param target
 *          the new position for statement
 * @param statement
 *          the statement to move
 * @param includePrefixComment
 *          flag to mark that comment before statement also should be moved
 */
public void moveStatement(Statement statement, StatementTarget target) throws Exception {
    // statement or method declaration required
    Assert.isTrue(target.getBlock() != null || target.getStatement() != null);
    // check for no-op
    if (target.getStatement() != null) {
        Statement targetStatement = target.getStatement();
        // adding relative same statement
        if (targetStatement == statement) {
            return;
        }
        // adding before current next statement
        Block targetBlock = (Block) targetStatement.getParent();
        List<Statement> targetStatements = DomGenerics.statements(targetBlock);
        if (statement.getParent() == targetStatement.getParent()) {
            if (target.isBefore()) {
                // statement before target
                if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) - 1) {
                    return;
                }
            } else {
                // statement after target
                if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) + 1) {
                    return;
                }
            }
        }
    } else {
        Block targetBlock = target.getBlock();
        List<Statement> targetStatements = DomGenerics.statements(targetBlock);
        if (statement.getParent() == targetBlock) {
            if (target.isBefore()) {
                if (targetStatements.indexOf(statement) == 0) {
                    return;
                }
            } else {
                if (targetStatements.indexOf(statement) == targetStatements.size() - 1) {
                    return;
                }
            }
        }
    }
    // prepare code generation constants
    AstCodeGeneration generation = getGeneration();
    String singleIndent = generation.getIndentation(1);
    String eol = generation.getEndOfLine();
    // prepare source location
    Block sourceBlock = (Block) statement.getParent();
    int sourceBegin = skipWhitespaceAndPureEOLCToLeft(statement.getStartPosition());
    int sourceLength = getStatementEndIndex(statement) - sourceBegin;
    // remove leading EOL
    {
        int leftEOLEnd = sourceBegin;
        int leftEOLBegin = skipSingleEOLToLeft(leftEOLEnd);
        int leftEOLLength = leftEOLEnd - leftEOLBegin;
        //
        replaceSubstring(leftEOLBegin, leftEOLLength, "");
        sourceBegin -= leftEOLLength;
    }
    //
    if (target.getStatement() != null) {
        Statement targetStatement = target.getStatement();
        String indent = getWhitespaceToLeft(targetStatement.getStartPosition(), false);
        //
        int position;
        if (target.isBefore()) {
            // move before any empty lines and EOLC lines
            position = skipWhitespaceAndPureEOLCToLeft(targetStatement.getStartPosition());
            // move source
            position = moveSource(position, sourceBegin, sourceLength);
            // add EOL after statement
            replaceSubstring(position + sourceLength, 0, eol);
        } else {
            // move at the end of target
            position = getStatementEndIndex(targetStatement);
            // move source
            position = moveSource(position, sourceBegin, sourceLength);
            // add EOL before statement
            replaceSubstring(position, 0, eol);
            position += eol.length();
        }
        // move node
        {
            Block targetBlock = (Block) targetStatement.getParent();
            int index = targetBlock.statements().indexOf(targetStatement);
            if (!target.isBefore()) {
                index++;
            }
            if (sourceBlock == targetBlock && sourceBlock.statements().indexOf(statement) < index) {
                index--;
            }
            sourceBlock.statements().remove(statement);
            DomGenerics.statements(targetBlock).add(index, statement);
        }
        // re-indent
        reindentSource(position, sourceLength, indent, eol);
    } else {
        Block targetBlock = target.getBlock();
        // prepare indentation
        String indent;
        {
            ASTNode indentNode = targetBlock;
            if (targetBlock.getLocationInParent() == MethodDeclaration.BODY_PROPERTY
                    || targetBlock.getLocationInParent() == TryStatement.BODY_PROPERTY) {
                indentNode = targetBlock.getParent();
            }
            indent = getWhitespaceToLeft(indentNode.getStartPosition(), false);
            indent += singleIndent;
        }
        //
        int position;
        if (target.isBefore()) {
            // prepare position as position after '{' of block
            {
                position = targetBlock.getStartPosition();
                Assert.isTrue(position != -1);
                position++;
            }
            // move source
            position = moveSource(position, sourceBegin, sourceLength);
            // add EOL before statement
            replaceSubstring(position, 0, eol);
            position += eol.length();
            // move node
            sourceBlock.statements().remove(statement);
            DomGenerics.statements(targetBlock).add(0, statement);
        } else {
            // prepare position as position of '}' of block
            position = AstNodeUtils.getSourceEnd(targetBlock) - 1;
            String endMethodIndent = getWhitespaceToLeft(position, false);
            position -= endMethodIndent.length();
            // move source
            position = moveSource(position, sourceBegin, sourceLength);
            // add EOL after statement
            replaceSubstring(position + sourceLength, 0, eol);
            // move node
            sourceBlock.statements().remove(statement);
            DomGenerics.statements(targetBlock).add(statement);
        }
        // re-indent
        reindentSource(position, sourceLength, indent, eol);
    }
}

From source file:org.moe.natjgen.ConstructorEditor.java

License:Apache License

public void setBodyAsEmpty() {
    Block block = getAST().newBlock();
    getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, block, getEditGroup());
}

From source file:org.moe.natjgen.ConstructorEditor.java

License:Apache License

public void setBodyAsSuperInitWithClassAsArg() {
    Block block = getAST().newBlock();/*from w ww .  j  a  v a2s.c  o  m*/
    getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, block, getEditGroup());
    ListRewrite block_stmts = getRewrite().getListRewrite(block, Block.STATEMENTS_PROPERTY);
    SuperConstructorInvocation invoke = getAST().newSuperConstructorInvocation();
    block_stmts.insertLast(invoke, getEditGroup());
    ListRewrite invoke_args = getRewrite().getListRewrite(invoke,
            SuperConstructorInvocation.ARGUMENTS_PROPERTY);
    TypeLiteral literal = getAST().newTypeLiteral();
    invoke_args.insertLast(literal, getEditGroup());
    getRewrite().set(literal, TypeLiteral.TYPE_PROPERTY,
            getAST().newSimpleType(getAST().newName(getManager().getUnitName())), getEditGroup());
}

From source file:org.moe.natjgen.ConstructorEditor.java

License:Apache License

public void setBodyAsSuperInitWithPointerAsArg(String varname) {
    Block block = getAST().newBlock();//from w w  w  .  j  ava  2s .  c om
    getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, block, getEditGroup());
    ListRewrite block_stmts = getRewrite().getListRewrite(block, Block.STATEMENTS_PROPERTY);
    SuperConstructorInvocation invoke = getAST().newSuperConstructorInvocation();
    block_stmts.insertLast(invoke, getEditGroup());
    ListRewrite invoke_args = getRewrite().getListRewrite(invoke,
            SuperConstructorInvocation.ARGUMENTS_PROPERTY);
    invoke_args.insertLast(getAST().newSimpleName(varname), getEditGroup());
}

From source file:org.moe.natjgen.ConstructorEditor.java

License:Apache License

public void setBodyAsSuperInitWithFieldSetters(String[] setters, String[] getters) {
    if (setters == null || getters == null || setters.length != getters.length) {
        throw new IllegalArgumentException();
    }/*w w w . jav  a 2 s .  c  o  m*/

    Block block = getAST().newBlock();
    getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, block, getEditGroup());
    ListRewrite block_stmts = getRewrite().getListRewrite(block, Block.STATEMENTS_PROPERTY);
    SuperConstructorInvocation invoke = getAST().newSuperConstructorInvocation();
    block_stmts.insertLast(invoke, getEditGroup());
    ListRewrite invoke_args = getRewrite().getListRewrite(invoke,
            SuperConstructorInvocation.ARGUMENTS_PROPERTY);
    TypeLiteral literal = getAST().newTypeLiteral();
    invoke_args.insertLast(literal, getEditGroup());
    getRewrite().set(literal, TypeLiteral.TYPE_PROPERTY,
            getAST().newSimpleType(getAST().newName(getManager().getUnitName())), getEditGroup());

    for (int i = 0; i < setters.length; i++) {
        MethodInvocation setfieldinvoke = getAST().newMethodInvocation();
        Statement stmt = getAST().newExpressionStatement(setfieldinvoke);
        block_stmts.insertLast(stmt, getEditGroup());
        getRewrite().set(setfieldinvoke, MethodInvocation.NAME_PROPERTY, getAST().newSimpleName(setters[i]),
                getEditGroup());
        ListRewrite arglrw = getRewrite().getListRewrite(setfieldinvoke, MethodInvocation.ARGUMENTS_PROPERTY);
        arglrw.insertLast(getAST().newSimpleName(getters[i]), getEditGroup());
    }
}

From source file:org.moe.natjgen.MethodEditor.java

License:Apache License

@SuppressWarnings("unchecked")
public void setBodyAsMethodCaller(String jmethod, Type rettype, ArrayList<CalleeArgument> arguments) {
    Block code = (Block) getRewrite().get(methodDecl, MethodDeclaration.BODY_PROPERTY);
    if (code == null) {
        code = getAST().newBlock();/*from   w  w w.j a v  a  2  s . c o m*/
        getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, code, getEditGroup());
    }
    ListRewrite statements = getRewrite().getListRewrite(code, Block.STATEMENTS_PROPERTY);
    for (ASTNode object : (List<ASTNode>) statements.getRewrittenList()) {
        statements.remove(object, getEditGroup());
    }

    MethodInvocation invoke = getAST().newMethodInvocation();
    getRewrite().set(invoke, MethodInvocation.NAME_PROPERTY, getAST().newSimpleName(jmethod), getEditGroup());

    if (rettype.isVoid()) {
        ExpressionStatement expr_stmt = getAST().newExpressionStatement(invoke);
        statements.insertLast(expr_stmt, getEditGroup());
    } else {
        ReturnStatement return_stmt = getAST().newReturnStatement();
        statements.insertLast(return_stmt, getEditGroup());
        getRewrite().set(return_stmt, ReturnStatement.EXPRESSION_PROPERTY, invoke, getEditGroup());
    }

    if (arguments.size() > 0) {
        ListRewrite args = getRewrite().getListRewrite(invoke, MethodInvocation.ARGUMENTS_PROPERTY);
        for (CalleeArgument arg : arguments) {
            args.insertLast(getAST().newSimpleName(arg.getName()), getEditGroup());
        }
    }
}

From source file:org.moe.natjgen.MethodEditor.java

License:Apache License

@SuppressWarnings("unchecked")
public void setBodyAsProtocolDefaultMethod(Type rettype) {
    Block code = (Block) getRewrite().get(methodDecl, MethodDeclaration.BODY_PROPERTY);
    if (code == null) {
        code = getAST().newBlock();//from  w w  w .  j  a va 2s.c o m
        getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, code, getEditGroup());
    }
    ListRewrite statements = getRewrite().getListRewrite(code, Block.STATEMENTS_PROPERTY);
    for (ASTNode object : (List<ASTNode>) statements.getRewrittenList()) {
        statements.remove(object, getEditGroup());
    }

    Name uoe = getAST().newName("java.lang.UnsupportedOperationException");
    SimpleType uoet = getAST().newSimpleType(uoe);
    ClassInstanceCreation cic = getAST().newClassInstanceCreation();
    getRewrite().set(cic, ClassInstanceCreation.TYPE_PROPERTY, uoet, getEditGroup());
    ThrowStatement th = getAST().newThrowStatement();
    getRewrite().set(th, ThrowStatement.EXPRESSION_PROPERTY, cic, getEditGroup());
    statements.insertLast(th, getEditGroup());
}

From source file:org.moe.natjgen.MethodEditor.java

License:Apache License

public void setEmptyBodyForMethod(Type rettype) {
    Block code = getAST().newBlock();
    getRewrite().set(methodDecl, MethodDeclaration.BODY_PROPERTY, code, getEditGroup());

}