public ChangedTypesProvider(
            Lifetime lifetime,
            IShellLocks shellLocks,
            ChangeManager changeManager,
            DocumentManager documentManager,
            IPsiServices services)
        {
            _myServices        = services;
            _myLifetime        = lifetime;
            _myShellLocks      = shellLocks;
            _myDocumentManager = documentManager;
            _myChangedRanges   = new ConcurrentDictionary <IProjectFile, TextRange>();

            changeManager.Changed2.Advise(lifetime, OnChange);
            _myDocumentChangedEvent = shellLocks.CreateGroupingEvent(
                lifetime,
                "ChangedTypesProvider::DocumentChanged",
                s_updateInterval,
                OnProcessChangesEx);

            TypesChanged = new Signal <IReadOnlyCollection <ITypeElement> >(lifetime, "ChangedTypesProvider");
            _myLifetime.AddDispose(TypesChanged);
        }