All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.gjing.handle.GetterProcessor Maven / Gradle / Ivy

package cn.gjing.handle;//package com.gjing.handle;
//
//import com.sun.source.tree.Tree;
//import com.sun.tools.javac.api.JavacTrees;
//import com.sun.tools.javac.code.Flags;
//import com.sun.tools.javac.processing.JavacProcessingEnvironment;
//import com.sun.tools.javac.tree.JCTree;
//import com.sun.tools.javac.tree.TreeMaker;
//import com.sun.tools.javac.tree.TreeTranslator;
//import com.sun.tools.javac.util.*;
//
//import javax.annotation.processing.*;
//import javax.lang.model.SourceVersion;
//import javax.lang.model.element.Element;
//import javax.lang.model.element.TypeElement;
//import java.util.Set;
//
///**
// * @author Gjing
// **/
//@SupportedSourceVersion(SourceVersion.RELEASE_8)
//@SupportedAnnotationTypes("com.gjing.annotation.Get")
//public class GetterProcessor extends AbstractProcessor {
//    /**
//     * Messager use to log
//     * JavacTrees prepare offer AST
//     * TreeMaker use to create AST
//     * Names create symbol
//     */
//    private Messager messager;
//    private JavacTrees trees;
//    private TreeMaker treeMaker;
//    private Names names;
//
//    @Override
//    public synchronized void init(ProcessingEnvironment processingEnv) {
//        super.init(processingEnv);
//        this.messager = processingEnv.getMessager();
//        this.trees = JavacTrees.instance(processingEnv);
//        Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
//        this.treeMaker = TreeMaker.instance(context);
//        this.names = Names.instance(context);
//    }
//
//    @Override
//    public boolean process(Set annotations, RoundEnvironment roundEnv) {
//        for (TypeElement annotation : annotations) {
//            //拿到所有设置有getter注解的类
//            Set elementsAnnotated = roundEnv.getElementsAnnotatedWith(annotation);
//            System.out.println("所有有这个注解的类: " + elementsAnnotated.toString());
//            elementsAnnotated.forEach(element -> {
//                //遍历所有元素,并生成这个element的语法树
//                JCTree jcTree = trees.getTree(element);
//                System.out.println("语法书:" + jcTree.toString());
//                jcTree.accept(new TreeTranslator() {
//                    @Override
//                    public void visitClassDef(JCTree.JCClassDecl jcClassDecl) {
//                        List jcVariableDeclList = List.nil();
//                        for (JCTree tree : jcClassDecl.defs) {
//                            if (tree.getKind().equals(Tree.Kind.VARIABLE)) {
//                                JCTree.JCVariableDecl jcVariableDecl = (JCTree.JCVariableDecl) tree;
//                                jcVariableDeclList = jcVariableDeclList.append(jcVariableDecl);
//                            }
//                        }
//                        System.out.println("变量定义: " + jcVariableDeclList.toString());
//                        jcVariableDeclList.forEach(jcVariableDecl -> jcClassDecl.defs = jcClassDecl.defs.prepend(makeGetterMethodDecl(jcVariableDecl)));
//                        super.visitClassDef(jcClassDecl);
//                    }
//                });
//
//            });
//            return false;
//        }
//        return true;
//    }
//
//    private JCTree.JCMethodDecl makeGetterMethodDecl(JCTree.JCVariableDecl jcVariableDecl) {
//
//        ListBuffer statements = new ListBuffer<>();
//        statements.append(treeMaker.Return(treeMaker.Select(treeMaker.Ident(names.fromString("this")), jcVariableDecl.getName())));
//        System.out.println("statement: " + statements.toString());
//        JCTree.JCBlock body = treeMaker.Block(0, statements.toList());
//        return treeMaker.MethodDef(treeMaker.Modifiers(Flags.PUBLIC), getNewMethodName(jcVariableDecl.getName()), jcVariableDecl.vartype, List.nil(), List.nil(), List.nil(), body, null);
//    }
//
//    private Name getNewMethodName(Name name) {
//        String s = name.toString();
//        return names.fromString("get" + s.substring(0, 1).toUpperCase() + s.substring(1, name.length()));
//    }
//
//}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy