Class ControlFlowGraphIndex
Заполняется лениво: граф строится на первый запрос по блоку кода и остаётся в кэше до события жизненного цикла документа. Один блок кода анализируют несколько потребителей, и каждый повторный разбор — это полный обход поддерева операторов, поэтому построение делится между ними.
Ключ — пара «блок кода + настройки построения». Блок сравнивается по
тождественности (у узлов разбора нет своего equals), то есть записи
действительны ровно для того дерева разбора, по которому построены. Настройки
входят в ключ, потому что графы с разными настройками различаются по структуре.
Выдаваемый граф общий и предназначен только для чтения: изменение его структуры испортит данные остальным потребителям.
Инвалидация — per-URI через AbstractDocumentLifecycleClearableIndex:
изменение содержимого, освобождение вторичных данных, закрытие и удаление документа
удаляют весь бакет этого URI вместе со ссылками на узлы его дерева разбора.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidУдалить кэш по URI документа.graphOf(DocumentContext documentContext, BSLParser.CodeBlockContext codeBlock, CfgBuildOptions options) Граф потока управления блока кода — из кэша либо построенный на месте.Methods inherited from class AbstractDocumentLifecycleClearableIndex
handleContentChanged, handleDataCleared, handleDocumentClosed, handleDocumentRemoved
-
Constructor Details
-
ControlFlowGraphIndex
public ControlFlowGraphIndex()
-
-
Method Details
-
graphOf
public ControlFlowGraph graphOf(DocumentContext documentContext, BSLParser.CodeBlockContext codeBlock, CfgBuildOptions options) Граф потока управления блока кода — из кэша либо построенный на месте.- Parameters:
documentContext- контекст документа, которому принадлежит блок кода.codeBlock- блок кода: тело метода или код модуля.options- настройки построения.- Returns:
- граф потока управления; общий экземпляр, изменять его нельзя.
-
clear
Удалить кэш по URI документа.- Specified by:
clearin classAbstractDocumentLifecycleClearableIndex- Parameters:
uri- URI документа.
-