1 package net.sourceforge.pmd.lang.java.rule.comments;
2
3
4 import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
5 import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty;
6 import net.sourceforge.pmd.lang.rule.properties.StringMultiProperty;
7
8
9
10
11
12
13 public class HeaderCommentsRule extends AbstractCommentRule {
14
15 private static final String[] requiredWords = new String[] { "copyright" };
16 private static final String[] requiredTags = new String[] { "author", "version" };
17
18 public static final StringMultiProperty REQUIRED_TERMS_DESCRIPTOR = new StringMultiProperty("requiredTerms",
19 "Expected terms or phrases in the code header", requiredWords, 1.0f, '|');
20
21 public static final StringMultiProperty REQUIRED_TAGS_DESCRIPTOR = new StringMultiProperty("requiredTags",
22 "Expected tags in the header", requiredTags, 2.0f, '|');
23
24 enum RequiredHeaderPlacement {
25 BeforePackageDeclaration("Before package"),
26 BeforeImportStatements("Before imports"),
27 BeforeTypeDeclaration("Before types"),
28 Anywhere("Anywhere");
29
30 private final String label;
31
32 RequiredHeaderPlacement(String theLabel) {
33 label = theLabel;
34 }
35
36 public static String[] labels() {
37 String[] labels = new String[values().length];
38 int i=0;
39 for (RequiredHeaderPlacement placement : values()) {
40 labels[i++] = placement.label;
41 }
42 return labels;
43 }
44 }
45
46 public static final EnumeratedProperty<RequiredHeaderPlacement> HEADER_PLACEMENT_DESCRIPTOR = new EnumeratedProperty<RequiredHeaderPlacement>(
47 "headerPlacement",
48 "Placement of the header comment",
49 RequiredHeaderPlacement.labels(),
50 RequiredHeaderPlacement.values(),
51 0, 3.0f
52 );
53
54 public HeaderCommentsRule() {
55 definePropertyDescriptor(REQUIRED_TERMS_DESCRIPTOR);
56 definePropertyDescriptor(REQUIRED_TAGS_DESCRIPTOR);
57 definePropertyDescriptor(HEADER_PLACEMENT_DESCRIPTOR);
58 }
59
60 @Override
61 public Object visit(ASTCompilationUnit cUnit, Object data) {
62
63
64
65 return super.visit(cUnit, data);
66 }
67 }