Example #1
0
        protected override Expression VisitMemberAccess(MemberAccessBindingParserNode node)
        {
            var identifier = node.MemberNameExpression.Name;
            var target     = Visit(node.TargetExpression);

            return(ExpressionHelper.GetMember(target, identifier));
        }
        protected override Expression VisitMemberAccess(MemberAccessBindingParserNode node)
        {
            var nameNode       = node.MemberNameExpression;
            var typeParameters = nameNode is GenericNameBindingParserNode
                ? ResolveGenericArgumets(nameNode.CastTo <GenericNameBindingParserNode>())
                : null;

            var identifierName = (typeParameters?.Count() ?? 0) > 0
                ? $"{nameNode.Name}`{typeParameters.Count()}"
                : nameNode.Name;

            var target = Visit(node.TargetExpression);

            if (target is UnknownStaticClassIdentifierExpression)
            {
                var name = (target as UnknownStaticClassIdentifierExpression).Name + "." + identifierName;

                var resolvedTypeExpression = Registry.Resolve(name, throwOnNotFound: false) ?? new UnknownStaticClassIdentifierExpression(name);

                if (typeParameters != null)
                {
                    var resolvedType = resolvedTypeExpression.Type.MakeGenericType(typeParameters);
                    resolvedTypeExpression = new StaticClassIdentifierExpression(resolvedType);
                }
                return(resolvedTypeExpression);
            }

            return(ExpressionHelper.GetMember(target, nameNode.Name, typeParameters, onlyMemberTypes: ResolveOnlyTypeName));
        }