@@ -6,7 +6,6 @@ namespace StyleCop.Analyzers.DocumentationRules
66 using System ;
77 using System . Collections . Immutable ;
88 using System . Linq ;
9- using System . Threading ;
109 using Helpers ;
1110 using Microsoft . CodeAnalysis ;
1211 using Microsoft . CodeAnalysis . CSharp ;
@@ -46,6 +45,16 @@ internal class SA1600ElementsMustBeDocumented : DiagnosticAnalyzer
4645 ImmutableArray . Create ( SyntaxKind . ClassDeclaration , SyntaxKind . StructDeclaration , SyntaxKind . InterfaceDeclaration , SyntaxKind . EnumDeclaration ) ;
4746
4847 private static readonly Action < CompilationStartAnalysisContext > CompilationStartAction = HandleCompilationStart ;
48+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > BaseTypeDeclarationAction = Analyzer . HandleBaseTypeDeclaration ;
49+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > MethodDeclarationAction = Analyzer . HandleMethodDeclaration ;
50+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > ConstructorDeclarationAction = Analyzer . HandleConstructorDeclaration ;
51+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > DestructorDeclarationAction = Analyzer . HandleDestructorDeclaration ;
52+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > PropertyDeclarationAction = Analyzer . HandlePropertyDeclaration ;
53+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > IndexerDeclarationAction = Analyzer . HandleIndexerDeclaration ;
54+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > FieldDeclarationAction = Analyzer . HandleFieldDeclaration ;
55+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > DelegateDeclarationAction = Analyzer . HandleDelegateDeclaration ;
56+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > EventDeclarationAction = Analyzer . HandleEventDeclaration ;
57+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > EventFieldDeclarationAction = Analyzer . HandleEventFieldDeclaration ;
4958
5059 /// <inheritdoc/>
5160 public override ImmutableArray < DiagnosticDescriptor > SupportedDiagnostics { get ; } =
@@ -59,30 +68,21 @@ public override void Initialize(AnalysisContext context)
5968
6069 private static void HandleCompilationStart ( CompilationStartAnalysisContext context )
6170 {
62- Analyzer analyzer = new Analyzer ( context . Options , context . CancellationToken ) ;
63- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleBaseTypeDeclaration , BaseTypeDeclarationKinds ) ;
64- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleMethodDeclaration , SyntaxKind . MethodDeclaration ) ;
65- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleConstructorDeclaration , SyntaxKind . ConstructorDeclaration ) ;
66- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleDestructorDeclaration , SyntaxKind . DestructorDeclaration ) ;
67- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandlePropertyDeclaration , SyntaxKind . PropertyDeclaration ) ;
68- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleIndexerDeclaration , SyntaxKind . IndexerDeclaration ) ;
69- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleFieldDeclaration , SyntaxKind . FieldDeclaration ) ;
70- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleDelegateDeclaration , SyntaxKind . DelegateDeclaration ) ;
71- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleEventDeclaration , SyntaxKind . EventDeclaration ) ;
72- context . RegisterSyntaxNodeActionHonorExclusions ( analyzer . HandleEventFieldDeclaration , SyntaxKind . EventFieldDeclaration ) ;
71+ context . RegisterSyntaxNodeActionHonorExclusions ( BaseTypeDeclarationAction , BaseTypeDeclarationKinds ) ;
72+ context . RegisterSyntaxNodeActionHonorExclusions ( MethodDeclarationAction , SyntaxKind . MethodDeclaration ) ;
73+ context . RegisterSyntaxNodeActionHonorExclusions ( ConstructorDeclarationAction , SyntaxKind . ConstructorDeclaration ) ;
74+ context . RegisterSyntaxNodeActionHonorExclusions ( DestructorDeclarationAction , SyntaxKind . DestructorDeclaration ) ;
75+ context . RegisterSyntaxNodeActionHonorExclusions ( PropertyDeclarationAction , SyntaxKind . PropertyDeclaration ) ;
76+ context . RegisterSyntaxNodeActionHonorExclusions ( IndexerDeclarationAction , SyntaxKind . IndexerDeclaration ) ;
77+ context . RegisterSyntaxNodeActionHonorExclusions ( FieldDeclarationAction , SyntaxKind . FieldDeclaration ) ;
78+ context . RegisterSyntaxNodeActionHonorExclusions ( DelegateDeclarationAction , SyntaxKind . DelegateDeclaration ) ;
79+ context . RegisterSyntaxNodeActionHonorExclusions ( EventDeclarationAction , SyntaxKind . EventDeclaration ) ;
80+ context . RegisterSyntaxNodeActionHonorExclusions ( EventFieldDeclarationAction , SyntaxKind . EventFieldDeclaration ) ;
7381 }
7482
75- private class Analyzer
83+ private static class Analyzer
7684 {
77- private readonly DocumentationSettings documentationSettings ;
78-
79- public Analyzer ( AnalyzerOptions options , CancellationToken cancellationToken )
80- {
81- StyleCopSettings settings = options . GetStyleCopSettings ( cancellationToken ) ;
82- this . documentationSettings = settings . DocumentationRules ;
83- }
84-
85- public void HandleBaseTypeDeclaration ( SyntaxNodeAnalysisContext context )
85+ public static void HandleBaseTypeDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
8686 {
8787 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
8888 {
@@ -98,7 +98,7 @@ public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
9898
9999 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
100100 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
101- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
101+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
102102 {
103103 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
104104 {
@@ -107,7 +107,7 @@ public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
107107 }
108108 }
109109
110- public void HandleMethodDeclaration ( SyntaxNodeAnalysisContext context )
110+ public static void HandleMethodDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
111111 {
112112 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
113113 {
@@ -118,7 +118,7 @@ public void HandleMethodDeclaration(SyntaxNodeAnalysisContext context)
118118
119119 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
120120 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
121- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
121+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
122122 {
123123 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
124124 {
@@ -127,7 +127,7 @@ public void HandleMethodDeclaration(SyntaxNodeAnalysisContext context)
127127 }
128128 }
129129
130- public void HandleConstructorDeclaration ( SyntaxNodeAnalysisContext context )
130+ public static void HandleConstructorDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
131131 {
132132 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
133133 {
@@ -138,7 +138,7 @@ public void HandleConstructorDeclaration(SyntaxNodeAnalysisContext context)
138138
139139 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
140140 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
141- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
141+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
142142 {
143143 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
144144 {
@@ -147,7 +147,7 @@ public void HandleConstructorDeclaration(SyntaxNodeAnalysisContext context)
147147 }
148148 }
149149
150- public void HandleDestructorDeclaration ( SyntaxNodeAnalysisContext context )
150+ public static void HandleDestructorDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
151151 {
152152 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
153153 {
@@ -158,7 +158,7 @@ public void HandleDestructorDeclaration(SyntaxNodeAnalysisContext context)
158158
159159 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
160160 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
161- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
161+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
162162 {
163163 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
164164 {
@@ -167,7 +167,7 @@ public void HandleDestructorDeclaration(SyntaxNodeAnalysisContext context)
167167 }
168168 }
169169
170- public void HandlePropertyDeclaration ( SyntaxNodeAnalysisContext context )
170+ public static void HandlePropertyDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
171171 {
172172 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
173173 {
@@ -178,7 +178,7 @@ public void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context)
178178
179179 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
180180 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
181- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
181+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
182182 {
183183 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
184184 {
@@ -187,7 +187,7 @@ public void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context)
187187 }
188188 }
189189
190- public void HandleIndexerDeclaration ( SyntaxNodeAnalysisContext context )
190+ public static void HandleIndexerDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
191191 {
192192 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
193193 {
@@ -198,7 +198,7 @@ public void HandleIndexerDeclaration(SyntaxNodeAnalysisContext context)
198198
199199 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
200200 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
201- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
201+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
202202 {
203203 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
204204 {
@@ -207,7 +207,7 @@ public void HandleIndexerDeclaration(SyntaxNodeAnalysisContext context)
207207 }
208208 }
209209
210- public void HandleFieldDeclaration ( SyntaxNodeAnalysisContext context )
210+ public static void HandleFieldDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
211211 {
212212 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
213213 {
@@ -219,7 +219,7 @@ public void HandleFieldDeclaration(SyntaxNodeAnalysisContext context)
219219
220220 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
221221 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
222- if ( variableDeclaration != null && this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
222+ if ( variableDeclaration != null && NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
223223 {
224224 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
225225 {
@@ -232,7 +232,7 @@ public void HandleFieldDeclaration(SyntaxNodeAnalysisContext context)
232232 }
233233 }
234234
235- public void HandleDelegateDeclaration ( SyntaxNodeAnalysisContext context )
235+ public static void HandleDelegateDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
236236 {
237237 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
238238 {
@@ -243,7 +243,7 @@ public void HandleDelegateDeclaration(SyntaxNodeAnalysisContext context)
243243
244244 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
245245 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
246- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
246+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
247247 {
248248 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
249249 {
@@ -252,7 +252,7 @@ public void HandleDelegateDeclaration(SyntaxNodeAnalysisContext context)
252252 }
253253 }
254254
255- public void HandleEventDeclaration ( SyntaxNodeAnalysisContext context )
255+ public static void HandleEventDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
256256 {
257257 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
258258 {
@@ -263,7 +263,7 @@ public void HandleEventDeclaration(SyntaxNodeAnalysisContext context)
263263
264264 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
265265 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
266- if ( this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
266+ if ( NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
267267 {
268268 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
269269 {
@@ -272,7 +272,7 @@ public void HandleEventDeclaration(SyntaxNodeAnalysisContext context)
272272 }
273273 }
274274
275- public void HandleEventFieldDeclaration ( SyntaxNodeAnalysisContext context )
275+ public static void HandleEventFieldDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
276276 {
277277 if ( context . GetDocumentationMode ( ) != DocumentationMode . Diagnose )
278278 {
@@ -284,7 +284,7 @@ public void HandleEventFieldDeclaration(SyntaxNodeAnalysisContext context)
284284
285285 Accessibility declaredAccessibility = declaration . GetDeclaredAccessibility ( context . SemanticModel , context . CancellationToken ) ;
286286 Accessibility effectiveAccessibility = declaration . GetEffectiveAccessibility ( context . SemanticModel , context . CancellationToken ) ;
287- if ( variableDeclaration != null && this . NeedsComment ( declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
287+ if ( variableDeclaration != null && NeedsComment ( settings . DocumentationRules , declaration . Kind ( ) , declaration . Parent . Kind ( ) , declaredAccessibility , effectiveAccessibility ) )
288288 {
289289 if ( ! XmlCommentHelper . HasDocumentation ( declaration ) )
290290 {
@@ -297,22 +297,22 @@ public void HandleEventFieldDeclaration(SyntaxNodeAnalysisContext context)
297297 }
298298 }
299299
300- private bool NeedsComment ( SyntaxKind syntaxKind , SyntaxKind parentSyntaxKind , Accessibility declaredAccessibility , Accessibility effectiveAccessibility )
300+ public static bool NeedsComment ( DocumentationSettings documentationSettings , SyntaxKind syntaxKind , SyntaxKind parentSyntaxKind , Accessibility declaredAccessibility , Accessibility effectiveAccessibility )
301301 {
302- if ( this . documentationSettings . DocumentInterfaces
302+ if ( documentationSettings . DocumentInterfaces
303303 && ( syntaxKind == SyntaxKind . InterfaceDeclaration || parentSyntaxKind == SyntaxKind . InterfaceDeclaration ) )
304304 {
305305 // DocumentInterfaces => all interfaces must be documented
306306 return true ;
307307 }
308308
309- if ( syntaxKind == SyntaxKind . FieldDeclaration && this . documentationSettings . DocumentPrivateFields )
309+ if ( syntaxKind == SyntaxKind . FieldDeclaration && documentationSettings . DocumentPrivateFields )
310310 {
311311 // DocumentPrivateFields => all fields must be documented
312312 return true ;
313313 }
314314
315- if ( this . documentationSettings . DocumentPrivateElements )
315+ if ( documentationSettings . DocumentPrivateElements )
316316 {
317317 if ( syntaxKind == SyntaxKind . FieldDeclaration && declaredAccessibility == Accessibility . Private )
318318 {
@@ -330,12 +330,12 @@ private bool NeedsComment(SyntaxKind syntaxKind, SyntaxKind parentSyntaxKind, Ac
330330 case Accessibility . Protected :
331331 case Accessibility . ProtectedOrInternal :
332332 // These items are part of the exposed API surface => document if configured
333- return this . documentationSettings . DocumentExposedElements ;
333+ return documentationSettings . DocumentExposedElements ;
334334
335335 case Accessibility . ProtectedAndInternal :
336336 case Accessibility . Internal :
337337 // These items are part of the internal API surface => document if configured
338- return this . documentationSettings . DocumentInternalElements ;
338+ return documentationSettings . DocumentInternalElements ;
339339
340340 case Accessibility . NotApplicable :
341341 case Accessibility . Private :
0 commit comments