View Javadoc

1   package org.codehaus.aspectwerkz.expression.ast;
2   
3   import org.codehaus.aspectwerkz.expression.SubtypePatternType;
4   import org.codehaus.aspectwerkz.expression.regexp.NamePattern;
5   import org.codehaus.aspectwerkz.expression.regexp.Pattern;
6   import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
7   
8   public class ASTFieldPattern extends SimpleNode {
9       private TypePattern m_fieldTypePattern;
10  
11      private TypePattern m_declaringTypePattern;
12  
13      private NamePattern m_fieldNamePattern;
14  
15      public ASTFieldPattern(int id) {
16          super(id);
17      }
18  
19      public ASTFieldPattern(ExpressionParser p, int id) {
20          super(p, id);
21      }
22  
23      public Object jjtAccept(ExpressionParserVisitor visitor, Object data) {
24          return visitor.visit(this, data);
25      }
26  
27      public void setFieldTypePattern(String pattern) {
28          if (pattern.endsWith("+")) {
29              pattern = pattern.substring(0, pattern.length() - 1);
30              m_fieldTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
31          } else if (pattern.endsWith("#")) {
32              pattern = pattern.substring(0, pattern.length() - 1);
33              m_fieldTypePattern = Pattern
34                      .compileTypePattern(pattern, SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
35          } else {
36              m_fieldTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.NOT_HIERARCHICAL);
37          }
38      }
39  
40      public void setFullNamePattern(final String pattern) {
41          int index = pattern.lastIndexOf('.');
42          String classPattern = null;
43          //Aw-112 support for "field" and "com..field"
44          if (index > 0) {
45              classPattern = pattern.substring(0, index);
46              if (classPattern.endsWith(".")) {
47                  classPattern += ".*";
48              }
49          } else {
50              // unspecified classPattern like "method(..)"
51              classPattern = "*..*";
52          }
53          if (classPattern.endsWith("+")) {
54              classPattern = classPattern.substring(0, classPattern.length() - 1);
55              m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.MATCH_ON_ALL_METHODS);
56          } else if (classPattern.endsWith("#")) {
57              classPattern = classPattern.substring(0, classPattern.length() - 1);
58              m_declaringTypePattern = Pattern.compileTypePattern(
59                      classPattern,
60                      SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY
61              );
62          } else {
63              m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.NOT_HIERARCHICAL);
64          }
65          String namePattern = pattern.substring(index + 1, pattern.length());
66          m_fieldNamePattern = Pattern.compileNamePattern(namePattern);
67      }
68  
69      public TypePattern getFieldTypePattern() {
70          return m_fieldTypePattern;
71      }
72  
73      public TypePattern getDeclaringTypePattern() {
74          return m_declaringTypePattern;
75      }
76  
77      public NamePattern getFieldNamePattern() {
78          return m_fieldNamePattern;
79      }
80  }