Пример #1
0
        public static ConstructorDeclarationSyntax AddStaticModifier(ConstructorDeclarationSyntax constructorDeclaration)
        {
            SyntaxTokenList modifiers = constructorDeclaration.Modifiers;

            if (!modifiers.Contains(SyntaxKind.StaticKeyword))
            {
                SyntaxTokenList newModifiers = modifiers;

                if (modifiers.ContainsAccessModifier())
                {
                    newModifiers = modifiers.RemoveAccessModifiers();

                    if (newModifiers.Any())
                    {
                        newModifiers = newModifiers.ReplaceAt(0, newModifiers[0].WithLeadingTrivia(modifiers[0].LeadingTrivia));
                        newModifiers = Inserter.InsertModifier(newModifiers, SyntaxKind.StaticKeyword);
                    }
                    else
                    {
                        newModifiers = Inserter.InsertModifier(newModifiers, CSharpFactory.StaticKeyword().WithLeadingTrivia(modifiers[0].LeadingTrivia));
                    }
                }
                else
                {
                    newModifiers = Inserter.InsertModifier(newModifiers, SyntaxKind.StaticKeyword);
                }

                return(constructorDeclaration.WithModifiers(newModifiers));
            }
            else
            {
                return(constructorDeclaration);
            }
        }
Пример #2
0
        private static Accessibility GetAccessModifier(SyntaxNodeAnalysisContext context, MemberDeclarationSyntax declaration, SyntaxTokenList modifiers)
        {
            if (!modifiers.ContainsAccessModifier())
            {
                if (modifiers.Any(SyntaxKind.PartialKeyword))
                {
                    if (!declaration.IsKind(SyntaxKind.MethodDeclaration))
                    {
                        Accessibility?accessibility = GetPartialAccessModifier(context, declaration);

                        if (accessibility != null)
                        {
                            if (accessibility == Accessibility.NotApplicable)
                            {
                                return(declaration.GetDefaultExplicitAccessibility());
                            }
                            else
                            {
                                return(accessibility.Value);
                            }
                        }
                    }
                }
                else
                {
                    return(declaration.GetDefaultExplicitAccessibility());
                }
            }

            return(Accessibility.NotApplicable);
        }
        private static void AddDefaultAccessModifier(SyntaxNodeAnalysisContext context, SyntaxTokenList modifiers)
        {
            if (context.Node.IsKind(SyntaxKind.OperatorDeclaration))
            {
                return;
            }

            //TODO: check access modifier for partial class, struct, interface
            if (modifiers.Any(SyntaxKind.PartialKeyword))
            {
                return;
            }

            if (modifiers.ContainsAccessModifier())
            {
                return;
            }

            if (!IsAccessModifierRequired(context))
            {
                return;
            }

            Location location = GetLocation(context.Node);

            if (location == null)
            {
                return;
            }

            context.ReportDiagnostic(DiagnosticDescriptors.AddAccessModifier, location);
        }
Пример #4
0
 private static void ReportDiagnostic(
     SyntaxNodeAnalysisContext context,
     MemberDeclarationSyntax memberDeclaration,
     SyntaxTokenList modifiers,
     SyntaxToken token)
 {
     if (!memberDeclaration.ContainsDirectives(modifiers.Span))
     {
         if (!modifiers.ContainsAccessModifier() ||
             memberDeclaration.GetDeclaredAccessibility() != Accessibility.ProtectedOrInternal ||
             AreTokensNextToEachOther(modifiers, SyntaxKind.ProtectedKeyword, SyntaxKind.InternalKeyword))
         {
             context.ReportDiagnostic(
                 DiagnosticDescriptors.OverridingMemberCannotChangeAccessModifiers,
                 token);
         }
     }
 }
Пример #5
0
        public static ConstructorDeclarationSyntax AddStaticModifier(ConstructorDeclarationSyntax constructorDeclaration)
        {
            if (constructorDeclaration == null)
            {
                throw new ArgumentNullException(nameof(constructorDeclaration));
            }

            SyntaxTokenList modifiers = constructorDeclaration.Modifiers;

            if (!modifiers.Contains(SyntaxKind.StaticKeyword))
            {
                SyntaxTokenList newModifiers = modifiers;

                if (modifiers.ContainsAccessModifier())
                {
                    newModifiers = modifiers.RemoveAccessModifiers();

                    if (newModifiers.Any())
                    {
                        newModifiers = newModifiers.ReplaceAt(0, newModifiers[0].WithLeadingTrivia(modifiers[0].LeadingTrivia));
                        newModifiers = newModifiers.InsertModifier(SyntaxKind.StaticKeyword, ModifierComparer.Instance);
                    }
                    else
                    {
                        newModifiers = newModifiers.InsertModifier(CSharpFactory.StaticKeyword().WithLeadingTrivia(modifiers[0].LeadingTrivia), ModifierComparer.Instance);
                    }
                }
                else
                {
                    newModifiers = newModifiers.InsertModifier(SyntaxKind.StaticKeyword, ModifierComparer.Instance);
                }

                return(constructorDeclaration.WithModifiers(newModifiers));
            }
            else
            {
                return(constructorDeclaration);
            }
        }