@Override void insertFromFirstStatement(CtBlock<?> block, CtStatement target, CtStatementList statementsToBeInserted) { final List<CtStatement> copy = new ArrayList<>(block.getStatements()); int indexOfTargetElement = indexOfReference(block.getStatements(), target); for (CtStatement s : statementsToBeInserted) { copy.add(++indexOfTargetElement, s); } //remove statements from the `statementsToBeInserted` before they are added to spoon model //note: one element MUST NOT be part of two models. statementsToBeInserted.setStatements(null); block.setStatements(copy); }
@Override void insertFromFirstStatement(CtBlock<?> block, CtStatement target, CtStatementList statementsToBeInserted) { final List<CtStatement> copy = new ArrayList<>(block.getStatements()); int indexOfTargetElement = indexOfReference(block.getStatements(), target); for (CtStatement ctStatement : statementsToBeInserted) { copy.add(indexOfTargetElement++, ctStatement); } //remove statements from the `statementsToBeInserted` before they are added to spoon model //note: one element MUST NOT be part of two models. statementsToBeInserted.setStatements(null); block.setStatements(copy); }
@Override public <T> void generateInlineTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters) { Factory f = generator.getFactory(); CoreFactory cf = f.Core(); CtBlock<?> block = cf.createBlock(); if (statement != null) { block.setStatements(generator.generateTargets(statement, parameters, CtStatement.class)); } if (vrOfExpression != null) { //There is if expression CtIf ifStmt = cf.createIf(); ifStmt.setCondition(generator.generateSingleTarget(vrOfExpression, parameters, CtExpression.class)); ifStmt.setThenStatement(block); result.addResult((T) ifStmt); } else { //There is no expression. It represents the last else block result.addResult((T) block); } } }
public <R> void visitCtBlock(final spoon.reflect.code.CtBlock<R> block) { spoon.reflect.code.CtBlock<R> aCtBlock = block.getFactory().Core().createBlock(); this.builder.copy(block, aCtBlock); aCtBlock.setAnnotations(this.cloneHelper.clone(block.getAnnotations())); aCtBlock.setStatements(this.cloneHelper.clone(block.getStatements())); aCtBlock.setComments(this.cloneHelper.clone(block.getComments())); this.cloneHelper.tailor(block, aCtBlock); this.other = aCtBlock; }
@Override public <T> void generateInlineTargets(DefaultGenerator generator, ResultHolder<T> result, ImmutableMap parameters) { Factory f = generator.getFactory(); CtForEach forEach = f.Core().createForEach(); forEach.setVariable(f.Code().createLocalVariable(f.Type().objectType(), localParameter.getName(), null)); forEach.setExpression(generator.generateSingleTarget(iterableParameter, parameters, CtExpression.class)); CtBlock<?> body = f.createBlock(); body.setStatements(generator.generateTargets(nestedModel, parameters, CtStatement.class)); forEach.setBody(body); result.addResult((T) forEach); } }
public static CtBlock<CtStatement> newBlock(Factory factory, List<CtStatement> statements) { CtBlock<CtStatement> newBlock = factory.Core().createBlock(); newBlock.setStatements(statements); setParent(newBlock, statements); return newBlock; }