Class SymbolTree
java.lang.Object
com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree
Символьное дерево документа. Содержит все символы документа, вложенные друг в друга по принципу родитель -> дети
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordНа чём, кроме текста документа, построено дерево: привязка документа к метаданным и голые имена, признанные при построении реквизитами своего типа. -
Constructor Summary
ConstructorsConstructorDescriptionSymbolTree(ModuleSymbol module) Создать дерево без ограничений препроцессора для объявлений методов.SymbolTree(ModuleSymbol module, SymbolTree.Basis basis) SymbolTree(ModuleSymbol module, Map<Range, Set<ExecutionContext>> methodConditions) Создать дерево с сохранёнными условиями объявлений методов.SymbolTree(ModuleSymbol module, Map<Range, Set<ExecutionContext>> methodConditions, SymbolTree.Basis basis) Основание классификации и условия объявлений относятся к одной версии дерева. -
Method Summary
Modifier and TypeMethodDescriptionbooleanfindSymbolBySelectionRange(Position position) Символ, чьё имя (selectionRange) накрывает позицию — то есть позиция стоит на объявлении символа.getBasis()Список всех символов всех уровней (за исключением символа модуля документа), преобразованных в плоский список.<T> List<T> getChildrenFlat(Class<T> clazz) Список всех символов всех уровней указанного типа (за исключением символа модуля документа), преобразованных в плоский список.Конструктор OneScript-класса (ПриСозданииОбъекта/OnObjectCreate), если он объявлен в документе.Получить контексты ветки препроцессора, в которой объявлен метод.Список методов документа.getMethodSymbol(String methodName) Поиск MethodSymbol в дереве по указанному имени (без учета регистра).Попытка поиска символа метода по узлу дерева разбора.Корневой символ модуля документа.getModuleVariableVisibleFromMethods(String variableName) Переменная уровня модуля, видимая из методов.getSymbolAtPosition(Position position) Поиск самого вложенного символа, содержащего указанную позицию.Плоский список всех переменных документаgetVariablesOfScope(SourceDefinedSymbol scopeSymbol) Переменные, объявленные в областиscopeSymbol: по одной на имя без учёта регистра (первая объявленная), упорядочены по имени.getVariableSymbol(String variableName, SourceDefinedSymbol scopeSymbol) Поиск VariableSymbol в дереве по указанному имени (без учета регистра) и области объявления.Попытка поиска символа переменной по узлу дерева разбора.getVariableSymbolInScope(ParserRuleContext node, String variableName) Переменная с именемvariableName, видимая в точке узлаnode: сперва — в охватывающем методе (поRULE_sub), иначе — на уровне модуля.inthashCode()toString()
-
Constructor Details
-
SymbolTree
Создать дерево без ограничений препроцессора для объявлений методов.- Parameters:
module- корневой символ документа.
-
SymbolTree
Создать дерево с сохранёнными условиями объявлений методов.Карта, её ключи и множества используются без защитного копирования. Вызывающий код должен обеспечить их неизменность в течение жизни дерева.
- Parameters:
module- корневой символ документа.methodConditions- условия по диапазонам имён методов этой версии документа; значенияnullдопустимы и означают неизвестное условие.
-
SymbolTree
-
SymbolTree
public SymbolTree(ModuleSymbol module, Map<Range, Set<ExecutionContext>> methodConditions, SymbolTree.Basis basis) Основание классификации и условия объявлений относятся к одной версии дерева.
-
-
Method Details
-
getMethodPreprocessorContexts
Получить контексты ветки препроцессора, в которой объявлен метод.Доступно после выгрузки AST. Контексты модуля, директивы компиляции и настройки диагностики не учитываются. Возвращённое множество изменять нельзя.
- Parameters:
method- метод из этой версии символьного дерева.- Returns:
- все контексты при отсутствии ограничения, пустое множество для недостижимой
ветки или
null, если условие нельзя вычислить.
-
getChildren
- Returns:
- Список символов верхнего уровня за исключением символа модуля документа.
-
getChildrenFlat
Список всех символов всех уровней указанного типа (за исключением символа модуля документа), преобразованных в плоский список.- Type Parameters:
T- тип искомого символа.- Parameters:
clazz- класс искомого символа.- Returns:
- плоский список символов указанного типа.
-
getModuleLevelRegions
- Returns:
- Список областей, расположенных на верхнем уровне документа.
-
getRegionsFlat
- Returns:
- плоский список всех областей документа.
-
getMethodSymbol
Попытка поиска символа метода по узлу дерева разбора.Implementation note - Поиск осуществляется по месту определения метода (declaration).
- Parameters:
ctx- узел дерева разбора документа.- Returns:
- найденный символ метода.
-
getMethodSymbol
Поиск MethodSymbol в дереве по указанному имени (без учета регистра).- Parameters:
methodName- Имя метода- Returns:
- MethodSymbol, если он был найден в дереве символов.
-
getVariableSymbol
Попытка поиска символа переменной по узлу дерева разбора.Implementation note Поиск осуществляется по месту определения переменной (declaration).
- Parameters:
ctx- узел дерева разбора документа.- Returns:
- найденный символ переменной.
-
getVariableSymbol
public Optional<VariableSymbol> getVariableSymbol(String variableName, SourceDefinedSymbol scopeSymbol) Поиск VariableSymbol в дереве по указанному имени (без учета регистра) и области объявления.- Parameters:
variableName- Имя переменнойscopeSymbol- Символ, внутри которого осуществляется поиск. Например,ModuleSymbolилиMethodSymbol.- Returns:
- VariableSymbol, если он был найден в дереве символов.
-
getVariablesOfScope
Переменные, объявленные в областиscopeSymbol: по одной на имя без учёта регистра (первая объявленная), упорядочены по имени.- Parameters:
scopeSymbol- область объявления —ModuleSymbolилиMethodSymbol.- Returns:
- неизменяемый список переменных; пустой, если в области их нет.
-
getVariableSymbolInScope
public Optional<VariableSymbol> getVariableSymbolInScope(ParserRuleContext node, String variableName) Переменная с именемvariableName, видимая в точке узлаnode: сперва — в охватывающем методе (поRULE_sub), иначе — на уровне модуля. Из метода видны только переменные модуля, объявленныеПерем(см.getModuleVariableVisibleFromMethods(String)). Единый резолв видимости переменной для потребителей, которым нужно отличить объявленную переменную от одноимённого self-члена (система типов, индексатор ссылок).- Parameters:
node- узел, в точке которого проверяется видимость.variableName- имя переменной (без учёта регистра — как хранит дерево).- Returns:
- видимая переменная; empty, если такой в области видимости нет.
-
getModuleVariableVisibleFromMethods
Переменная уровня модуля, видимая из методов. Такова только переменная, объявленнаяПеремна уровне модуля. Переменная, созданная присваиванием в теле модуля, живёт в одном теле модуля, а переменные и параметры метода с ошибками разбора, оказавшиеся на уровне модуля, принадлежат своему методу.- Parameters:
variableName- имя переменной (без учёта регистра — как хранит дерево).- Returns:
- переменная модуля; empty, если такой нет либо из методов она не видна.
-
getSymbolAtPosition
Поиск самого вложенного символа, содержащего указанную позицию.Сохраняет порядок дочерних символов при перекрытии диапазонов. Области сами не возвращаются. Упорядоченные списки детей допускают двоичный поиск первой возможной границы; остальные просматриваются последовательно.
- Parameters:
position- Позиция в документе.- Returns:
- Символ, содержащий позицию, или символ модуля, если позиция вне всех символов.
-
findSymbolBySelectionRange
Символ, чьё имя (selectionRange) накрывает позицию — то есть позиция стоит на объявлении символа. Двоичный поиск по строке черезgetSymbolsBySelectionLine(); при нескольких объявлениях на строке возвращает первый по порядкуgetChildrenFlat()накрывающий символ.- Parameters:
position- позиция в документе.- Returns:
- символ, на объявлении которого стоит позиция, либо empty.
-
getModule
Корневой символ модуля документа. -
getBasis
-
equals
-
hashCode
-
toString
-
getChildrenFlat
Список всех символов всех уровней (за исключением символа модуля документа), преобразованных в плоский список. -
getMethods
Список методов документа. -
getConstructor
Конструктор OneScript-класса (ПриСозданииОбъекта/OnObjectCreate), если он объявлен в документе. -
getVariables
Плоский список всех переменных документа
-