Gradle 如何触发DM_CONVERT_案例

Gradle 如何触发DM_CONVERT_案例,gradle,findbugs,Gradle,Findbugs,我所使用的代码库有很多次调用无参数版本的String#toUpperCase()和String#toLowerCase()。正如其他地方所记载的那样,这给使用土耳其语言环境的人带来了问题。所以我想让FindBugs告诉我这是什么时候在我们的代码中使用的。FindBugs应该有这样一个检查(DM_CONVERT_情况),根据这个检查,应该是3.0.1中的默认检查。但我从来没有看到过这样的报道,即使现在我们的代码库中肯定有使用这些no-arg调用的情况 我怎样才能让FindBugs报告这件事 我使用

我所使用的代码库有很多次调用无参数版本的
String#toUpperCase()
String#toLowerCase()
。正如其他地方所记载的那样,这给使用土耳其语言环境的人带来了问题。所以我想让FindBugs告诉我这是什么时候在我们的代码中使用的。FindBugs应该有这样一个检查(DM_CONVERT_情况),根据这个检查,应该是3.0.1中的默认检查。但我从来没有看到过这样的报道,即使现在我们的代码库中肯定有使用这些no-arg调用的情况

我怎样才能让FindBugs报告这件事

我使用Gradle为我运行FindBugs:

findbugs {
    sourceSets = [ subProject.sourceSets.main, subProject.sourceSets.test ]
    ignoreFailures = true
    toolVersion = '3.0.1'
}
// exclude generated java sources - by explicitly setting the base source dir
findbugsMain.source = 'src/main/java'

DM\u CONVERT\u案例
只有当
reportLevel
设置为
low
时,才会触发冲突。显然,案例转换在FindBugs中被标记为低优先级错误

对于
reportLevel

报告错误的优先级阈值。如果设置为“低”,则会报告所有错误。如果设置为“中”(默认),则会报告中优先级和高优先级错误。如果设置为“高”,则只报告高优先级错误

您需要添加以下内容以扩展配置:

findbugs {
    sourceSets = [ subProject.sourceSets.main, subProject.sourceSets.test ]
    ignoreFailures = true
    toolVersion = '3.0.1'
    reportLevel = 'low'
}
// exclude generated java sources - by explicitly setting the base source dir
findbugsMain.source = 'src/main/java'
您可以看到它在我创建的项目中工作,同时尝试重现问题:

编辑:

对于使用Maven的用户,您需要按照以下方式配置
findbugs Maven插件

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>3.0.1</version>
    <configuration>
      <threshold>Low</threshold>
    </configuration>
  </plugin>

org.codehaus.mojo
findbugs maven插件
3.0.1
低

如何调用FindBugs?在Checkstyle项目中,我们在版本3.0.1中使用FindBugs,在代码库中也没有arg调用。由于报告的违规行为,我们需要一些排除:使用Gradle的FindBugs支持,但明确要求它使用3.0.1Still,我无法复制,它适合我。请参阅我创建的示例项目:。你能检查一下这个项目的
gradlefindbugsmain
是否为你生成了带有
DM\u CONVERT\u CASE
的报告吗?实际上我不能。除非我缺少的是如何在报告文件中看到它。我希望能够搜索DM_CONVERT_案例。我在为您的项目生成的报告中也没有看到这一点。这是我得到的输出:这是使用Gradle 2.2,也许你使用的是另一个版本?实际上这不是关于Gradle版本的,只是缺少一个属性-请看我的答案。谢谢你的Michal!出于好奇,我能做其他的吗?我能否以某种方式让FindBugs将
DM\u CONVERT\u CASE
视为更高的级别?即使是在媒体上,它也报告了很多我认为可疑的事情,这使得它更奇怪的是它把这样一个真实的问题报告为低。代码>报告级别/
阈值
应说明缺陷的
置信度(
优先级
),该置信度应表明报告的代码是实际缺陷的“可能性”,而实际缺陷的“可能性”又应基于做出该判断的难度。一个需要读取多个字节码指令的bug被认为比只需要读取一个或两个指令的bug的置信度低。可能是错误的,但在我看来,
DM\u CONVERT\u案例
的确定需要只看一条指令,所以为什么这被认为是如此低的置信度?也许作者的意思是这可能是一个bug,但不一定——取决于使用的上下文。我认为可以使用过滤器文件更改优先级-更多信息,我只看到如何将置信度/优先级定义为匹配标准的一部分,而不是如何更改它。尽管说实话,这些文件的文档不是很好,也许我只是错过了一些东西。@SteveEbersole规则的
置信度
还可以衡量规则标记出真正bug的可能性。在极少数情况下可能被怀疑的代码将获得较低的置信度,即使它在一行代码中匹配。如果这是一个比作者意识到的更常见的问题,那么听起来这个bug可能需要更改。