public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) { if (context.GetDocumentationMode() != DocumentationMode.Diagnose) { return; } BaseTypeDeclarationSyntax declaration = (BaseTypeDeclarationSyntax)context.Node; if (declaration.Modifiers.Any(SyntaxKind.PartialKeyword)) { // Handled by SA1601 return; } Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility(context.SemanticModel, context.CancellationToken); Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken); if (this.NeedsComment(declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility)) { if (!XmlCommentHelper.HasDocumentation(declaration)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation())); } } }
public static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context, StyleCopSettings settings) { if (context.GetDocumentationMode() == DocumentationMode.None) { return; } BaseTypeDeclarationSyntax declaration = (BaseTypeDeclarationSyntax)context.Node; if (!declaration.Modifiers.Any(SyntaxKind.PartialKeyword)) { return; } Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility(context.SemanticModel, context.CancellationToken); Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken); if (SA1600ElementsMustBeDocumented.NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility)) { if (!XmlCommentHelper.HasDocumentation(declaration)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation())); } } }
internal static Accessibility GetEffectiveAccessibility(this BaseTypeDeclarationSyntax syntax, SemanticModel semanticModel, CancellationToken cancellationToken) { if (syntax == null) { throw new ArgumentNullException(nameof(syntax)); } if (semanticModel == null) { throw new ArgumentNullException(nameof(semanticModel)); } Accessibility declaredAccessibility = syntax.GetDeclaredAccessibility(semanticModel, cancellationToken); if (declaredAccessibility <= Accessibility.Private) { return(declaredAccessibility); } BaseTypeDeclarationSyntax enclosingType = syntax.Parent as BaseTypeDeclarationSyntax; if (enclosingType == null) { return(declaredAccessibility); } Accessibility enclosingAccessibility = enclosingType.GetEffectiveAccessibility(semanticModel, cancellationToken); return(CombineEffectiveAccessibility(declaredAccessibility, enclosingAccessibility)); }
internal static Accessibility GetEffectiveAccessibility(this BaseTypeDeclarationSyntax syntax, SemanticModel semanticModel, CancellationToken cancellationToken) { Requires.NotNull(syntax, nameof(syntax)); Requires.NotNull(semanticModel, nameof(semanticModel)); Accessibility declaredAccessibility = syntax.GetDeclaredAccessibility(semanticModel, cancellationToken); if (declaredAccessibility <= Accessibility.Private) { return(declaredAccessibility); } if (!(syntax.Parent is BaseTypeDeclarationSyntax enclosingType)) { return(declaredAccessibility); } Accessibility enclosingAccessibility = enclosingType.GetEffectiveAccessibility(semanticModel, cancellationToken); return(CombineEffectiveAccessibility(declaredAccessibility, enclosingAccessibility)); }