package spoon.test.api;
import spoon.processing.AbstractProcessor;
import spoon.reflect.code.CtBlock;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtMethod;
import spoon.test.api.testclasses.Bar;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AwesomeProcessor extends AbstractProcessor<CtClass<Bar>> {
final List<CtClass<Bar>> elements = new ArrayList<CtClass<Bar>>();
@Override
public void process(CtClass<Bar> element) {
// Creates new elements.
final CtMethod prepareMojito = element.getMethodsByName("doSomething").get(0);
prepareMojito.setSimpleName("prepareMojito");
prepareMojito.setType(getFactory().Type().VOID_PRIMITIVE);
final CtBlock<Object> block = getFactory().Core().createBlock();
block.addStatement(
getFactory().Code()
.createCodeSnippetStatement("System.out.println(\"Prepare mojito\")"));
prepareMojito.setBody(block);
final CtMethod makeMojito = prepareMojito.clone();
makeMojito.setSimpleName("makeMojito");
final CtBlock<Object> blockMake = getFactory().Core().createBlock();
blockMake.addStatement(
getFactory().Code()
.createCodeSnippetStatement("System.out.println(\"Make mojito!\")"));
makeMojito.setBody(blockMake);
// Applies transformation.
element.addMethod(makeMojito);
elements.add(element);
}
public List<CtClass<Bar>> getElements() {
return Collections.unmodifiableList(elements);
}
}