private static int Compare(BaseTypeDeclarationSyntax x, BaseTypeDeclarationSyntax y) { int result; if (EqualStaticness(x.Modifiers, y.Modifiers, out result) && EqualAccessibility(x, x.Modifiers, y, y.Modifiers, out result) && EqualIdentifierName(x.Identifier, y.Identifier, out result)) { if (x.Kind() == SyntaxKind.ClassDeclaration) { EqualTypeParameterCount( ((ClassDeclarationSyntax)x).TypeParameterList, ((ClassDeclarationSyntax)y).TypeParameterList, out result); } else if (x.Kind() == SyntaxKind.StructDeclaration) { EqualTypeParameterCount( ((StructDeclarationSyntax)x).TypeParameterList, ((StructDeclarationSyntax)y).TypeParameterList, out result); } else { EqualTypeParameterCount( ((InterfaceDeclarationSyntax)x).TypeParameterList, ((InterfaceDeclarationSyntax)y).TypeParameterList, out result); } } return(result); }
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)) { // Handled by SA1601 return; } Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility(context.SemanticModel, context.CancellationToken); Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken); if (NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility)) { if (!XmlCommentHelper.HasDocumentation(declaration)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation())); } } }
public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) { if (context.GetDocumentationMode() != DocumentationMode.Diagnose) { 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 (this.NeedsComment(declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility)) { if (!XmlCommentHelper.HasDocumentation(declaration)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation())); } } }
public void ConvertBaseList(BaseTypeDeclarationSyntax type, List <InheritsStatementSyntax> inherits, List <ImplementsStatementSyntax> implements) { TypeSyntax[] arr; switch (type.Kind()) { case Microsoft.CodeAnalysis.CSharp.SyntaxKind.ClassDeclaration: var classOrInterface = type.BaseList?.Types.FirstOrDefault()?.Type; if (classOrInterface == null) { return; } var classOrInterfaceSymbol = ModelExtensions.GetSymbolInfo(_semanticModel, classOrInterface).Symbol; if (classOrInterfaceSymbol?.IsInterfaceType() == true) { arr = type.BaseList?.Types.Select(t => (TypeSyntax)t.Type.Accept(_nodesVisitor)).ToArray(); if (arr.Length > 0) { implements.Add(SyntaxFactory.ImplementsStatement(arr)); } } else { inherits.Add(SyntaxFactory.InheritsStatement((TypeSyntax)classOrInterface.Accept(_nodesVisitor))); arr = type.BaseList?.Types.Skip(1).Select(t => (TypeSyntax)t.Type.Accept(_nodesVisitor)).ToArray(); if (arr.Length > 0) { implements.Add(SyntaxFactory.ImplementsStatement(arr)); } } break; case Microsoft.CodeAnalysis.CSharp.SyntaxKind.StructDeclaration: arr = type.BaseList?.Types.Select(t => (TypeSyntax)t.Type.Accept(_nodesVisitor)).ToArray(); if (arr?.Length > 0) { implements.Add(SyntaxFactory.ImplementsStatement(arr)); } break; case Microsoft.CodeAnalysis.CSharp.SyntaxKind.InterfaceDeclaration: arr = type.BaseList?.Types.Select(t => (TypeSyntax)t.Type.Accept(_nodesVisitor)).ToArray(); if (arr?.Length > 0) { inherits.Add(SyntaxFactory.InheritsStatement(arr)); } break; } }
private static SyntaxNode AddAccessModifierIfNotPresent(BaseTypeDeclarationSyntax node) { SyntaxTokenList modifiers = node.Modifiers; AccessModifier currentAccessibility = ModifiersHelper.GetAccessibility(modifiers); if (currentAccessibility != AccessModifier.NotExplicit) { return(node); } AccessModifier defaultAccessibility = ModifiersHelper.GetDefaultAccessibility(node.Kind()); SyntaxTriviaList leadingTrivia = node.GetLeadingTrivia(); SyntaxTokenList newModifiers = FormatModifiers(modifiers, defaultAccessibility); return(node.WithoutLeadingTrivia().WithModifiers(newModifiers).WithLeadingTrivia(leadingTrivia)); }