diff --git a/analyzers/src/SonarAnalyzer.CSharp/Rules/Utilities/TokenTypeAnalyzer.cs b/analyzers/src/SonarAnalyzer.CSharp/Rules/Utilities/TokenTypeAnalyzer.cs index f88bda659b4..5ac917e0f92 100644 --- a/analyzers/src/SonarAnalyzer.CSharp/Rules/Utilities/TokenTypeAnalyzer.cs +++ b/analyzers/src/SonarAnalyzer.CSharp/Rules/Utilities/TokenTypeAnalyzer.cs @@ -318,6 +318,7 @@ private static bool IsInTypeContext(SimpleNameSyntax name) => { RawKind: (int)SyntaxKind.ParenthesizedLambdaExpression } x => ((ParenthesizedLambdaExpressionSyntaxWrapper)x).ReturnType == name, { RawKind: (int)SyntaxKindEx.FileScopedNamespaceDeclaration } x => ((FileScopedNamespaceDeclarationSyntaxWrapper)x).Name == name, { RawKind: (int)SyntaxKindEx.TupleElement } x => ((TupleElementSyntaxWrapper)x).Type == name, + { RawKind: (int)SyntaxKindEx.RefType } x => ((RefTypeSyntaxWrapper)x).Type == name, _ => false, }; } diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Utilities/TokenTypeAnalyzerTest.Classifier.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Utilities/TokenTypeAnalyzerTest.Classifier.cs index 702df1c1265..26fd7c38080 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Utilities/TokenTypeAnalyzerTest.Classifier.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Utilities/TokenTypeAnalyzerTest.Classifier.cs @@ -635,6 +635,27 @@ public void M() } """, allowSemanticModel, ignoreCompilationErrors); + [DataTestMethod] + [DataRow("[t:Int32]", false)] + [DataRow("[t:Int32]?", false)] + [DataRow("System.[t:Int32]", false)] + [DataRow("System.Nullable<[t:Int32]>", false)] + [DataRow("[t:T]", false)] + public void IdentifierToken_Type_Ref(string refTypeName, bool allowSemanticModel = true) => + ClassifierTestHarness.AssertTokenTypes($$""" + using System; + + public class Test + { + {{refTypeName}} item; + + public ref {{refTypeName}} M() + { + return ref item; + } + } + """, allowSemanticModel); + #endif [DataTestMethod]