SonarQube java.lang.ClassCastException:无法将ParameterizedTypeJavaType转换为ParameterizedTypeJavaType
我正在尝试创建自己的SonarQube规则,该规则的目标是检查我是否未对特定对象的集合使用contains方法。整数对象的示例:SonarQube java.lang.ClassCastException:无法将ParameterizedTypeJavaType转换为ParameterizedTypeJavaType,java,sonarqube,Java,Sonarqube,我正在尝试创建自己的SonarQube规则,该规则的目标是检查我是否未对特定对象的集合使用contains方法。整数对象的示例: List<Integer> a = new ArrayList<>(); a.contains(1); // Noncompliant 我做了一些研究,发现了这个问题,这似乎是我的问题: 我还遇到了这个规则,它看起来与我的规则非常相似,并且使用ParameterizedTypeJavaType 所以我完全糊涂了。处理我的问
List<Integer> a = new ArrayList<>();
a.contains(1); // Noncompliant
我做了一些研究,发现了这个问题,这似乎是我的问题:
我还遇到了这个规则,它看起来与我的规则非常相似,并且使用ParameterizedTypeJavaType
所以我完全糊涂了。处理我的问题的好方法是什么
SonarQube版本:6.3.1
谢谢您的帮助。
参数化类型JavaType
不是自定义规则的java api的一部分。到目前为止,语义API不允许您访问泛型信息:这是计划中的,但不是计划中的:
你最好依靠现有的规则来实现你的目标:
如果这条规则对您不起作用,您能解释一下原因吗
参数化类型JavaType
不是自定义规则的java api的一部分。到目前为止,语义API不允许您访问泛型信息:这是计划中的,但不是计划中的:
你最好依靠现有的规则来实现你的目标:
如果这条规则对您不起作用,您能解释一下原因吗
@Override
public void visitNode(Tree tree) {
MethodInvocationTree methodInvocationTree = (MethodInvocationTree) tree;
ExpressionTree expressionTree = ((MethodInvocationTree) tree).methodSelect();
if(expressionTree.is(Kind.MEMBER_SELECT)){
MemberSelectExpressionTree memberSelectExpressionTree = (MemberSelectExpressionTree) expressionTree;
Type type = memberSelectExpressionTree.expression().symbolType();
ParametrizedTypeJavaType parametrizedTypeJavaType = (ParametrizedTypeJavaType) type;
// SOME CODE Test if it is an integer or not ...
reportIssue(tree,"REPORT !");
}
}
@Override
public List<Kind> nodesToVisit() {
List<Kind> kinds = new ArrayList<>();
kinds.add(Kind.METHOD_INVOCATION);
return kinds;
}
Caused by: java.lang.ClassCastException: org.sonar.java.resolve.ParametrizedTypeJavaType cannot be cast to org.sonar.java.resolve.ParametrizedTypeJavaType
at org.sonar.samples.java.checks.CollectionCheck.visitNode(CollectionCheck.java:38)