package com.app.apt.util;
import com.squareup.javapoet.ClassName;
import javax.annotation.processing.Messager;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.Diagnostic;
import static javax.lang.model.element.Modifier.ABSTRACT;
import static javax.lang.model.element.Modifier.PUBLIC;
/**
* Created by baixiaokang on 16/8/3.
*/
public class Utils {
public static final String PackageName = "com.apt";
public static final String ANNOTATION = "@";
public static boolean isPublic(TypeElement element) {
return element.getModifiers().contains(PUBLIC);
}
public static boolean isAbstract(TypeElement element) {
return element.getModifiers().contains(ABSTRACT);
}
public static boolean isValidClass(Messager messager, TypeElement element) {
if (element.getKind() != ElementKind.CLASS) {
return false;
}
if (!isPublic(element)) {
String message = String.format("Classes annotated with %s must be public.", ANNOTATION);
messager.printMessage(Diagnostic.Kind.ERROR, message, element);
return false;
}
if (isAbstract(element)) {
String message = String.format("Classes annotated with %s must not be abstract.", ANNOTATION);
messager.printMessage(Diagnostic.Kind.ERROR, message, element);
return false;
}
return true;
}
public static String getPackageName(Elements elements, TypeElement typeElement) throws NoPackageNameException {
PackageElement pkg = elements.getPackageOf(typeElement);
if (pkg.isUnnamed()) {
throw new NoPackageNameException(typeElement);
}
return pkg.getQualifiedName().toString();
}
public static String getClassName(TypeElement typeElement) throws ClassNotFoundException {
return ClassName.get(typeElement).simpleName();
}
public static ClassName getType(String className) {
return ClassName.get(className.substring(0, className.lastIndexOf(".")),
className.substring(className.lastIndexOf(".") + 1, className.length()));
}
}