View Javadoc

1   /* Generated By:JJTree: Do not edit this line. ASTMethodPattern.java */
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          //Aw-112 support for "method(..)" and "com..*(..)"
55          if (index > 0) {
56              classPattern = pattern.substring(0, index);
57              if (classPattern.endsWith(".")) {
58                  classPattern += ".*";
59              }
60          } else {
61              // unspecified classPattern like "method(..)"
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  }