@@ -119,138 +119,131 @@ private static void AnalyzeSummaryElement(SyntaxNodeAnalysisContext context, Xml
119119 var textElement = summaryElement . Content . FirstOrDefault ( ) as XmlTextSyntax ;
120120 var text = textElement == null ? string . Empty : XmlCommentHelper . GetText ( textElement , true ) . TrimStart ( ) ;
121121
122- if ( getter != null || expressionBody != null )
122+ bool startsWithGetOrSet = text . StartsWith ( startingTextGetsOrSets , StringComparison . Ordinal ) ;
123+ bool getterVisible , setterVisible ;
124+ if ( getter != null && setter != null )
123125 {
124- bool startsWithGetOrSet = text . StartsWith ( startingTextGetsOrSets , StringComparison . Ordinal ) ;
125-
126- if ( setter != null )
126+ if ( ! getter . Modifiers . Any ( ) && ! setter . Modifiers . Any ( ) )
127127 {
128- // There is no way getter is null (can't have expression body and accessor list)
129- bool getterVisible ;
130- bool setterVisible ;
131-
132- if ( ! getter . Modifiers . Any ( ) && ! setter . Modifiers . Any ( ) )
128+ // Case 1: The getter and setter have the same declared accessibility
129+ getterVisible = true ;
130+ setterVisible = true ;
131+ }
132+ else if ( getter . Modifiers . Any ( SyntaxKind . PrivateKeyword ) )
133+ {
134+ // Case 3
135+ getterVisible = false ;
136+ setterVisible = true ;
137+ }
138+ else if ( setter . Modifiers . Any ( SyntaxKind . PrivateKeyword ) )
139+ {
140+ // Case 3
141+ getterVisible = true ;
142+ setterVisible = false ;
143+ }
144+ else
145+ {
146+ var propertyAccessibility = propertyDeclaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
147+ bool propertyOnlyInternal = propertyAccessibility == Accessibility . Internal
148+ || propertyAccessibility == Accessibility . ProtectedAndInternal
149+ || propertyAccessibility == Accessibility . Private ;
150+ if ( propertyOnlyInternal )
133151 {
134- // Case 1: The getter and setter have the same declared accessibility
152+ // Case 2: Property only internal and no accessor is explicitly private
135153 getterVisible = true ;
136154 setterVisible = true ;
137155 }
138- else if ( getter . Modifiers . Any ( SyntaxKind . PrivateKeyword ) )
139- {
140- // Case 3
141- getterVisible = false ;
142- setterVisible = true ;
143- }
144- else if ( setter . Modifiers . Any ( SyntaxKind . PrivateKeyword ) )
145- {
146- // Case 3
147- getterVisible = true ;
148- setterVisible = false ;
149- }
150156 else
151157 {
152- var propertyAccessibility = propertyDeclaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
153- bool propertyOnlyInternal = propertyAccessibility == Accessibility . Internal
154- || propertyAccessibility == Accessibility . ProtectedAndInternal
155- || propertyAccessibility == Accessibility . Private ;
156- if ( propertyOnlyInternal )
158+ var getterAccessibility = getter . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
159+ var setterAccessibility = setter . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
160+
161+ switch ( getterAccessibility )
157162 {
158- // Case 2: Property only internal and no accessor is explicitly private
163+ case Accessibility . Public :
164+ case Accessibility . ProtectedOrInternal :
165+ case Accessibility . Protected :
166+ // Case 4
159167 getterVisible = true ;
160- setterVisible = true ;
161- }
162- else
163- {
164- var getterAccessibility = getter . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
165- var setterAccessibility = setter . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
166-
167- switch ( getterAccessibility )
168- {
169- case Accessibility . Public :
170- case Accessibility . ProtectedOrInternal :
171- case Accessibility . Protected :
172- // Case 4
173- getterVisible = true ;
174- break ;
175-
176- case Accessibility . Internal :
177- case Accessibility . ProtectedAndInternal :
178- case Accessibility . Private :
179- default :
180- // The property is externally accessible, so the setter must be more accessible.
181- getterVisible = false ;
182- break ;
183- }
184-
185- switch ( setterAccessibility )
186- {
187- case Accessibility . Public :
188- case Accessibility . ProtectedOrInternal :
189- case Accessibility . Protected :
190- // Case 4
191- setterVisible = true ;
192- break ;
193-
194- case Accessibility . Internal :
195- case Accessibility . ProtectedAndInternal :
196- case Accessibility . Private :
197- default :
198- // The property is externally accessible, so the getter must be more accessible.
199- setterVisible = false ;
200- break ;
201- }
168+ break ;
169+
170+ case Accessibility . Internal :
171+ case Accessibility . ProtectedAndInternal :
172+ case Accessibility . Private :
173+ default :
174+ // The property is externally accessible, so the setter must be more accessible.
175+ getterVisible = false ;
176+ break ;
202177 }
203- }
204178
205- if ( getterVisible && ! setterVisible )
206- {
207- if ( startsWithGetOrSet )
208- {
209- diagnosticProperties . Add ( ExpectedTextKey , startingTextGets ) ;
210- diagnosticProperties . Add ( TextToRemoveKey , startingTextGetsOrSets ) ;
211- context . ReportDiagnostic ( Diagnostic . Create ( SA1624Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , "get" , startingTextGets ) ) ;
212- }
213- else if ( ! text . StartsWith ( startingTextGets , StringComparison . Ordinal ) )
214- {
215- diagnosticProperties . Add ( ExpectedTextKey , startingTextGets ) ;
216- context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextGets ) ) ;
217- }
218- }
219- else if ( ! getterVisible && setterVisible )
220- {
221- if ( startsWithGetOrSet )
179+ switch ( setterAccessibility )
222180 {
223- diagnosticProperties . Add ( ExpectedTextKey , startingTextSets ) ;
224- diagnosticProperties . Add ( TextToRemoveKey , startingTextGetsOrSets ) ;
225- context . ReportDiagnostic ( Diagnostic . Create ( SA1624Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , "set" , startingTextSets ) ) ;
226- }
227- else if ( ! text . StartsWith ( startingTextSets , StringComparison . Ordinal ) )
228- {
229- diagnosticProperties . Add ( ExpectedTextKey , startingTextSets ) ;
230- context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextSets ) ) ;
181+ case Accessibility . Public :
182+ case Accessibility . ProtectedOrInternal :
183+ case Accessibility . Protected :
184+ // Case 4
185+ setterVisible = true ;
186+ break ;
187+
188+ case Accessibility . Internal :
189+ case Accessibility . ProtectedAndInternal :
190+ case Accessibility . Private :
191+ default :
192+ // The property is externally accessible, so the getter must be more accessible.
193+ setterVisible = false ;
194+ break ;
231195 }
232196 }
233- else
197+ }
198+ }
199+ else
200+ {
201+ if ( getter != null || expressionBody != null )
202+ {
203+ getterVisible = true ;
204+ setterVisible = false ;
205+ }
206+ else
207+ {
208+ getterVisible = false ;
209+ setterVisible = setter != null ;
210+ }
211+ }
212+
213+ if ( getterVisible )
214+ {
215+ if ( setterVisible )
216+ {
217+ if ( ! startsWithGetOrSet )
234218 {
235- if ( ! startsWithGetOrSet )
236- {
237- diagnosticProperties . Add ( ExpectedTextKey , startingTextGetsOrSets ) ;
238- context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextGetsOrSets ) ) ;
239- }
219+ diagnosticProperties . Add ( ExpectedTextKey , startingTextGetsOrSets ) ;
220+ context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextGetsOrSets ) ) ;
240221 }
241222 }
242223 else
243224 {
244- if ( startsWithGetOrSet || ! text . StartsWith ( startingTextGets , StringComparison . Ordinal ) )
225+ if ( startsWithGetOrSet )
226+ {
227+ diagnosticProperties . Add ( ExpectedTextKey , startingTextGets ) ;
228+ diagnosticProperties . Add ( TextToRemoveKey , startingTextGetsOrSets ) ;
229+ context . ReportDiagnostic ( Diagnostic . Create ( SA1624Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , "get" , startingTextGets ) ) ;
230+ }
231+ else if ( ! text . StartsWith ( startingTextGets , StringComparison . Ordinal ) )
245232 {
246233 diagnosticProperties . Add ( ExpectedTextKey , startingTextGets ) ;
247234 context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextGets ) ) ;
248235 }
249236 }
250237 }
251- else if ( setter != null )
238+ else if ( setterVisible )
252239 {
253- if ( ! text . StartsWith ( startingTextSets , StringComparison . Ordinal ) )
240+ if ( startsWithGetOrSet )
241+ {
242+ diagnosticProperties . Add ( ExpectedTextKey , startingTextSets ) ;
243+ diagnosticProperties . Add ( TextToRemoveKey , startingTextGetsOrSets ) ;
244+ context . ReportDiagnostic ( Diagnostic . Create ( SA1624Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , "set" , startingTextSets ) ) ;
245+ }
246+ else if ( ! text . StartsWith ( startingTextSets , StringComparison . Ordinal ) )
254247 {
255248 diagnosticProperties . Add ( ExpectedTextKey , startingTextSets ) ;
256249 context . ReportDiagnostic ( Diagnostic . Create ( SA1623Descriptor , diagnosticLocation , diagnosticProperties . ToImmutable ( ) , startingTextSets ) ) ;
0 commit comments