01: package org.codehaus.aspectwerkz.expression.ast;
02:
03: import org.codehaus.aspectwerkz.expression.SubtypePatternType;
04: import org.codehaus.aspectwerkz.expression.regexp.NamePattern;
05: import org.codehaus.aspectwerkz.expression.regexp.Pattern;
06: import org.codehaus.aspectwerkz.expression.regexp.TypePattern;
07:
08: public class ASTFieldPattern extends SimpleNode {
09: 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,
31: SubtypePatternType.MATCH_ON_ALL_METHODS);
32: } else if (pattern.endsWith("#")) {
33: pattern = pattern.substring(0, pattern.length() - 1);
34: m_fieldTypePattern = Pattern.compileTypePattern(pattern,
35: SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
36: } else {
37: m_fieldTypePattern = Pattern.compileTypePattern(pattern,
38: SubtypePatternType.NOT_HIERARCHICAL);
39: }
40: }
41:
42: public void setFullNamePattern(final String pattern) {
43: int index = pattern.lastIndexOf('.');
44: String classPattern = null;
45: //Aw-112 support for "field" and "com..field"
46: if (index > 0) {
47: classPattern = pattern.substring(0, index);
48: if (classPattern.endsWith(".")) {
49: classPattern += ".*";
50: }
51: } else {
52: // unspecified classPattern like "method(..)"
53: classPattern = "*..*";
54: }
55: if (classPattern.endsWith("+")) {
56: classPattern = classPattern.substring(0, classPattern
57: .length() - 1);
58: m_declaringTypePattern = Pattern.compileTypePattern(
59: classPattern,
60: SubtypePatternType.MATCH_ON_ALL_METHODS);
61: } else if (classPattern.endsWith("#")) {
62: classPattern = classPattern.substring(0, classPattern
63: .length() - 1);
64: m_declaringTypePattern = Pattern.compileTypePattern(
65: classPattern,
66: SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY);
67: } else {
68: m_declaringTypePattern = Pattern.compileTypePattern(
69: classPattern, SubtypePatternType.NOT_HIERARCHICAL);
70: }
71: String namePattern = pattern.substring(index + 1, pattern
72: .length());
73: m_fieldNamePattern = Pattern.compileNamePattern(namePattern);
74: }
75:
76: public TypePattern getFieldTypePattern() {
77: return m_fieldTypePattern;
78: }
79:
80: public TypePattern getDeclaringTypePattern() {
81: return m_declaringTypePattern;
82: }
83:
84: public NamePattern getFieldNamePattern() {
85: return m_fieldNamePattern;
86: }
87: }
|