Пример #1
0
        public static void Write(this IdentifierNameSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context)
        {
            var symbol      = context.SemanticModel.GetSymbolInfo(syntax).Symbol;
            var classNode   = GetClassDeclarionSyntax(syntax);
            var classSymbol = (ITypeSymbol)ModelExtensions.GetDeclaredSymbol(context.SemanticModel, classNode);

            var previousToken         = syntax.GetFirstToken().GetPreviousToken();
            var previousPreviousToken = previousToken.GetPreviousToken();

            var isFollowingDot = previousToken.IsKind(SyntaxKind.DotToken);
            var identifierHasThisOrBaseReference =
                isFollowingDot && (
                    previousPreviousToken.IsKind(SyntaxKind.ThisKeyword) ||
                    previousPreviousToken.IsKind(SyntaxKind.BaseKeyword));

            var isPropertyFieldOrMethod =
                (symbol.Kind == SymbolKind.Property || symbol.Kind == SymbolKind.Field || symbol.Kind == SymbolKind.Method);

            if ((!isFollowingDot || identifierHasThisOrBaseReference) && isPropertyFieldOrMethod && IsDeclaringTypeThisOrBase(symbol.ContainingType, classSymbol))
            {
                if (previousPreviousToken.IsKind(SyntaxKind.BaseKeyword))
                {
                    textWriter.Write("(element % _M.DOT_LVL(typeObject.Level - 1, true)).");
                }
                else
                {
                    textWriter.Write("(element % _M.DOT_LVL(typeObject.Level)).");
                }
            }

            if (symbol.Kind == SymbolKind.NamedType)
            {
                context.TypeReferenceWriter.WriteInteractionElementReference((ITypeSymbol)symbol, textWriter);
            }
            else
            {
                textWriter.Write(syntax.Identifier.Text);
            }
        }