public static void CreateAndRegisterActions(
                CompilationStartAnalysisContext compilationStartContext,
                AbstractRemoveUnusedMembersDiagnosticAnalyzer <TDocumentationCommentTriviaSyntax, TIdentifierNameSyntax> analyzer)
            {
                var compilationAnalyzer = new CompilationAnalyzer(compilationStartContext.Compilation, analyzer);

                compilationAnalyzer.RegisterActions(compilationStartContext);
            }
            private CompilationAnalyzer(
                Compilation compilation,
                AbstractRemoveUnusedMembersDiagnosticAnalyzer <TDocumentationCommentTriviaSyntax, TIdentifierNameSyntax> analyzer)
            {
                _gate     = new object();
                _analyzer = analyzer;

                // State map for candidate member symbols, with the value indicating how each symbol is used in executable code.
                _symbolValueUsageStateMap = new Dictionary <ISymbol, ValueUsageInfo>();

                _taskType        = compilation.TaskType();
                _genericTaskType = compilation.TaskOfTType();
                _debuggerDisplayAttributeType = compilation.DebuggerDisplayAttributeType();
                _structLayoutAttributeType    = compilation.StructLayoutAttributeType();
                _eventArgsType = compilation.EventArgsType();
                _deserializationConstructorCheck = new DeserializationConstructorCheck(compilation);
                _attributeSetForMethodsToIgnore  = ImmutableHashSet.CreateRange(GetAttributesForMethodsToIgnore(compilation));
            }