FieldDeclaration implements QualifiableNode
This commit is contained in:
@ -5,7 +5,7 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.java.ast;
|
||||
|
||||
public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements Dimensionable {
|
||||
public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements Dimensionable, QualifiableNode {
|
||||
|
||||
public ASTFieldDeclaration(int id) {
|
||||
super(id);
|
||||
@ -137,4 +137,11 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QualifiedName getQualifiedName() {
|
||||
QualifiedName parent = getFirstParentOfType(ASTClassOrInterfaceDeclaration.class).getQualifiedName();
|
||||
|
||||
return QualifiedName.makeFieldOf(parent, getVariableName());
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ import java.util.Arrays;
|
||||
*/
|
||||
public interface QualifiableNode {
|
||||
|
||||
// non canonical symbols but probably better for regex parsing if need be
|
||||
// anyway can be changed
|
||||
char LEFT_CLASS_SEP = '$';
|
||||
char METHOD_SEP = '#';
|
||||
char NESTED_CLASS_SEP = ':';
|
||||
@ -18,23 +20,28 @@ public interface QualifiableNode {
|
||||
char RIGHT_PARAM_SEP = ')';
|
||||
char PARAMLIST_SEP = ',';
|
||||
char PACKAGE_SEP = '.';
|
||||
char FIELD_SEP = '!';
|
||||
|
||||
QualifiedName getQualifiedName();
|
||||
|
||||
class QualifiedName {
|
||||
private String[] packages = null; // unnamed package
|
||||
private String[] classes = new String[1];
|
||||
private String operation = null;
|
||||
/** Either method name or field name */
|
||||
private String suffix = null;
|
||||
private boolean isField = false;
|
||||
|
||||
public QualifiedName() {
|
||||
}
|
||||
|
||||
public static QualifiedName makeOperationOf(QualifiedName parentClass, String operationName, String[] paramTypes) {
|
||||
public static QualifiedName makeOperationOf(QualifiedName parentClass, String operationName,
|
||||
String[] paramTypes) {
|
||||
QualifiedName qname = new QualifiedName();
|
||||
qname.packages = parentClass.packages;
|
||||
qname.classes = parentClass.classes;
|
||||
|
||||
qname.setOperation(operationName, paramTypes);
|
||||
qname.suffix = getMethodNameOf(operationName, paramTypes);
|
||||
qname.isField = false;
|
||||
return qname;
|
||||
}
|
||||
|
||||
@ -51,44 +58,24 @@ public interface QualifiableNode {
|
||||
return qname;
|
||||
}
|
||||
|
||||
public boolean isClass() {
|
||||
return classes[0] != null && operation == null;
|
||||
public static QualifiedName makeFieldOf(QualifiedName parentClass, String fieldName) {
|
||||
QualifiedName qname = new QualifiedName();
|
||||
qname.packages = parentClass.packages;
|
||||
qname.classes = parentClass.classes;
|
||||
qname.suffix = fieldName;
|
||||
qname.isField = true;
|
||||
return qname;
|
||||
}
|
||||
|
||||
public void setClass(String className) {
|
||||
classes[0] = className;
|
||||
}
|
||||
|
||||
public boolean isNestedClass() {
|
||||
return classes.length > 1 && operation == null;
|
||||
}
|
||||
|
||||
public boolean isOperation() {
|
||||
return operation != null;
|
||||
}
|
||||
|
||||
public String[] getPackages() {
|
||||
return packages;
|
||||
}
|
||||
|
||||
public void setPackages(String[] packs) {
|
||||
packages = packs;
|
||||
}
|
||||
|
||||
public String[] getClasses() {
|
||||
return classes;
|
||||
}
|
||||
|
||||
public void setClasses(String[] classes) {
|
||||
this.classes = classes;
|
||||
}
|
||||
|
||||
public String getOperation() {
|
||||
return operation;
|
||||
}
|
||||
|
||||
|
||||
public void setOperation(String methodName, String[] paramTypes) {
|
||||
/**
|
||||
* Returns a normalized method name based on parameter types and method name.
|
||||
*
|
||||
* @param methodName Name of the method.
|
||||
* @param paramTypes Type of parameters.
|
||||
*
|
||||
* @return Normalized method name.
|
||||
*/
|
||||
public static String getMethodNameOf(String methodName, String[] paramTypes) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(methodName);
|
||||
sb.append(LEFT_PARAM_SEP);
|
||||
@ -104,7 +91,48 @@ public interface QualifiableNode {
|
||||
|
||||
sb.append(RIGHT_PARAM_SEP);
|
||||
|
||||
this.operation = sb.toString();
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public boolean isClass() {
|
||||
return classes[0] != null && suffix == null;
|
||||
}
|
||||
|
||||
public void setClass(String className) {
|
||||
classes[0] = className;
|
||||
}
|
||||
|
||||
public boolean isNestedClass() {
|
||||
return classes.length > 1 && suffix == null;
|
||||
}
|
||||
|
||||
public boolean isOperation() {
|
||||
return suffix != null && !isField;
|
||||
}
|
||||
|
||||
public boolean isField() {
|
||||
return suffix != null && isField;
|
||||
}
|
||||
|
||||
public void setField(String fieldName) {
|
||||
suffix = fieldName;
|
||||
isField = true;
|
||||
}
|
||||
|
||||
public String[] getPackages() {
|
||||
return packages;
|
||||
}
|
||||
|
||||
public void setPackages(String[] packages) {
|
||||
this.packages = packages;
|
||||
}
|
||||
|
||||
public String[] getClasses() {
|
||||
return classes;
|
||||
}
|
||||
|
||||
public String getSuffix() {
|
||||
return suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -130,9 +158,9 @@ public interface QualifiableNode {
|
||||
|
||||
sb.append(classes[last]);
|
||||
|
||||
if (operation != null) {
|
||||
sb.append(METHOD_SEP);
|
||||
sb.append(operation);
|
||||
if (suffix != null) {
|
||||
sb.append(isField ? FIELD_SEP : METHOD_SEP);
|
||||
sb.append(suffix);
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
@ -162,8 +190,8 @@ public interface QualifiableNode {
|
||||
hash += p.hashCode();
|
||||
}
|
||||
}
|
||||
if (operation != null)
|
||||
hash += operation.hashCode();
|
||||
if (suffix != null)
|
||||
hash += suffix.hashCode();
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public class QualifiedNameTest extends ParserTst {
|
||||
assertEquals(LEFT_CLASS_SEP + "Foo", qname.toString());
|
||||
assertNull(qname.getPackages());
|
||||
assertEquals(1, qname.getClasses().length);
|
||||
assertNull(qname.getOperation());
|
||||
assertNull(qname.getSuffix());
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ public class QualifiedNameTest extends ParserTst {
|
||||
assertEquals("foo" + PACKAGE_SEP + "bar" + LEFT_CLASS_SEP + "Bzaz", qname.toString());
|
||||
assertEquals(2, qname.getPackages().length);
|
||||
assertEquals(1, qname.getClasses().length);
|
||||
assertNull(qname.getOperation());
|
||||
assertNull(qname.getSuffix());
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,8 +116,8 @@ public class QualifiedNameTest extends ParserTst {
|
||||
assertEquals("bar" + LEFT_CLASS_SEP
|
||||
+ "Bzaz" + METHOD_SEP + "foo" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP,
|
||||
qname.toString());
|
||||
assertNotNull(qname.getOperation());
|
||||
assertEquals("foo" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP, qname.getOperation());
|
||||
assertNotNull(qname.getSuffix());
|
||||
assertEquals("foo" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP, qname.getSuffix());
|
||||
|
||||
}
|
||||
}
|
||||
@ -135,8 +135,8 @@ public class QualifiedNameTest extends ParserTst {
|
||||
assertEquals("bar" + LEFT_CLASS_SEP
|
||||
+ "Bzaz" + METHOD_SEP + "Bzaz" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP,
|
||||
qname.toString());
|
||||
assertNotNull(qname.getOperation());
|
||||
assertEquals("Bzaz" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP, qname.getOperation());
|
||||
assertNotNull(qname.getSuffix());
|
||||
assertEquals("Bzaz" + LEFT_PARAM_SEP + RIGHT_PARAM_SEP, qname.getSuffix());
|
||||
|
||||
}
|
||||
}
|
||||
@ -154,8 +154,8 @@ public class QualifiedNameTest extends ParserTst {
|
||||
assertEquals("bar" + LEFT_CLASS_SEP
|
||||
+ "Bzaz" + METHOD_SEP + "Bzaz" + LEFT_PARAM_SEP + "int" + PARAMLIST_SEP + "String" + RIGHT_PARAM_SEP,
|
||||
qname.toString());
|
||||
assertNotNull(qname.getOperation());
|
||||
assertEquals("Bzaz" + LEFT_PARAM_SEP + "int" + PARAMLIST_SEP + "String" + RIGHT_PARAM_SEP, qname.getOperation());
|
||||
assertNotNull(qname.getSuffix());
|
||||
assertEquals("Bzaz" + LEFT_PARAM_SEP + "int" + PARAMLIST_SEP + "String" + RIGHT_PARAM_SEP, qname.getSuffix());
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user