public override object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
        {
            if (identifierExpression.TypeArguments != null && identifierExpression.TypeArguments.Count > 0)
            {
                if (resolver.CallingType != null)
                {
                    foreach (var type in resolver.Dom.GetInheritanceTree(resolver.CallingType))
                    {
                        IMethod possibleMethod = type.Methods.Where(m => m.Name == identifierExpression.Identifier && m.TypeParameters.Count == identifierExpression.TypeArguments.Count && m.IsAccessibleFrom(resolver.Dom, resolver.CallingType, resolver.CallingMember, true)).FirstOrDefault();
                        if (possibleMethod != null)
                        {
                            MethodResolveResult methodResolveResult = new MethodResolveResult(possibleMethod);
                            methodResolveResult.CallingType   = resolver.CallingType;
                            methodResolveResult.CallingMember = resolver.CallingMember;

                            identifierExpression.TypeArguments.ForEach(arg => methodResolveResult.AddGenericArgument(resolver.ResolveType(arg.ConvertToReturnType())));
                            methodResolveResult.ResolveExtensionMethods();
                            return(methodResolveResult);
                        }
                    }
                }
                TypeReference reference = new TypeReference(identifierExpression.Identifier);
                reference.GenericTypes.AddRange(identifierExpression.TypeArguments);
                ResolveResult result = CreateResult(reference);
                result.StaticResolve = true;
                return(result);
            }
//			Console.WriteLine ("visit id: " + identifierExpression.Identifier);
            var res = resolver.ResolveIdentifier(this, identifierExpression.Identifier.TrimEnd('.'));

//			Console.WriteLine ("result: " + res);
            return(res);
        }