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

com.moon.mapping.processing.ElementUtils Maven / Gradle / Ivy

package com.moon.mapping.processing;

import javax.lang.model.element.*;
import javax.lang.model.type.TypeMirror;
import java.util.Objects;

/**
 * @author benshaoye
 */
abstract class ElementUtils {

    private ElementUtils() {}

    public static String getFieldDeclareType(VariableElement elem) {
        return stringifyTypeMirror(elem.asType());
    }

    public static String getGetterDeclareType(ExecutableElement elem) {
        return stringifyTypeMirror(elem.getReturnType());
    }

    public static String getSetterDeclareType(ExecutableElement elem) {
        return stringifyTypeMirror(elem.getParameters().get(0).asType());
    }

    public static String stringifyTypeMirror(TypeMirror type) {
        Element typeElem = EnvUtils.getTypes().asElement(type);
        @SuppressWarnings("all")//
        String declareType = typeElem instanceof QualifiedNameable//
                             ? ElementUtils.getQualifiedName((QualifiedNameable) typeElem) //
                             : (typeElem == null ? type.toString() : typeElem.toString());
        return declareType;
    }

    public static String getQualifiedName(QualifiedNameable elem) {
        return elem.getQualifiedName().toString();
    }

    static  T cast(Object obj) { return (T) obj; }

    static String toPropertyName(ExecutableElement element) {
        String name = element.getSimpleName().toString();
        return StringUtils.decapitalize(name.substring(name.startsWith("is") ? 2 : 3));
    }

    public static String getSimpleName(Element elem) {
        return elem.getSimpleName().toString();
    }

    public static String getSimpleName(String fullName) {
        int index = fullName.lastIndexOf('.');
        return index < 0 ? fullName : fullName.substring(index + 1);
    }

    public static String getPackageName(Element element) {
        do {
            if (DetectUtils.isPackage(element)) {
                return getQualifiedName((QualifiedNameable) element);
            }
            element = element.getEnclosingElement();
        } while (true);
    }

    public static Element findEnumIndexOf(String classname, int index) {
        TypeElement elem = EnvUtils.getUtils().getTypeElement(classname);
        if (elem == null) {
            return null;
        }
        int indexer = 0;
        for (Element child : elem.getEnclosedElements()) {
            if (child.getKind() == ElementKind.ENUM_CONSTANT) {
                if (index == indexer) {
                    return child;
                } else {
                    indexer++;
                }
            }
        }
        return null;
    }

    public static Element findEnumNameOf(String classname, String name) {
        TypeElement elem = EnvUtils.getUtils().getTypeElement(classname);
        if (elem == null) {
            return null;
        }
        for (Element child : elem.getEnclosedElements()) {
            if (child.getKind() == ElementKind.ENUM_CONSTANT && Objects.equals(getSimpleName(child), name)) {
                return child;
            }
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy