提交 a1fd8c1c 编写于 作者: A AlekseyTs 提交者: GitHub

Fix crash in...

Fix crash in VisualBasic.Binder.MemberLookup.AddLookupSymbolsInfoInTypeParameter when it is called with Cref TypeParameter. (#21586)

Fixes https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=410932.

The fix mimics the way C# compiler handles Cref TypeParameters in the similar API.
上级 0ec6ea3a
......@@ -6599,5 +6599,35 @@ private static Symbol[] GetCrefOriginalDefinitions(SemanticModel model, IEnumera
{
return crefs.Select(syntax => model.GetSymbolInfo(syntax).Symbol).Select(symbol => (object)symbol == null ? null : (Symbol)symbol.OriginalDefinition).ToArray();
}
[Fact]
[WorkItem(410932, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=410932")]
public void LookupOnCrefTypeParameter()
{
var source = @"
class Test
{
T F<T>()
{
}
/// <summary>
/// <see cref=""F{U}()""/>
/// </summary>
void S()
{ }
}
";
var compilation = CreateCompilationWithMscorlibAndDocumentationComments(source);
var tree = compilation.SyntaxTrees[0];
var model = compilation.GetSemanticModel(tree);
var crefSyntax = (NameMemberCrefSyntax)GetCrefSyntaxes(compilation).Single();
var name = ((GenericNameSyntax)crefSyntax.Name).TypeArgumentList.Arguments.Single();
Assert.Equal("U", name.ToString());
var typeParameter = (TypeParameterSymbol)model.GetSymbolInfo(name).Symbol;
Assert.Empty(model.LookupSymbols(name.SpanStart, typeParameter, "GetAwaiter"));
}
}
}
......@@ -1995,6 +1995,10 @@ ExitForFor:
typeParameter As TypeParameterSymbol,
options As LookupOptions,
binder As Binder)
If typeParameter.TypeParameterKind = TypeParameterKind.Cref Then
Return
End If
AddLookupSymbolsInfoInTypeParameterNoExtensionMethods(nameSet, typeParameter, options, binder)
' Search for extension methods.
......
......@@ -12410,5 +12410,40 @@ DashDash
stringMapper:=Function(o) StringReplace(o, System.IO.Path.Combine(TestHelpers.AsXmlCommentText(path), "- - -.xml"), "**FILE**"), ensureEnglishUICulture:=True)
End Sub
<Fact>
<WorkItem(410932, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=410932")>
Public Sub LookupOnCrefTypeParameter()
Dim sources =
<compilation>
<file name="a.vb">
<![CDATA[
Public Class Test
Function F(Of T)() As T
End Function
''' <summary>
''' <see cref="F(Of U)()"/>
''' </summary>
Public Sub S()
End Sub
End Class
]]>
</file>
</compilation>
Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(
sources,
options:=TestOptions.ReleaseDll)
Dim tree = compilation.SyntaxTrees(0)
Dim model = compilation.GetSemanticModel(tree)
Dim name = FindNodesOfTypeFromText(Of NameSyntax)(tree, "U").Single()
Dim typeParameter = DirectCast(model.GetSymbolInfo(name).Symbol, TypeParameterSymbol)
Assert.Empty(model.LookupSymbols(name.SpanStart, typeParameter, "GetAwaiter"))
End Sub
End Class
End Namespace
......@@ -4992,5 +4992,28 @@ static void Main(string[] args)
}",
MainDescription($"({FeaturesResources.local_variable}) ref int i"));
}
[Fact, Trait(Traits.Feature, Traits.Features.QuickInfo)]
[WorkItem(410932, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=410932")]
public async Task TestGenericMethodInDocComment()
{
await TestAsync(
@"
class Test
{
T F<T>()
{
F<T>();
}
/// <summary>
/// <see cref=""F$${T}()""/>
/// </summary>
void S()
{ }
}
",
MainDescription("T Test.F<T>()"));
}
}
}
......@@ -2089,5 +2089,25 @@ End Class
",
Documentation("String http://microsoft.com Nothing cat"))
End Function
<Fact, Trait(Traits.Feature, Traits.Features.QuickInfo)>
<WorkItem(410932, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=410932")>
Public Async Function TestGenericMethodInDocComment() As Task
Await TestWithImportsAsync(<Text><![CDATA[
Public Class Test
Function F(Of T)() As T
F(Of T)()
End Function
''' <summary>
''' <see cref="F$$(Of T)()"/>
''' </summary>
Public Sub S()
End Sub
End Class
]]></Text>.NormalizedValue,
MainDescription("Function Test.F(Of T)() As T"))
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册