Beispiel #1
0
        private static void AnalyzeClassDeclaration(SyntaxNodeAnalysisContext context)
        {
            var classDeclaration = (ClassDeclarationSyntax)context.Node;

            if (classDeclaration.Modifiers.ContainsAny(
                    SyntaxKind.StaticKeyword,
                    SyntaxKind.AbstractKeyword,
                    SyntaxKind.SealedKeyword,
                    SyntaxKind.PartialKeyword))
            {
                return;
            }

            if (!classDeclaration.Members.Any())
            {
                return;
            }

            INamedTypeSymbol symbol = context.SemanticModel.GetDeclaredSymbol(classDeclaration, context.CancellationToken);

            if (symbol.BaseType?.IsObject() != true)
            {
                return;
            }

            if (!symbol.Interfaces.IsDefaultOrEmpty)
            {
                return;
            }

            ImmutableArray <ISymbol> members = symbol.GetMembers();

            if (!members.Any())
            {
                return;
            }

            if (!AnalyzeMembers(members))
            {
                return;
            }

            MakeClassStaticWalker walker = MakeClassStaticWalker.GetInstance();

            walker.CanBeMadeStatic   = true;
            walker.Symbol            = symbol;
            walker.SemanticModel     = context.SemanticModel;
            walker.CancellationToken = context.CancellationToken;

            walker.Visit(classDeclaration);

            bool canBeMadeStatic = walker.CanBeMadeStatic;

            MakeClassStaticWalker.Free(walker);

            if (canBeMadeStatic)
            {
                DiagnosticHelpers.ReportDiagnostic(context, DiagnosticRules.MakeClassStatic, classDeclaration.Identifier);
            }
        }
Beispiel #2
0
            public static void Free(MakeClassStaticWalker walker)
            {
                walker.Symbol            = null;
                walker.SemanticModel     = null;
                walker.CancellationToken = default;

                _cachedInstance = walker;
            }
            public static MakeClassStaticWalker GetInstance()
            {
                MakeClassStaticWalker walker = _cachedInstance;

                if (walker != null)
                {
                    _cachedInstance = null;
                    return(walker);
                }

                return(new MakeClassStaticWalker());
            }
Beispiel #4
0
            public static MakeClassStaticWalker GetInstance()
            {
                MakeClassStaticWalker walker = _cachedInstance;

                if (walker != null)
                {
                    Debug.Assert(walker.Symbol == null);
                    Debug.Assert(walker.SemanticModel == null);
                    Debug.Assert(walker.CancellationToken == default);

                    _cachedInstance = null;
                    return(walker);
                }

                return(new MakeClassStaticWalker());
            }
 public static void Free(MakeClassStaticWalker walker)
 {
     _cachedInstance = walker;
 }