package org.codehaus.aspectwerkz.expression.ast;
import org.codehaus.aspectwerkz.expression.SubtypePatternType;
import org.codehaus.aspectwerkz.expression.regexp.Pattern;
import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
public class ASTConstructorPattern extends SimpleNode {
private TypePattern m_declaringTypePattern;
public ASTConstructorPattern(int id) {
super(id);
}
public ASTConstructorPattern(ExpressionParser p, int id) {
super(p, id);
}
public Object jjtAccept(ExpressionParserVisitor visitor, Object data) {
return visitor.visit(this, data);
}
public void setFullNamePattern(String pattern) {
int index = pattern.lastIndexOf('.');
String classPattern = null;
//Aw-112 support for "new(..)"
if (index > 0) {
classPattern = pattern.substring(0, index);
} else {
// unspecified classPattern like "new(..)"
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);
}
}
public TypePattern getDeclaringTypePattern() {
return m_declaringTypePattern;
}
}