Ich möchte eine benutzerdefinierte Codeüberprüfungsregel für IntelliJ IDEA erstellen. Die Regel sollte prüfen, ob ein spezieller annotierter Argumenttyp eines Methodenaufrufs dem Parametertyp der Methodensignatur entspricht.Codeüberprüfung für Methodensignaturen
Beispiel:
public void method(@MyAnnotation String input){
}
public void method2(){
String invalid = "";
method(invalid); // error
@MyAnnotation String valid = (@MyAnnotation String) "";
method(valid); // no error
}
Was ich versucht:
[...]
protected static class visitor extends JavaElementVisitor {
@Override
public void visitMethodCallExpression(PsiMethodCallExpression expression) {
PsiMethod method = expression.resolveMethod();
//returns no annotations
PsiAnnotation[] annotations = method.getModifierList().getAnnotations();
//returns also no annotations
MethodSignatureBackedByPsiMethod methodSignature = MethodSignatureBackedByPsiMethod.create(method, PsiSubstitutor.EMPTY);
PsiType[] types = methodSignature.getParameterTypes();
for (PsiType psiType : types){
TypeAnnotationProvider provider = psiType.getAnnotationProvider();
PsiAnnotation[] annotations = provider.getAnnotations();
}
super.visitMethodCallExpression(expression);
}
[...]
}
Wie kann ich die Anmerkung des Arguments Typ mit der Anmerkung des Parameters Art des Verfahrens zu vergleichen?
Danke!
Thank you! Dies funktioniert für die Parameter der Methode. Für die Argumente des Methodenaufrufs würde ich zuerst 'expression.getArgumentList()' eingeben. Woher bekomme ich die Anmerkungen? – Stefan
Ich habe meine Antwort mit einem Beispiel erweitert, um die Anmerkungen eines Methodenarguments zu erhalten. –