42 lines
2.2 KiB
Java
42 lines
2.2 KiB
Java
import javax.annotation.processing.AbstractProcessor;
|
|
import javax.annotation.processing.RoundEnvironment;
|
|
import javax.annotation.processing.SupportedAnnotationTypes;
|
|
import javax.annotation.processing.SupportedSourceVersion;
|
|
import javax.lang.model.SourceVersion;
|
|
import javax.lang.model.element.*;
|
|
import javax.lang.model.type.DeclaredType;
|
|
import javax.lang.model.type.TypeKind;
|
|
import javax.lang.model.type.TypeMirror;
|
|
import javax.tools.Diagnostic;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
@SupportedAnnotationTypes("javax.annotation.processing.SupportedSourceVersion")
|
|
public class ParameterPrintingProcessor extends AbstractProcessor {
|
|
@Override
|
|
public SourceVersion getSupportedSourceVersion() {
|
|
return SourceVersion.latestSupported();
|
|
}
|
|
|
|
@Override
|
|
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
|
|
if (annotations.isEmpty() || roundEnv.processingOver())
|
|
return false; // done
|
|
for (final Element element : roundEnv.getElementsAnnotatedWith(SupportedSourceVersion.class)) {
|
|
for(final Element method : ((TypeElement) element).getEnclosedElements()) {
|
|
if(method.getKind() != ElementKind.METHOD)
|
|
continue;
|
|
final TypeMirror returnType = ((ExecutableElement)method).getReturnType();
|
|
if(returnType.getKind() != TypeKind.DECLARED)
|
|
continue;
|
|
final List<? extends Element> methodsAndConstructors = ((TypeElement) ((DeclaredType) returnType).asElement()).getEnclosedElements();
|
|
processingEnv.getMessager().printMessage(Diagnostic.Kind.MANDATORY_WARNING,
|
|
methodsAndConstructors.stream().filter(e -> e.getKind() == ElementKind.CONSTRUCTOR && e.getModifiers().contains(Modifier.PUBLIC)).map(e -> e.toString() +
|
|
": '" + ((ExecutableElement) e).getParameters().stream().map(param -> param.asType() + " " + param.getSimpleName().toString()).collect(java.util.stream.Collectors.joining(", ")) + "'"
|
|
).collect(java.util.stream.Collectors.joining(", ")));
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|