hkais
hkais

Reputation: 338

PMD CPD exclude methods like equals and hashcode?

I cannot find an option how to tell PMD-CPD to skip specific methods. We use generated equals() and hashCode() methods, so the methods look often very similar and CPD reports a lot of them as duplicate code.

I can use some //NOPMD comments in the code, but what is in my eyes not a way how to manage my code. Since I incorporate a tool into code what has nothing to do with the code. CPD helps to avoid coding errors/styles and should not force me to modify my code.

So would be really helpful if someone have some ideas how to solve it.

best wishes

Upvotes: 5

Views: 3310

Answers (1)

barfuin
barfuin

Reputation: 17494

PMD CPD has no such option, so short of filing a feature request, it is not possible.

However, you could use annotations for suppression as described in the CPD docs:

//enable suppression
@SuppressWarnings("CPD-START")
public Object someMethod(int x) throws Exception {
    // any code here will be ignored for the duplication detection
}
//disable suppression
@SuppressWarnings("CPD-END")
public void nextMethod() {
}

Personally, I don't like this syntax very much, because it makes you annotate completely unrelated methods. nextMethod() has nothing to do with someMethod(), but still gets the CPD-END annotation. But it may stil be better than putting a whole lot of //NOPMD comments. It also excludes the method only for CPD, but not for other PMD detectors, as //NOPMD would.

Your initial wish of not putting information for analyis tools into the code is understandable. However, when I think about it, the annotations and comments do say something about the code, so having the code's meta information in the source is not such a bad thing. If you still don't like it, consider using SonarQube or some other tool with a database behind it.

Upvotes: 2

Related Questions