From 71e3e2f5504ebe3595845c95efc3d19b2bbfd679 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Mar 2023 15:00:19 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20FP=20=D0=BF=D1=80=D0=B8=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0=20=D0=9E?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=D0=9E=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #1691 --- .../UsageWriteLogEventDiagnostic.java | 78 ++++++--- .../UsageWriteLogEventDiagnosticTest.java | 7 +- .../UsageWriteLogEventDiagnostic.bsl | 153 ++++++++++++++++++ 3 files changed, 212 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java index febfa639257..93646190a01 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java @@ -37,6 +37,7 @@ import java.util.Objects; import java.util.Optional; import java.util.regex.Pattern; +import java.util.stream.Collectors; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -70,6 +71,9 @@ public class UsageWriteLogEventDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern PATTERN_ERROR = CaseInsensitivePattern.compile( "ошибка|error" ); + private static final Pattern ERROR_PROCESSING_ERROR = CaseInsensitivePattern.compile( + "обработкаошибок|errorprocessing" + ); private static final int WRITE_LOG_EVENT_METHOD_PARAMS_COUNT = 5; public static final int COMMENTS_PARAM_INDEX = 4; @@ -112,7 +116,8 @@ private void checkParams(BSLParser.GlobalMethodCallContext context) { } } - private boolean checkFirstParams(BSLParser.GlobalMethodCallContext context, List callParams) { + private boolean checkFirstParams(BSLParser.GlobalMethodCallContext context, + List callParams) { if (callParams.size() < WRITE_LOG_EVENT_METHOD_PARAMS_COUNT) { fireIssue(context, WRONG_NUMBER_MESSAGE); return false; @@ -176,7 +181,7 @@ private static boolean isCommentCorrect(BSLParser.CallParamContext commentsCtx) if (hasRaiseStatement(codeBlockContext)) { return true; } - return isValidExpression(codeBlockContext, commentsCtx.expression(), true); + return isValidCommentExpression(codeBlockContext, commentsCtx.expression(), true); } private static boolean hasRaiseStatement(BSLParser.CodeBlockContext codeBlockContext) { @@ -192,7 +197,7 @@ private static boolean hasRaiseStatement(BSLParser.CodeBlockContext codeBlockCon // то проверим, что в присвоении есть ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() // если есть какая-то переменная, определенная на уровень выше (например, параметр метода), то не анализируем ее - private static boolean isValidExpression( + private static boolean isValidCommentExpression( BSLParser.CodeBlockContext codeBlock, @Nullable BSLParser.ExpressionContext expression, boolean checkPrevAssignment @@ -200,49 +205,72 @@ private static boolean isValidExpression( if (expression == null) { return true; } - final var assignmentGlobalCalls = Trees.findAllRuleNodes(expression, BSLParser.RULE_globalMethodCall); - if (!assignmentGlobalCalls.isEmpty()) { - if (isErrorDescriptionCallCorrect(assignmentGlobalCalls)) { + final var methodCalls = Trees.findAllRuleNodes(expression, + List.of(BSLParser.RULE_globalMethodCall, BSLParser.RULE_methodCall)).stream() + .filter(BSLParserRuleContext.class::isInstance) + .map(BSLParserRuleContext.class::cast) + .collect(Collectors.toList()); + if (!methodCalls.isEmpty()) { + if (isErrorDescriptionCallCorrect(methodCalls)) { return true; } - if (hasSimpleErrorDescription(assignmentGlobalCalls) || hasBriefErrorDescription(assignmentGlobalCalls)) { + if (hasSimpleErrorDescription(methodCalls) || hasBriefErrorDescription(methodCalls)) { return false; } } + return isValidExpression(expression, codeBlock, checkPrevAssignment); } - private static boolean isErrorDescriptionCallCorrect(Collection globalCalls) { - return globalCalls.stream() - .filter(context -> context instanceof BSLParser.GlobalMethodCallContext) - .map(BSLParser.GlobalMethodCallContext.class::cast) - .filter(context -> isAppropriateName(context, PATTERN_DETAIL_ERROR_DESCRIPTION)) - .anyMatch(UsageWriteLogEventDiagnostic::hasFirstDescendantGlobalCall); + private static boolean isErrorDescriptionCallCorrect(Collection calls) { + return calls.stream() +// .filter(context -> context instanceof BSLParser.GlobalMethodCallContext) +// .map(BSLParser.GlobalMethodCallContext.class::cast) + .filter(context -> isAppropriateMethodName(context, PATTERN_DETAIL_ERROR_DESCRIPTION)) + .filter(context -> context instanceof BSLParser.GlobalMethodCallContext + || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext)context))) + .anyMatch(UsageWriteLogEventDiagnostic::hasFirstDescendantGlobalCallWithPatternError); } - private static boolean isAppropriateName( - BSLParser.GlobalMethodCallContext context, + private static boolean isAppropriateMethodName( + BSLParserRuleContext context, Pattern patternDetailErrorDescription ) { - return patternDetailErrorDescription.matcher(context.methodName().getText()).matches(); + BSLParser.MethodNameContext methodNameContext = context.getRuleContext(BSLParser.MethodNameContext.class, 0); + return patternDetailErrorDescription.matcher(methodNameContext.getText()).matches(); } - private static boolean hasFirstDescendantGlobalCall(BSLParser.GlobalMethodCallContext globalCallCtx) { + private static boolean isErrorProcessingCall(BSLParser.MethodCallContext methodCallContext) { + return Optional.of(methodCallContext) + .map(BSLParserRuleContext::getParent) + .filter(context -> context instanceof BSLParser.AccessCallContext) + .map(BSLParserRuleContext::getParent) + .filter(context -> context instanceof BSLParser.ModifierContext) + .map(BSLParserRuleContext::getParent) + .filter(context -> context instanceof BSLParser.ComplexIdentifierContext) + .map(BSLParser.ComplexIdentifierContext.class::cast) + .map(BSLParser.ComplexIdentifierContext::IDENTIFIER) + .filter(terminalNode -> ERROR_PROCESSING_ERROR.matcher(terminalNode.getText()).matches()) + .isPresent(); + } + + private static boolean hasFirstDescendantGlobalCallWithPatternError(BSLParserRuleContext globalCallCtx) { return Trees.findAllRuleNodes(globalCallCtx, BSLParser.RULE_globalMethodCall).stream() .map(BSLParser.GlobalMethodCallContext.class::cast) - .anyMatch(context -> isAppropriateName(context, PATTERN_ERROR_INFO)); + .anyMatch(context -> isAppropriateMethodName(context, PATTERN_ERROR_INFO)); } - private static boolean hasSimpleErrorDescription(Collection globalCalls) { + private static boolean hasSimpleErrorDescription(Collection globalCalls) { return globalCalls.stream() .filter(context -> context instanceof BSLParser.GlobalMethodCallContext) - .anyMatch(context -> isAppropriateName((BSLParser.GlobalMethodCallContext) context, PATTERN_SIMPLE_ERROR_DESCRIPTION)); + .anyMatch(context -> isAppropriateMethodName(context, PATTERN_SIMPLE_ERROR_DESCRIPTION)); } - private static boolean hasBriefErrorDescription(Collection globalCalls) { - return globalCalls.stream() - .filter(context -> context instanceof BSLParser.GlobalMethodCallContext) - .anyMatch(context -> isAppropriateName((BSLParser.GlobalMethodCallContext) context, PATTERN_BRIEF_ERROR_DESCRIPTION)); + private static boolean hasBriefErrorDescription(Collection calls) { + return calls.stream() + .filter(context -> isAppropriateMethodName(context, PATTERN_BRIEF_ERROR_DESCRIPTION)) + .anyMatch(context -> context instanceof BSLParser.GlobalMethodCallContext + || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext)context))); } private static boolean isValidExpression(BSLParser.ExpressionContext context, BSLParser.CodeBlockContext codeBlock, @@ -272,7 +300,7 @@ private static boolean isValidVarAssignment( String varName = identifierContext.getText(); return getAssignment(varName, codeBlock) .map(BSLParser.AssignmentContext::expression) - .map(expression -> isValidExpression(codeBlock, expression, false)) + .map(expression -> isValidCommentExpression(codeBlock, expression, false)) .orElse(true); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnosticTest.java index ce3f8be5db7..9c2aadb8cdc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnosticTest.java @@ -54,7 +54,12 @@ void test() { .hasRange(204, 6, 206,22) .hasRange(219, 6, 221,22) .hasRange(286, 12, 291,39) - .hasSize(14) + + .hasRange(354, 6, 356,73) + .hasRange(368, 6, 370,22) + .hasRange(383, 6, 385,22) + .hasRange(439, 12, 444,39) + .hasSize(18) ; } diff --git a/src/test/resources/diagnostics/UsageWriteLogEventDiagnostic.bsl b/src/test/resources/diagnostics/UsageWriteLogEventDiagnostic.bsl index 27f58ff29bd..572c8d56c5a 100644 --- a/src/test/resources/diagnostics/UsageWriteLogEventDiagnostic.bsl +++ b/src/test/resources/diagnostics/UsageWriteLogEventDiagnostic.bsl @@ -292,3 +292,156 @@ КороткийТекстСообщения); // ошибка КонецПопытки; КонецПроцедуры + +&НаСервере +Процедура Тест2() + + ЗаписьЖурналаРегистрации("Событие", + УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Попытка + ПравильноеИсключениеВКодеСервер(); + Исключение + ЗаписьЖурналаРегистрации("Событие", УровеньЖР, + , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие с возможной ошибкой'", КодОсновногоЯзыка), + УровеньЖурналаРегистрации.Ошибка, , , + НСтр("ru = 'Во время выполнения действия произошла неизвестная ошибка.'") + Символы.ПС + + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Попытка + ПравильноеИсключениеВКодеСервер(); + Исключение + + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка, , , + ТекстОшибки); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПравильноеИсключениеВКодеКлиент_ОбработкаОшибок() + Попытка + ИсключениеВКодеСервер(); + Исключение + ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения); + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ПравильноСоздатьФайлНаДиске_ОбработкаОшибок() + Попытка + // клиентский код, приводящий к вызову исключения + СоздатьФайлНаДиске(); + Исключение + ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения); + ЗаписатьОшибкуРаботыСФайлами(ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ВИсключенииЕстьКраткоеПредставлениеНоНетПолного_ОбработкаОшибок() + Попытка + // клиентский код, приводящий к вызову исключения + СоздатьФайлНаДиске(); + Исключение + ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); // ошибка + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ВИсключенииЕстьКраткоеПредставлениеНоНетПолного1_ОбработкаОшибок() + Попытка + // клиентский код, приводящий к вызову исключения + СоздатьФайлНаДиске(); + Исключение + ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстСообщения); // ошибка + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ВИсключенииЕстьКраткоеПредставлениеНоНетПолного2_ОбработкаОшибок() + Попытка + // клиентский код, приводящий к вызову исключения + СоздатьФайлНаДиске(); + Исключение + ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ДругойТекстСообщения = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстСообщения); // ошибка + КонецПопытки; +КонецПроцедуры + +Процедура СложныйМетодСИспользованиемПодробногоПредставленияВнутриИсключения_ОбработкаОшибок(Знач ИмяСобытия, Знач ОписаниеОшибки, Знач Ответ, Знач СсылкаНаДанные = Неопределено) Экспорт + Попытка + Блокировка.Заблокировать(); + Исключение + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать график работы по причине: + |%2'"), + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + , + СсылкаНаДанные, + ТекстСообщения); // не ошибка + КонецПопытки; +КонецПроцедуры + +Процедура СложныйМетодСИспользованиемПодробногоПредставленияВнутриИсключенияВВыражении_ОбработкаОшибок(Знач Выборка, Знач Блокировка) Экспорт + Попытка + Блокировка.Заблокировать(); + Исключение + ТекстСообщения = + НСтр("ru = 'Не удалось установить разделение сеанса. Область данных'") + " = " + + Формат(Выборка.ОбластьДанных, "ЧГ=0") + + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + , + СсылкаНаДанные, + ТекстСообщения); // не ошибка + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньОшибки(), + , + СсылкаНаДанные, + ТекстСообщения); // не ошибка + + КонецПопытки; +КонецПроцедуры + +Процедура Метод2_ОбработкаОшибок(Знач СсылкаНаДанные, Знач Блокировка) + Попытка + Блокировка.Заблокировать(); + Исключение + КороткийТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ОписаниеОшибки(); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + , + СсылкаНаДанные, + КороткийТекстСообщения); // ошибка + КонецПопытки; +КонецПроцедуры From 7e843a5ae448b2ab970f18092078ecb0592635eb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Mar 2023 12:36:44 +0300 Subject: [PATCH 2/4] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java Co-authored-by: Nikita Fedkin --- .../diagnostics/UsageWriteLogEventDiagnostic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java index 93646190a01..337319aeb0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java @@ -116,7 +116,8 @@ private void checkParams(BSLParser.GlobalMethodCallContext context) { } } - private boolean checkFirstParams(BSLParser.GlobalMethodCallContext context, + private boolean checkFirstParams( + BSLParser.GlobalMethodCallContext context, List callParams) { if (callParams.size() < WRITE_LOG_EVENT_METHOD_PARAMS_COUNT) { fireIssue(context, WRONG_NUMBER_MESSAGE); From 77f07f3bdd24237e686bf9670aedd5076bb86846 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Mar 2023 12:36:57 +0300 Subject: [PATCH 3/4] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java Co-authored-by: Nikita Fedkin --- .../diagnostics/UsageWriteLogEventDiagnostic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java index 337319aeb0d..f4968a5c434 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java @@ -118,7 +118,8 @@ private void checkParams(BSLParser.GlobalMethodCallContext context) { private boolean checkFirstParams( BSLParser.GlobalMethodCallContext context, - List callParams) { + List callParams + ) { if (callParams.size() < WRITE_LOG_EVENT_METHOD_PARAMS_COUNT) { fireIssue(context, WRONG_NUMBER_MESSAGE); return false; From 35031dbcc3af58bf8e586c1d9e64437aaf7ee3d0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Mar 2023 14:46:03 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/UsageWriteLogEventDiagnostic.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java index f4968a5c434..d8a1674db97 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsageWriteLogEventDiagnostic.java @@ -97,7 +97,7 @@ public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext context private void checkParams(BSLParser.GlobalMethodCallContext context) { final var callParams = context.doCall().callParamList().callParam(); - if (!checkFirstParams(context, callParams)){ + if (!checkFirstParams(context, callParams)) { return; } @@ -208,7 +208,7 @@ private static boolean isValidCommentExpression( return true; } final var methodCalls = Trees.findAllRuleNodes(expression, - List.of(BSLParser.RULE_globalMethodCall, BSLParser.RULE_methodCall)).stream() + List.of(BSLParser.RULE_globalMethodCall, BSLParser.RULE_methodCall)).stream() .filter(BSLParserRuleContext.class::isInstance) .map(BSLParserRuleContext.class::cast) .collect(Collectors.toList()); @@ -226,11 +226,9 @@ private static boolean isValidCommentExpression( private static boolean isErrorDescriptionCallCorrect(Collection calls) { return calls.stream() -// .filter(context -> context instanceof BSLParser.GlobalMethodCallContext) -// .map(BSLParser.GlobalMethodCallContext.class::cast) .filter(context -> isAppropriateMethodName(context, PATTERN_DETAIL_ERROR_DESCRIPTION)) .filter(context -> context instanceof BSLParser.GlobalMethodCallContext - || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext)context))) + || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext) context))) .anyMatch(UsageWriteLogEventDiagnostic::hasFirstDescendantGlobalCallWithPatternError); } @@ -272,7 +270,7 @@ private static boolean hasBriefErrorDescription(Collection return calls.stream() .filter(context -> isAppropriateMethodName(context, PATTERN_BRIEF_ERROR_DESCRIPTION)) .anyMatch(context -> context instanceof BSLParser.GlobalMethodCallContext - || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext)context))); + || (context instanceof BSLParser.MethodCallContext && isErrorProcessingCall((BSLParser.MethodCallContext) context))); } private static boolean isValidExpression(BSLParser.ExpressionContext context, BSLParser.CodeBlockContext codeBlock,