/* Generated By:JJTree: Do not edit this line. ASTMethodPattern.java */ package org.codehaus.aspectwerkz.expression.ast; import org.codehaus.aspectwerkz.expression.SubtypePatternType; import org.codehaus.aspectwerkz.expression.regexp.NamePattern; import org.codehaus.aspectwerkz.expression.regexp.Pattern; import org.codehaus.aspectwerkz.expression.regexp.TypePattern; import java.util.ArrayList; import java.util.List; public class ASTMethodPattern extends SimpleNode { private TypePattern m_returnTypePattern; private TypePattern m_declaringTypePattern; private NamePattern m_methodNamePattern; private List m_modifiers = new ArrayList(); public ASTMethodPattern(int id) { super(id); } public ASTMethodPattern(ExpressionParser p, int id) { super(p, id); } public Object jjtAccept(ExpressionParserVisitor visitor, Object data) { return visitor.visit(this, data); } public void addModifier(String modifier) { m_modifiers.add(modifier); } public void setReturnTypePattern(String pattern) { if (pattern.endsWith("+")) { pattern = pattern.substring(0, pattern.length() - 1); m_returnTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.MATCH_ON_ALL_METHODS); } else if (pattern.endsWith("#")) { pattern = pattern.substring(0, pattern.length() - 1); m_returnTypePattern = Pattern.compileTypePattern( pattern, SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY ); } else { m_returnTypePattern = Pattern.compileTypePattern(pattern, SubtypePatternType.NOT_HIERARCHICAL); } } public void setFullNamePattern(final String pattern) throws ParseException { int index = pattern.lastIndexOf('.'); String classPattern = null; //Aw-112 support for "method(..)" and "com..*(..)" if (index > 0) { classPattern = pattern.substring(0, index); if (classPattern.endsWith(".")) { classPattern += ".*"; } } else { // unspecified classPattern like "method(..)" classPattern = "*..*"; } if (classPattern.endsWith("+")) { classPattern = classPattern.substring(0, classPattern.length() - 1); m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.MATCH_ON_ALL_METHODS); } else if (classPattern.endsWith("#")) { classPattern = classPattern.substring(0, classPattern.length() - 1); m_declaringTypePattern = Pattern.compileTypePattern( classPattern, SubtypePatternType.MATCH_ON_BASE_TYPE_METHODS_ONLY ); } else { m_declaringTypePattern = Pattern.compileTypePattern(classPattern, SubtypePatternType.NOT_HIERARCHICAL); } String methodNamePattern = pattern.substring(index + 1, pattern.length()); m_methodNamePattern = Pattern.compileNamePattern(methodNamePattern); if ("new".equals(methodNamePattern)) { throw new ParseException("Using a constructor pattern with an explicit return type is not allowed"); } } public TypePattern getReturnTypePattern() { return m_returnTypePattern; } public TypePattern getDeclaringTypePattern() { return m_declaringTypePattern; } public NamePattern getMethodNamePattern() { return m_methodNamePattern; } public List getModifiers() { return m_modifiers; } }