From 5b097cf677bab452f8cf9bc3d9e1083c33af39ba Mon Sep 17 00:00:00 2001 From: AlekseyTs Date: Mon, 6 May 2019 09:44:49 -0700 Subject: [PATCH] Change accessibility of explicit implementations in interfaces to 'private'. (#35506) --- .../CSharp/Portable/Symbols/Source/ModifierUtils.cs | 4 ++-- .../Portable/Symbols/Source/SourceEventSymbol.cs | 2 +- .../Symbols/Source/SourceOrdinaryMethodSymbol.cs | 2 +- .../Portable/Symbols/Source/SourcePropertySymbol.cs | 2 +- .../Symbols/DefaultInterfaceImplementationTests.cs | 12 ++++++------ 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/ModifierUtils.cs b/src/Compilers/CSharp/Portable/Symbols/Source/ModifierUtils.cs index 0b586e8e97d..0b1096d8ae9 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/ModifierUtils.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/ModifierUtils.cs @@ -144,9 +144,9 @@ internal static DeclarationModifiers AdjustModifiersForAnInterfaceMember(Declara if ((mods & DeclarationModifiers.AccessibilityMask) == 0) { - if ((mods & DeclarationModifiers.Partial) == 0) + if ((mods & DeclarationModifiers.Partial) == 0 && !isExplicitInterfaceImplementation) { - mods |= isExplicitInterfaceImplementation ? DeclarationModifiers.Protected : DeclarationModifiers.Public; + mods |= DeclarationModifiers.Public; } else { diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/SourceEventSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Source/SourceEventSymbol.cs index 4b8bfd9b1af..d7c7de354f2 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/SourceEventSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/SourceEventSymbol.cs @@ -423,7 +423,7 @@ private void CheckAccessibility(Location location, DiagnosticBag diagnostics, bo DiagnosticBag diagnostics, out bool modifierErrors) { bool isInterface = this.ContainingType.IsInterface; - var defaultAccess = isInterface ? (explicitInterfaceImplementation ? DeclarationModifiers.Protected : DeclarationModifiers.Public) : DeclarationModifiers.Private; + var defaultAccess = isInterface && !explicitInterfaceImplementation ? DeclarationModifiers.Public : DeclarationModifiers.Private; var defaultInterfaceImplementationModifiers = DeclarationModifiers.None; // Check that the set of modifiers is allowed diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/SourceOrdinaryMethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Source/SourceOrdinaryMethodSymbol.cs index 3a86bf3a6ee..35f9fcd788d 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/SourceOrdinaryMethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/SourceOrdinaryMethodSymbol.cs @@ -831,7 +831,7 @@ private DeclarationModifiers MakeModifiers(SyntaxTokenList modifiers, MethodKind { bool isInterface = this.ContainingType.IsInterface; bool isExplicitInterfaceImplementation = methodKind == MethodKind.ExplicitInterfaceImplementation; - var defaultAccess = isInterface && modifiers.IndexOf(SyntaxKind.PartialKeyword) < 0 ? (isExplicitInterfaceImplementation ? DeclarationModifiers.Protected : DeclarationModifiers.Public) : DeclarationModifiers.Private; + var defaultAccess = isInterface && modifiers.IndexOf(SyntaxKind.PartialKeyword) < 0 && !isExplicitInterfaceImplementation ? DeclarationModifiers.Public : DeclarationModifiers.Private; // Check that the set of modifiers is allowed var allowedModifiers = DeclarationModifiers.Partial | DeclarationModifiers.Unsafe; diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/SourcePropertySymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Source/SourcePropertySymbol.cs index 5170b0d9244..7cf31f264dc 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/SourcePropertySymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/SourcePropertySymbol.cs @@ -835,7 +835,7 @@ private void CheckAccessibility(Location location, DiagnosticBag diagnostics, bo Location location, DiagnosticBag diagnostics, out bool modifierErrors) { bool isInterface = this.ContainingType.IsInterface; - var defaultAccess = isInterface ? (isExplicitInterfaceImplementation ? DeclarationModifiers.Protected : DeclarationModifiers.Public) : DeclarationModifiers.Private; + var defaultAccess = isInterface && !isExplicitInterfaceImplementation ? DeclarationModifiers.Public : DeclarationModifiers.Private; // Check that the set of modifiers is allowed var allowedModifiers = DeclarationModifiers.Unsafe; diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs index 5b8d98369ab..7e452ef9b76 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs @@ -29150,7 +29150,7 @@ private static void ValidateExplicitImplementation(MethodSymbol m1) Assert.False(m1.IsExtern); Assert.False(m1.IsAsync); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); if (m1.ContainingModule is PEModuleSymbol peModule) { @@ -29703,7 +29703,7 @@ private static void ValidateExplicitExternImplementation(MethodSymbol m1) Assert.NotEqual(m1.OriginalDefinition is PEMethodSymbol, m1.IsExtern); Assert.False(m1.IsAsync); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); if (m1.ContainingModule is PEModuleSymbol peModule) { @@ -29793,7 +29793,7 @@ void Validate2(MethodSymbol m1) Assert.False(m1.IsExtern); Assert.NotEqual(m1 is PEMethodSymbol, m1.IsAsync); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); if (m1.ContainingModule is PEModuleSymbol peModule) { @@ -32211,7 +32211,7 @@ private static void ValidateExplicitImplementation(PropertySymbol m1) Assert.False(m1.IsStatic); Assert.False(m1.IsExtern); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); ValidateAccessor(m1.GetMethod); ValidateAccessor(m1.SetMethod); @@ -32829,7 +32829,7 @@ private static void ValidateExplicitExternImplementation(PropertySymbol m1) Assert.False(m1.IsStatic); Assert.NotEqual(m1.OriginalDefinition is PEPropertySymbol, m1.IsExtern); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); ValidateAccessor(m1.GetMethod); ValidateAccessor(m1.SetMethod); @@ -34426,7 +34426,7 @@ private static void ValidateExplicitImplementation(EventSymbol m1) Assert.False(m1.IsStatic); Assert.False(m1.IsExtern); Assert.False(m1.IsOverride); - Assert.Equal(Accessibility.Protected, m1.DeclaredAccessibility); + Assert.Equal(Accessibility.Private, m1.DeclaredAccessibility); ValidateAccessor(m1.AddMethod); ValidateAccessor(m1.RemoveMethod); -- GitLab