protected virtual bool NameMatch(MethodSignature signature, MethodInfo method, PointCutFlags flags) { String sign = signature.MethodName; String name = method.Name; if (sign.IndexOf('*') != -1) { return Regex.IsMatch(name, sign); } else if ((method.IsSpecialName && (((int) (flags & PointCutFlags.Property)) != 0)) || (name.StartsWith("get_") && (((int) (flags & PointCutFlags.PropertyRead)) != 0)) || (name.StartsWith("set_") && (((int) (flags & PointCutFlags.PropertyWrite)) != 0))) { name = name.Substring(4); } return name.Equals(sign); }
protected virtual bool AccessMatch(MethodSignature signature, MethodInfo method) { if (signature.AllAccess) return true; return ((signature.Access == "public" && method.IsPublic) || (signature.Access == "private" && method.IsPrivate) || (signature.Access == "internal" && method.IsAssembly)); }
protected virtual bool ReturnTypeMatch(MethodSignature signature, MethodInfo method) { if (signature.AllRetTypes) { return true; } return TypeMatch(signature.RetType, method.ReturnType); }
protected virtual bool ArgumentsMatch(MethodSignature signature, MethodInfo method) { if (signature.AllArguments) { return true; } String[] arguments = signature.Arguments; ParameterInfo[] parameters = method.GetParameters(); for (int i = 0; i < arguments.Length; i++) { String argName = arguments[i]; if (argName.Equals("*")) { break; } else if (i == parameters.Length) { return false; } else if (i == arguments.Length - 1 && arguments.Length != parameters.Length) { return false; } if (!TypeMatch(argName, parameters[i].ParameterType)) { return false; } } return true; }