private ImmutableArray<Symbol> BindQualifiedCref(QualifiedCrefSyntax syntax, out Symbol ambiguityWinner, DiagnosticBag diagnostics)
 {
     // NOTE: we won't check whether container is an error type - we'll just let BindMemberCref fail
     // and report a blanket diagnostic.
     NamespaceOrTypeSymbol container = BindNamespaceOrTypeSymbolInCref(syntax.Container);
     return BindMemberCref(syntax.Member, container, out ambiguityWinner, diagnostics);
 }
        private void AnalyzeQualifiedCref(SyntaxNodeAnalysisContext context, QualifiedCrefSyntax qualifiedCref)
        {
            var options           = context.Options;
            var cancellationToken = context.CancellationToken;
            var semanticModel     = context.SemanticModel;

            // First, just try to simplify the top-most qualified-cref alone. If we're able to do
            // this, then there's no need to process it's container.  i.e.
            //
            // if we have <see cref="A.B.C"/> and we simplify that to <see cref="C"/> there's no
            // point looking at `A.B`.
            if (TrySimplifyTypeNameExpression(semanticModel, qualifiedCref, options, out var diagnostic, cancellationToken))
            {
                context.ReportDiagnostic(diagnostic);

                // found a match on the qualified cref itself. report it and keep processing.
            }
Esempio n. 3
0
            public override SyntaxNode VisitQualifiedCref(QualifiedCrefSyntax node)
            {
                var oldAlwaysSimplify = this.alwaysSimplify;

                if (!this.alwaysSimplify)
                {
                    this.alwaysSimplify = node.HasAnnotation(Simplifier.Annotation);
                }

                var result = SimplifyExpression(
                    node,
                    newNode: base.VisitQualifiedCref(node),
                    simplifier: s_simplifyName);

                this.alwaysSimplify = oldAlwaysSimplify;

                return(result);
            }
Esempio n. 4
0
        /// <inheritdoc/>
        public override SyntaxNode?VisitQualifiedCref(QualifiedCrefSyntax node)
        {
            SymbolInfo info = SemanticModel.GetSymbolInfo(node);

            if (info.Symbol is not INamedTypeSymbol symbol)
            {
                return(base.VisitQualifiedCref(node));
            }

            string[] namespaces = symbol.GetContainingNamespacesAndTypes().Select(n => n.Name).ToArray();

            if (namespaces.Length < 2)
            {
                return(base.VisitQualifiedCref(node));
            }
            else
            {
                return(QualifiedCref(AnalysisUtilities.JoinIntoQualifiedName(namespaces) !, node.Member.WithoutTrivia()).WithTriviaFrom(node));
            }
        }
Esempio n. 5
0
        private static ImmutableArray <ISymbol> GetQualifiedSymbols(
            QualifiedCrefSyntax parent, SyntaxToken token, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            var leftType   = semanticModel.GetTypeInfo(parent.Container, cancellationToken).Type;
            var leftSymbol = semanticModel.GetSymbolInfo(parent.Container, cancellationToken).Symbol;

            var container = (leftSymbol ?? leftType) as INamespaceOrTypeSymbol;

            var result = ArrayBuilder <ISymbol> .GetInstance();

            result.AddRange(semanticModel.LookupSymbols(token.SpanStart, container));

            var namedTypeContainer = container as INamedTypeSymbol;

            if (namedTypeContainer != null)
            {
                result.AddRange(namedTypeContainer.InstanceConstructors);
            }

            return(result.ToImmutableAndFree());
        }
Esempio n. 6
0
        private MultiDictionary <string, TypeParameterSymbol> CreateTypeParameterMap()
        {
#if XSHARP
            var map = new MultiDictionary <string, TypeParameterSymbol>(XSharpString.Comparer);
#else
            var map = new MultiDictionary <string, TypeParameterSymbol>();
#endif

            switch (_crefSyntax.Kind())
            {
            case SyntaxKind.TypeCref:
            {
                AddTypeParameters(((TypeCrefSyntax)_crefSyntax).Type, map);
                break;
            }

            case SyntaxKind.QualifiedCref:
            {
                QualifiedCrefSyntax qualifiedCrefSyntax = ((QualifiedCrefSyntax)_crefSyntax);
                AddTypeParameters(qualifiedCrefSyntax.Member, map);
                AddTypeParameters(qualifiedCrefSyntax.Container, map);
                break;
            }

            case SyntaxKind.NameMemberCref:
            case SyntaxKind.IndexerMemberCref:
            case SyntaxKind.OperatorMemberCref:
            case SyntaxKind.ConversionOperatorMemberCref:
            {
                AddTypeParameters((MemberCrefSyntax)_crefSyntax, map);
                break;
            }

            default:
            {
                throw ExceptionUtilities.UnexpectedValue(_crefSyntax.Kind());
            }
            }
            return(map);
        }
Esempio n. 7
0
        private static IEnumerable <ISymbol> GetQualifiedSymbols(QualifiedCrefSyntax parent, SyntaxToken token, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            var leftType   = semanticModel.GetTypeInfo(parent.Container, cancellationToken).Type;
            var leftSymbol = semanticModel.GetSymbolInfo(parent.Container, cancellationToken).Symbol;

            var container = (leftSymbol ?? leftType) as INamespaceOrTypeSymbol;

            foreach (var symbol in semanticModel.LookupSymbols(token.SpanStart, container))
            {
                yield return(symbol);
            }

            var namedTypeContainer = container as INamedTypeSymbol;

            if (namedTypeContainer != null)
            {
                foreach (var instanceConstructor in namedTypeContainer.InstanceConstructors)
                {
                    yield return(instanceConstructor);
                }
            }
        }
        private MultiDictionary <string, TypeParameterSymbol> CreateTypeParameterMap()
        {
            var map = new MultiDictionary <string, TypeParameterSymbol>();

            switch (crefSyntax.Kind())
            {
            case SyntaxKind.TypeCref:
            {
                AddTypeParameters(((TypeCrefSyntax)crefSyntax).Type, map);
                break;
            }

            case SyntaxKind.QualifiedCref:
            {
                QualifiedCrefSyntax qualifiedCrefSyntax = ((QualifiedCrefSyntax)crefSyntax);
                AddTypeParameters(qualifiedCrefSyntax.Member, map);
                AddTypeParameters(qualifiedCrefSyntax.Container, map);
                break;
            }

            case SyntaxKind.NameMemberCref:
            case SyntaxKind.IndexerMemberCref:
            case SyntaxKind.OperatorMemberCref:
            case SyntaxKind.ConversionOperatorMemberCref:
            {
                AddTypeParameters((MemberCrefSyntax)crefSyntax, map);
                break;
            }

            default:
            {
                Debug.Assert(false, "Unexpected cref syntax kind " + crefSyntax.Kind());
                break;
            }
            }
            return(map);
        }
Esempio n. 9
0
 public override void VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     Log(node, "Unsupported Syntax !");
 }
