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 if (index > 0) { 45 classPattern = pattern.substring(0, index); 46 if (classPattern.endsWith(".")) { 47 classPattern += ".*"; 48 } 49 } else { 50 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 } | Popular Tags |