@@ -5,6 +5,7 @@ namespace StyleCop.Analyzers.Helpers
55{
66 using System . Text ;
77 using Microsoft . CodeAnalysis ;
8+ using Microsoft . CodeAnalysis . CSharp ;
89 using Microsoft . CodeAnalysis . CSharp . Syntax ;
910 using StyleCop . Analyzers . Lightup ;
1011
@@ -36,17 +37,19 @@ public static string ToQualifiedString(this ISymbol symbol, NameSyntax name)
3637
3738 private static bool AppendQualifiedSymbolName ( StringBuilder builder , ISymbol symbol , TypeSyntax type )
3839 {
39- switch ( symbol )
40+ switch ( symbol . Kind )
4041 {
41- case IArrayTypeSymbol arraySymbol :
42+ case SymbolKind . ArrayType :
43+ var arraySymbol = ( IArrayTypeSymbol ) symbol ;
4244 AppendQualifiedSymbolName ( builder , arraySymbol . ElementType , ( type as ArrayTypeSyntax ) ? . ElementType ) ;
4345 builder
4446 . Append ( "[" )
4547 . Append ( ',' , arraySymbol . Rank - 1 )
4648 . Append ( "]" ) ;
4749 return true ;
4850
49- case INamespaceSymbol namespaceSymbol :
51+ case SymbolKind . Namespace :
52+ var namespaceSymbol = ( INamespaceSymbol ) symbol ;
5053 if ( namespaceSymbol . IsGlobalNamespace )
5154 {
5255 return false ;
@@ -55,7 +58,8 @@ private static bool AppendQualifiedSymbolName(StringBuilder builder, ISymbol sym
5558 builder . Append ( namespaceSymbol . ToDisplayString ( ) ) ;
5659 return true ;
5760
58- case INamedTypeSymbol namedTypeSymbol :
61+ case SymbolKind . NamedType :
62+ var namedTypeSymbol = ( INamedTypeSymbol ) symbol ;
5963 if ( SpecialTypeHelper . TryGetPredefinedType ( namedTypeSymbol . SpecialType , out var specialTypeSyntax ) )
6064 {
6165 builder . Append ( specialTypeSyntax . ToFullString ( ) ) ;
@@ -94,6 +98,12 @@ private static bool AppendQualifiedSymbolName(StringBuilder builder, ISymbol sym
9498 return AppendQualifiedSymbolName ( builder , namedTypeSymbol . TupleUnderlyingType ( ) , type ) ;
9599 }
96100 }
101+ else if ( namedTypeSymbol . OriginalDefinition . SpecialType == SpecialType . System_Nullable_T )
102+ {
103+ AppendQualifiedSymbolName ( builder , namedTypeSymbol . TypeArguments [ 0 ] , ( type as NullableTypeSyntax ) ? . ElementType ) ;
104+ builder . Append ( "?" ) ;
105+ return true ;
106+ }
97107 else
98108 {
99109 if ( AppendQualifiedSymbolName ( builder , symbol . ContainingSymbol , ( type as QualifiedNameSyntax ) ? . Left ) )
@@ -113,14 +123,17 @@ private static bool AppendQualifiedSymbolName(StringBuilder builder, ISymbol sym
113123 for ( int i = 0 ; i < arguments . Length ; i ++ )
114124 {
115125 var argument = arguments [ i ] ;
116- var argumentType = argumentTypes . Arguments . Count > i ? argumentTypes . Arguments [ i ] : null ;
126+ var argumentType = argumentTypes != null && argumentTypes . Arguments . Count > i ? argumentTypes . Arguments [ i ] : null ;
117127
118128 if ( i > 0 )
119129 {
120130 builder . Append ( GenericSeparator ) ;
121131 }
122132
123- AppendQualifiedSymbolName ( builder , argument , argumentType ) ;
133+ if ( ! argumentType . IsKind ( SyntaxKind . OmittedTypeArgument ) )
134+ {
135+ AppendQualifiedSymbolName ( builder , argument , argumentType ) ;
136+ }
124137 }
125138
126139 builder . Append ( GenericTypeParametersClose ) ;
@@ -130,8 +143,13 @@ private static bool AppendQualifiedSymbolName(StringBuilder builder, ISymbol sym
130143 }
131144
132145 default :
133- builder . Append ( symbol . Name ) ;
134- return true ;
146+ if ( symbol != null )
147+ {
148+ builder . Append ( symbol . Name ) ;
149+ return true ;
150+ }
151+
152+ return false ;
135153 }
136154 }
137155 }
0 commit comments