Class AbstractDocumentLifecycleClearableIndex
- Direct Known Subclasses:
ControlFlowGraphIndex, EventContractsIndex, GuardConditionNarrowing, InferredExpressionTypeIndex, MethodReturnTypeIndexer, ReceiverSitesIndex, VariableFlowAnalyzer, WorkspaceSymbolIndex
Содержит общие @EventListener-обработчики, сбрасывающие индекс по URI на:
- изменение содержимого —
DocumentContextContentChangedEvent; - изменение привязки к метаданным конфигурации (дерево символов построено заново) —
DocumentContextConfigurationBindingChangedEvent; - освобождение вторичных данных (batch-анализ выбрасывает AST после каждого
файла) —
ServerContextDocumentClearedEvent; - закрытие документа —
ServerContextDocumentClosedEvent; - удаление документа/файла —
ServerContextDocumentRemovedEvent.
@EventListener в конкретных подклассах-бинах, поэтому
наследникам достаточно реализовать clear(URI). Сама база бином не
является.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract voidУдалить записи индекса, относящиеся к данному URI документа.protected booleanclearContext(ServerContext serverContext, URI removedUri) Удалить записи всех документов контекста, который очищается целиком: следом уйдут все его документы.voidСбрасывает записи документа, привязка которого к конфигурации пересчитана.voidvoidvoidvoid
-
Constructor Details
-
AbstractDocumentLifecycleClearableIndex
public AbstractDocumentLifecycleClearableIndex()
-
-
Method Details
-
clear
Удалить записи индекса, относящиеся к данному URI документа.- Parameters:
uri- URI документа.
-
handleContentChanged
-
handleConfigurationBindingChanged
@EventListener @Order(-2147483648) public void handleConfigurationBindingChanged(DocumentContextConfigurationBindingChangedEvent event) Сбрасывает записи документа, привязка которого к конфигурации пересчитана.Раньше всех остальных слушателей: дерево символов построено заново, а дерево разбора прежнее, и запись, найденная по его узлу, — раскладка расчёта по потоку, тип выражения — ссылается на символы прежнего дерева. Слушатели, которые по этому событию пересчитывают документ (ссылки, объявленные типы, типы возвращаемых значений), прочли бы её раньше, чем она сброшена. При правке текста порядок не важен: дерево разбора новое, и прежние записи по его узлам не находятся.
- Parameters:
event- событие изменения привязки документа.
-
handleDataCleared
-
handleDocumentClosed
-
handleDocumentRemoved
-
clearContext
Удалить записи всех документов контекста, который очищается целиком: следом уйдут все его документы. Зовётся на удаление каждого из них, поэтому по контексту, записи которого уже сняты, должен отрабатывать дёшево.Снимать нужно записи только этого контекста: индекс, общий на несколько контекстов, обязан сохранить записи документов остальных. Оставшиеся документы контекста —
ServerContext.getDocuments(); удалённый к этому моменту из карты документ приходит отдельным параметром.По умолчанию индекс чистится по документу. Переопределять стоит индексу, у которого удаление записей одного документа стоит больше, чем поиск по его URI.
- Parameters:
serverContext- очищаемый контекст.removedUri- URI документа, удалённого из контекста.- Returns:
true, если записи контекста сняты и записи документа удалять не нужно.
-