Class AbstractDocumentLifecycleClearableIndex

java.lang.Object
com.github._1c_syntax.bsl.languageserver.index.AbstractDocumentLifecycleClearableIndex
Direct Known Subclasses:
ControlFlowGraphIndex, EventContractsIndex, GuardConditionNarrowing, InferredExpressionTypeIndex, MethodReturnTypeIndexer, ReceiverSitesIndex, VariableFlowAnalyzer, WorkspaceSymbolIndex

public abstract class AbstractDocumentLifecycleClearableIndex extends Object
База для per-URI индексов, чьи записи привязаны к одному документу и должны сбрасываться на событиях его жизненного цикла.

Содержит общие @EventListener-обработчики, сбрасывающие индекс по URI на:

Spring наследует @EventListener в конкретных подклассах-бинах, поэтому наследникам достаточно реализовать clear(URI). Сама база бином не является.
  • Constructor Details

    • AbstractDocumentLifecycleClearableIndex

      public AbstractDocumentLifecycleClearableIndex()
  • Method Details

    • clear

      public abstract void clear(URI uri)
      Удалить записи индекса, относящиеся к данному URI документа.
      Parameters:
      uri - URI документа.
    • handleContentChanged

      @EventListener public void handleContentChanged(DocumentContextContentChangedEvent event)
    • handleConfigurationBindingChanged

      @EventListener @Order(-2147483648) public void handleConfigurationBindingChanged(DocumentContextConfigurationBindingChangedEvent event)
      Сбрасывает записи документа, привязка которого к конфигурации пересчитана.

      Раньше всех остальных слушателей: дерево символов построено заново, а дерево разбора прежнее, и запись, найденная по его узлу, — раскладка расчёта по потоку, тип выражения — ссылается на символы прежнего дерева. Слушатели, которые по этому событию пересчитывают документ (ссылки, объявленные типы, типы возвращаемых значений), прочли бы её раньше, чем она сброшена. При правке текста порядок не важен: дерево разбора новое, и прежние записи по его узлам не находятся.

      Parameters:
      event - событие изменения привязки документа.
    • handleDataCleared

      @EventListener public void handleDataCleared(ServerContextDocumentClearedEvent event)
    • handleDocumentClosed

      @EventListener public void handleDocumentClosed(ServerContextDocumentClosedEvent event)
    • handleDocumentRemoved

      @EventListener public void handleDocumentRemoved(ServerContextDocumentRemovedEvent event)
    • clearContext

      protected boolean clearContext(ServerContext serverContext, URI removedUri)
      Удалить записи всех документов контекста, который очищается целиком: следом уйдут все его документы. Зовётся на удаление каждого из них, поэтому по контексту, записи которого уже сняты, должен отрабатывать дёшево.

      Снимать нужно записи только этого контекста: индекс, общий на несколько контекстов, обязан сохранить записи документов остальных. Оставшиеся документы контекста — ServerContext.getDocuments(); удалённый к этому моменту из карты документ приходит отдельным параметром.

      По умолчанию индекс чистится по документу. Переопределять стоит индексу, у которого удаление записей одного документа стоит больше, чем поиск по его URI.

      Parameters:
      serverContext - очищаемый контекст.
      removedUri - URI документа, удалённого из контекста.
      Returns:
      true, если записи контекста сняты и записи документа удалять не нужно.