Class RegionVariableSymbolComputer
- All Implemented Interfaces:
Computer<List<VariableSymbol>>, BSLParserVisitor<ParseTree>, ParseTreeVisitor<ParseTree>
И сбор переменных (VariableSymbolComputer), и сбор регионов обходили всё дерево вглубь
(методы — вместе с телами), и при перестроении дерева символов на каждый keystroke это были два
отдельных полных обхода 48k-строчного модуля (по профилю набора текста на больших модулях обход
визиторами — заметная доля стоимости перестроения). Наборы перекрытых узлов у них не пересекаются
(директивы #Область/#КонецОбласти против объявлений переменных/параметров/lvalue/
циклов), поэтому сбор регионов добавляется поверх обхода переменных, и два полных обхода
схлопываются в один.
VariableSymbolComputer остаётся самостоятельным (используется отдельно), а этот класс лишь
расширяет его сбором регионов в том же visitFile.
В этом же обходе отслеживаются ветки препроцессора у объявлений методов.
Их условия сохраняются в символьном дереве без ссылок на AST и остаются доступны
диагностике и выводу типов после выгрузки текста документа.
-
Constructor Summary
ConstructorsConstructorDescriptionRegionVariableSymbolComputer(DocumentContext documentContext, ModuleSymbol module, List<? extends MethodSymbol> methods, SelfMemberClassifier selfMemberClassifier) -
Method Summary
Methods inherited from class VariableSymbolComputer
getLoopVariables, visitForEachStatement, visitForStatement, visitLValue, visitModuleVarDeclaration, visitParam, visitSub, visitSubVarDeclarationMethods inherited from class BSLParserBaseVisitor
visitAcceptor, visitAccessCall, visitAccessIndex, visitAccessProperty, visitAddHandlerStatement, visitAnnotation, visitAnnotationName, visitAnnotationParam, visitAnnotationParamName, visitAnnotationParams, visitAnnotationParamValue, visitAssignment, visitBoolOperation, visitBreakStatement, visitCallParam, visitCallParamList, visitCallStatement, visitCodeBlock, visitCompareOperation, visitCompilerDirective, visitCompilerDirectiveSymbol, visitComplexIdentifier, visitCompoundStatement, visitConstValue, visitContinueStatement, visitDefaultValue, visitDoCall, visitElseBranch, visitElsifBranch, visitEvent, visitExceptCodeBlock, visitExecuteStatement, visitExpression, visitFile, visitFileCodeBlock, visitFileCodeBlockBeforeSub, visitFuncDeclaration, visitFunction, visitGlobalMethodCall, visitGotoStatement, visitHandler, visitIfBranch, visitIfStatement, visitIncompleteAccess, visitLabel, visitLabelName, visitMember, visitMethodCall, visitMethodName, visitModifier, visitModuleAnnotations, visitModuleVar, visitModuleVars, visitModuleVarsList, visitMultilineString, visitNewExpression, visitNumeric, visitOperation, visitParamList, visitPreproc_boolOperation, visitPreproc_else, visitPreproc_elsif, visitPreproc_endif, visitPreproc_expression, visitPreproc_if, visitPreproc_logicalExpression, visitPreproc_logicalOperand, visitPreproc_native, visitPreproc_stack, visitPreproc_symbol, visitPreproc_unknownSymbol, visitProcDeclaration, visitProcedure, visitRaiseStatement, visitRegionName, visitRemoveHandlerStatement, visitReturnStatement, visitShebang, visitStatement, visitString, visitSubCodeBlock, visitSubs, visitSubVar, visitSubVars, visitSubVarsList, visitTernaryOperator, visitTryCodeBlock, visitTryStatement, visitTypeName, visitUnaryModifier, visitUse, visitUsedLib, visitVar_name, visitWaitExpression, visitWaitStatement, visitWhileStatementMethods inherited from class AbstractParseTreeVisitor
aggregateResult, defaultResult, shouldVisitNextChild, visit, visitChildren, visitErrorNode, visitTerminalMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ParseTreeVisitor
visit, visitChildren, visitErrorNode, visitTerminal
-
Constructor Details
-
RegionVariableSymbolComputer
public RegionVariableSymbolComputer(DocumentContext documentContext, ModuleSymbol module, List<? extends MethodSymbol> methods, SelfMemberClassifier selfMemberClassifier)
-
-
Method Details
-
compute
Description copied from interface:ComputerВыполнить вычисление данных.- Specified by:
computein interfaceComputer<List<VariableSymbol>>- Overrides:
computein classVariableSymbolComputer- Returns:
- Вычисленные данные
-
getRegions
Собранные за тот же обход регионы. Вызывать послеcompute().- Returns:
- список символов регионов модуля.
-
getMethodConditions
Получить снимок условий объявлений, собранных во времяcompute().Ключ — диапазон имени метода. Безусловные объявления не включаются в карту; пустое множество обозначает недостижимую ветку,
null— неизвестное условие. Снимок сохраняется в символьном дереве и не удерживает AST. Вызывать после завершения обхода; ключи-диапазоны изменять нельзя.- Returns:
- неизменяемая карта с неизменяемыми множествами либо значениями
null.
-
visitPreprocessor
- Specified by:
visitPreprocessorin interfaceBSLParserVisitor<ParseTree>- Overrides:
visitPreprocessorin classBSLParserBaseVisitor<ParseTree>
-
visitSubName
- Specified by:
visitSubNamein interfaceBSLParserVisitor<ParseTree>- Overrides:
visitSubNamein classBSLParserBaseVisitor<ParseTree>
-
visitRegionStart
- Specified by:
visitRegionStartin interfaceBSLParserVisitor<ParseTree>- Overrides:
visitRegionStartin classBSLParserBaseVisitor<ParseTree>
-
visitRegionEnd
- Specified by:
visitRegionEndin interfaceBSLParserVisitor<ParseTree>- Overrides:
visitRegionEndin classBSLParserBaseVisitor<ParseTree>
-