Esempio n. 10
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     this.OnNodeVisited(node);
     if (!this.traverseRootOnly) base.VisitQualifiedCref(node);
 }
            public override SyntaxNode VisitQualifiedCref(QualifiedCrefSyntax node)
            {
                bool oldAlwaysSimplify = this.alwaysSimplify;
                if (!this.alwaysSimplify)
                {
                    this.alwaysSimplify = node.HasAnnotation(Simplifier.Annotation);
                }

                var result = SimplifyExpression(
                    node,
                    newNode: base.VisitQualifiedCref(node),
                    simplifier: SimplifyName);

                this.alwaysSimplify = oldAlwaysSimplify;

                return result;
            }
Esempio n. 12
0
        private static IEnumerable<ISymbol> GetQualifiedSymbols(QualifiedCrefSyntax parent, SyntaxToken token, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            var leftType = semanticModel.GetTypeInfo(parent.Container, cancellationToken).Type;
            var leftSymbol = semanticModel.GetSymbolInfo(parent.Container, cancellationToken).Symbol;

            var container = (leftSymbol ?? leftType) as INamespaceOrTypeSymbol;

            foreach (var symbol in semanticModel.LookupSymbols(token.SpanStart, container))
            {
                yield return symbol;
            }

            var namedTypeContainer = container as INamedTypeSymbol;
            if (namedTypeContainer != null)
            {
                foreach (var instanceConstructor in namedTypeContainer.InstanceConstructors)
                {
                    yield return instanceConstructor;
                }
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     this.OnNodeVisited(node, this.type.IsInstanceOfType(node));
     base.VisitQualifiedCref(node);
 }
Esempio n. 14
0
 public override void VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     throw new NotImplementedException();
 }
 //
 // Summary:
 //     Called when the visitor visits a QualifiedCrefSyntax node.
 public virtual void VisitQualifiedCref(QualifiedCrefSyntax node);
 /// <inheritdoc />
 public override SyntaxNode VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     return(base.VisitQualifiedCref(node).WithAdditionalAnnotations(Simplifier.Annotation) !);
 }
 public override SyntaxNode VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     node = (QualifiedCrefSyntax)base.VisitQualifiedCref(node);
     Classes.Add(node);
     return(node);
 }
Esempio n. 18
0
 public override void VisitQualifiedCref(QualifiedCrefSyntax node)
 {
     base.VisitQualifiedCref(node);
 }
Esempio n. 19
0
        private static ImmutableArray<ISymbol> GetQualifiedSymbols(
            QualifiedCrefSyntax parent, SyntaxToken token, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            var leftType = semanticModel.GetTypeInfo(parent.Container, cancellationToken).Type;
            var leftSymbol = semanticModel.GetSymbolInfo(parent.Container, cancellationToken).Symbol;

            var container = (leftSymbol ?? leftType) as INamespaceOrTypeSymbol;

            var result = ArrayBuilder<ISymbol>.GetInstance();
            result.AddRange(semanticModel.LookupSymbols(token.SpanStart, container));

            var namedTypeContainer = container as INamedTypeSymbol;
            if (namedTypeContainer != null)
            {
                result.AddRange(namedTypeContainer.InstanceConstructors);
            }

            return result.ToImmutableAndFree();
        }
Esempio n. 20
0
        //public override void VisitPrefixUnaryExpression(PrefixUnaryExpressionSyntax node)
        //{
        //    base.VisitPrefixUnaryExpression(node);
        //}

        //public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node)
        //{
        //    base.VisitPropertyDeclaration(node);
        //}

        public override void VisitQualifiedCref(QualifiedCrefSyntax node)
        {
            Debug.Fail(node.ToString());
            base.VisitQualifiedCref(node);
        }
 public TameQualifiedCrefSyntax(QualifiedCrefSyntax node)
 {
     Node = node;
     AddChildren();
 }