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)); }