1 package net.sourceforge.pmd.lang.java.rule.comments;
2
3 import net.sourceforge.pmd.PropertySource;
4 import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
5 import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty;
6
7
8
9
10 public class CommentRequiredRule extends AbstractCommentRule {
11
12 enum CommentRequirement {
13 Required("Required"),
14 Ignored("Ignored"),
15 Unwanted("Unwanted");
16
17 private final String label;
18
19 CommentRequirement(String theLabel) {
20 label = theLabel;
21 }
22
23 public static String[] labels() {
24 String[] labels = new String[values().length];
25 int i=0;
26 for (CommentRequirement requirement : values()) {
27 labels[i++] = requirement.label;
28 }
29 return labels;
30 }
31 }
32
33 public static final EnumeratedProperty<CommentRequirement> HEADER_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<CommentRequirement>(
34 "headerCommentRequirement",
35 "Header comments",
36 CommentRequirement.labels(),
37 CommentRequirement.values(),
38 0, 1.0f
39 );
40
41 public static final EnumeratedProperty<CommentRequirement> FIELD_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<CommentRequirement>(
42 "fieldCommentRequirement",
43 "Field comments",
44 CommentRequirement.labels(),
45 CommentRequirement.values(),
46 0, 2.0f
47 );
48
49 public static final EnumeratedProperty<CommentRequirement> PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<CommentRequirement>(
50 "publicMethodCommentRequirement",
51 "Public method comments",
52 CommentRequirement.labels(),
53 CommentRequirement.values(),
54 0, 3.0f
55 );
56
57 public static final EnumeratedProperty<CommentRequirement> PROT_METHOD_CMT_REQUIREMENT_DESCRIPTOR = new EnumeratedProperty<CommentRequirement>(
58 "protectedMethodCommentRequirement",
59 "Protected method comments",
60 CommentRequirement.labels(),
61 CommentRequirement.values(),
62 0, 4.0f
63 );
64
65 public CommentRequiredRule() {
66 definePropertyDescriptor(HEADER_CMT_REQUIREMENT_DESCRIPTOR);
67 definePropertyDescriptor(FIELD_CMT_REQUIREMENT_DESCRIPTOR);
68 definePropertyDescriptor(PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR);
69 definePropertyDescriptor(PROT_METHOD_CMT_REQUIREMENT_DESCRIPTOR);
70 }
71
72 @Override
73 public Object visit(ASTCompilationUnit cUnit, Object data) {
74
75
76
77 return super.visit(cUnit, data);
78 }
79
80 public boolean allCommentsAreIgnored() {
81
82 return getProperty(HEADER_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored &&
83 getProperty(FIELD_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored &&
84 getProperty(PUB_METHOD_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored &&
85 getProperty(PROT_METHOD_CMT_REQUIREMENT_DESCRIPTOR) == CommentRequirement.Ignored ;
86 }
87
88
89
90
91 @Override
92 public String dysfunctionReason() {
93 return allCommentsAreIgnored() ?
94 "All comment types are ignored" :
95 null;
96 }
97 }