Search in sources :

Example 1 with ClassAnontation

use of cn.xiaoxige.anontation.ClassAnontation in project GitTest by xiaoxige.

the class AnontationProcessor method process.

@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
    if (set == null || set.size() <= 0) {
        mMessager.printMessage(Diagnostic.Kind.NOTE, "It's TypeElement is null or empty");
        return false;
    }
    for (TypeElement element : set) {
        mMessager.printMessage(Diagnostic.Kind.NOTE, element.toString());
    }
    Set<? extends Element> elementsAnnotatedWith = roundEnvironment.getElementsAnnotatedWith(ClassAnontation.class);
    for (Element element : elementsAnnotatedWith) {
        // 得到注解标识的是什么玩意(Em. 类,方法, 成员变量...)
        ElementKind kind = element.getKind();
        mMessager.printMessage(Diagnostic.Kind.NOTE, "kind " + kind.toString());
        // 得到注解标识的权限是什么(Em. public, private, static, final ...)
        Set<Modifier> modifiers = element.getModifiers();
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> modifiers " + element.getEnclosingElement().toString());
        // 得到注释的注解内容(比如获取的值)
        ClassAnontation annotation = element.getAnnotation(ClassAnontation.class);
        // 表示java编程语中的类型(用这个去判断是int?String?...)
        TypeMirror typeMirror = element.asType();
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> typeMirror " + typeMirror.toString());
        if (element.getKind().isClass()) {
            mMessager.printMessage(Diagnostic.Kind.NOTE, "==>> It's a Class " + element.getSimpleName());
        }
        if (element.getKind().isField()) {
            mMessager.printMessage(Diagnostic.Kind.NOTE, "==> It's a Field ");
        }
    }
    Set<? extends Element> elements = roundEnvironment.getElementsAnnotatedWith(MethodAnontation.class);
    for (Element element : elements) {
        mMessager.printMessage(Diagnostic.Kind.NOTE, "simpleName " + element.getSimpleName());
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> modifiers " + element.getEnclosingElement().toString());
        // 参数
        TypeMirror typeMirror = element.asType();
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> typeMirror " + typeMirror.toString());
        // 方法
        ExecutableElement executableElement = (ExecutableElement) element;
        TypeElement enclosingElement = (TypeElement) executableElement.getEnclosingElement();
        String qualifiedName = enclosingElement.getQualifiedName().toString();
        if (element.getKind() == ElementKind.METHOD) {
            mMessager.printMessage(Diagnostic.Kind.NOTE, "==> It's a method ");
        }
    }
    mMessager.printMessage(Diagnostic.Kind.NOTE, "-------------------------------------------");
    Set<? extends Element> annotatedWith = roundEnvironment.getElementsAnnotatedWith(Method2Anontation.class);
    for (Element element : annotatedWith) {
        mMessager.printMessage(Diagnostic.Kind.NOTE, "simpleName " + element.getSimpleName());
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> modifiers " + element.getEnclosingElement().toString());
        // 参数
        TypeMirror typeMirror = element.asType();
        mMessager.printMessage(Diagnostic.Kind.NOTE, "--> typeMirror " + typeMirror.toString());
        // 方法
        ExecutableElement executableElement = (ExecutableElement) element;
        TypeElement enclosingElement = (TypeElement) executableElement.getEnclosingElement();
        String qualifiedName = enclosingElement.getQualifiedName().toString();
        if (element.getKind() == ElementKind.METHOD) {
            mMessager.printMessage(Diagnostic.Kind.NOTE, "==> It's a method ");
        }
    }
    return true;
}
Also used : ElementKind(javax.lang.model.element.ElementKind) TypeMirror(javax.lang.model.type.TypeMirror) TypeElement(javax.lang.model.element.TypeElement) ExecutableElement(javax.lang.model.element.ExecutableElement) Element(javax.lang.model.element.Element) TypeElement(javax.lang.model.element.TypeElement) ExecutableElement(javax.lang.model.element.ExecutableElement) ClassAnontation(cn.xiaoxige.anontation.ClassAnontation) Modifier(javax.lang.model.element.Modifier)

Aggregations

ClassAnontation (cn.xiaoxige.anontation.ClassAnontation)1 Element (javax.lang.model.element.Element)1 ElementKind (javax.lang.model.element.ElementKind)1 ExecutableElement (javax.lang.model.element.ExecutableElement)1 Modifier (javax.lang.model.element.Modifier)1 TypeElement (javax.lang.model.element.TypeElement)1 TypeMirror (javax.lang.model.type.TypeMirror)1