Add ignore override property
This commit is contained in:
@ -5,14 +5,18 @@
|
|||||||
package net.sourceforge.pmd.lang.java.rule.documentation;
|
package net.sourceforge.pmd.lang.java.rule.documentation;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTMarkerAnnotation;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTName;
|
||||||
import net.sourceforge.pmd.lang.java.ast.AbstractJavaAccessNode;
|
import net.sourceforge.pmd.lang.java.ast.AbstractJavaAccessNode;
|
||||||
|
import net.sourceforge.pmd.properties.BooleanProperty;
|
||||||
import net.sourceforge.pmd.properties.EnumeratedProperty;
|
import net.sourceforge.pmd.properties.EnumeratedProperty;
|
||||||
import net.sourceforge.pmd.properties.PropertySource;
|
import net.sourceforge.pmd.properties.PropertySource;
|
||||||
|
|
||||||
@ -40,6 +44,14 @@ public class CommentRequiredRule extends AbstractCommentRule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean ignoreOverrideMethods = true;
|
||||||
|
|
||||||
|
public static final BooleanProperty IGNORE_OVERRIDE_DESCRIPTOR =
|
||||||
|
BooleanProperty.named("ignoreOverride")
|
||||||
|
.desc("Ignore methods marked with @Override")
|
||||||
|
.defaultValue(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
public static final EnumeratedProperty<CommentRequirement> HEADER_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<>(
|
public static final EnumeratedProperty<CommentRequirement> HEADER_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<>(
|
||||||
"headerCommentRequirement",
|
"headerCommentRequirement",
|
||||||
"Header comments. Possible values: " + Arrays.toString(CommentRequirement.values()),
|
"Header comments. Possible values: " + Arrays.toString(CommentRequirement.values()),
|
||||||
@ -70,6 +82,7 @@ public class CommentRequiredRule extends AbstractCommentRule {
|
|||||||
CommentRequirement.labels(), CommentRequirement.values(), 1, CommentRequirement.class, 6.0f);
|
CommentRequirement.labels(), CommentRequirement.values(), 1, CommentRequirement.class, 6.0f);
|
||||||
|
|
||||||
public CommentRequiredRule() {
|
public CommentRequiredRule() {
|
||||||
|
definePropertyDescriptor(IGNORE_OVERRIDE_DESCRIPTOR);
|
||||||
definePropertyDescriptor(HEADER_CMT_REQUIREMENT_DESCRIPTOR);
|
definePropertyDescriptor(HEADER_CMT_REQUIREMENT_DESCRIPTOR);
|
||||||
definePropertyDescriptor(FIELD_CMT_REQUIREMENT_DESCRIPTOR);
|
definePropertyDescriptor(FIELD_CMT_REQUIREMENT_DESCRIPTOR);
|
||||||
definePropertyDescriptor(PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR);
|
definePropertyDescriptor(PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR);
|
||||||
@ -122,6 +135,15 @@ public class CommentRequiredRule extends AbstractCommentRule {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object visit(ASTMethodDeclaration decl, Object data) {
|
public Object visit(ASTMethodDeclaration decl, Object data) {
|
||||||
|
if (ignoreOverrideMethods) {
|
||||||
|
List<ASTMarkerAnnotation> annotations = decl.jjtGetParent().findDescendantsOfType(ASTMarkerAnnotation.class);
|
||||||
|
for (ASTMarkerAnnotation ann : annotations) {
|
||||||
|
if (ann.getFirstChildOfType(ASTName.class).getImage().equals("Override")) {
|
||||||
|
return super.visit(decl, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
checkComment(decl, data);
|
checkComment(decl, data);
|
||||||
return super.visit(decl, data);
|
return super.visit(decl, data);
|
||||||
}
|
}
|
||||||
@ -249,6 +271,7 @@ public class CommentRequiredRule extends AbstractCommentRule {
|
|||||||
@Override
|
@Override
|
||||||
public Object visit(ASTCompilationUnit cUnit, Object data) {
|
public Object visit(ASTCompilationUnit cUnit, Object data) {
|
||||||
assignCommentsToDeclarations(cUnit);
|
assignCommentsToDeclarations(cUnit);
|
||||||
|
ignoreOverrideMethods = getProperty(IGNORE_OVERRIDE_DESCRIPTOR);
|
||||||
|
|
||||||
return super.visit(cUnit, data);
|
return super.visit(cUnit, data);
|
||||||
}
|
}
|
||||||
|
@ -216,4 +216,79 @@ public class PmdMissingHeaderCommentTest {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Comment required ignores @override methods by default</description>
|
||||||
|
<expected-problems>0</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
/**
|
||||||
|
* Comment required test class.
|
||||||
|
*/
|
||||||
|
public class CommentRequired {
|
||||||
|
@Override
|
||||||
|
public void noComment() {
|
||||||
|
Object o = new Object() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Inner Class";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Test @override methods reporting</description>
|
||||||
|
<rule-property name="ignoreOverride">false</rule-property>
|
||||||
|
<expected-problems>2</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
/**
|
||||||
|
* Comment required test class.
|
||||||
|
*/
|
||||||
|
public class CommentRequired {
|
||||||
|
@Override
|
||||||
|
public void noComment() {
|
||||||
|
Object o = new Object() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Inner Class";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Test @override methods reporting #2</description>
|
||||||
|
<rule-property name="ignoreOverride">false</rule-property>
|
||||||
|
<expected-problems>0</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
/**
|
||||||
|
* Comment required test class.
|
||||||
|
*/
|
||||||
|
public class CommentRequired {
|
||||||
|
/**
|
||||||
|
* Comment provided
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void noComment() {
|
||||||
|
Object o = new Object() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Inner Class";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
</test-data>
|
</test-data>
|
||||||
|
Reference in New Issue
Block a user