private CtStatement getElseIfStatement(CtStatement elseStmt) { if (elseStmt instanceof CtBlock<?>) { CtBlock<?> block = (CtBlock<?>) elseStmt; if (block.isImplicit()) { List<CtStatement> stmts = block.getStatements(); if (stmts.size() == 1) { if (stmts.get(0) instanceof CtIf) { return stmts.get(0); } } } } return elseStmt; }
@Override public <R> void visitCtBlock(CtBlock<R> block) { enterCtStatement(block); if (!block.isImplicit()) { printer.writeSeparator("{"); } printer.incTab(); for (CtStatement statement : block.getStatements()) { if (!statement.isImplicit()) { printer.writeln(); elementPrinterHelper.writeStatement(statement); } } printer.decTab(); getPrinterHelper().adjustEndPosition(block); if (env.isPreserveLineNumbers()) { if (!block.isImplicit()) { printer.writeSeparator("}"); } } else { printer.writeln(); if (!block.isImplicit()) { printer.writeSeparator("}"); } } exitCtStatement(block); }
public void setParentBlock(CtBlock parentBlock) { this.parentBlock = parentBlock; this.isParentBlockImplicit = parentBlock.isImplicit(); }
/** * Updates the implicitly of a block. Workarround for Spoon 5.4.0 * * @param block * @param isInsert */ public static void updateBlockImplicitly(CtBlock block, boolean isInsert) { if (!block.isImplicit() && block.getStatements().size() == 1 && !(block.getParent() instanceof CtExecutable)) { block.setImplicit(true); } else { if (isInsert) { if (block.isImplicit() && block.getStatements().size() > 1) { block.setImplicit(false); } } else {// Delete if (block.isImplicit() && block.getStatements().size() == 0) { block.setImplicit(false); } } } }
private boolean isElseIf(CtStatement original, CtStatement parentLine) { if (parentLine.getParent() instanceof CtIf) { CtStatement elseStatement = ((CtIf) parentLine.getParent()).getElseStatement(); if (elseStatement == original) { return true; } else if (elseStatement instanceof CtBlock) { CtBlock block = (CtBlock) elseStatement; if (block.isImplicit() && block.getStatement(0) == original) { return true; } } } if (parentLine.getParent() instanceof CtBlock) { return isElseIf(original, (CtStatement) parentLine.getParent()); } return false; }