- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制定自己的 SonarQube 规则,该规则的目标是检查我是否没有对特定对象的集合使用 contains 方法。整数对象示例:
List<Integer> a = new ArrayList<>();
a.contains(1); // Noncompliant
为此,我尝试获取 ParametrizedTypeJavaType。然后我就可以测试它是否是一个整数......
@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;
}
}
它在 jUnit 测试期间似乎运行良好,但是当我在测试项目上启动 sonnar-scanner 时,出现以下错误:
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)
我做了一些研究,我遇到了这个问题,这看起来是我的问题:
我还遇到了这条规则,它看起来与我的规则非常相似并使用 ParametrizedTypeJavaType。
所以我完全困惑了。解决我的问题的好方法是什么?
SonarQube版本:6.3.1
感谢您的帮助。
最佳答案
ParametrizedTypeJavaType
不是自定义规则的 java api 的一部分。截至今天,语义 API 不允许您访问泛型信息:这是计划中的,但尚未安排:https://jira.sonarsource.com/browse/SONARJAVA-1871
您最好依靠现有规则来实现您想要实现的目标:https://sonarqube.com/coding_rules#rule_key=squid%3AS2175
如果此规则对您不起作用,您能解释一下原因吗?
关于java - SonarQube java.lang.ClassCastException : ParametrizedTypeJavaType cannot be cast to ParametrizedTypeJavaType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43986018/
我正在尝试制定自己的 SonarQube 规则,该规则的目标是检查我是否没有对特定对象的集合使用 contains 方法。整数对象示例: List a = new ArrayList<>();
我是一名优秀的程序员,十分优秀!