提交 84794075 编写于 作者: B Brett V. Forsgren

prevent `Compilation.GetSymbolsWithName() from returning null entries

上级 e49eebfe
...@@ -2940,7 +2940,11 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym ...@@ -2940,7 +2940,11 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym
if (includeNamespace && predicate(current.Name)) if (includeNamespace && predicate(current.Name))
{ {
var container = GetSpineSymbol(spine); var container = GetSpineSymbol(spine);
set.Add(GetSymbol(container, current)); var symbol = GetSymbol(container, current);
if (symbol != null)
{
set.Add(symbol);
}
} }
} }
else else
...@@ -2948,7 +2952,11 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym ...@@ -2948,7 +2952,11 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym
if (includeType && predicate(current.Name)) if (includeType && predicate(current.Name))
{ {
var container = GetSpineSymbol(spine); var container = GetSpineSymbol(spine);
set.Add(GetSymbol(container, current)); var symbol = GetSymbol(container, current);
if (symbol != null)
{
set.Add(symbol);
}
} }
if (includeMember) if (includeMember)
...@@ -2984,13 +2992,16 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym ...@@ -2984,13 +2992,16 @@ public IEnumerable<ISymbol> GetSymbolsWithName(Func<string, bool> predicate, Sym
spine.Add(current); spine.Add(current);
var container = GetSpineSymbol(spine); var container = GetSpineSymbol(spine);
foreach (var member in container.GetMembers()) if (container != null)
{ {
if (!member.IsTypeOrTypeAlias() && foreach (var member in container.GetMembers())
(member.CanBeReferencedByName || member.IsExplicitInterfaceImplementation() || member.IsIndexer()) &&
predicate(member.Name))
{ {
set.Add(member); if (!member.IsTypeOrTypeAlias() &&
(member.CanBeReferencedByName || member.IsExplicitInterfaceImplementation() || member.IsIndexer()) &&
predicate(member.Name))
{
set.Add(member);
}
} }
} }
......
...@@ -2681,12 +2681,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ...@@ -2681,12 +2681,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If current.Kind = DeclarationKind.Namespace Then If current.Kind = DeclarationKind.Namespace Then
If includeNamespace AndAlso predicate(current.Name) Then If includeNamespace AndAlso predicate(current.Name) Then
Dim container = GetSpineSymbol(spine) Dim container = GetSpineSymbol(spine)
[set].Add(GetSymbol(container, current)) Dim symbol = GetSymbol(container, current)
If symbol IsNot Nothing Then
[set].Add(symbol)
End If
End If End If
Else Else
If includeType AndAlso predicate(current.Name) Then If includeType AndAlso predicate(current.Name) Then
Dim container = GetSpineSymbol(spine) Dim container = GetSpineSymbol(spine)
[set].Add(GetSymbol(container, current)) Dim symbol = GetSymbol(container, current)
If symbol IsNot Nothing Then
[set].Add(symbol)
End If
End If End If
If includeMember Then If includeMember Then
...@@ -2719,7 +2725,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ...@@ -2719,7 +2725,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
For Each name In mergedType.MemberNames For Each name In mergedType.MemberNames
If predicate(name) Then If predicate(name) Then
container = If(container, GetSpineSymbol(spine)) container = If(container, GetSpineSymbol(spine))
[set].UnionWith(container.GetMembers(name)) If container IsNot Nothing Then
[set].UnionWith(container.GetMembers(name))
End If
End If End If
Next Next
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册