package org.codehaus.aspectwerkz.expression.ast;
import org.codehaus.aspectwerkz.expression.SubtypePatternType;
import org.codehaus.aspectwerkz.expression.regexp.NamePattern;
import org.codehaus.aspectwerkz.expression.regexp.Pattern;
import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
public class ASTFieldPattern extends SimpleNode {
private TypePattern m_fieldTypePattern;
private TypePattern m_declaringTypePattern;
private NamePattern m_fieldNamePattern;
public ASTFieldPattern(int id) {
super(id);
}
public ASTFieldPattern(ExpressionParser p, int id) {
super(p, id);
}
public Object jjtAccept(ExpressionParserVisitor visitor, Object data) {
return visitor.visit(this, data);
}
public void setFieldTypePattern(String pattern) {
if (pattern.endsWith("+")) {
pattern = pattern.substring(0, pattern.length() - 1);
m_fieldTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
} else if (pattern.endsWith("#")) {
pattern = pattern.substring(0, pattern.length() - 1);
m_fieldTypePattern = Pattern
.compileTypePattern(pattern, SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
} else {
m_fieldTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.NOT_HIERARCHICAL);
}
}
public void setFullNamePattern(final String pattern) {
int index = pattern.lastIndexOf('.');
String classPattern = null;
//Aw-112 support for "field" and "com..field"
if (index > 0) {
classPattern = pattern.substring(0, index);
if (classPattern.endsWith(".")) {
classPattern += ".*";
}
} else {
// unspecified classPattern like "method(..)"
classPattern = "*..*";
}
if (classPattern.endsWith("+")) {
classPattern = classPattern.substring(0, classPattern.length() - 1);
m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
} else if (classPattern.endsWith("#")) {
classPattern = classPattern.substring(0, classPattern.length() - 1);
m_declaringTypePattern = Pattern.compileTypePattern(
classPattern,
SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY
);
} else {
m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.NOT_HIERARCHICAL);
}
String namePattern = pattern.substring(index + 1, pattern.length());
m_fieldNamePattern = Pattern.compileNamePattern(namePattern);
}
public TypePattern getFieldTypePattern() {
return m_fieldTypePattern;
}
public TypePattern getDeclaringTypePattern() {
return m_declaringTypePattern;
}
public NamePattern getFieldNamePattern() {
return m_fieldNamePattern;
}
}