DataflowAnomalyAnalysis:找到变量'变量'的'DD'异常(行'n1' - 'n2').
DataflowAnomalyAnalysis:找到变量'变量'的'DU'-anomaly(行'n1' - 'n2').
DD和DU听起来很熟悉......我想说的是关于最弱前后条件的测试和分析,但我不记得具体细节.
NullAssignment:将Object指定为null是代码气味.考虑重构.
null如果对象是本地对象(在方法之外没有使用),是不是设置一个对象来协助垃圾收集?或者这是一个神话?
MethodArgumentCouldBeFinal:参数'param'未分配,可以声明为final
LocalVariableCouldBeFinal:局部变量'variable'可以声明为final
使用final参数和变量有什么好处吗?
LooseCoupling:避免使用'LinkedList'之类的实现类型; 改为使用界面
如果我知道我特别需要一个LinkedList,为什么我不会用一个来明确表达未来开发人员的意图?返回有意义的类路径中最高的类是一回事,但为什么我不会声明我的变量是最严格的呢?
AvoidSynchronizedAtMethodLevel:使用块级别而不是方法级别同步
块级同步与方法级同步相比有哪些优势?
AvoidUsingShortType:不要使用短类型
我的第一语言是C和C++,但在Java世界中,为什么我不能使用最能描述我数据的类型呢?
是否有一个很好的资源来描述PMD规则集背后的"原因"?PMD的网站有"什么" - 每个规则的作用 - 但它没有描述为什么PMD有这个规则以及为什么忽略该规则会让你在现实世界中遇到麻烦.特别是,我有兴趣知道为什么PMD有AvoidInstantiatingObjectsInLoops和OnlyOneReturn规则(如果你需要创建一个对应于集合中每个对象的新对象,第一个似乎是必要的,第二个似乎在许多情况下是必要的根据某些标准返回一个值),但我真正想要的是一个描述大多数PMD规则背后"原因"的链接,因为这经常出现.
为了清楚起见,我知道我可以禁用它们以及如何做到这一点,我只是想知道为什么它们首先在那里.对不起,如果有一些明显的东西我错过了,但我在发布之前进行了谷歌搜索和搜索.我也明白,这些问题往往是"品味"的问题 - 我正在寻找的是规则的论点是什么以及有什么替代品.举一个具体的例子,你应该如何实现一个对应于循环中每个对象的对象(这是Java中的常见操作)而不在循环中实例化每个对象?
我的公司有声纳设置各种插件(PMD,FindBugs,CheckStyle),虽然它是非常有用的(它是在每次通过SVN登记触发的Jenkins构建之后运行的),我想它,如果在检查代码之前,我可以在本地计算机上运行这些各种插件.
我们已经在Sonar中设置了一组规则,所以理想情况下我希望能够导出该规则集,或者对数据进行一些修改,然后将生成的规则导入到我的IDE(Netbeans 7.0.1)中.各自的插件.有没有办法做到这一点?我已经搜索了所有内容并且没有通过并手动将每个规则添加到各种插件,似乎没有办法做到这一点.有什么我想念的吗?
TL; DR(摘要):我想从声纳导出配置文件并将规则设置导入Netbeans中的PMD,Findbugs和CheckStyle插件.
我是PMD的新手.我试图找出默认规则集文件的位置,默认规则集文件的名称以及我们如何向其添加自己的规则.我试图谷歌,但这只是让我感到困惑.到目前为止,我已将pmd插件放在eclipse插件文件夹中,在首选项中我可以看到PMD.
有谁可以请我这个?
谢谢,妮莎
我已经针对我的代码在Eclipse中运行了PMD插件,并且我正在获得类似于下面所示代码的高优先级警告:
if(singleRequest !=null){
// do my work
}else{
// do my other work
}
Run Code Online (Sandbox Code Playgroud)
PMD说`Avoid if (x != y) ..; else ..;
错误的描述如下:
In an "if" expression with an "else" clause, avoid negation in
the test. For example, rephrase:
if (x != y) diff(); else same();
as:
if (x == y) same(); else diff();
Most "if (x != y)" cases without an "else" are often return
Run Code Online (Sandbox Code Playgroud)
但我仍然无法理解对我的代码的影响.如果有人可以用一个例子来指导我,我将不胜感激.
我对PMD规则有疑问Avoid instantiating new objects inside loops.这是一些示例代码:
import java.awt.Dimension;
public class PMDDemo {
public static void main(final String[] args) {
final Dimension[] arr = new Dimension[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Dimension(i, i); // rule violation here
}
}
}
Run Code Online (Sandbox Code Playgroud)
PMD在代码中的标记位置给出了上述规则违规.我怎么创造ň没有环内创建这些类的实例?
我知道PMD的一些规则是有争议的(比如onlyOneExit规则).但到目前为止,我至少理解了他们背后的想法.我不明白这条规则背后的原因.有人可以帮助我吗?
我正在使用Eclipse PMD Plug-in (4.0.0.v20130510-1000)并且获得了很多违规行为:
Found 'DD'-anomaly for variable 'freq' (lines '187'-'189').
Found 'DU'-anomaly for variable 'freq' (lines '189'-'333').
在这个 SO答案中,它说这些异常与分配从未读过的值有关.但是我在这种情况下得到了违规行为:
// here I get a DD anomaly
double freq = 0;
try {
// here I get a DU anomaly
freq = Double.parseDouble(getFrequencyTextField().getText());
} catch (final NumberFormatException e) {
Log.e(e.getMessage());
}
if (freq < 10E6) doSomething();
Run Code Online (Sandbox Code Playgroud)
如果我删除初始化并freq = 0;在catch块中添加一行,则DD异常消失,但我在两个分配上都得到DU异常.
现在我的问题是:我该如何应对?什么是PMD的首选解决方案?这个规则究竟试图阻止什么(即为什么这是不好的做法)?
我想确认这是否是PMD的错误?如果是,我如何提交票证.
public static void main(final String[] args) {
for (final String string : args) {
string.getBytes(); //UR Anomaly
}
for (int i = 0; i < args.length; i++) {
args[i].getBytes();
}
}
Run Code Online (Sandbox Code Playgroud)
第1-3行被标记为UR异常,而重写它以使用局部变量进行迭代很好.
想要消除尽可能多的PMD违规,但不得不求助于旧的循环结构作为一种解决方法.
虽然有争议,但我不希望禁用此规则,因为我发现DD,并且DU异常标记为有用.
我最近被问及Coverity Prevent的替代方案,其代码库包括C/C++和Java.显然,在Java方面,可用的免费工具包括Findbugs(编译代码分析)和PMD(静态代码分析).它们非常强大,特别是当您开始研究与IDE的集成时(同样,它是免费的).
但是,当您开始使用各种编译器,体系结构等进入C/C++领域时,事情会很糟糕.
我已经为Java方面提出了各种工具,包括Findbugs和PMD.当我考虑使用以下指标时,我正在寻找的是C/C++方面的最佳选择:
最终的工具将是Findbugs和PMD具有相同功能集的组合,并且每个座位的零美元都是有用和可用的.