Merge branch 'issue-536' of https://github.com/Monits/pmd into pr-539

This commit is contained in:
Andreas Dangel
2017-08-12 22:06:56 +02:00
4 changed files with 36 additions and 3 deletions

View File

@ -12,6 +12,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTAnnotation;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceBodyDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclarator;
@ -86,6 +87,14 @@ public class CommentDefaultAccessModifierRule extends AbstractCommentRule {
return super.visit(decl, data);
}
@Override
public Object visit(final ASTConstructorDeclaration decl, Object data) {
if (shouldReport(decl)) {
addViolationWithMessage(data, decl, String.format(MESSAGE, decl.getImage(), "constructor"));
}
return super.visit(decl, data);
}
private boolean shouldReport(final AbstractJavaAccessNode decl) {
List<ASTClassOrInterfaceDeclaration> parentClassOrInterface = decl
.getParentsOfType(ASTClassOrInterfaceDeclaration.class);

View File

@ -82,9 +82,9 @@ A rule for the politically correct... we don't want to offend anyone.
message="Missing commented default access modifier"
externalInfoUrl="${pmd.website.baseurl}/rules/java/comments.html#CommentDefaultAccessModifier">
<description>
To avoid mistakes if we want that a Method, Field or Nested class have a default access modifier
we must add a comment at the beginning of the Method, Field or Nested class.
By default the comment must be /* default */, if you want another, you have to provide a regex.
To avoid mistakes if we want that a Method, Constructor, Field or Nested class have a default access modifier
we must add a comment at the beginning of it's declaration.
By default the comment must be /* default */, if you want another, you have to provide a regexp.
</description>
<priority>3</priority>
<properties>

View File

@ -155,6 +155,28 @@ public enum TestEnum {
<code><![CDATA[
public class CommentDefaultAccessModifier {
@VisibleForTesting void method() {}
}
]]></code>
</test-code>
<test-code>
<description>#536 Constructor with default access modifier should trigger</description>
<expected-problems>1</expected-problems>
<code><![CDATA[
public class Foo {
Foo() {}
}
]]></code>
</test-code>
<test-code>
<description>#536 Enum constructor with implicit private modifier should not trigger</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
public enum Bar {
ONE, TWO;
Bar() {}
}
]]></code>
</test-code>

View File

@ -99,6 +99,8 @@ and include them to such reports.
* [#487](https://github.com/pmd/pmd/pull/487): \[java] Fix typeresolution for anonymous extending object
* [#496](https://github.com/pmd/pmd/issues/496): \[java] processing error on generics inherited from enclosing class
* [#527](https://github.com/pmd/pmd/issues/527): \[java] Lombok getter annotation on enum is not recognized correctly
* java-comments
* [#536](https://github.com/pmd/pmd/issues/536): \[java] CommentDefaultAccessModifierRule ignores constructors
* java-controversial
* [#408](https://github.com/pmd/pmd/issues/408): \[java] DFA not analyzing asserts
* java-sunsecure