1
2
3 package net.sourceforge.pmd.ast;
4
5 public class ASTFieldDeclaration extends AccessNode implements Dimensionable {
6
7 public ASTFieldDeclaration(int id) {
8 super(id);
9 }
10
11 public ASTFieldDeclaration(JavaParser p, int id) {
12 super(p, id);
13 }
14
15 /***
16 * Accept the visitor. *
17 */
18 public Object jjtAccept(JavaParserVisitor visitor, Object data) {
19 return visitor.visit(this, data);
20 }
21
22 public boolean isSyntacticallyPublic() {
23 return super.isPublic();
24 }
25
26 public boolean isPublic() {
27 if (isInterfaceMember()) {
28 return true;
29 }
30 return super.isPublic();
31 }
32
33 public boolean isSyntacticallyStatic() {
34 return super.isStatic();
35 }
36
37 public boolean isStatic() {
38 if (isInterfaceMember()) {
39 return true;
40 }
41 return super.isStatic();
42 }
43
44 public boolean isSyntacticallyFinal() {
45 return super.isFinal();
46 }
47
48 public boolean isFinal() {
49 if (isInterfaceMember()) {
50 return true;
51 }
52 return super.isFinal();
53 }
54
55 public boolean isPrivate() {
56 if (isInterfaceMember()) {
57 return false;
58 }
59 return super.isPrivate();
60 }
61
62 public boolean isPackagePrivate() {
63 if (isInterfaceMember()) {
64 return false;
65 }
66 return super.isPackagePrivate();
67 }
68
69 public boolean isProtected() {
70 if (isInterfaceMember()) {
71 return false;
72 }
73 return super.isProtected();
74 }
75
76 public boolean isInterfaceMember() {
77 ASTClassOrInterfaceDeclaration n = (ASTClassOrInterfaceDeclaration)getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
78 return n instanceof ASTClassOrInterfaceDeclaration && n.isInterface();
79 }
80
81 public boolean isArray() {
82 return checkType() + checkDecl() > 0;
83 }
84
85 public int getArrayDepth() {
86 if (!isArray()) {
87 return 0;
88 }
89 return checkType() + checkDecl();
90 }
91
92 private int checkType() {
93 if (jjtGetNumChildren() == 0 || !(jjtGetChild(0) instanceof ASTType)) {
94 return 0;
95 }
96 return ((ASTType) jjtGetChild(0)).getArrayDepth();
97 }
98
99 private int checkDecl() {
100 if (jjtGetNumChildren() < 2 || !(jjtGetChild(1) instanceof ASTVariableDeclarator)) {
101 return 0;
102 }
103 return ((ASTVariableDeclaratorId) (jjtGetChild(1).jjtGetChild(0))).getArrayDepth();
104 }
105
106 public void dump(String prefix) {
107 String out = collectDumpedModifiers(prefix);
108 if (isArray()) {
109 out += "(array";
110 for (int i = 0; i < getArrayDepth(); i++) {
111 out += "[";
112 }
113 out += ")";
114 }
115 System.out.println(out);
116 dumpChildren(prefix);
117 }
118
119 /***
120 * Gets the variable name of this field.
121 * This method searches the first VariableDeclartorId node and returns it's image or <code>null</code> if the child node is not found.
122 *
123 * @return a String representing the name of the variable
124 */
125 public String getVariableName() {
126 ASTVariableDeclaratorId decl = (ASTVariableDeclaratorId) getFirstChildOfType(ASTVariableDeclaratorId.class);
127 if (decl != null) {
128 return decl.getImage();
129 }
130 return null;
131 }
132 }