Browse Source

Fix #2484: Private modifier incorrectly applied to interface static constructors

pull/2489/head
Siegfried Pammer 4 years ago
parent
commit
73c898664f
  1. 5
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs
  2. 12
      ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs

5
ICSharpCode.Decompiler.Tests/TestCases/Pretty/InterfaceTests.cs

@ -32,6 +32,11 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
void Method(); void Method();
#if CS80 #if CS80
static IA()
{
}
void DefaultMethod() void DefaultMethod()
{ {
Method(); Method();

12
ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs

@ -2259,20 +2259,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
var declaringType = member.DeclaringType; var declaringType = member.DeclaringType;
if (member.IsExplicitInterfaceImplementation) if (member.IsExplicitInterfaceImplementation)
return false; return false;
if (declaringType != null && declaringType.Kind == TypeKind.Interface)
{
return member.Accessibility != Accessibility.Public;
}
switch (member.SymbolKind) switch (member.SymbolKind)
{ {
case SymbolKind.Constructor: case SymbolKind.Constructor:
return !member.IsStatic; return !member.IsStatic;
case SymbolKind.Destructor: case SymbolKind.Destructor:
return false; return false;
case SymbolKind.Method:
return !((IMethod)member).IsLocalFunction;
default: default:
return true; if (declaringType?.Kind == TypeKind.Interface)
{
return member.Accessibility != Accessibility.Public;
}
return member is not IMethod method || !method.IsLocalFunction;
} }
} }

Loading…
Cancel
Save