Class UnsafeFindByCodeDiagnostic
java.lang.Object
org.antlr.v4.runtime.tree.AbstractParseTreeVisitor<ParseTree>
com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor<ParseTree>
com.github._1c_syntax.bsl.languageserver.diagnostics.AbstractVisitorDiagnostic
com.github._1c_syntax.bsl.languageserver.diagnostics.UnsafeFindByCodeDiagnostic
- All Implemented Interfaces:
BSLDiagnostic, BSLParserVisitor<ParseTree>, ParseTreeVisitor<ParseTree>
@DiagnosticMetadata(type=CODE_SMELL,
severity=MAJOR,
scope=BSL,
minutesToFix=5,
tags={DESIGN,SUSPICIOUS})
public class UnsafeFindByCodeDiagnostic
extends AbstractVisitorDiagnostic
Диагностика обнаруживает использование метода
FindByCode() (или НайтиПоКоду())
для справочников, планов видов характеристик и планов счетов, у которых:
- отключен контроль уникальности кода (
CheckUnique = False) - или включены серии кодов не по всему объекту (
CodeSeriesне равноWHOLE_CATALOG)
В таких случаях использование метода FindByCode() может привести к непредсказуемому поведению,
так как код может быть не уникальным в пределах всего объекта или могут существовать несколько элементов
с одинаковым кодом в разных сериях.
Диагностика не срабатывает для объектов, у которых одновременно:
- включен контроль уникальности кода (
CheckUnique = True) - и серии кодов установлены для всего объекта (
CodeSeries = WHOLE_CATALOG)
Примечание: значения WholeCharacteristicKind и WholeChartOfAccounts из XML метаданных
преобразуются в WHOLE_CATALOG в enum CodeSeries, поэтому для всех типов объектов
проверка выполняется на WHOLE_CATALOG.
Также диагностика не срабатывает для объектов метаданных, не являющихся справочниками, планами видов характеристик или планами счетов, а также если объект не найден в метаданных конфигурации.
-
Field Summary
Fields inherited from class AbstractVisitorDiagnostic
diagnosticStorage, documentContext, info -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionОбрабатывает вызов метода в контексте сложного идентификатора.Methods inherited from class AbstractVisitorDiagnostic
getDiagnostics, getInfo, setInfoMethods 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, visitCompoundStatement, visitConstValue, visitContinueStatement, visitDefaultValue, visitDoCall, visitElseBranch, visitElsifBranch, visitEvent, visitExceptCodeBlock, visitExecuteStatement, visitExpression, visitFile, visitFileCodeBlock, visitFileCodeBlockBeforeSub, visitForEachStatement, visitForStatement, visitFuncDeclaration, visitFunction, visitGlobalMethodCall, visitGotoStatement, visitHandler, visitIfBranch, visitIfStatement, visitLabel, visitLabelName, visitLValue, visitMember, visitMethodCall, visitMethodName, visitModifier, visitModuleAnnotations, visitModuleVar, visitModuleVarDeclaration, visitModuleVars, visitModuleVarsList, visitMultilineString, visitNewExpression, visitNumeric, visitOperation, visitParam, visitParamList, visitPreproc_boolOperation, visitPreproc_else, visitPreproc_elsif, visitPreproc_endif, visitPreproc_expression, visitPreproc_if, visitPreproc_logicalExpression, visitPreproc_logicalOperand, visitPreproc_native, visitPreproc_symbol, visitPreproc_unknownSymbol, visitPreprocessor, visitProcDeclaration, visitProcedure, visitRaiseStatement, visitRegionEnd, visitRegionName, visitRegionStart, visitRemoveHandlerStatement, visitReturnStatement, visitShebang, visitStatement, visitString, visitSub, visitSubCodeBlock, visitSubName, visitSubs, visitSubVar, visitSubVarDeclaration, 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 BSLDiagnostic
configureMethods inherited from interface ParseTreeVisitor
visit, visitChildren, visitErrorNode, visitTerminal
-
Constructor Details
-
UnsafeFindByCodeDiagnostic
public UnsafeFindByCodeDiagnostic()
-
-
Method Details
-
visitComplexIdentifier
Обрабатывает вызов метода в контексте сложного идентификатора.- Specified by:
visitComplexIdentifierin interfaceBSLParserVisitor<ParseTree>- Overrides:
visitComplexIdentifierin classBSLParserBaseVisitor<ParseTree>- Parameters:
ctx- контекст сложного идентификатора- Returns:
- результат обхода дерева разбора
-