注解
定义文件
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
public @interface NameCheck {
}
注解使用文件
@NameCheck
public class NameCheckDemo {
}
注解解析文件
@SupportedAnnotationTypes("NameCheck")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class NameCheckProcess extends AbstractProcessor {
@SneakyThrows
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : annotations) {
ElementKind kind = element.getKind();
switch (kind) {
case CLASS:
return false;
case ENUM:
case INTERFACE:
case METHOD:
case FIELD:
return checkName(element);
default:
this.processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "unknown element kind : " + kind);
return false;
}
}
return true;
}
private boolean checkName(Element element) {
this.processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "element:" + element);
return element.getSimpleName().toString().startsWith("[a-z]");
}
}