Example usage for org.eclipse.jdt.core.dom LabeledStatement setBody

List of usage examples for org.eclipse.jdt.core.dom LabeledStatement setBody

Introduction

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

Prototype

public void setBody(Statement statement) 

Source Link

Document

Sets the body of this labeled statement.

Usage

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

@SuppressWarnings("unchecked")
@Override/*from w w  w. j  a v a2 s.c  om*/
public boolean visit(LabeledStatement node) {
    Statement s = node.getBody();
    Statement statementBody = null;
    if (s instanceof DoStatement) {
        statementBody = ((DoStatement) s).getBody();
    } else if (s instanceof EnhancedForStatement) {
        statementBody = ((EnhancedForStatement) s).getBody();
    } else if (s instanceof ForStatement) {
        statementBody = ((ForStatement) s).getBody();
    } else if (s instanceof WhileStatement) {
        statementBody = ((WhileStatement) s).getBody();
    }
    if (statementBody != null) {
        AST ast = node.getAST();

        final boolean[] hasContinue = new boolean[1];
        final boolean[] hasBreak = new boolean[1];
        node.accept(new ASTVisitor() {
            @Override
            public void endVisit(ContinueStatement node) {
                if (node.getLabel() != null) {
                    hasContinue[0] = true;
                }
            }

            @Override
            public void endVisit(BreakStatement node) {
                if (node.getLabel() != null) {
                    hasBreak[0] = true;
                }
            }
        });

        List<Statement> stmts = null;
        if (hasContinue[0]) {
            if (statementBody instanceof Block) {
                // Add empty labeled statement as last block statement.
                stmts = ((Block) statementBody).statements();
                LabeledStatement newLabel = ast.newLabeledStatement();
                newLabel.setLabel(NodeCopier.copySubtree(ast, node.getLabel()));
                newLabel.setBody(ast.newEmptyStatement());
                stmts.add(newLabel);
            }
        }
        if (hasBreak[0]) {
            ASTNode parent = node.getParent();
            if (parent instanceof Block) {
                stmts = ((Block) parent).statements();
            } else {
                // Surround parent with block.
                Block block = ast.newBlock();
                stmts = block.statements();
                stmts.add((Statement) parent);

                // Replace parent in its statement list with new block.
                List<Statement> superStmts = ((Block) parent.getParent()).statements();
                for (int i = 0; i < superStmts.size(); i++) {
                    if (superStmts.get(i) == parent) {
                        superStmts.set(i, block);
                        break;
                    }
                }
                stmts = block.statements();
            }
            // Find node in statement list, and add empty labeled statement after it.
            for (int i = 0; i < stmts.size(); i++) {
                if (stmts.get(i) == node) {
                    LabeledStatement newLabel = ast.newLabeledStatement();
                    newLabel.setLabel(NodeCopier.copySubtree(ast, node.getLabel()));
                    newLabel.setBody(ast.newEmptyStatement());
                    stmts.add(i + 1, newLabel);
                    break;
                }
            }
        }

        if (hasContinue[0] || hasBreak[0]) {
            // Replace this node with its statement, thus deleting the label.
            ASTNode parent = node.getParent();
            if (parent instanceof Block) {
                stmts = ((Block) parent).statements();
                for (int i = 0; i < stmts.size(); i++) {
                    if (stmts.get(i) == node) {
                        stmts.set(i, NodeCopier.copySubtree(ast, node.getBody()));
                        break;
                    }
                }
            }
        }
    }
    return true;
}

From source file:com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.java

License:Open Source License

/**
 * Make a fake labeled node with no body, as an anchor to go to
 *///w w  w .j  a v a  2s  .  c  o m
private ASTNode makeBreakOrContinueTarget(ASTNode loop, String name) {
    LabeledStatement labeled = ast.newLabeledStatement();
    labeled.setBody(ast.newEmptyStatement());
    labeled.setSourceRange(loop.getStartPosition(), loop.getLength());
    labeled.setLabel(ast.newSimpleName(name)); // we don't have to worry about namespace conflicts as it is only
    // definedwithin
    return labeled;
}

From source file:java5totext.input.JDTVisitor.java

License:Open Source License

@Override
public void endVisit(org.eclipse.jdt.core.dom.LabeledStatement node) {
    LabeledStatement element = (LabeledStatement) this.binding.get(node);
    this.initializeNode(element, node);
    element.setName(node.getLabel().getIdentifier());
    if (this.binding.get(node.getBody()) != null)
        element.setBody((Statement) this.binding.get(node.getBody()));
    JDTVisitorUtils.manageBindingDeclaration(element, node.getLabel(), this);
}

From source file:org.decojer.cavaj.transformers.TrControlFlowStmts.java

License:Open Source License

