public static <T extends Annotation> void addMethodCallInMethodBody(AnnotationValues<T> annotation, JCTree.JCAnnotation ast, JavacNode annotationNode, String methodWhereToAddName, java.util.List<String> methodToAddName, boolean addInFirstPosition) {
JavacTreeMaker treeMaker = annotationNode.getTreeMaker();
JavacNode owner = annotationNode.up();
switch (owner.get().getClass().getSimpleName()) {
case "JCClassDecl":
JCClassDecl classDecl = (JCClassDecl) owner.get();
for (JCTree e : classDecl.defs) {
if ("METHOD".equals(e.getKind().toString())) {
JCMethodDecl md = (JCMethodDecl) e;
if (methodWhereToAddName.equals(md.name.toString())) {
JCExpression callIt=JavacHandlerUtil.chainDots(owner, methodToAddName.toArray(new String[0]));
JCMethodInvocation factoryMethodCall=treeMaker.Apply(NIL_EXPRESSION, callIt, NIL_EXPRESSION);
JCExpressionStatement exec = treeMaker.Exec(factoryMethodCall);
if (addInFirstPosition) {
md.body.stats = md.body.stats.prepend(exec);
} else {
md.body.stats = md.body.stats.append(exec);
}
}
}
}
break;
default:
break;
}
owner.getAst().setChanged();
}