public new static TypeReference Parse(ContextNode parent, IAbstractSyntaxTree lexerNode)
        {
            Contract.Requires(lexerNode.Type == Lexer.TokenType.Type || lexerNode.Type == Lexer.TokenType.FullSymbol);
            Contract.Ensures(Contract.Result <TypeReference>() != null);
            if (lexerNode.Type == Lexer.TokenType.FullSymbol)
            {
                TypeNode node = DotOperatorNode.Parse(parent, lexerNode) as TypeNode;
                if (node != null)
                {
                    return(node.ParsedType);
                }
                else
                {
                    ErrorCode.TypeExpected.ReportAndThrow(parent.Parser.GetSequencePoint(lexerNode), "Type expected");
                }
            }

            TypeBuilder builder = new TypeBuilder(parent);

            foreach (var node in lexerNode.Children)
            {
                builder.Append(node);
            }

            return(builder.Type);
        }