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); } }
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()); }
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; }