List of usage examples for org.eclipse.jdt.core.dom LabeledStatement setBody
public void setBody(Statement statement)
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; } }