Rules that are related to code documentation.
Table of Contents

CommentContent

Since: PMD 5.0

Priority: Medium (3)

A rule for the politically correct… we don’t want to offend anyone.

This rule is defined by the following Java class: net.sourceforge.pmd.lang.java.rule.documentation.CommentContentRule

Example(s):

//OMG, this is horrible, Bob is an idiot !!!

This rule has the following properties:

Name Default Value Description
forbiddenRegex idiot|jerk Illegal terms or phrases

Use this rule with the default properties by just referencing it:

<rule ref="category/java/documentation.xml/CommentContent" />

Use this rule and customize it:

<rule ref="category/java/documentation.xml/CommentContent">
    <properties>
        <property name="forbiddenRegex" value="idiot|jerk" />
    </properties>
</rule>

CommentRequired

Since: PMD 5.1

Priority: Medium (3)

Denotes whether javadoc (formal) comments are required (or unwanted) for specific language elements.

This rule is defined by the following Java class: net.sourceforge.pmd.lang.java.rule.documentation.CommentRequiredRule

Example(s):

/**
*
*
* @author Jon Doe
*/

This rule has the following properties:

Name Default Value Description
methodWithOverrideCommentRequirement ignored Comments on @Override methods
One of: ignored, required, unwanted
accessorCommentRequirement ignored Comments on getters and setters"
One of: ignored, required, unwanted
classCommentRequirement required Class comments
One of: ignored, required, unwanted
fieldCommentRequirement required Field comments
One of: ignored, required, unwanted
publicMethodCommentRequirement required Public method and constructor comments
One of: ignored, required, unwanted
protectedMethodCommentRequirement required Protected method constructor comments
One of: ignored, required, unwanted
enumCommentRequirement required Enum comments
One of: ignored, required, unwanted
serialVersionUIDCommentRequired ignored Serial version UID comments
One of: ignored, required, unwanted
serialPersistentFieldsCommentRequired ignored Serial persistent fields comments
One of: ignored, required, unwanted

Use this rule with the default properties by just referencing it:

<rule ref="category/java/documentation.xml/CommentRequired" />

Use this rule and customize it:

<rule ref="category/java/documentation.xml/CommentRequired">
    <properties>
        <property name="methodWithOverrideCommentRequirement" value="ignored" />
        <property name="accessorCommentRequirement" value="ignored" />
        <property name="classCommentRequirement" value="required" />
        <property name="fieldCommentRequirement" value="required" />
        <property name="publicMethodCommentRequirement" value="required" />
        <property name="protectedMethodCommentRequirement" value="required" />
        <property name="enumCommentRequirement" value="required" />
        <property name="serialVersionUIDCommentRequired" value="ignored" />
        <property name="serialPersistentFieldsCommentRequired" value="ignored" />
    </properties>
</rule>

CommentSize

Since: PMD 5.0

Priority: Medium (3)

Determines whether the dimensions of non-header comments found are within the specified limits.

This rule is defined by the following Java class: net.sourceforge.pmd.lang.java.rule.documentation.CommentSizeRule

Example(s):

/**
*
*   too many lines!
*
*
*
*
*
*
*
*
*
*
*
*
*/

This rule has the following properties:

Name Default Value Description
maxLines 6 Maximum lines
maxLineLength 80 Maximum line length

Use this rule with the default properties by just referencing it:

<rule ref="category/java/documentation.xml/CommentSize" />

Use this rule and customize it:

<rule ref="category/java/documentation.xml/CommentSize">
    <properties>
        <property name="maxLines" value="6" />
        <property name="maxLineLength" value="80" />
    </properties>
</rule>

DanglingJavadoc

Since: PMD 7.17.0

Priority: Medium (3)

Javadoc comments that do not belong to a class, method or field are ignored by the JavaDoc tool and don’t end up in the generated API documentation. Such comments are either misplaced (e.g. between annotations and method declaration) or should be block comments.

In order to fix this violation, the comment should be moved to the correct place, converted into a block comment or removed completely.

This rule is defined by the following Java class: net.sourceforge.pmd.lang.java.rule.documentation.DanglingJavadocRule

Example(s):

public class Foo {
  /**
   * Public methods // wrong
   */

  /**
   * A setter // OK
   */
   public void setFoo() {

   }

}

Use this rule by referencing it:

<rule ref="category/java/documentation.xml/DanglingJavadoc" />

UncommentedEmptyConstructor

Since: PMD 3.4

Priority: Medium (3)

Uncommented Empty Constructor finds instances where a constructor does not contain statements, but there is no comment. By explicitly commenting empty constructors it is easier to distinguish between intentional (commented) and unintentional empty constructors.

This rule is defined by the following XPath expression:

//ConstructorDeclaration[@Visibility != "private"]
                        [not(
                               pmd-java:hasAnnotation('javax.inject.Inject')
                            or pmd-java:hasAnnotation('org.springframework.beans.factory.annotation.Autowired')
                        )]
                        [Block[
                            @containsComment = false()
                            and (count(*) = 0 or ($ignoreExplicitConstructorInvocation = true() and count(*) = 1 and ExplicitConstructorInvocation))
                        ]]

Example(s):

public Foo() {
  // This constructor is intentionally empty. Nothing special is needed here.
}

This rule has the following properties:

Name Default Value Description
ignoreExplicitConstructorInvocation false Ignore explicit constructor invocation when deciding whether constructor is empty or not

Use this rule with the default properties by just referencing it:

<rule ref="category/java/documentation.xml/UncommentedEmptyConstructor" />

Use this rule and customize it:

<rule ref="category/java/documentation.xml/UncommentedEmptyConstructor">
    <properties>
        <property name="ignoreExplicitConstructorInvocation" value="false" />
    </properties>
</rule>

UncommentedEmptyMethodBody

Since: PMD 3.4

Priority: Medium (3)

Uncommented Empty Method Body finds instances where a method body does not contain statements, but there is no comment. By explicitly commenting empty method bodies it is easier to distinguish between intentional (commented) and unintentional empty methods.

This rule is defined by the following XPath expression:

//MethodDeclaration/Block[count(*) = 0 and @containsComment = false()]

Example(s):

public void doSomething() {
}

Use this rule by referencing it:

<rule ref="category/java/documentation.xml/UncommentedEmptyMethodBody" />