SonarQube java.lang.ClassCastException:无法将ParameterizedTypeJavaType转换为ParameterizedTypeJavaType

SonarQube java.lang.ClassCastException:无法将ParameterizedTypeJavaType转换为ParameterizedTypeJavaType,java,sonarqube,Java,Sonarqube,我正在尝试创建自己的SonarQube规则,该规则的目标是检查我是否未对特定对象的集合使用contains方法。整数对象的示例: List<Integer> a = new ArrayList<>(); a.contains(1); // Noncompliant 我做了一些研究,发现了这个问题,这似乎是我的问题: 我还遇到了这个规则,它看起来与我的规则非常相似,并且使用ParameterizedTypeJavaType 所以我完全糊涂了。处理我的问

我正在尝试创建自己的SonarQube规则,该规则的目标是检查我是否未对特定对象的集合使用contains方法。整数对象的示例:

    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)