Browse Source

Ignore local functions when collecting used members.

This is necessary because LocalFunctionMethod.DeclaringTypeDefinition points to the current type.
pull/2684/head
Siegfried Pammer 4 years ago
parent
commit
e043f43925
  1. 7
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

7
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1442,11 +1442,14 @@ namespace ICSharpCode.Decompiler.CSharp
foreach (var node in entityDecl.Descendants) foreach (var node in entityDecl.Descendants)
{ {
var rr = node.GetResolveResult(); var rr = node.GetResolveResult();
if (rr is MemberResolveResult mrr && mrr.Member.DeclaringTypeDefinition == typeDef) if (rr is MemberResolveResult mrr
&& mrr.Member.DeclaringTypeDefinition == typeDef
&& !(mrr.Member is IMethod { IsLocalFunction: true }))
{ {
workList.Enqueue(mrr.Member); workList.Enqueue(mrr.Member);
} }
else if (rr is TypeResolveResult trr && trr.Type.GetDefinition()?.DeclaringTypeDefinition == typeDef) else if (rr is TypeResolveResult trr
&& trr.Type.GetDefinition()?.DeclaringTypeDefinition == typeDef)
{ {
workList.Enqueue(trr.Type.GetDefinition()); workList.Enqueue(trr.Type.GetDefinition());
} }

Loading…
Cancel
Save