1 package org.codehaus.aspectwerkz.expression.ast;
2
3 import org.codehaus.aspectwerkz.expression.SubtypePatternType;
4 import org.codehaus.aspectwerkz.expression.regexp.Pattern;
5 import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
6
7 public class ASTConstructorPattern extends SimpleNode {
8 private TypePattern m_declaringTypePattern;
9
10 public ASTConstructorPattern(int id) {
11 super(id);
12 }
13
14 public ASTConstructorPattern(ExpressionParser p, int id) {
15 super(p, id);
16 }
17
18 public Object jjtAccept(ExpressionParserVisitor visitor, Object data) {
19 return visitor.visit(this, data);
20 }
21
22 public void setFullNamePattern(String pattern) {
23 int index = pattern.lastIndexOf('.');
24 String classPattern = null;
25
26 if (index > 0) {
27 classPattern = pattern.substring(0, index);
28 } else {
29
30 classPattern = "*..*";
31 }
32 if (classPattern.endsWith("+")) {
33 classPattern = classPattern.substring(0, classPattern.length() - 1);
34 m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
35 } else if (classPattern.endsWith("#")) {
36 classPattern = classPattern.substring(0, classPattern.length() - 1);
37 m_declaringTypePattern = Pattern.compileTypePattern(
38 classPattern,
39 SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
40 } else {
41 m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.NOT_HIERARCHICAL);
42 }
43 }
44
45 public TypePattern getDeclaringTypePattern() {
46 return m_declaringTypePattern;
47 }
48 }