标签: pmd

这些PMD规则的原因是什么?

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世界中,为什么我不能使用最能描述我数据的类型呢?

java pmd

34
推荐指数
1
解决办法
3万
查看次数

效率:切换if语句的语句

PMD 告诉我

少于3个分支的交换机效率低,请使用if语句.

这是为什么?为什么3?他们如何定义效率?

java pmd

29
推荐指数
3
解决办法
2346
查看次数

PMD规则背后的"为什么"

是否有一个很好的资源来描述PMD规则集背后的"原因"?PMD的网站有"什么" - 每个规则的作用 - 但它没有描述为什么PMD有这个规则以及为什么忽略该规则会让你在现实世界中遇到麻烦.特别是,我有兴趣知道为什么PMD有AvoidInstantiatingObjectsInLoops和OnlyOneReturn规则(如果你需要创建一个对应于集合中每个对象的新对象,第一个似乎是必要的,第二个似乎在许多情况下是必要的根据某些标准返回一个值),但我真正想要的是一个描述大多数PMD规则背后"原因"的链接,因为这经常出现.

为了清楚起见,我知道我可以禁用它们以及如何做到这一点,我只是想知道为什么它们首先在那里.对不起,如果有一些明显的东西我错过了,但我在发布之前进行了谷歌搜索和搜索.我也明白,这些问题往往是"品味"的问题 - 我正在寻找的是规则的论点是什么以及有什么替代品.举一个具体的例子,你应该如何实现一个对应于循环中每个对象的对象(这是Java中的常见操作)而不在循环中实例化每个对象?

java code-analysis pmd

28
推荐指数
2
解决办法
8402
查看次数

如何从Sonar导出FindBugs/PMD/Checkstyle规则并导入Netbeans

我的公司有声纳设置各种插件(PMD,FindBugs,CheckStyle),虽然它是非常有用的(它是在每次通过SVN登记触发的Jenkins构建之后运行的),我想它,如果在检查代码之前,我可以在本地计算机上运行这些各种插件.

我们已经在Sonar中设置了一组规则,所以理想情况下我希望能够导出该规则集,或者对数据进行一些修改,然后将生成的规则导入到我的IDE(Netbeans 7.0.1)中.各自的插件.有没有办法做到这一点?我已经搜索了所有内容并且没有通过并手动将每个规则添加到各种插件,似乎没有办法做到这一点.有什么我想念的吗?

TL; DR(摘要):我想从声纳导出配置文件并将规则设置导入Netbeans中PMD,FindbugsCheckStyle插件.

netbeans findbugs checkstyle pmd sonarqube

28
推荐指数
2
解决办法
3万
查看次数

PMD规则集文件

我是PMD的新手.我试图找出默认规则集文件的位置,默认规则集文件的名称以及我们如何向其添加自己的规则.我试图谷歌,但这只是让我感到困惑.到目前为止,我已将pmd插件放在eclipse插件文件夹中,在首选项中我可以看到PMD.

有谁可以请我这个?

谢谢,妮莎

java pmd maven

27
推荐指数
2
解决办法
3万
查看次数

if(x!= y)vs if(x == y)

我已经针对我的代码在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)

但我仍然无法理解对我的代码的影响.如果有人可以用一个例子来指导我,我将不胜感激.

java eclipse pmd

23
推荐指数
3
解决办法
9942
查看次数

PMD:避免在循环内实例化新对象

我对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规则).但到目前为止,我至少理解了他们背后的想法.我不明白这条规则背后的原因.有人可以帮助我吗?

java loops instantiation pmd

21
推荐指数
1
解决办法
2万
查看次数

PMD:DD/DU异常

我正在使用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的首选解决方案?这个规则究竟试图阻止什么(即为什么这是不好的做法)?

java pmd

19
推荐指数
1
解决办法
3万
查看次数

PMD将每个循环的Java标记为UR异常

我想确认这是否是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异常标记为有用.

java code-analysis for-loop static-analysis pmd

19
推荐指数
1
解决办法
8131
查看次数

是否有C/C++的Findbugs和/或PMD等价物?

我最近被问及Coverity Prevent的替代方案,其代码库包括C/C++和Java.显然,在Java方面,可用的免费工具包括Findbugs(编译代码分析)和PMD(静态代码分析).它们非常强大,特别是当您开始研究与IDE的集成时(同样,它是免费的).

但是,当您开始使用各种编译器,体系结构等进入C/C++领域时,事情会很糟糕.

我已经为Java方面提出了各种工具,包括Findbugs和PMD.当我考虑使用以下指标时,我正在寻找的是C/C++方面的最佳选择:

  1. 价格:免费更好,但可以通过更好的价值打败.但是,每行代码收费的定价模型令人恐惧.
  2. 功能集:这个工具如何让我的生活更美好?在我检查错误之前,在我们发送代码之前,它会以什么方式检测我的错误等?
  3. 可用性:我可以在办公桌上使用该工具吗?我可以分享报告和/或调查结果吗?我可以将该工具与Fogbugz(我们在我的小组中使用)集成吗?我可以将该工具集成到CruiseControl(或等效产品)中吗?

最终的工具将是Findbugs和PMD具有相同功能集的组合,并且每个座位的零美元都是有用和可用的.

c c++ java findbugs pmd

18
推荐指数
1
解决办法
1万
查看次数