【发布时间】:2017-12-07 16:10:26
【问题描述】:
我想为 IntelliJ IDEA 创建自定义代码检查规则。该规则应检查方法调用的特殊注释参数类型是否等同于方法签名的参数类型。
例子:
public void method(@MyAnnotation String input){
}
public void method2(){
String invalid = "";
method(invalid); // error
@MyAnnotation String valid = (@MyAnnotation String) "";
method(valid); // no error
}
我尝试了什么:
[...]
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);
}
[...]
}
如何比较参数类型的注解和方法的参数类型的注解?
谢谢!
【问题讨论】:
标签: java intellij-idea intellij-plugin code-inspection