public override void Initialize(AnalysisContext analysisContext)
        {
            analysisContext.EnableConcurrentExecution();
            analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

            analysisContext.RegisterCompilationStartAction(
                (context) =>
            {
                INamedTypeSymbol iCollectionType        = WellKnownTypes.ICollection(context.Compilation);
                INamedTypeSymbol genericICollectionType = WellKnownTypes.GenericICollection(context.Compilation);
                INamedTypeSymbol iEnumerableType        = WellKnownTypes.IEnumerable(context.Compilation);
                INamedTypeSymbol genericIEnumerableType = WellKnownTypes.GenericIEnumerable(context.Compilation);
                INamedTypeSymbol iListType        = WellKnownTypes.IList(context.Compilation);
                INamedTypeSymbol genericIListType = WellKnownTypes.GenericIList(context.Compilation);

                if (iCollectionType == null && genericICollectionType == null &&
                    iEnumerableType == null && genericIEnumerableType == null &&
                    iListType == null && genericIListType == null)
                {
                    return;
                }

                context.RegisterSymbolAction(c => AnalyzeSymbol(c,
                                                                iCollectionType, genericICollectionType,
                                                                iEnumerableType, genericIEnumerableType,
                                                                iListType, genericIListType),
                                             SymbolKind.NamedType);
            });
        }