Пример #1
0
        /// <summary>
        /// 获取 成员访问语法节点的父级类型
        /// </summary>
        public static ITypeSymbol?GetMemberAccessSyntaxParentType(this MemberAccessExpressionSyntax memberAccessExpressionSyntax,
                                                                  SemanticModel semanticModel)
        {
            SyntaxNode?firstChildSyntaxNode = memberAccessExpressionSyntax.GetFirstChild();

            if (firstChildSyntaxNode == null)
            {
                return(null);
            }

            ISymbol?firstChildSymbol = semanticModel.GetSymbolInfo(firstChildSyntaxNode).Symbol;

            if (firstChildSymbol == null)
            {
                return(null);
            }

            if (firstChildSymbol is ILocalSymbol localSymbol)
            {
                return(localSymbol.Type);
            }

            if (firstChildSymbol is IParameterSymbol parameterSymbol)
            {
                return(parameterSymbol.Type);
            }

            if (firstChildSymbol is IPropertySymbol propertySymbol)
            {
                return(propertySymbol.Type);
            }

            if (firstChildSymbol is IMethodSymbol methodSymbol)
            {
                return(methodSymbol.ReturnType);
            }

            if (firstChildSymbol is IFieldSymbol fieldSymbol)
            {
                return(fieldSymbol.Type);
            }

            if (firstChildSymbol is IEventSymbol eventSymbol)
            {
                return(eventSymbol.Type);
            }

            return(null);
        }