未验证 提交 540492ff 编写于 作者: R Rikki Gibson 提交者: GitHub

Don't throw in GetMetadataReference for an unexpected assembly type (#40794)

上级 3918f04f
...@@ -1118,7 +1118,12 @@ public new MetadataReference GetMetadataReference(IAssemblySymbol assemblySymbol ...@@ -1118,7 +1118,12 @@ public new MetadataReference GetMetadataReference(IAssemblySymbol assemblySymbol
private protected override MetadataReference CommonGetMetadataReference(IAssemblySymbol assemblySymbol) private protected override MetadataReference CommonGetMetadataReference(IAssemblySymbol assemblySymbol)
{ {
return GetMetadataReference(assemblySymbol.EnsureCSharpSymbolOrNull(nameof(assemblySymbol))); if (assemblySymbol is Symbols.PublicModel.AssemblySymbol { UnderlyingAssemblySymbol: var underlyingSymbol })
{
return GetMetadataReference(underlyingSymbol);
}
return null;
} }
internal MetadataReference GetMetadataReference(AssemblySymbol assemblySymbol) internal MetadataReference GetMetadataReference(AssemblySymbol assemblySymbol)
......
...@@ -2267,6 +2267,20 @@ public void GetMetadataReferenceAPITest() ...@@ -2267,6 +2267,20 @@ public void GetMetadataReferenceAPITest()
Assert.NotNull(reference2); Assert.NotNull(reference2);
} }
[Fact]
[WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")]
public void GetMetadataReference_VisualBasicSymbols()
{
var comp = CreateCompilation("");
var vbComp = CreateVisualBasicCompilation("", referencedAssemblies: TargetFrameworkUtil.GetReferences(TargetFramework.Standard));
var assembly = (IAssemblySymbol)vbComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value;
Assert.Null(comp.GetMetadataReference(assembly));
Assert.Null(comp.GetMetadataReference(vbComp.Assembly));
Assert.Null(comp.GetMetadataReference((IAssemblySymbol)null));
}
[Fact] [Fact]
public void ConsistentParseOptions() public void ConsistentParseOptions()
{ {
......
...@@ -1232,7 +1232,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ...@@ -1232,7 +1232,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function End Function
Private Protected Overrides Function CommonGetMetadataReference(assemblySymbol As IAssemblySymbol) As MetadataReference Private Protected Overrides Function CommonGetMetadataReference(assemblySymbol As IAssemblySymbol) As MetadataReference
Return GetMetadataReference(assemblySymbol.EnsureVbSymbolOrNothing(Of AssemblySymbol)(NameOf(assemblySymbol))) Dim symbol = TryCast(assemblySymbol, AssemblySymbol)
If symbol IsNot Nothing Then
Return GetMetadataReference(symbol)
End If
Return Nothing
End Function End Function
Public Overrides ReadOnly Property ReferencedAssemblyNames As IEnumerable(Of AssemblyIdentity) Public Overrides ReadOnly Property ReferencedAssemblyNames As IEnumerable(Of AssemblyIdentity)
......
...@@ -2257,6 +2257,19 @@ End Class ...@@ -2257,6 +2257,19 @@ End Class
Assert.NotNull(reference2) Assert.NotNull(reference2)
End Sub End Sub
<WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")>
<Fact>
Public Sub GetMetadataReference_CSharpSymbols()
Dim comp As Compilation = CreateCompilation("")
Dim csComp = CreateCSharpCompilation("", referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard))
Dim assembly = csComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value
Assert.Null(comp.GetMetadataReference(DirectCast(assembly.GetISymbol(), IAssemblySymbol)))
Assert.Null(comp.GetMetadataReference(csComp.Assembly))
Assert.Null(comp.GetMetadataReference(Nothing))
End Sub
<Fact()> <Fact()>
Public Sub EqualityOfMergedNamespaces() Public Sub EqualityOfMergedNamespaces()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册