Class ControlFlowGraphIndex

java.lang.Object
com.github._1c_syntax.bsl.languageserver.index.AbstractDocumentLifecycleClearableIndex
com.github._1c_syntax.bsl.languageserver.cfg.ControlFlowGraphIndex

@Component @WorkspaceScope public class ControlFlowGraphIndex extends AbstractDocumentLifecycleClearableIndex
Кэш графов потока управления, разрезанный по URI документа.

Заполняется лениво: граф строится на первый запрос по блоку кода и остаётся в кэше до события жизненного цикла документа. Один блок кода анализируют несколько потребителей, и каждый повторный разбор — это полный обход поддерева операторов, поэтому построение делится между ними.

Ключ — пара «блок кода + настройки построения». Блок сравнивается по тождественности (у узлов разбора нет своего equals), то есть записи действительны ровно для того дерева разбора, по которому построены. Настройки входят в ключ, потому что графы с разными настройками различаются по структуре.

Выдаваемый граф общий и предназначен только для чтения: изменение его структуры испортит данные остальным потребителям.

Инвалидация — per-URI через AbstractDocumentLifecycleClearableIndex: изменение содержимого, освобождение вторичных данных, закрытие и удаление документа удаляют весь бакет этого URI вместе со ссылками на узлы его дерева разбора.

  • Constructor Details

    • ControlFlowGraphIndex

      public ControlFlowGraphIndex()
  • Method Details

    • graphOf

      public ControlFlowGraph graphOf(DocumentContext documentContext, BSLParser.CodeBlockContext codeBlock, CfgBuildOptions options)
      Граф потока управления блока кода — из кэша либо построенный на месте.
      Parameters:
      documentContext - контекст документа, которому принадлежит блок кода.
      codeBlock - блок кода: тело метода или код модуля.
      options - настройки построения.
      Returns:
      граф потока управления; общий экземпляр, изменять его нельзя.
    • clear

      public void clear(URI uri)
      Удалить кэш по URI документа.
      Specified by:
      clear in class AbstractDocumentLifecycleClearableIndex
      Parameters:
      uri - URI документа.