Пример #1
0
        /// <summary>
        /// Generates an element access expression
        /// </summary>
        /// <param name="node">The expression</param>
        public override void Generate(ElementAccessExpressionSyntax node)
        {
            m_context.Writer.ShouldOutputPost = true;

            IEnumerable <SyntaxNode> nodes = node.ChildNodes();

            foreach (SyntaxNode child in nodes)
            {
                SyntaxKind kind = child.Kind();

                if (kind == SyntaxKind.IdentifierName)
                {
                    ISymbol symbol = m_context.Model.GetSymbolInfo(child).Symbol;
                    if (symbol.Kind == SymbolKind.Field && !symbol.IsStatic)
                    {
                        m_context.Writer.Append("obj->");
                    }

                    m_context.Writer.Append(m_context.TypeConvert.ConvertVariableName(child));
                }
                else if (kind == SyntaxKind.BracketedArgumentList)
                {
                    BracketedArgumentListSyntax args     = child as BracketedArgumentListSyntax;
                    IEnumerable <SyntaxNode>    children = args.ChildNodes();

                    m_context.Writer.Append("[");

                    foreach (ArgumentSyntax childNode in children)
                    {
                        m_context.Generators.Expression.Generate(childNode.Expression);
                    }

                    m_context.Writer.Append("]");
                }
                else
                {
                    m_context.Generators.Expression.Generate(child);
                }
            }

            m_context.Writer.ShouldOutputPost = false;
        }