@Nullable
private BB transformStruct(@Nonnull final Struct struct, @Nonnull final List<Statement> statements) {
    if (!this.traversedStructs.add(struct)) {
        assert false : "Cannot transform struct twice:\n" + struct;
        log.warn(getM() + ": Cannot transform struct twice:\n" + struct);
        return null;
    }//from   w  w  w .j a va 2 s.  c o m
    // decompile sub structure into a statement
    Statement structStatement;
    if (struct instanceof Block) {
        structStatement = transformBlock((Block) struct);
    } else if (struct instanceof Catch) {
        structStatement = transformCatch((Catch) struct);
    } else if (struct instanceof Loop) {
        structStatement = transformLoop((Loop) struct);
    } else {
        // possible statements before following structs in BB
        final int size = struct.getHead().getStmts() - 1;
        for (int i = 0; i < size; ++i) {
            statements.add(struct.getHead().getStmt(i));
        }
        if (struct instanceof Cond) {
            // condition or assert
            structStatement = transformCond((Cond) struct);
        } else if (struct instanceof Switch) {
            structStatement = transformSwitch((Switch) struct);
        } else if (struct instanceof Sync) {
            structStatement = transformSync((Sync) struct);
        } else {
            log.warn(getM() + ": Unknown struct:\n" + struct);
            structStatement = null;
        }
    }
    if (structStatement == null) {
        log.warn(getM() + ": Couldn't decompile struct:\n" + struct);
    } else {
        final String label = struct.getLabel();
        if (label != null) {
            assert !(structStatement instanceof LabeledStatement);
            final LabeledStatement labeledStatement = getAst().newLabeledStatement();
            labeledStatement.setLabel(newSimpleName(label, getAst()));
            labeledStatement.setBody(structStatement);
            structStatement = labeledStatement;
        }
        statements.add(structStatement);
    }
    return struct.getFollow();
}

From source file:org.eclipse.jdt.core.dom.ASTConverter.java

License:Open Source License

public LabeledStatement convert(org.eclipse.jdt.internal.compiler.ast.LabeledStatement statement) {
    LabeledStatement labeledStatement = new LabeledStatement(this.ast);
    final int sourceStart = statement.sourceStart;
    labeledStatement.setSourceRange(sourceStart, statement.sourceEnd - sourceStart + 1);
    Statement body = convert(statement.statement);
    if (body == null)
        return null;
    labeledStatement.setBody(body);
    final SimpleName name = new SimpleName(this.ast);
    name.internalSetIdentifier(new String(statement.label));
    name.setSourceRange(sourceStart, statement.labelEnd - sourceStart + 1);
    labeledStatement.setLabel(name);/*  ww w  .  j ava 2s.  c  o  m*/
    return labeledStatement;
}

From source file:org.eclipse.modisco.java.discoverer.internal.io.java.JDTVisitor.java

License:Open Source License

@Override
public void endVisit(final org.eclipse.jdt.core.dom.LabeledStatement node) {
    LabeledStatement element = (LabeledStatement) this.binding.get(node);
    initializeNode(element, node);/*from   w  w w .  j a  va 2  s .c o  m*/

    element.setName(node.getLabel().getIdentifier());

    if (this.binding.get(node.getBody()) != null) {
        element.setBody((Statement) this.binding.get(node.getBody()));
    }

    JDTVisitorUtils.manageBindingDeclaration(element, node.getLabel(), this);
}

From source file:org.jboss.forge.roaster.model.impl.BlockImpl.java

License:Open Source License

public org.eclipse.jdt.core.dom.Statement wireAndGetStatement(
        org.jboss.forge.roaster.model.statements.Statement<O, B, ?> statement, B parent, AST ast) {
    ASTNode<? extends Statement> node = (ASTNode<? extends Statement>) statement;
    statement.setOrigin(parent);//from  w ww  .  ja  v a 2 s.c  o  m
    node.setAst(ast);
    Statement stat = node.materialize(ast);

    if (statement.hasLabel()) {
        LabeledStatement labeledStatement = ast.newLabeledStatement();
        labeledStatement.setBody(stat);
        labeledStatement.setLabel(ast.newSimpleName(statement.getLabel()));
        return labeledStatement;
    } else {
        return stat;
    }
}

From source file:org.jboss.forge.roaster.model.impl.statements.BodiedStatementImpl.java

License:Open Source License

public org.eclipse.jdt.core.dom.Statement wireAndGetStatement(Statement<O, S, ?> statement, S parent, AST ast) {
    ASTNode<J> node = (ASTNode<J>) statement;
    statement.setOrigin(parent);/*from w w  w .  j av  a2s  .  c o  m*/
    node.setAst(ast);
    org.eclipse.jdt.core.dom.Statement stat = node.materialize(ast);

    if (statement.hasLabel()) {
        LabeledStatement labeledStatement = ast.newLabeledStatement();
        labeledStatement.setBody(stat);
        labeledStatement.setLabel(ast.newSimpleName(statement.getLabel()));
        return labeledStatement;
    } else {
        return stat;
    }
}