1- using System ;
21using System . Collections . Generic ;
32using System . Linq ;
43using Microsoft . CodeAnalysis ;
@@ -103,10 +102,9 @@ public static PropertyDeclarationSyntax FromDefinition(Property definition)
103102
104103 definition . Setter . Map ( x => x . Trim ( ) ) . MatchSome ( body =>
105104 {
106- AccessorDeclarationSyntax accessor =
107- SyntaxFactory . AccessorDeclaration ( SyntaxKind . SetAccessorDeclaration ) ;
105+ var accessor = SyntaxFactory . AccessorDeclaration ( SyntaxKind . SetAccessorDeclaration ) ;
108106
109- if ( IsHigher ( definition . AccessModifier , definition . SetterAccessModifier ) )
107+ if ( IsAccessModifierLessRestrictive ( definition . AccessModifier , definition . SetterAccessModifier ) )
110108 {
111109 accessor = accessor . WithModifiers (
112110 new SyntaxTokenList ( FromDefinition ( definition . SetterAccessModifier ) ) ) ;
@@ -169,73 +167,6 @@ static AccessorDeclarationSyntax AddBodyToAccessor(AccessorDeclarationSyntax acc
169167 . WithExpressionBody ( SyntaxFactory . ArrowExpressionClause ( SyntaxFactory . ParseExpression ( body ) ) )
170168 . WithSemicolonToken ( SyntaxFactory . Token ( SyntaxKind . SemicolonToken ) ) ;
171169 }
172-
173- static bool IsHigher ( AccessModifier left , AccessModifier right )
174- {
175- switch ( left )
176- {
177- case AccessModifier . None :
178- case AccessModifier . Private :
179- return false ;
180- case AccessModifier . Internal :
181- switch ( right )
182- {
183- case AccessModifier . Private :
184- case AccessModifier . PrivateProtected :
185- return true ;
186- default :
187- return false ;
188- }
189-
190- case AccessModifier . Protected :
191- switch ( right )
192- {
193- case AccessModifier . Private :
194- case AccessModifier . PrivateProtected :
195- return true ;
196- default :
197- return false ;
198- }
199-
200- case AccessModifier . Public :
201- switch ( right )
202- {
203- case AccessModifier . Private :
204- case AccessModifier . PrivateProtected :
205- case AccessModifier . Internal :
206- case AccessModifier . Protected :
207- case AccessModifier . ProtectedInternal :
208- return true ;
209- default :
210- return false ;
211- }
212-
213- case AccessModifier . PrivateProtected :
214- switch ( right )
215- {
216- case AccessModifier . Private :
217- return true ;
218- default :
219- return false ;
220- }
221-
222- case AccessModifier . ProtectedInternal :
223- switch ( right )
224- {
225- case AccessModifier . Private :
226- case AccessModifier . Internal :
227- case AccessModifier . Protected :
228- case AccessModifier . PrivateProtected :
229- case AccessModifier . ProtectedInternal :
230- return true ;
231- default :
232- return false ;
233- }
234-
235- default :
236- return false ;
237- }
238- }
239170 }
240171
241172 public static ParameterSyntax FromDefinition ( Parameter definition )
@@ -634,5 +565,39 @@ static XmlElementSyntax CreateXmlDocBlock(string name, string content)
634565 SyntaxFactory . Identifier ( name ) ) ) ) ;
635566 }
636567 }
568+
569+ /// <summary>
570+ /// Checks whether <paramref name="left"/> is a less restrictive access modifier than <paramref name="right"/>,
571+ /// eg. <c>public</c> is less restrictive than <c>protected</c>
572+ /// and <c>protected</c> is less restricitve than <c>private</c>.
573+ /// </summary>
574+ private static bool IsAccessModifierLessRestrictive ( AccessModifier left , AccessModifier right ) =>
575+ ( left , right ) switch {
576+ // private protected
577+ ( AccessModifier . PrivateProtected , AccessModifier . Private ) => true ,
578+
579+ // internal
580+ ( AccessModifier . Internal , AccessModifier . Private ) => true ,
581+ ( AccessModifier . Internal , AccessModifier . PrivateProtected ) => true ,
582+
583+ // protected
584+ ( AccessModifier . Protected , AccessModifier . Private ) => true ,
585+ ( AccessModifier . Protected , AccessModifier . PrivateProtected ) => true ,
586+
587+ // protected internal
588+ ( AccessModifier . ProtectedInternal , AccessModifier . Private ) => true ,
589+ ( AccessModifier . ProtectedInternal , AccessModifier . PrivateProtected ) => true ,
590+ ( AccessModifier . ProtectedInternal , AccessModifier . Internal ) => true ,
591+ ( AccessModifier . ProtectedInternal , AccessModifier . Protected ) => true ,
592+
593+ // public
594+ ( AccessModifier . Public , AccessModifier . Private ) => true ,
595+ ( AccessModifier . Public , AccessModifier . PrivateProtected ) => true ,
596+ ( AccessModifier . Public , AccessModifier . Internal ) => true ,
597+ ( AccessModifier . Public , AccessModifier . Protected ) => true ,
598+ ( AccessModifier . Public , AccessModifier . ProtectedInternal ) => true ,
599+
600+ _ => false
601+ } ;
637602 }
638603}
0 commit comments