Java Sonar规则捕获原始集合类型

Java Sonar规则捕获原始集合类型,java,sonarqube,checkstyle,pmd,Java,Sonarqube,Checkstyle,Pmd,我最近将sonar引入了一个大型遗留项目,该项目最初是用Java1.3编写的 我们已经逐渐地将使用原始集合等的代码迁移到使用泛型。跟踪我们在声纳方面的进展会很好,但似乎没有现成的规则来捕捉原始收集的使用 是否存在现有解决方案,或者我是否需要在pmd/checkstyle中创建自定义规则?这就是您要查找的规则吗 Bad practice - Unchecked type in generic call 对泛型集合方法的调用在编译类型对象时传递一个参数,其中需要泛型类型参数中的特定类型。因此,无论

我最近将sonar引入了一个大型遗留项目,该项目最初是用Java1.3编写的

我们已经逐渐地将使用原始集合等的代码迁移到使用泛型。跟踪我们在声纳方面的进展会很好,但似乎没有现成的规则来捕捉原始收集的使用


是否存在现有解决方案,或者我是否需要在pmd/checkstyle中创建自定义规则?

这就是您要查找的规则吗

Bad practice - Unchecked type in generic call
对泛型集合方法的调用在编译类型对象时传递一个参数,其中需要泛型类型参数中的特定类型。因此,无论是标准Java类型系统还是静态分析都无法提供有关作为参数传递的对象是否属于适当类型的有用信息

存储库:findbugs


键:GC_UNCHECKED_TYPE_IN_GENERIC_CALL

我也在寻找同样的东西,因为我希望我们的声纳也能捕捉到这一点:

List myList = new ArrayList();
丹尼斯提到的规则不适用,因为它是为了抓住以下情况(根据)

StringBuilder myText=new StringBuilder();
...
List myList=new ArrayList();
布尔containsMyText=myList.contains(someText);
代码编译是因为
collection.contains()
方法接受对象参数,即使对于类型化的集合也是如此。但是它是一个不相关的检查,并且总是返回false,因为
myText
对象的类型错误,并且永远不能添加到已键入的
myList
集合中


据我所见,您似乎必须构建一个自定义规则。

Hm,GC\u UNCHECKED\u GENERIC\u调用中的TYPE\u现在已被弃用,建议的替换方法S2175仅检查是否调用了某些对象类型的方法(即remove(Object))

因此,似乎无论是通用调用中的GC_UNCHECKED_TYPE_还是S2175都不会发出警告,例如,“HashMap x”而不是“HashMap x”


奇怪的是,似乎并没有针对这个的规则…

我启用了这个规则,但它不会触发ArrayList foo=new ArrayList()形式的代码;我们接受了这个答案,因为看起来声纳中没有任何东西能够做到这一点。
StringBuilder myText = new StringBuilder();
...
List<String> myList = new ArrayList<String>();
boolean containsMyText = myList.contains(someText);