标签: pmd

PMD - 代码分析器警告

我正在使用PMD来分析代码,它会产生一些我不知道如何解决的高优先级警告.

1)Avoid if(x!=y)..; else...;但如果我需要这个逻辑,我该怎么办?也就是说,我确实需要检查一下x!=y?我怎么能重构它?

2)Use explicit scoping instead of the default package private level.但是这个类确实只在包中使用.我应该使用什么访问修饰符?

3)Parameter is not assigned and could be declared final.我应该在PMD用这个警告指出的所有地方添加final关键字吗?

java code-analysis pmd

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

PMD/CPD:使用注释忽略代码位

有没有办法告诉PMD忽略检查部分代码是否有重复?

例如,我可以这样做:

// CPD-Ignore-On
...
// CPD-Ignore-Off
Run Code Online (Sandbox Code Playgroud)

目前我使用Maven设置这样的PMD,但是除非我遗漏了什么,否则看不到任何想让我做我想做的事情.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <minimumTokens>40</minimumTokens>
                <targetJdk>1.5</targetJdk>
                <ignoreIdentifiers>true</ignoreIdentifiers>
                <ignoreLiterals>true</ignoreLiterals>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

java duplication pmd maven cpd

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

目前使用Sonar for Java 7代码的解决方法是什么?

我尝试在Java 7项目上使用Sonar(它依赖于新的语法功能),PMD部分和Checkstyle部分无法解析这些文件.

Findbugs部分无法读取Java 7类文件.

这导致Sonar只考虑我班级的10%.

可以有一个解决方法吗?

编辑:Java 7兼容性存在问题.
请投票支持这个问题,所以很快就会修好.

java pmd java-7 sonarqube

16
推荐指数
1
解决办法
2168
查看次数

PMD - 使用三元运算符的NPath复杂度非常高(?

我正在使用PMD为项目生成一些代码质量报告.
我不理解NPath复杂性检查的结果.
我已经创建了一个dull类,它显示了结果(这不是真正的类,但它使用相同的模式):

import java.util.*;

public class SOFExample {

    private final Map<String, Date> magicMap = new HashMap<String, Date>();    
    protected static final long UNKNWOWN = 0L;
    private static final class MyCal { long aTime; long bTime; long cTime; long dTime;}

    public void usefullMethod(final List<MyCal> myCals) {

        final Date a = magicMap.get("a");
        final Date b = magicMap.get("b");
        final Date c = magicMap.get("c");
        final Date d = magicMap.get("d");

        final long aTime = a == null ? UNKNWOWN : a.getTime();
        final long bTime = …
Run Code Online (Sandbox Code Playgroud)

pmd

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

从maven插件中的PMD中删除单个规则检查

我想在POM中排除单个PMD规则,但它不起作用.我尝试创建一个pmd-exclude.xml(与pom.xml在同一个目录中):

<?xml version="1.0"?>
<ruleset name="remove_rules">
    <description>Remove rules</description>
    <rule ref="rulesets/unnecessary.xml">
        <exclude name="UselessParentheses"/>
    </rule>
</ruleset>
Run Code Online (Sandbox Code Playgroud)

来自http://www.ing.iac.es/~docs/external/java/pmd/howtomakearuleset.html并在pom.xml中引用它:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>3.0.1</version>
    <configuration>
        <sourceEncoding>utf-8</sourceEncoding>
            <rulesets>
                    <ruleset>${pom.basedir}/pmd-exclude.xml</ruleset>
            </rulesets>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但它一直在报告这些规则.

另外:我不想指定它必须检查哪些规则,因为较新版本可以(并且将)包含新规则,我不想检查每个新版本中将运行哪些新规则.

java pmd maven

13
推荐指数
1
解决办法
5522
查看次数

从命令行运行所有PMD规则集

我想知道是否有办法从命令行运行所有PMD规则集.

我使用了与Eclipse IDE和Maven集成的PMD.但现在我需要从CLI运行它.我已经检查了这个页面http://pmd.sourceforge.net/pmd-5.1.0/running.html,它说你可以从CLI运行它,但是使用指定的规则集:

C:\tmp\pmd-bin-5.1.0\pmd\bin>pmd -d c:\data\pmd\pmd\test-data\Unused1.java -f xml -R rulesets/java/unusedcode.xml
Run Code Online (Sandbox Code Playgroud)

在那个例子中,你只是得到Java未使用的代码规则的结果,我正在尝试实现类似的东西:

C:\tmp\pmd-bin-5.1.0\pmd\bin>pmd -d c:\data\pmd\pmd\test-data\Unused1.java -f xml -R rulesets/java/*.xml
Run Code Online (Sandbox Code Playgroud)

并获得Java规则集中所有规则的结果.

command-line-interface pmd

13
推荐指数
1
解决办法
6122
查看次数

默认构造函数是善还是恶?Checkstyle和PMD在这里相反

Checkstyle说:

Class should define a constructor.
Run Code Online (Sandbox Code Playgroud)

PMD说:

Avoid unnecessary constructors - the compiler will generate these for you.
Run Code Online (Sandbox Code Playgroud)

谁是对的?或者让我们这样说吧 - 在课堂上有一个空的默认ctor有哪些优点和缺点?

java checkstyle pmd

12
推荐指数
3
解决办法
6389
查看次数

方法名称长度是否对性能有任何影响?

我是高级开发人员,所以这对我来说是一个愚蠢的问题.我的回答应该是NO,或者是什么?没有!!!

但我昨天正在开会,我正在解释一些PMD结果.当我们得到"太长的方法名称"问题时,我开始解释并且客户说:好吧,并记住一个长方法名称对性能有影响,程序运行速度较慢.

我说:不,你错了,只是一个干净的代码规则,并且获得一个好的代码很重要,但与性能无关,字节码与不同的名称相似.

但客户,会议中有一些人在此争论,对此肯定.他们有一些项目,因为长的方法名称是导致性能不佳的原因.

我唯一的想法是,一些内省或反思的事情与此有关,但除此之外,我确信,或者我认为我当然,方法名称长度没有任何性能影响.

对此有何想法或建议?

java performance profiling pmd

12
推荐指数
1
解决办法
1348
查看次数

在对象构造期间调用的PMD可重写方法

我有以下结构

public class parent {
    int value ; 
}

public class child extends parent {
    int childValue;
    public child(){}
    public child (int value){
          this.childValue = value ; // this line cause ConstructorCallsOverridableMethod warning during object construction
    }
}
Run Code Online (Sandbox Code Playgroud)

你能建议如何解决这个错误吗?

java pmd

11
推荐指数
1
解决办法
7772
查看次数

在StringBuffer追加中使用字符而不是String来表示单字符值

我正在通过PMD规则AppendCharacterWithChar.它说避免在StringBuffer.append中将字符串联为字符串.

StringBuffer sb = new StringBuffer();
  // Avoid this
  sb.append("a");

  // use instead something like this
  StringBuffer sb = new StringBuffer();
  sb.append('a');
Run Code Online (Sandbox Code Playgroud)

我真的需要这个PMD规则吗?以下两段代码之间有很大的性能差异吗?

String text = new StringBuffer().append("some string").append('c').toString();

String text = new StringBuffer().append("some string").append("c").toString();
Run Code Online (Sandbox Code Playgroud)

java string optimization string-concatenation pmd

11
推荐指数
2
解决办法
7708
查看次数