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()));
                    }
                }
            }
Exemple #4
0
        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;
            }
        }
Exemple #5
0
        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));
        }