Class<?>
во время обработки, потому что классы, которые вы хотите, должны быть скомпилированы прямо сейчас! Если вы вызываете getClass()
в неизвестном классе или используете Class<?> clazz = Class.forName("com.your.fancy.Class")
, вы получите java.lang.ClassNotFoundException
, который полностью прекрасен. javax.lang.model.element.Element
и javax.lang.model.element.ExecutableElement
, чтобы описать / читать определения классов. javax.lang.model.*
имеет javax.lang.model.type.TypeMirror
для описания классов, их полей, методов и т. д. ClassNotFoundException
даже после того, как roundEnvironment.processingOver()
будет правдой. Примеры:
public static @Nonnull List getMethods(@Nonnull Element annotationElem, @Nonnull RoundEnvironment roundEnvironment) {
List outList = new ArrayList();
String simpleName = annotationElem.getSimpleName().toString();
for (Element elem : roundEnvironment.getRootElements())
if (elem.getSimpleName().toString().equals(simpleName))
for (Element methodDeclaration :elem.getEnclosedElements())
if (methodDeclaration instanceof ExecutableElement)
outList.add((ExecutableElement)methodDeclaration);
return outList;
}
public static TypeMirror getMethodFirstParam(@Nonnull ExecutableElement method, int n) {
List parameters = ((ExecutableElement) method).getParameters();
if (parameters != null && parameters.size() > 0)
return parameters.get(n).asType();
return null;
}