1
2 package org.codehaus.aspectwerkz.expression.ast;
3
4 import org.codehaus.aspectwerkz.expression.SubtypePatternType;
5 import org.codehaus.aspectwerkz.expression.regexp.NamePattern;
6 import org.codehaus.aspectwerkz.expression.regexp.Pattern;
7 import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
12 public class ASTMethodPattern extends SimpleNode {
13 private TypePattern m_returnTypePattern;
14
15 private TypePattern m_declaringTypePattern;
16
17 private NamePattern m_methodNamePattern;
18
19 private List m_modifiers = new ArrayList();
20
21 public ASTMethodPattern(int id) {
22 super(id);
23 }
24
25 public ASTMethodPattern(ExpressionParser p, int id) {
26 super(p, id);
27 }
28
29 public Object jjtAccept(ExpressionParserVisitor visitor, Object data) {
30 return visitor.visit(this, data);
31 }
32
33 public void addModifier(String modifier) {
34 m_modifiers.add(modifier);
35 }
36
37 public void setReturnTypePattern(String pattern) {
38 if (pattern.endsWith("+")) {
39 pattern = pattern.substring(0, pattern.length() - 1);
40 m_returnTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
41 } else if (pattern.endsWith("#")) {
42 pattern = pattern.substring(0, pattern.length() - 1);
43 m_returnTypePattern = Pattern.compileTypePattern(
44 pattern,
45 SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
46 } else {
47 m_returnTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.NOT_HIERARCHICAL);
48 }
49 }
50
51 public void setFullNamePattern(final String pattern) {
52 int index = pattern.lastIndexOf('.');
53 String classPattern = null;
54
55 if (index > 0) {
56 classPattern = pattern.substring(0, index);
57 if (classPattern.endsWith(".")) {
58 classPattern += ".*";
59 }
60 } else {
61
62 classPattern = "*..*";
63 }
64 if (classPattern.endsWith("+")) {
65 classPattern = classPattern.substring(0, classPattern.length() - 1);
66 m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
67 } else if (classPattern.endsWith("#")) {
68 classPattern = classPattern.substring(0, classPattern.length() - 1);
69 m_declaringTypePattern = Pattern.compileTypePattern(
70 classPattern,
71 SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
72 } else {
73 m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.NOT_HIERARCHICAL);
74 }
75 String methodNamePattern = pattern.substring(index + 1, pattern.length());
76 m_methodNamePattern = Pattern.compileNamePattern(methodNamePattern);
77 }
78
79 public TypePattern getReturnTypePattern() {
80 return m_returnTypePattern;
81 }
82
83 public TypePattern getDeclaringTypePattern() {
84 return m_declaringTypePattern;
85 }
86
87 public NamePattern getMethodNamePattern() {
88 return m_methodNamePattern;
89 }
90
91 public List getModifiers() {
92 return m_modifiers;
93 }
94 }