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. }
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); }
/// <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)); } }
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()); }
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); }
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); }
public override void VisitQualifiedCref(QualifiedCrefSyntax node) { Log(node, "Unsupported Syntax !"); }
/// <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; }
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); }
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); }
public override void VisitQualifiedCref(QualifiedCrefSyntax node) { base.VisitQualifiedCref(node); }
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(); }
//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(); }