From 3c528bc907a46869831746523803460d84295c5b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 2 May 2022 19:57:26 +0300 Subject: [PATCH 001/595] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 119 ++++++++++++++++++ ...InsertionIntoCollectionDiagnosticTest.java | 102 +++++++++++++++ ...catedInsertionIntoCollectionDiagnostic.bsl | 87 +++++++++++++ 3 files changed, 308 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java new file mode 100644 index 00000000000..1542956f02e --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -0,0 +1,119 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; +import lombok.Value; +import org.antlr.v4.runtime.tree.ParseTree; +import org.apache.commons.collections4.map.CaseInsensitiveMap; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.Objects; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.CRITICAL, + minutesToFix = 1, + tags = { + DiagnosticTag.BRAINOVERLOAD, + DiagnosticTag.SUSPICIOUS, + DiagnosticTag.BADPRACTICE + } + +) +public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { + private final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile( + "(добавить|вставить|add|insert)"); + + @Value + private static class GroupingData { + BSLParser.CallStatementContext callStatement; + String identifier; + String methodName; + String firstParam; + BSLParser.CallParamListContext callParamListContext; + } + + @Override + public ParseTree visitCodeBlock(BSLParser.CodeBlockContext context) { + final var statements = context.statement().stream() + .map(statement -> statement.callStatement()) + .filter(Objects::nonNull) + .filter(callStatement -> callStatement.IDENTIFIER() != null) + .filter(callStatement -> callStatement.accessCall() != null) + .map(callStatement -> groupingCalls(callStatement, callStatement.accessCall())) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (statements.isEmpty()) { + return super.visitCodeBlock(context); + } + + final var mapOfMapsByIdentifier = statements.stream() + .collect(Collectors.groupingBy( + groupingData -> groupingData.getIdentifier(), + CaseInsensitiveMap::new, + Collectors.groupingBy( + groupingData -> groupingData.getMethodName(), + CaseInsensitiveMap::new, + Collectors.groupingBy( + groupingData -> groupingData.getFirstParam(), + CaseInsensitiveMap::new, + Collectors.mapping(groupingData -> groupingData, Collectors.toList())) + ) + )); + mapOfMapsByIdentifier.values().stream() + .flatMap(mapByMethod -> mapByMethod.values().stream()) + .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) + .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) + .forEach(listOfDuplicatedData -> fireIssue(listOfDuplicatedData)); + + return super.visitCodeBlock(context); + } + + private @Nullable + GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLParser.AccessCallContext accessCallContext) { + final var methodCallContext = accessCallContext.methodCall(); + if (methodCallContext == null) { + return null; + } + final var callParamListContext = methodCallContext.doCall().callParamList(); + final var callParams = callParamListContext.callParam(); + if (callParams.isEmpty()) { + return null; + } + final var methodName = methodCallContext.methodName().getText(); + if (!isAppropriateMethodCall(methodName, ADD_METHOD_PATTERN)) { + return null; + } + final var fullIdentifier = callStatement.modifier().stream() + .map(modifierContext -> modifierContext.getText()) + .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(y)); + + var firstParam = callParams.get(0).getText(); + return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); + } + + private boolean isAppropriateMethodCall(String methodName, Pattern pattern) { + return pattern.matcher(methodName).matches(); + } + + private void fireIssue(List listOfDuplicatedData) { + final var mainForIssue = listOfDuplicatedData.get(1); + final var relatedInformationList = listOfDuplicatedData.stream() + .map(GroupingData::getCallStatement) + .map(context -> RelatedInformation.create( + documentContext.getUri(), + Ranges.create(context), + "+1" + )).collect(Collectors.toList()); + diagnosticStorage.addDiagnostic(mainForIssue.callStatement, relatedInformationList); + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java new file mode 100644 index 00000000000..6b7043eb3b5 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -0,0 +1,102 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.assertj.core.api.Assertions; +import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.DiagnosticRelatedInformation; +import org.eclipse.lsp4j.Range; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class DuplicatedInsertionIntoCollectionDiagnosticTest extends AbstractDiagnosticTest { + DuplicatedInsertionIntoCollectionDiagnosticTest() { + super(DuplicatedInsertionIntoCollectionDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + checkContent( + diagnostics.get(0), + Ranges.create(8, 4, 8, 34), + Arrays.asList( + Ranges.create(7, 4, 7, 34), + Ranges.create(8, 4, 8, 34)) + ); + + checkContent( + diagnostics.get(1), + Ranges.create(12, 4, 12, 35), + Arrays.asList( + Ranges.create(11, 4, 11, 35), + Ranges.create(12, 4, 12, 35)) + ); + + checkContent( + diagnostics.get(2), + Ranges.create(4, 4, 4, 34), + Arrays.asList( + Ranges.create(3, 4, 3, 34), + Ranges.create(4, 4, 4, 34)) + ); + + checkContent( + diagnostics.get(3), + Ranges.create(22, 8, 22, 38), + Arrays.asList( + Ranges.create(21, 8, 21, 38), + Ranges.create(22, 8, 22, 38)) + ); + + checkContent( + diagnostics.get(4), + Ranges.create(27, 8, 27, 55), + Arrays.asList( + Ranges.create(26, 8, 26, 55), + Ranges.create(27, 8, 27, 55)) + ); + + checkContent( + diagnostics.get(5), + Ranges.create(58, 12, 58, 76), + Arrays.asList( + Ranges.create(56, 12, 56, 87), + Ranges.create(58, 12, 58, 76)) + ); + + assertThat(diagnostics).hasSize(6); + + } + + // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest + private void checkContent( + Diagnostic diagnostic, + Range diagnosticRange, + Range relatedLocationRange + ) { + checkContent(diagnostic, diagnosticRange, Collections.singletonList(relatedLocationRange)); + } + + private void checkContent( + Diagnostic diagnostic, + Range diagnosticRange, + List relatedLocationRanges + ) { + assertThat(diagnostic.getRange()).isEqualTo(diagnosticRange); + List relatedInformationList = diagnostic.getRelatedInformation(); + assertThat(relatedInformationList).hasSize(relatedLocationRanges.size()); + + for (int i = 0; i < relatedLocationRanges.size(); i++) { + var relatedInformation = relatedInformationList.get(i); + var relatedLocationRange = relatedLocationRanges.get(i); + Assertions.assertThat(relatedInformation.getLocation().getRange()).isEqualTo(relatedLocationRange); + } + } +} diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl new file mode 100644 index 00000000000..b3696b30957 --- /dev/null +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -0,0 +1,87 @@ +&НаСервере +Процедура Тест1() + Массив = Новый Массив; + Массив.Добавить(СтрокаТаблицы); + Массив.Добавить(СтрокаТаблицы); // ошибка + + Коллекция = Новый Структура; + Коллекция.Вставить("Ключ1", 1); + Коллекция.Вставить("Ключ1", 1); // ошибка + + Коллекция2 = Новый Структура; + Коллекция2.Вставить("Ключ1", 1); + Коллекция2.Вставить("Ключ1", 2); // ошибка - вставка разных значений для одного ключа + + Если Условие() Тогда + Массив.Добавить(СтрокаТаблицы); // не ошибка + Коллекция.Вставить("Ключ1", 1); // не ошибка + Коллекция2.Вставить("Ключ1", 2); // не ошибка + КонецЕсли; + + Если Условие() Тогда + Коллекция.Вставить("Ключ1", 1); + Коллекция.Вставить("Ключ1", 3); // новая ошибка, а не повторение ошибки выше + КонецЕсли; + + Для Каждого Элемент Из Коллекция Цикл + Итог.Коллекция.Индексы.Добавить("Пользователь"); + Итог.Коллекция.Индексы.Добавить("Пользователь"); // ошибка + + Итог.ПерваяКоллекция.Индексы.Добавить("Пользователь"); + Итог.ВтораяКоллекция.Индексы.Добавить("Пользователь"); // не ошибка + КонецЦикла; + + Если Условие() Тогда + ПовторнаяСоздаваемаяКоллекция = Новый Массив; + ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); + ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); + ПовторнаяСоздаваемаяКоллекция = Новый Массив; +//TODO ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка +//TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка + + Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); + ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, Контекст.Коллекция); +//TODO Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка + + Контекст2.Коллекция.Вставить("ИмяПрава", "Чтение"); + Если Условие() Тогда + ЕщеМетод(Контекст2); + КонецЕсли; +//TODO Контекст2.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка + КонецЕсли; + + Если Условие() Тогда + + // ошибка далее валидна и возникает из-за того, что код не режется препроцессором + #Если ТолстыйКлиентОбычноеПриложение Тогда + ЭлементыСтиля.Вставить(ЭлементСтиля.Ключ, ЭлементСтиля.Значение.Получить()); // ошибка + #Иначе + ЭлементыСтиля.Вставить(ЭлементСтиля.Ключ, ЭлементСтиля.Значение); + #КонецЕсли + КонецЕсли; + + Если Условие() Тогда +//TODO Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); // Вставить(0,7) - ошибка или не ошибка?? + Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Строка", НСтр("ru = 'Строка'")); + КонецЕсли; + +КонецПроцедуры + +Функция ВидыСвойствНабора(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт + + ВидыСвойствНабора = Новый Структура; +//TODO ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); // не ошибка + + ТипСсылки = Неопределено; + МетаданныеВладельца = МетаданныеВладельцаЗначенийСвойствНабора(Ссылка, УчитыватьПометкуУдаления, ТипСсылки); + + Если МетаданныеВладельца = Неопределено Тогда + Возврат ВидыСвойствНабора; // прерывание потока выполнения + КонецЕсли; + + // Проверка использования дополнительных реквизитов. + ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); + + Возврат ВидыСвойствНабора; + +КонецФункции From 9e8142161eaadf368d6f3bb4e737f154c124d88a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 18 May 2022 22:27:32 +0300 Subject: [PATCH 002/595] =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DuplicatedInsertionIntoCollection.md | 16 ++++++++++++++++ .../DuplicatedInsertionIntoCollection.md | 16 ++++++++++++++++ ...sertionIntoCollectionDiagnostic_en.properties | 2 ++ ...sertionIntoCollectionDiagnostic_ru.properties | 2 ++ 4 files changed, 36 insertions(+) create mode 100644 docs/diagnostics/DuplicatedInsertionIntoCollection.md create mode 100644 docs/en/diagnostics/DuplicatedInsertionIntoCollection.md create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties diff --git a/docs/diagnostics/DuplicatedInsertionIntoCollection.md b/docs/diagnostics/DuplicatedInsertionIntoCollection.md new file mode 100644 index 00000000000..8a341d6f99e --- /dev/null +++ b/docs/diagnostics/DuplicatedInsertionIntoCollection.md @@ -0,0 +1,16 @@ +# (DuplicatedInsertionIntoCollection) + + +## Описание диагностики + + +## Примеры + + +## Источники + + diff --git a/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md b/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md new file mode 100644 index 00000000000..5a6a8bb2efa --- /dev/null +++ b/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md @@ -0,0 +1,16 @@ +# (DuplicatedInsertionIntoCollection) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties new file mode 100644 index 00000000000..66831715dfd --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage= +diagnosticName= diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties new file mode 100644 index 00000000000..40188ca542c --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=<Сообщение> +diagnosticName=<Имя диагностики> From 41e4a9b5fac83ca97b7ebab76d7ca37d29149527 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 21:56:20 +0300 Subject: [PATCH 003/595] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=B5=D0=B6?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D1=81=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 64 ++++++++++++++++--- ...InsertionIntoCollectionDiagnosticTest.java | 19 ++++++ ...catedInsertionIntoCollectionDiagnostic.bsl | 13 +++- 3 files changed, 85 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 1542956f02e..5494216c2ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -6,6 +6,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.Value; @@ -13,6 +14,7 @@ import org.apache.commons.collections4.map.CaseInsensitiveMap; import javax.annotation.Nullable; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; @@ -30,8 +32,9 @@ ) public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { - private final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile( + private static final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile( "(добавить|вставить|add|insert)"); + private @Nullable List blockAssignments = null; @Value private static class GroupingData { @@ -43,8 +46,8 @@ private static class GroupingData { } @Override - public ParseTree visitCodeBlock(BSLParser.CodeBlockContext context) { - final var statements = context.statement().stream() + public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { + final var statements = codeBlock.statement().stream() .map(statement -> statement.callStatement()) .filter(Objects::nonNull) .filter(callStatement -> callStatement.IDENTIFIER() != null) @@ -53,7 +56,7 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext context) { .filter(Objects::nonNull) .collect(Collectors.toList()); if (statements.isEmpty()) { - return super.visitCodeBlock(context); + return super.visitCodeBlock(codeBlock); } final var mapOfMapsByIdentifier = statements.stream() @@ -73,9 +76,11 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext context) { .flatMap(mapByMethod -> mapByMethod.values().stream()) .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) - .forEach(listOfDuplicatedData -> fireIssue(listOfDuplicatedData)); + .forEach(listOfDuplicatedData -> excludeNormalChanges(listOfDuplicatedData, codeBlock)); - return super.visitCodeBlock(context); + blockAssignments = null; + + return super.visitCodeBlock(codeBlock); } private @Nullable @@ -95,7 +100,7 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars } final var fullIdentifier = callStatement.modifier().stream() .map(modifierContext -> modifierContext.getText()) - .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(y)); + .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)); var firstParam = callParams.get(0).getText(); return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); @@ -105,8 +110,43 @@ private boolean isAppropriateMethodCall(String methodName, Pattern pattern) { return pattern.matcher(methodName).matches(); } + private void excludeNormalChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { + var listForIssue = new ArrayList(); + if (blockAssignments == null){ + blockAssignments = getAssignments(codeBlock); + } + + listForIssue.add(listOfDuplicatedData.get(0)); +// listOfDuplicatedData.subList(1, listOfDuplicatedData.size() - 1).stream() +// .filter(groupingData -> ) + for (int i = 1; i < listOfDuplicatedData.size(); i++) { + if (hasNormalChange(listOfDuplicatedData.get(0), listOfDuplicatedData.get(i), codeBlock)){ + break; + } + listForIssue.add(listOfDuplicatedData.get(i)); + } + if (listForIssue.size() > 1){ + fireIssue(listForIssue); + } + } + + private boolean hasNormalChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { + if (hasAssignBetweenCalls(groupingData, groupingData1)){ + return true; + } + return false; + } + + private boolean hasAssignBetweenCalls(GroupingData groupingData, GroupingData groupingData1) { + var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); + return blockAssignments.stream() + .filter(assignmentContext -> Ranges.containsRange(range, Ranges.create(assignmentContext))) + .map(assignmentContext -> assignmentContext.lValue()) + .anyMatch(lValueContext -> lValueContext.getText().equalsIgnoreCase(groupingData.identifier)); + } + private void fireIssue(List listOfDuplicatedData) { - final var mainForIssue = listOfDuplicatedData.get(1); + final var dataForIssue = listOfDuplicatedData.get(1); final var relatedInformationList = listOfDuplicatedData.stream() .map(GroupingData::getCallStatement) .map(context -> RelatedInformation.create( @@ -114,6 +154,12 @@ private void fireIssue(List listOfDuplicatedData) { Ranges.create(context), "+1" )).collect(Collectors.toList()); - diagnosticStorage.addDiagnostic(mainForIssue.callStatement, relatedInformationList); + diagnosticStorage.addDiagnostic(dataForIssue.callStatement, relatedInformationList); + } + + private static List getAssignments(BSLParser.CodeBlockContext codeBlock){ + return Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() + .map(parseTree -> (BSLParser.AssignmentContext) parseTree) + .collect(Collectors.toList()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 6b7043eb3b5..67e5ccacfbc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -1,5 +1,6 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.assertj.core.api.Assertions; import org.eclipse.lsp4j.Diagnostic; @@ -75,6 +76,24 @@ void test() { } + @Test + void newAssignBetweenDuplications() { + var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + + " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + +// " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + + " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + + " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n"; +// "//TODO ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n" + +// "//TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; + + // TODO проверить Массив.sdf().asf = Новый Массив; - вызов метода посередине + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); +// assertThat(diagnostics.get(0).getMessage()).contains("\"ДокументСсылка.СчетНаОплатуПоставщика\""); + } + // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest private void checkContent( Diagnostic diagnostic, diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index b3696b30957..35508841ded 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -36,7 +36,7 @@ ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); ПовторнаяСоздаваемаяКоллекция = Новый Массив; -//TODO ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка + ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка //TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); @@ -67,7 +67,7 @@ КонецПроцедуры -Функция ВидыСвойствНабора(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт +Функция ПрерываниеПотокаВыполнения(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт ВидыСвойствНабора = Новый Структура; //TODO ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); // не ошибка @@ -85,3 +85,12 @@ Возврат ВидыСвойствНабора; КонецФункции + +Процедура ПрисваиваниеСложногоВыражения(Данные) + Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; + Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); + Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); + Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; +//TODO Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка +//TODO Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); // не ошибка +КонецПроцедуры \ No newline at end of file From 19cb3d2cf5255c54c179466e652dbf62e55733e8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 22:20:24 +0300 Subject: [PATCH 004/595] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=B5=D0=B6?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D1=81=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BE=D0=B1=D1=8A?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit а не простой переменной --- ...uplicatedInsertionIntoCollectionDiagnostic.java | 3 ++- ...catedInsertionIntoCollectionDiagnosticTest.java | 14 +++++++++++++- ...DuplicatedInsertionIntoCollectionDiagnostic.bsl | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 5494216c2ef..131cd5b5347 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -100,7 +100,8 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars } final var fullIdentifier = callStatement.modifier().stream() .map(modifierContext -> modifierContext.getText()) - .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)); + .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)) + .replace("..", "."); var firstParam = callParams.get(0).getText(); return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 67e5ccacfbc..2194ba8ead7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -91,7 +91,19 @@ void newAssignBetweenDuplications() { var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); assertThat(diagnostics).hasSize(0); -// assertThat(diagnostics.get(0).getMessage()).contains("\"ДокументСсылка.СчетНаОплатуПоставщика\""); + } + + @Test + void newAssignWithDotsBetweenDuplications() { + var code = + " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + + " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + + " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + + " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); } // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 35508841ded..4b6bc462bf9 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -91,6 +91,7 @@ Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; -//TODO Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка +//TODO + Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка //TODO Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); // не ошибка КонецПроцедуры \ No newline at end of file From 72483e5006bbe8acf84fea93213a893d2a34157b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 22:38:52 +0300 Subject: [PATCH 005/595] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 11 +++++--- ...InsertionIntoCollectionDiagnosticTest.java | 27 ++++++++++++++----- ...catedInsertionIntoCollectionDiagnostic.bsl | 5 ++-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 131cd5b5347..91bbb2f6f4a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -122,7 +122,7 @@ private void excludeNormalChanges(List listOfDuplicatedData, BSLPa // .filter(groupingData -> ) for (int i = 1; i < listOfDuplicatedData.size(); i++) { if (hasNormalChange(listOfDuplicatedData.get(0), listOfDuplicatedData.get(i), codeBlock)){ - break; + break;// последующие элементы нет смысла проверять, их нужно исключать } listForIssue.add(listOfDuplicatedData.get(i)); } @@ -142,8 +142,13 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, GroupingData gr var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); return blockAssignments.stream() .filter(assignmentContext -> Ranges.containsRange(range, Ranges.create(assignmentContext))) - .map(assignmentContext -> assignmentContext.lValue()) - .anyMatch(lValueContext -> lValueContext.getText().equalsIgnoreCase(groupingData.identifier)); + .anyMatch(assignmentContext -> hasNormalAssign(assignmentContext, groupingData)); + } + + private boolean hasNormalAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { + final var text = assignmentContext.lValue().getText(); + return text.equalsIgnoreCase(groupingData.identifier) + || text.equalsIgnoreCase(groupingData.firstParam); } private void fireIssue(List listOfDuplicatedData) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 2194ba8ead7..44a7b80e65f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -77,12 +77,12 @@ void test() { } @Test - void newAssignBetweenDuplications() { + void newCollectionAssignBetweenDuplications() { var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + + " ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n" + // " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n"; + " ПовторнаяСоздаваемаяКоллекция.Добавить(1); // не ошибка\n"; // "//TODO ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n" + // "//TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; @@ -94,12 +94,27 @@ void newAssignBetweenDuplications() { } @Test - void newAssignWithDotsBetweenDuplications() { + void newCollectionAssignWithDotsBetweenDuplications() { var code = " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + + " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n" + " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n"; + " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); + } + + @Test + void newElemAssignBetweenDuplications() { + var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + +// " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + + " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + + " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + +// " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n"; +// "//TODO ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n" + + " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 4b6bc462bf9..b2f4f93e08f 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -37,7 +37,7 @@ ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); ПовторнаяСоздаваемаяКоллекция = Новый Массив; ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка -//TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка + ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, Контекст.Коллекция); @@ -91,7 +91,6 @@ Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; -//TODO Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка -//TODO Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); // не ошибка + Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); // не ошибка КонецПроцедуры \ No newline at end of file From 775f67153dbd2dfbfbb4ea998c31f41a4ae7800d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 22:50:59 +0300 Subject: [PATCH 006/595] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D1=81=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...dInsertionIntoCollectionDiagnosticTest.java | 18 +++++++++++++++++- ...icatedInsertionIntoCollectionDiagnostic.bsl | 16 ++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 44a7b80e65f..302d7ba4d5a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -72,7 +72,23 @@ void test() { Ranges.create(58, 12, 58, 76)) ); - assertThat(diagnostics).hasSize(6); + checkContent( + diagnostics.get(6), + Ranges.create(99, 8, 99, 77), + Arrays.asList( + Ranges.create(98, 8, 98, 77), + Ranges.create(99, 8, 99, 77)) + ); + + checkContent( + diagnostics.get(7), + Ranges.create(102, 8, 102, 92), + Arrays.asList( + Ranges.create(101, 8, 101, 92), + Ranges.create(102, 8, 102, 92)) + ); + + assertThat(diagnostics).hasSize(8); } diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index b2f4f93e08f..4f6b6fc95f9 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -70,7 +70,7 @@ Функция ПрерываниеПотокаВыполнения(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт ВидыСвойствНабора = Новый Структура; -//TODO ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); // не ошибка + ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); ТипСсылки = Неопределено; МетаданныеВладельца = МетаданныеВладельцаЗначенийСвойствНабора(Ссылка, УчитыватьПометкуУдаления, ТипСсылки); @@ -80,7 +80,7 @@ КонецЕсли; // Проверка использования дополнительных реквизитов. - ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); + //TODO ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); // не ошибка Возврат ВидыСвойствНабора; @@ -90,7 +90,19 @@ Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); + Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив; Данные.ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка Данные.ОбщаяКоллекция.Добавить(Данные.ПовторнаяСоздаваемаяКоллекция); // не ошибка + + Данные.Метод().ПовторнаяСоздаваемаяКоллекция = Новый Массив; + Данные.Метод().ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); + Данные.Метод().ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // ошибка + + Данные.Метод().ОбщаяКоллекция.Добавить(Данные.Метод().ПовторнаяСоздаваемаяКоллекция); + Данные.Метод().ОбщаяКоллекция.Добавить(Данные.Метод().ПовторнаяСоздаваемаяКоллекция); // ошибка + + Данные.Метод().ПовторнаяСоздаваемаяКоллекция = Новый Массив; + Данные.Метод().ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка + Данные.Метод().ОбщаяКоллекция.Добавить(Данные.Метод().ПовторнаяСоздаваемаяКоллекция); // не ошибка КонецПроцедуры \ No newline at end of file From 2df2f46fdb0daa032c0938d92601c3a2e16fc550 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 23:50:32 +0300 Subject: [PATCH 007/595] =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20findAl?= =?UTF-8?q?lRuleNodes=20=D1=83=D0=BC=D0=B5=D0=B5=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D1=82=D1=8C=20=D0=BA=D0=BE=D0=BB?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_1c_syntax/bsl/languageserver/utils/Trees.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index 5b430da8268..7ccad01fae0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -362,8 +362,14 @@ private static Stream getChildrenStream(Tree t, Integer[] * Получает дочерние ноды с нужными типами */ public static Collection findAllRuleNodes(ParseTree t, Integer... index) { + return findAllRuleNodes(t, Arrays.asList(index)); + } + + /** + * Получает дочерние ноды с нужными типами + */ + public static Collection findAllRuleNodes(ParseTree t, Collection indexes) { List nodes = new ArrayList<>(); - List indexes = Arrays.asList(index); if (t instanceof ParserRuleContext && indexes.contains(((ParserRuleContext) t).getRuleIndex())) { @@ -371,7 +377,7 @@ public static Collection findAllRuleNodes(ParseTree t, Intege } IntStream.range(0, t.getChildCount()) - .mapToObj(i -> findAllRuleNodes(t.getChild(i), index)) + .mapToObj(i -> findAllRuleNodes(t.getChild(i), indexes)) .forEachOrdered(nodes::addAll); return nodes; From 636878294333f42280744832cf6f38da2ea37d9e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 May 2022 23:51:08 +0300 Subject: [PATCH 008/595] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B5=D1=80=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 86 +++++++++++++++---- ...InsertionIntoCollectionDiagnosticTest.java | 10 ++- ...catedInsertionIntoCollectionDiagnostic.bsl | 39 ++++++++- 3 files changed, 111 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 91bbb2f6f4a..9ed8ea20077 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -8,13 +8,16 @@ import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; import org.apache.commons.collections4.map.CaseInsensitiveMap; +import org.eclipse.lsp4j.Range; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; @@ -34,7 +37,14 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile( "(добавить|вставить|add|insert)"); - private @Nullable List blockAssignments = null; + private static final List BREAKERS_INDEXES = Arrays.asList(BSLParser.RULE_returnStatement, BSLParser.RULE_breakStatement, + BSLParser.RULE_continueStatement, BSLParser.RULE_raiseStatement); + private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_subCodeBlock, BSLParser.RULE_forEachStatement, + BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, BSLParser.RULE_tryStatement); + + private List blockAssignments = null; + private List blockBreakers = null; + private Range blockRange = null; @Value private static class GroupingData { @@ -76,9 +86,10 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { .flatMap(mapByMethod -> mapByMethod.values().stream()) .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) - .forEach(listOfDuplicatedData -> excludeNormalChanges(listOfDuplicatedData, codeBlock)); + .forEach(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)); blockAssignments = null; + blockBreakers = null; return super.visitCodeBlock(codeBlock); } @@ -111,17 +122,12 @@ private boolean isAppropriateMethodCall(String methodName, Pattern pattern) { return pattern.matcher(methodName).matches(); } - private void excludeNormalChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { - var listForIssue = new ArrayList(); - if (blockAssignments == null){ - blockAssignments = getAssignments(codeBlock); - } + private void excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { + var listForIssue = new ArrayList(); listForIssue.add(listOfDuplicatedData.get(0)); -// listOfDuplicatedData.subList(1, listOfDuplicatedData.size() - 1).stream() -// .filter(groupingData -> ) for (int i = 1; i < listOfDuplicatedData.size(); i++) { - if (hasNormalChange(listOfDuplicatedData.get(0), listOfDuplicatedData.get(i), codeBlock)){ + if (hasValidChange(listOfDuplicatedData.get(0), listOfDuplicatedData.get(i), codeBlock)){ break;// последующие элементы нет смысла проверять, их нужно исключать } listForIssue.add(listOfDuplicatedData.get(i)); @@ -131,26 +137,46 @@ private void excludeNormalChanges(List listOfDuplicatedData, BSLPa } } - private boolean hasNormalChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { - if (hasAssignBetweenCalls(groupingData, groupingData1)){ + private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { + final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); + if (hasAssignBetweenCalls(groupingData, range, codeBlock)){ + return true; + } + if (hasBreakersBetweenCalls(groupingData, groupingData1, range, codeBlock)){ return true; } return false; } - private boolean hasAssignBetweenCalls(GroupingData groupingData, GroupingData groupingData1) { - var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); - return blockAssignments.stream() + private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BSLParser.CodeBlockContext codeBlock) { + return getAssignments(codeBlock).stream() .filter(assignmentContext -> Ranges.containsRange(range, Ranges.create(assignmentContext))) - .anyMatch(assignmentContext -> hasNormalAssign(assignmentContext, groupingData)); + .anyMatch(assignmentContext -> hasValidAssign(assignmentContext, groupingData)); } - private boolean hasNormalAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { + private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { final var text = assignmentContext.lValue().getText(); return text.equalsIgnoreCase(groupingData.identifier) || text.equalsIgnoreCase(groupingData.firstParam); } + private boolean hasBreakersBetweenCalls(GroupingData groupingData, GroupingData groupingData1, Range range, BSLParser.CodeBlockContext codeBlock) { + return getBreakers(codeBlock).stream() + .filter(bslParserRuleContext -> Ranges.containsRange(range, Ranges.create(bslParserRuleContext))) + .anyMatch(breakerContext -> hasBreakerFromCodeBlock(breakerContext, codeBlock)); + } + + private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext, BSLParser.CodeBlockContext codeBlock) { + if (breakerContext.getRuleIndex() == BSLParser.RULE_returnStatement){ + return true; + } + final var rootParent = Trees.getRootParent(breakerContext, BREAKERS_ROOTS); + if (rootParent.getRuleIndex() == BSLParser.RULE_subCodeBlock){ + return true; + } + return !Ranges.containsRange(getBlockRange(codeBlock), Ranges.create(rootParent)); + } + private void fireIssue(List listOfDuplicatedData) { final var dataForIssue = listOfDuplicatedData.get(1); final var relatedInformationList = listOfDuplicatedData.stream() @@ -163,9 +189,31 @@ private void fireIssue(List listOfDuplicatedData) { diagnosticStorage.addDiagnostic(dataForIssue.callStatement, relatedInformationList); } - private static List getAssignments(BSLParser.CodeBlockContext codeBlock){ - return Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() + private List getAssignments(BSLParser.CodeBlockContext codeBlock){ + if (blockAssignments != null){ + return blockAssignments; + } + blockAssignments = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() .map(parseTree -> (BSLParser.AssignmentContext) parseTree) .collect(Collectors.toList()); + return blockAssignments; + } + + private List getBreakers(BSLParser.CodeBlockContext codeBlock){ + if (blockBreakers != null){ + return blockBreakers; + } + blockBreakers = Trees.findAllRuleNodes(codeBlock, BREAKERS_INDEXES).stream() + .map(parseTree -> (BSLParserRuleContext) parseTree) + .collect(Collectors.toList()); + return blockBreakers; + } + + private Range getBlockRange(BSLParser.CodeBlockContext codeBlock) { + if (blockRange != null){ + return blockRange; + } + blockRange = Ranges.create(codeBlock); + return blockRange; } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 302d7ba4d5a..0f8ebdc5bc1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -88,7 +88,15 @@ void test() { Ranges.create(102, 8, 102, 92)) ); - assertThat(diagnostics).hasSize(8); + checkContent( + diagnostics.get(8), + Ranges.create(119, 4, 119, 65), + Arrays.asList( + Ranges.create(112, 4, 112, 63), + Ranges.create(119, 4, 119, 65)) + ); + + assertThat(diagnostics).hasSize(9); } diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 4f6b6fc95f9..047659a5297 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -41,13 +41,13 @@ Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, Контекст.Коллекция); -//TODO Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка +//TODO Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка или все-таки подозрительно?? Контекст2.Коллекция.Вставить("ИмяПрава", "Чтение"); Если Условие() Тогда ЕщеМетод(Контекст2); КонецЕсли; -//TODO Контекст2.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка +//TODO Контекст2.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка или все-таки подозрительно?? КонецЕсли; Если Условие() Тогда @@ -80,7 +80,7 @@ КонецЕсли; // Проверка использования дополнительных реквизитов. - //TODO ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); // не ошибка + ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); // не ошибка Возврат ВидыСвойствНабора; @@ -105,4 +105,35 @@ Данные.Метод().ПовторнаяСоздаваемаяКоллекция = Новый Массив; Данные.Метод().ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка Данные.Метод().ОбщаяКоллекция.Добавить(Данные.Метод().ПовторнаяСоздаваемаяКоллекция); // не ошибка -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Функция ВнутреннееПрерываниеПотокаВыполнения() + + ВидыСвойствНабора = Новый Структура; + ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); + + Для Каждого Элемент Из Коллекция Цикл + Прервать; + КонецЦикла; + + // Проверка использования дополнительных реквизитов. + ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Истина); // ошибка + + Возврат ВидыСвойствНабора; + +КонецФункции + +Функция ДублированиеВПоследующихЭлементах() + + ПовторнаяСоздаваемаяКоллекция = Новый Массив; + ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); + ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); + + ПовторнаяСоздаваемаяКоллекция = Новый Массив; + ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка + //TODO ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // ошибка + + ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка + //TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // ошибка + +КонецФункции From 641d249eef42514d9718f69b3faaacbc8c379313 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 25 May 2022 00:15:00 +0300 Subject: [PATCH 009/595] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=BF=D0=B0=D1=80,?= =?UTF-8?q?=20=D0=B0=20=D0=BD=D0=B5=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=20=D1=81=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B?= =?UTF-8?q?=D0=BC=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 35 +++++++++++++------ ...InsertionIntoCollectionDiagnosticTest.java | 18 +++++++++- ...catedInsertionIntoCollectionDiagnostic.bsl | 4 +-- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 9ed8ea20077..a94b1f3a096 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -90,6 +90,7 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { blockAssignments = null; blockBreakers = null; + blockRange = null; return super.visitCodeBlock(codeBlock); } @@ -125,27 +126,41 @@ private boolean isAppropriateMethodCall(String methodName, Pattern pattern) { private void excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { var listForIssue = new ArrayList(); - listForIssue.add(listOfDuplicatedData.get(0)); - for (int i = 1; i < listOfDuplicatedData.size(); i++) { - if (hasValidChange(listOfDuplicatedData.get(0), listOfDuplicatedData.get(i), codeBlock)){ - break;// последующие элементы нет смысла проверять, их нужно исключать - } - listForIssue.add(listOfDuplicatedData.get(i)); + for (int i = 0; i < listOfDuplicatedData.size(); i++) { + if (!excludeValidElements(listOfDuplicatedData, i, codeBlock, listForIssue)){ + break; + }; } if (listForIssue.size() > 1){ fireIssue(listForIssue); } } + private boolean excludeValidElements(List listOfDuplicatedData, int currIndex, BSLParser.CodeBlockContext codeBlock, ArrayList listForIssue) { + if (listOfDuplicatedData.size() - currIndex < 2){ + return false; + } + final var elem = listOfDuplicatedData.get(currIndex); + boolean alreadyAdd = false; + for (int i = currIndex + 1; i < listOfDuplicatedData.size(); i++) { + if (hasValidChange(elem, listOfDuplicatedData.get(i), codeBlock)){ + break;// последующие элементы нет смысла проверять, их нужно исключать + } + if (!alreadyAdd){ + alreadyAdd = true; + listForIssue.add(elem); + } + listForIssue.add(listOfDuplicatedData.get(i)); + } + return true; + } + private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); if (hasAssignBetweenCalls(groupingData, range, codeBlock)){ return true; } - if (hasBreakersBetweenCalls(groupingData, groupingData1, range, codeBlock)){ - return true; - } - return false; + return hasBreakersBetweenCalls(groupingData, groupingData1, range, codeBlock); } private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BSLParser.CodeBlockContext codeBlock) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 0f8ebdc5bc1..3013fbc93fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -96,7 +96,23 @@ void test() { Ranges.create(119, 4, 119, 65)) ); - assertThat(diagnostics).hasSize(9); + checkContent( + diagnostics.get(9), + Ranges.create(133, 4, 133, 58), + Arrays.asList( + Ranges.create(132, 4, 132, 58), + Ranges.create(133, 4, 133, 58)) + ); + + checkContent( + diagnostics.get(10), + Ranges.create(136, 4, 136, 58), + Arrays.asList( + Ranges.create(135, 4, 135, 58), + Ranges.create(136, 4, 136, 58)) + ); + + assertThat(diagnostics).hasSize(11); } diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 047659a5297..079a54d09cc 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -131,9 +131,9 @@ ПовторнаяСоздаваемаяКоллекция = Новый Массив; ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // не ошибка - //TODO ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // ошибка + ПовторнаяСоздаваемаяКоллекция.Добавить("Пользователь"); // ошибка ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка - //TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // ошибка + ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // ошибка КонецФункции From f36ddc70754b7ccccaf9b7479f46b59d1c79c6ba Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 25 May 2022 00:32:40 +0300 Subject: [PATCH 010/595] =?UTF-8?q?=D0=B5=D1=89=D0=B5=20FP=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82-=D0=BA=D0=B5=D0=B9=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DuplicatedInsertionIntoCollectionDiagnostic.bsl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 079a54d09cc..967986a4a26 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -137,3 +137,12 @@ ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // ошибка КонецФункции + +Процедура ПрисваиваниеРодителюИОбращениеКПотомку(Данные) + ПовторнаяСоздаваемаяКоллекция = Новый Массив; + ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); + + ПовторнаяСоздаваемаяКоллекция = Новый Массив; + ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // не ошибка + //TODO ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // ошибка - нужно ли повторять?? +КонецПроцедуры From 62ec694866b5fc25d81127f47c6107831c511244 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 25 May 2022 00:52:21 +0300 Subject: [PATCH 011/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20FP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...DuplicatedInsertionIntoCollectionDiagnostic.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index a94b1f3a096..d132c03e178 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -171,8 +171,17 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BS private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { final var text = assignmentContext.lValue().getText(); - return text.equalsIgnoreCase(groupingData.identifier) - || text.equalsIgnoreCase(groupingData.firstParam); + if (text.equalsIgnoreCase(groupingData.identifier) + || text.equalsIgnoreCase(groupingData.firstParam)){ + return true; + } + final var textWithDot = text.concat("."); + return startWithIgnoreCase(groupingData.identifier, textWithDot) + || startWithIgnoreCase(groupingData.firstParam, textWithDot); + } + + private static boolean startWithIgnoreCase(String identifier, String textWithDot) { + return identifier.length() >= textWithDot.length() && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); } private boolean hasBreakersBetweenCalls(GroupingData groupingData, GroupingData groupingData1, Range range, BSLParser.CodeBlockContext codeBlock) { From e7f97c27f69f30bd4b58304ae5b790b19ccf20a0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 11:47:15 +0300 Subject: [PATCH 012/595] =?UTF-8?q?=D0=B4=D0=BE=D0=BF.=D0=BA=D0=B5=D0=B9?= =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...DuplicatedInsertionIntoCollectionDiagnostic.bsl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 967986a4a26..3a50dcae706 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -146,3 +146,17 @@ ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // не ошибка //TODO ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // ошибка - нужно ли повторять?? КонецПроцедуры + +Процедура ДублированиеПустыхЗначений(Сведения, Метаданные) + Сведения = Новый Массив; + Сведения.Добавить(""); + + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Конфигурация: %1'"), Метаданные.Представление())); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия конфигурации: %1'"), Метаданные.Версия)); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); + Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия приложения: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); + + //Сведения.Добавить(""); // TODO не ошибка ?? + + Сведения.Добавить(НСтр("ru = 'Системная информация'")); +КонецПроцедуры From d5e8b105ff096574e1eec7ba4bda3677149edec4 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 13:01:57 +0300 Subject: [PATCH 013/595] =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=83=D1=80=D1=81?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DuplicatedInsertionIntoCollectionDiagnostic_en.properties | 4 ++-- .../DuplicatedInsertionIntoCollectionDiagnostic_ru.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties index 66831715dfd..c51d207d589 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage= -diagnosticName= +diagnosticMessage=Check the re-addition of %s to the collection with name %s +diagnosticName=Duplicate adding or pasting a value to a collection diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties index 40188ca542c..756f74cb265 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=<Сообщение> -diagnosticName=<Имя диагностики> +diagnosticMessage=Проверьте повторную вставку %s в коллекцию %s +diagnosticName=Повторное добавление/вставка значений в коллекцию From 2b4c59d335f2278657cd9fe9f8a999b53899d920 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 13:02:36 +0300 Subject: [PATCH 014/595] =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=8E=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=B9=20=D0=B8=20=D0=BA=D0=BE=D0=BB?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B2=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 3 ++- ...InsertionIntoCollectionDiagnosticTest.java | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index d132c03e178..aca61722fcb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -210,7 +210,8 @@ private void fireIssue(List listOfDuplicatedData) { Ranges.create(context), "+1" )).collect(Collectors.toList()); - diagnosticStorage.addDiagnostic(dataForIssue.callStatement, relatedInformationList); + final var message = info.getMessage(dataForIssue.firstParam, dataForIssue.identifier); + diagnosticStorage.addDiagnostic(dataForIssue.callStatement, message, relatedInformationList); } private List getAssignments(BSLParser.CodeBlockContext codeBlock){ diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 3013fbc93fc..4ee56346c80 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -27,6 +27,7 @@ void test() { checkContent( diagnostics.get(0), Ranges.create(8, 4, 8, 34), + getMessage("\"Ключ1\"", "Коллекция"), Arrays.asList( Ranges.create(7, 4, 7, 34), Ranges.create(8, 4, 8, 34)) @@ -35,6 +36,7 @@ void test() { checkContent( diagnostics.get(1), Ranges.create(12, 4, 12, 35), + getMessage("\"Ключ1\"", "Коллекция2"), Arrays.asList( Ranges.create(11, 4, 11, 35), Ranges.create(12, 4, 12, 35)) @@ -43,6 +45,7 @@ void test() { checkContent( diagnostics.get(2), Ranges.create(4, 4, 4, 34), + getMessage("СтрокаТаблицы", "Массив"), Arrays.asList( Ranges.create(3, 4, 3, 34), Ranges.create(4, 4, 4, 34)) @@ -51,6 +54,7 @@ void test() { checkContent( diagnostics.get(3), Ranges.create(22, 8, 22, 38), + getMessage("\"Ключ1\"", "Коллекция"), Arrays.asList( Ranges.create(21, 8, 21, 38), Ranges.create(22, 8, 22, 38)) @@ -59,6 +63,7 @@ void test() { checkContent( diagnostics.get(4), Ranges.create(27, 8, 27, 55), + getMessage("\"Пользователь\"", "Итог.Коллекция.Индексы"), Arrays.asList( Ranges.create(26, 8, 26, 55), Ranges.create(27, 8, 27, 55)) @@ -67,6 +72,7 @@ void test() { checkContent( diagnostics.get(5), Ranges.create(58, 12, 58, 76), + getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), Arrays.asList( Ranges.create(56, 12, 56, 87), Ranges.create(58, 12, 58, 76)) @@ -75,6 +81,7 @@ void test() { checkContent( diagnostics.get(6), Ranges.create(99, 8, 99, 77), + getMessage("\"Пользователь\"", "Данные.Метод().ПовторнаяСоздаваемаяКоллекция"), Arrays.asList( Ranges.create(98, 8, 98, 77), Ranges.create(99, 8, 99, 77)) @@ -83,6 +90,7 @@ void test() { checkContent( diagnostics.get(7), Ranges.create(102, 8, 102, 92), + getMessage("Данные.Метод().ПовторнаяСоздаваемаяКоллекция", "Данные.Метод().ОбщаяКоллекция"), Arrays.asList( Ranges.create(101, 8, 101, 92), Ranges.create(102, 8, 102, 92)) @@ -91,6 +99,7 @@ void test() { checkContent( diagnostics.get(8), Ranges.create(119, 4, 119, 65), + getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), Arrays.asList( Ranges.create(112, 4, 112, 63), Ranges.create(119, 4, 119, 65)) @@ -99,6 +108,7 @@ void test() { checkContent( diagnostics.get(9), Ranges.create(133, 4, 133, 58), + getMessage("\"Пользователь\"", "ПовторнаяСоздаваемаяКоллекция"), Arrays.asList( Ranges.create(132, 4, 132, 58), Ranges.create(133, 4, 133, 58)) @@ -107,6 +117,7 @@ void test() { checkContent( diagnostics.get(10), Ranges.create(136, 4, 136, 58), + getMessage("ПовторнаяСоздаваемаяКоллекция", "ОбщаяКоллекция"), Arrays.asList( Ranges.create(135, 4, 135, 58), Ranges.create(136, 4, 136, 58)) @@ -116,6 +127,10 @@ void test() { } + private String getMessage(String keyName, String collectionName) { + return String.format("Проверьте повторную вставку %s в коллекцию %s", keyName, collectionName); + } + @Test void newCollectionAssignBetweenDuplications() { var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + @@ -162,6 +177,7 @@ void newElemAssignBetweenDuplications() { } // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest + // TODO перенести в DiagnosticAssert private void checkContent( Diagnostic diagnostic, Range diagnosticRange, @@ -175,7 +191,14 @@ private void checkContent( Range diagnosticRange, List relatedLocationRanges ) { + checkContent(diagnostic, diagnosticRange, "", relatedLocationRanges); + } + + private void checkContent(Diagnostic diagnostic, Range diagnosticRange, String message, List relatedLocationRanges) { assertThat(diagnostic.getRange()).isEqualTo(diagnosticRange); + if (!message.isEmpty()){ + assertThat(diagnostic.getMessage()).isEqualTo(message); + } List relatedInformationList = diagnostic.getRelatedInformation(); assertThat(relatedInformationList).hasSize(relatedLocationRanges.size()); From 8eaf29d54ffbec344cbf60225577859ed3833bfc Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 14:12:48 +0300 Subject: [PATCH 015/595] =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit рефакторинг имен --- ...atedInsertionIntoCollectionDiagnostic.java | 95 +++++++++++++------ ...InsertionIntoCollectionDiagnosticTest.java | 11 +++ ...catedInsertionIntoCollectionDiagnostic.bsl | 8 +- 3 files changed, 80 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index aca61722fcb..dd4a47a1900 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -42,23 +43,24 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_subCodeBlock, BSLParser.RULE_forEachStatement, BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, BSLParser.RULE_tryStatement); + private Range blockRange = null; private List blockAssignments = null; private List blockBreakers = null; - private Range blockRange = null; + private List blockCallParams = null; @Value private static class GroupingData { BSLParser.CallStatementContext callStatement; - String identifier; + String collectionName; String methodName; - String firstParam; + String firstParamName; BSLParser.CallParamListContext callParamListContext; } @Override public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { final var statements = codeBlock.statement().stream() - .map(statement -> statement.callStatement()) + .map(BSLParser.StatementContext::callStatement) .filter(Objects::nonNull) .filter(callStatement -> callStatement.IDENTIFIER() != null) .filter(callStatement -> callStatement.accessCall() != null) @@ -71,13 +73,13 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { final var mapOfMapsByIdentifier = statements.stream() .collect(Collectors.groupingBy( - groupingData -> groupingData.getIdentifier(), + GroupingData::getCollectionName, CaseInsensitiveMap::new, Collectors.groupingBy( - groupingData -> groupingData.getMethodName(), + GroupingData::getMethodName, CaseInsensitiveMap::new, Collectors.groupingBy( - groupingData -> groupingData.getFirstParam(), + GroupingData::getFirstParamName, CaseInsensitiveMap::new, Collectors.mapping(groupingData -> groupingData, Collectors.toList())) ) @@ -88,9 +90,10 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) .forEach(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)); + blockRange = null; blockAssignments = null; blockBreakers = null; - blockRange = null; + blockCallParams = null; return super.visitCodeBlock(codeBlock); } @@ -107,11 +110,11 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars return null; } final var methodName = methodCallContext.methodName().getText(); - if (!isAppropriateMethodCall(methodName, ADD_METHOD_PATTERN)) { + if (!isAppropriateMethodCall(methodName)) { return null; } final var fullIdentifier = callStatement.modifier().stream() - .map(modifierContext -> modifierContext.getText()) + .map(BSLParserRuleContext::getText) .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)) .replace("..", "."); @@ -119,8 +122,8 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); } - private boolean isAppropriateMethodCall(String methodName, Pattern pattern) { - return pattern.matcher(methodName).matches(); + private boolean isAppropriateMethodCall(String methodName) { + return ADD_METHOD_PATTERN.matcher(methodName).matches(); } private void excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { @@ -129,7 +132,7 @@ private void excludeValidChanges(List listOfDuplicatedData, BSLPar for (int i = 0; i < listOfDuplicatedData.size(); i++) { if (!excludeValidElements(listOfDuplicatedData, i, codeBlock, listForIssue)){ break; - }; + } } if (listForIssue.size() > 1){ fireIssue(listForIssue); @@ -157,10 +160,10 @@ private boolean excludeValidElements(List listOfDuplicatedData, in private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); - if (hasAssignBetweenCalls(groupingData, range, codeBlock)){ + if (hasAssignBetweenCalls(groupingData, range, codeBlock) || hasBreakersBetweenCalls(range, codeBlock)){ return true; } - return hasBreakersBetweenCalls(groupingData, groupingData1, range, codeBlock); + return usedAsFunctionParamsBetweenCalls(range, codeBlock, groupingData); } private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BSLParser.CodeBlockContext codeBlock) { @@ -171,20 +174,16 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BS private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { final var text = assignmentContext.lValue().getText(); - if (text.equalsIgnoreCase(groupingData.identifier) - || text.equalsIgnoreCase(groupingData.firstParam)){ + if (text.equalsIgnoreCase(groupingData.collectionName) + || text.equalsIgnoreCase(groupingData.firstParamName)){ return true; } final var textWithDot = text.concat("."); - return startWithIgnoreCase(groupingData.identifier, textWithDot) - || startWithIgnoreCase(groupingData.firstParam, textWithDot); - } - - private static boolean startWithIgnoreCase(String identifier, String textWithDot) { - return identifier.length() >= textWithDot.length() && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); + return startWithIgnoreCase(groupingData.collectionName, textWithDot) + || startWithIgnoreCase(groupingData.firstParamName, textWithDot); } - private boolean hasBreakersBetweenCalls(GroupingData groupingData, GroupingData groupingData1, Range range, BSLParser.CodeBlockContext codeBlock) { + private boolean hasBreakersBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock) { return getBreakers(codeBlock).stream() .filter(bslParserRuleContext -> Ranges.containsRange(range, Ranges.create(bslParserRuleContext))) .anyMatch(breakerContext -> hasBreakerFromCodeBlock(breakerContext, codeBlock)); @@ -201,6 +200,28 @@ private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext, BSL return !Ranges.containsRange(getBlockRange(codeBlock), Ranges.create(rootParent)); } + private boolean usedAsFunctionParamsBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock, GroupingData groupingData) { + return getCallParams(codeBlock).stream() + .filter(callParamContext -> Ranges.containsRange(range, Ranges.create(callParamContext))) + .anyMatch(callParamContext -> usedAsFunctionParams(callParamContext, groupingData)); + } + + private boolean usedAsFunctionParams(BSLParser.CallParamContext callParamContext, GroupingData groupingData) { + return Optional.of(callParamContext) + .map(BSLParser.CallParamContext::expression) + .filter(expression -> !expression.member().isEmpty()) + .map(BSLParser.ExpressionContext::member) + .filter(memberContexts -> memberContexts.stream() + .map(BSLParser.MemberContext::complexIdentifier) + .filter(Objects::nonNull) + .anyMatch(complexIdentifierContext -> similarIdentifier(complexIdentifierContext, groupingData.collectionName))) + .isPresent(); + } + + private boolean similarIdentifier(BSLParser.ComplexIdentifierContext complexIdentifierContext, String collectionName) { + return startWithIgnoreCase(collectionName, complexIdentifierContext.getText()); + } + private void fireIssue(List listOfDuplicatedData) { final var dataForIssue = listOfDuplicatedData.get(1); final var relatedInformationList = listOfDuplicatedData.stream() @@ -210,10 +231,18 @@ private void fireIssue(List listOfDuplicatedData) { Ranges.create(context), "+1" )).collect(Collectors.toList()); - final var message = info.getMessage(dataForIssue.firstParam, dataForIssue.identifier); + final var message = info.getMessage(dataForIssue.firstParamName, dataForIssue.collectionName); diagnosticStorage.addDiagnostic(dataForIssue.callStatement, message, relatedInformationList); } + private Range getBlockRange(BSLParser.CodeBlockContext codeBlock) { + if (blockRange != null){ + return blockRange; + } + blockRange = Ranges.create(codeBlock); + return blockRange; + } + private List getAssignments(BSLParser.CodeBlockContext codeBlock){ if (blockAssignments != null){ return blockAssignments; @@ -234,11 +263,17 @@ private List getBreakers(BSLParser.CodeBlockContext codeBl return blockBreakers; } - private Range getBlockRange(BSLParser.CodeBlockContext codeBlock) { - if (blockRange != null){ - return blockRange; + private List getCallParams(BSLParser.CodeBlockContext codeBlock) { + if (blockCallParams != null){ + return blockCallParams; } - blockRange = Ranges.create(codeBlock); - return blockRange; + blockCallParams = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_callParam).stream() + .map(parseTree -> (BSLParser.CallParamContext) parseTree) + .collect(Collectors.toList()); + return blockCallParams; + } + + private static boolean startWithIgnoreCase(String identifier, String textWithDot) { + return identifier.length() >= textWithDot.length() && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 4ee56346c80..70016930734 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -176,6 +176,17 @@ void newElemAssignBetweenDuplications() { assertThat(diagnostics).hasSize(0); } + @Test + void useAsFunctionParamsBetweenDuplications() { + var code = " Контекст.Коллекция.Вставить(1, Парам);\n" + + " Метод(Контекст.Коллекция, 1 + Контекст.Коллекция + 2);\n" + + " Контекст.Коллекция.Вставить(1, ДругойПарам); // не ошибка или все-таки подозрительно??\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); + } + // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest // TODO перенести в DiagnosticAssert private void checkContent( diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 3a50dcae706..00f1df2a217 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -41,13 +41,13 @@ Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, Контекст.Коллекция); -//TODO Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка или все-таки подозрительно?? + Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); //TODO не ошибка или все-таки подозрительно - добавить параметр настройки?? Контекст2.Коллекция.Вставить("ИмяПрава", "Чтение"); Если Условие() Тогда ЕщеМетод(Контекст2); КонецЕсли; -//TODO Контекст2.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка или все-таки подозрительно?? + Контекст2.Коллекция.Вставить("ИмяПрава", "Изменение"); //не ошибка КонецЕсли; Если Условие() Тогда @@ -61,7 +61,7 @@ КонецЕсли; Если Условие() Тогда -//TODO Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); // Вставить(0,7) - ошибка или не ошибка?? +//TODO Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); // Вставить(0,7) - ошибка или не ошибка - добавить параметр настройки?? Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Строка", НСтр("ru = 'Строка'")); КонецЕсли; @@ -156,7 +156,7 @@ Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия приложения: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); - //Сведения.Добавить(""); // TODO не ошибка ?? + //Сведения.Добавить(""); // TODO не ошибка - добавить параметр настройки ?? Сведения.Добавить(НСтр("ru = 'Системная информация'")); КонецПроцедуры From 62613ca9fb27705132c8620277d0242ce19bab76 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 22:17:22 +0300 Subject: [PATCH 016/595] =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B0=D1=8E=20=D0=BD=D0=B5=D0=B7=D0=BD=D0=B0=D1=87=D0=B0=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D1=83=D1=81=D1=82=D1=8B=D0=B5=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit шапка файлов замечания стат.анализа --- ...atedInsertionIntoCollectionDiagnostic.java | 204 +++++++++++------- ...InsertionIntoCollectionDiagnosticTest.java | 21 ++ ...catedInsertionIntoCollectionDiagnostic.bsl | 108 +++++++++- 3 files changed, 250 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index dd4a47a1900..4920fbb14c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; @@ -18,6 +39,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -36,17 +58,22 @@ ) public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { - private static final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile( - "(добавить|вставить|add|insert)"); - private static final List BREAKERS_INDEXES = Arrays.asList(BSLParser.RULE_returnStatement, BSLParser.RULE_breakStatement, - BSLParser.RULE_continueStatement, BSLParser.RULE_raiseStatement); - private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_subCodeBlock, BSLParser.RULE_forEachStatement, - BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, BSLParser.RULE_tryStatement); - - private Range blockRange = null; - private List blockAssignments = null; - private List blockBreakers = null; - private List blockCallParams = null; + private static final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile("добавить|вставить|add|insert"); + private static final Pattern IGNORED_BSL_VALUES_PATTERN = CaseInsensitivePattern.compile( + "неопределено|undefined|0|символы\\.[\\wа-яё]+|chars\\.[\\wа-яё]+"); + + private static final List BREAKERS_INDEXES = Arrays.asList(BSLParser.RULE_returnStatement, + BSLParser.RULE_breakStatement, BSLParser.RULE_continueStatement, BSLParser.RULE_raiseStatement); + private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_subCodeBlock, + BSLParser.RULE_forEachStatement, BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, + BSLParser.RULE_tryStatement); + + public static final int LENGTH_OF_EMPTY_STRING_WITH_QUOTES = 2; + + private Range blockRange; + private List blockAssignments; + private List blockBreakers; + private List blockCallParams; @Value private static class GroupingData { @@ -67,34 +94,15 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { .map(callStatement -> groupingCalls(callStatement, callStatement.accessCall())) .filter(Objects::nonNull) .collect(Collectors.toList()); - if (statements.isEmpty()) { - return super.visitCodeBlock(codeBlock); - } - - final var mapOfMapsByIdentifier = statements.stream() - .collect(Collectors.groupingBy( - GroupingData::getCollectionName, - CaseInsensitiveMap::new, - Collectors.groupingBy( - GroupingData::getMethodName, - CaseInsensitiveMap::new, - Collectors.groupingBy( - GroupingData::getFirstParamName, - CaseInsensitiveMap::new, - Collectors.mapping(groupingData -> groupingData, Collectors.toList())) - ) - )); - mapOfMapsByIdentifier.values().stream() - .flatMap(mapByMethod -> mapByMethod.values().stream()) - .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) - .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) - .forEach(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)); - blockRange = null; - blockAssignments = null; - blockBreakers = null; - blockCallParams = null; + if (!statements.isEmpty()) { + exploreStatements(codeBlock, statements); + blockRange = null; + blockAssignments = null; + blockBreakers = null; + blockCallParams = null; + } return super.visitCodeBlock(codeBlock); } @@ -109,47 +117,88 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars if (callParams.isEmpty()) { return null; } + final BSLParser.CallParamContext firstParamContext = callParams.get(0); + if (firstParamContext.getChildCount() == 0) { + return null; + } final var methodName = methodCallContext.methodName().getText(); if (!isAppropriateMethodCall(methodName)) { return null; } + var firstParam = firstParamContext.getText(); + if (isBlankBSLString(firstParam) || isIgnoredBSLValues(firstParam)) { + return null; + } + final var fullIdentifier = callStatement.modifier().stream() .map(BSLParserRuleContext::getText) .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)) .replace("..", "."); - var firstParam = callParams.get(0).getText(); return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); } - private boolean isAppropriateMethodCall(String methodName) { + private static boolean isAppropriateMethodCall(String methodName) { return ADD_METHOD_PATTERN.matcher(methodName).matches(); } - private void excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { + private static boolean isBlankBSLString(String text) { + final var length = text.length(); - var listForIssue = new ArrayList(); - for (int i = 0; i < listOfDuplicatedData.size(); i++) { - if (!excludeValidElements(listOfDuplicatedData, i, codeBlock, listForIssue)){ + return length >= LENGTH_OF_EMPTY_STRING_WITH_QUOTES && text.charAt(0) == '"' && text.charAt(length - 1) == '"' + && text.substring(1, length - 1).isBlank(); + } + + private static boolean isIgnoredBSLValues(String text) { + return IGNORED_BSL_VALUES_PATTERN.matcher(text).matches(); + } + + private void exploreStatements(BSLParser.CodeBlockContext codeBlock, List statements) { + final var mapOfMapsByIdentifier = statements.stream() + .collect(Collectors.groupingBy( + GroupingData::getCollectionName, + CaseInsensitiveMap::new, + Collectors.groupingBy( + GroupingData::getMethodName, + CaseInsensitiveMap::new, + Collectors.groupingBy( + GroupingData::getFirstParamName, + CaseInsensitiveMap::new, + Collectors.mapping(groupingData -> groupingData, Collectors.toList())) + ) + )); + mapOfMapsByIdentifier.values().stream() + .flatMap(mapByMethod -> mapByMethod.values().stream()) + .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) + .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) + .map(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)) + .filter(list -> list.size() > 1) + .forEach(list -> fireIssue(list)); + } + + private List excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { + + var result = new ArrayList(); + for (var i = 0; i < listOfDuplicatedData.size(); i++) { + if (!excludeValidElements(listOfDuplicatedData, i, codeBlock, result)) { break; } } - if (listForIssue.size() > 1){ - fireIssue(listForIssue); - } + return result; } - private boolean excludeValidElements(List listOfDuplicatedData, int currIndex, BSLParser.CodeBlockContext codeBlock, ArrayList listForIssue) { - if (listOfDuplicatedData.size() - currIndex < 2){ + private boolean excludeValidElements(List listOfDuplicatedData, int currIndex, + BSLParser.CodeBlockContext codeBlock, ArrayList listForIssue) { + if (listOfDuplicatedData.size() - currIndex <= 1) { return false; } final var elem = listOfDuplicatedData.get(currIndex); - boolean alreadyAdd = false; + var alreadyAdd = false; for (int i = currIndex + 1; i < listOfDuplicatedData.size(); i++) { - if (hasValidChange(elem, listOfDuplicatedData.get(i), codeBlock)){ + if (hasValidChange(elem, listOfDuplicatedData.get(i), codeBlock)) { break;// последующие элементы нет смысла проверять, их нужно исключать } - if (!alreadyAdd){ + if (!alreadyAdd) { alreadyAdd = true; listForIssue.add(elem); } @@ -160,7 +209,7 @@ private boolean excludeValidElements(List listOfDuplicatedData, in private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); - if (hasAssignBetweenCalls(groupingData, range, codeBlock) || hasBreakersBetweenCalls(range, codeBlock)){ + if (hasAssignBetweenCalls(groupingData, range, codeBlock) || hasBreakersBetweenCalls(range, codeBlock)) { return true; } return usedAsFunctionParamsBetweenCalls(range, codeBlock, groupingData); @@ -172,10 +221,10 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BS .anyMatch(assignmentContext -> hasValidAssign(assignmentContext, groupingData)); } - private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { + private static boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { final var text = assignmentContext.lValue().getText(); if (text.equalsIgnoreCase(groupingData.collectionName) - || text.equalsIgnoreCase(groupingData.firstParamName)){ + || text.equalsIgnoreCase(groupingData.firstParamName)) { return true; } final var textWithDot = text.concat("."); @@ -190,11 +239,11 @@ private boolean hasBreakersBetweenCalls(Range range, BSLParser.CodeBlockContext } private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext, BSLParser.CodeBlockContext codeBlock) { - if (breakerContext.getRuleIndex() == BSLParser.RULE_returnStatement){ + if (breakerContext.getRuleIndex() == BSLParser.RULE_returnStatement) { return true; } final var rootParent = Trees.getRootParent(breakerContext, BREAKERS_ROOTS); - if (rootParent.getRuleIndex() == BSLParser.RULE_subCodeBlock){ + if (rootParent == null || rootParent.getRuleIndex() == BSLParser.RULE_subCodeBlock) { return true; } return !Ranges.containsRange(getBlockRange(codeBlock), Ranges.create(rootParent)); @@ -206,7 +255,7 @@ private boolean usedAsFunctionParamsBetweenCalls(Range range, BSLParser.CodeBloc .anyMatch(callParamContext -> usedAsFunctionParams(callParamContext, groupingData)); } - private boolean usedAsFunctionParams(BSLParser.CallParamContext callParamContext, GroupingData groupingData) { + private static boolean usedAsFunctionParams(BSLParser.CallParamContext callParamContext, GroupingData groupingData) { return Optional.of(callParamContext) .map(BSLParser.CallParamContext::expression) .filter(expression -> !expression.member().isEmpty()) @@ -218,7 +267,7 @@ private boolean usedAsFunctionParams(BSLParser.CallParamContext callParamContext .isPresent(); } - private boolean similarIdentifier(BSLParser.ComplexIdentifierContext complexIdentifierContext, String collectionName) { + private static boolean similarIdentifier(BSLParser.ComplexIdentifierContext complexIdentifierContext, String collectionName) { return startWithIgnoreCase(collectionName, complexIdentifierContext.getText()); } @@ -236,44 +285,41 @@ private void fireIssue(List listOfDuplicatedData) { } private Range getBlockRange(BSLParser.CodeBlockContext codeBlock) { - if (blockRange != null){ - return blockRange; + if (blockRange == null) { + blockRange = Ranges.create(codeBlock); } - blockRange = Ranges.create(codeBlock); return blockRange; } - private List getAssignments(BSLParser.CodeBlockContext codeBlock){ - if (blockAssignments != null){ - return blockAssignments; + private List getAssignments(BSLParser.CodeBlockContext codeBlock) { + if (blockAssignments == null) { + blockAssignments = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() + .map(BSLParser.AssignmentContext.class::cast) + .collect(Collectors.toUnmodifiableList()); } - blockAssignments = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() - .map(parseTree -> (BSLParser.AssignmentContext) parseTree) - .collect(Collectors.toList()); return blockAssignments; } - private List getBreakers(BSLParser.CodeBlockContext codeBlock){ - if (blockBreakers != null){ - return blockBreakers; + private List getBreakers(BSLParser.CodeBlockContext codeBlock) { + if (blockBreakers == null) { + blockBreakers = Trees.findAllRuleNodes(codeBlock, BREAKERS_INDEXES).stream() + .map(BSLParserRuleContext.class::cast) + .collect(Collectors.toUnmodifiableList()); } - blockBreakers = Trees.findAllRuleNodes(codeBlock, BREAKERS_INDEXES).stream() - .map(parseTree -> (BSLParserRuleContext) parseTree) - .collect(Collectors.toList()); return blockBreakers; } private List getCallParams(BSLParser.CodeBlockContext codeBlock) { - if (blockCallParams != null){ - return blockCallParams; + if (blockCallParams == null) { + blockCallParams = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_callParam).stream() + .map(BSLParser.CallParamContext.class::cast) + .collect(Collectors.toUnmodifiableList()); } - blockCallParams = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_callParam).stream() - .map(parseTree -> (BSLParser.CallParamContext) parseTree) - .collect(Collectors.toList()); return blockCallParams; } private static boolean startWithIgnoreCase(String identifier, String textWithDot) { - return identifier.length() >= textWithDot.length() && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); + return identifier.length() >= textWithDot.length() + && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 70016930734..53095d7b844 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 00f1df2a217..497e9eafaaa 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -41,7 +41,7 @@ Контекст.Коллекция.Вставить("ИмяПрава", "Чтение"); ЗаполнитьСтруктуруРасчетаПрава(Результат.СтруктураРасчетаПраваЧтение, Контекст.Коллекция); - Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); //TODO не ошибка или все-таки подозрительно - добавить параметр настройки?? + Контекст.Коллекция.Вставить("ИмяПрава", "Изменение"); // не ошибка Контекст2.Коллекция.Вставить("ИмяПрава", "Чтение"); Если Условие() Тогда @@ -61,8 +61,8 @@ КонецЕсли; Если Условие() Тогда -//TODO Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); // Вставить(0,7) - ошибка или не ошибка - добавить параметр настройки?? - Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Строка", НСтр("ru = 'Строка'")); + Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Дата", НСтр("ru = 'Дата'")); + Элементы.ТипСтрокой.СписокВыбора.Вставить(0, "Строка", НСтр("ru = 'Строка'")); // не ошибка КонецЕсли; КонецПроцедуры @@ -156,7 +156,107 @@ Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия приложения: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); - //Сведения.Добавить(""); // TODO не ошибка - добавить параметр настройки ?? + Сведения.Добавить(""); // не ошибка Сведения.Добавить(НСтр("ru = 'Системная информация'")); + + Текст.Добавить(, Тип("ПереводСтрокиФорматированногоДокумента")); + Текст.Добавить(, Тип("ПереводСтрокиФорматированногоДокумента")); // не ошибка + + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(" "); // не ошибка + + ОписаниеВызова.Добавить(Неопределено); + ОписаниеВызова.Добавить(Неопределено); // не ошибка + + ЧастиСтроки.Добавить(Символы.ПС); + ЧастиСтроки.Добавить(Символы.ПС); // не ошибка +КонецПроцедуры + +Процедура ИзменениеРеквизитаВставленногоОбъекта(Результат) + Описание.ИмяРеквизита = "ТабельныйНомер"; + Описания.Добавить(Описание); + Описание.ИмяРеквизита = "ДатаПриема"; + //Описания.Добавить(Описание); // TODO не ошибка +КонецПроцедуры + +Процедура ПереиспользованиеВставленногоЭлемента(Результат) + Результат.Вставить("СтатусИзвлеченияТекста", ТекущаяВерсияОбъект.СтатусИзвлеченияТекста); + Результат.Вставить("ПолноеНаименованиеВерсии", СокрЛП(ТекущаяВерсияОбъект.Наименование)); + + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + Если Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + ИначеЕсли Результат["СтатусИзвлеченияТекста"] = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда + СтатусИзвлеченияТекстаСтрока = "Извлечен"; + ИначеЕсли Результат.Получить("СтатусИзвлеченияТекста") = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда + СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; + ИначеЕсли Результат.Свойство("СтатусИзвлеченияТекста", ХХХ) Тогда + СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; + КонецЕсли; + //Результат.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); // TODO не ошибка +КонецПроцедуры + +Процедура ИзменениеРеквизитаВставленногоОбъекта(Результат) + ИменаПромежуточныхВТ = Новый Массив; + ИмяВТСотрудники = ""; + + // Отбор сотрудников по документам-основаниям. + СоздатьВТСотрудникиДляВедомостиПоОснованиям(МенеджерВременныхТаблиц, ОписаниеОперации, ИмяВТСотрудники); + ИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); + + // Отбор сотрудников по организации и подразделению. + СоздатьВТСотрудникиДляВедомостиПоМестуРаботы(МенеджерВременныхТаблиц, ОписаниеОперации, ОтборСотрудников, ИмяВТСотрудники); + //ИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); // TODO не ошибка +КонецПроцедуры + +Процедура ИзменениеЗначенияИспользуемогоВКлюче(Результат) + Лист.Данные.Вставить("П000001000102_" + Формат(НомСуффикса, "ЧГ="), "1000"); + + НомСуффикса = НомСуффикса + 1; + + //Лист.Данные.Вставить("П000001000102_" + Формат(НомСуффикса, "ЧГ="), "5000"); // TODO ошибка или не искать подобные сложные кейсы?? + + Протокол = "HTTP"; + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол)); + + Протокол = "HTTPS"; + //Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол)); // TODO ошибка или не искать подобные сложные кейсы?? - в КА 2.5 их совсем мало + + // Добавим имена событий механизмов расчета партий и себестоимости + ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Истина); + ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); + + ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Ложь); + //ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // TODO ошибка или не искать подобные сложные кейсы?? - в КА 2.5 их совсем мало +КонецПроцедуры + +Процедура ИзменениеЗначенияИспользуемогоВКлюче2(Результат) + КонтекстОтчета = Новый Структура; + КонтекстВыполнения.Вставить("КонтекстОтчета", КонтекстОтчета); + + КонтекстОтчета.Вставить("Графа", "03"); + ЗаполнитьМПФормаОтчета2012Кв4_БалансПоГрафе(КонтекстВыполнения, Контейнер); + + //КонтекстОтчета.Вставить("Графа", "04"); // TODO ошибка или не искать подобные очень сложные кейсы?? +КонецПроцедуры + +Процедура РазныйРегистрКлюча(Результат) + // в большой КА 2.5 всего одна такая ошибка - пусть выдается замечание, иначе реализация усложнится, а профит малый + ВидОшибки.ОбработчикиНажатия.Вставить("Обратитесь", ОбработчикОткрытияФормыОбращенияВТехподдержку); + //ВидОшибки.ОбработчикиНажатия.Вставить("обратитесь", ОбработчикОткрытияФормыОбращенияВТехподдержку); // TODO ошибка или пропускать подобные строки с регистром?? +КонецПроцедуры + +Процедура ОчисткаКоллекции(Результат) + МассивСумм = Новый Массив; + МассивСумм.Добавить("Амортизация"); + + МассивСумм.Очистить(); // в большой КА 2.5 таких срабатываний всего два ) + //МассивСумм.Добавить("Амортизация"); // TODO ошибка или пропускать подобное?? +КонецПроцедуры + +Процедура СписокЗначений(Результат) + Сведения = Новый СписокЗначений; + Сведения.Добавить("", "ИННЮЛ"); + Сведения.Добавить("", "КППЮЛ"); // не ошибка КонецПроцедуры From 344cd8c3b0526ab43abb086403e27378d587254d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 26 May 2022 23:30:54 +0300 Subject: [PATCH 017/595] =?UTF-8?q?=D0=BA=D0=B5=D0=B9=D1=81=20=D1=81=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B9,=20=D0=B2?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D1=85=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 54 +++++++++++++------ ...InsertionIntoCollectionDiagnosticTest.java | 8 --- ...catedInsertionIntoCollectionDiagnostic.bsl | 6 +-- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 4920fbb14c9..dd78fd5a05c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -39,7 +39,6 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -74,6 +73,7 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor private List blockAssignments; private List blockBreakers; private List blockCallParams; + private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(); @Value private static class GroupingData { @@ -81,7 +81,7 @@ private static class GroupingData { String collectionName; String methodName; String firstParamName; - BSLParser.CallParamListContext callParamListContext; + List callParams; // TODO не используется, удалить? } @Override @@ -112,8 +112,7 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars if (methodCallContext == null) { return null; } - final var callParamListContext = methodCallContext.doCall().callParamList(); - final var callParams = callParamListContext.callParam(); + final var callParams = methodCallContext.doCall().callParamList().callParam(); if (callParams.isEmpty()) { return null; } @@ -130,12 +129,9 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars return null; } - final var fullIdentifier = callStatement.modifier().stream() - .map(BSLParserRuleContext::getText) - .reduce(callStatement.IDENTIFIER().getText(), (x, y) -> x.concat(".").concat(y)) - .replace("..", "."); + final var fullIdentifier = getFullIdentifier(callStatement.IDENTIFIER().getText(), callStatement.modifier()); - return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParamListContext); + return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParams); } private static boolean isAppropriateMethodCall(String methodName) { @@ -173,7 +169,7 @@ private void exploreStatements(BSLParser.CodeBlockContext codeBlock, List listOfDuplicatedData.size() > 1) .map(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)) .filter(list -> list.size() > 1) - .forEach(list -> fireIssue(list)); + .forEach(this::fireIssue); } private List excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { @@ -184,11 +180,12 @@ private List excludeValidChanges(List listOfDuplicat break; } } + firstParamComplexIdentifiersStorage.clear(); return result; } private boolean excludeValidElements(List listOfDuplicatedData, int currIndex, - BSLParser.CodeBlockContext codeBlock, ArrayList listForIssue) { + BSLParser.CodeBlockContext codeBlock, List listForIssue) { if (listOfDuplicatedData.size() - currIndex <= 1) { return false; } @@ -209,7 +206,8 @@ private boolean excludeValidElements(List listOfDuplicatedData, in private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); - if (hasAssignBetweenCalls(groupingData, range, codeBlock) || hasBreakersBetweenCalls(range, codeBlock)) { + if (hasAssignBetweenCalls(groupingData, range, codeBlock) + || hasBreakersBetweenCalls(range, codeBlock)) { return true; } return usedAsFunctionParamsBetweenCalls(range, codeBlock, groupingData); @@ -221,15 +219,23 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BS .anyMatch(assignmentContext -> hasValidAssign(assignmentContext, groupingData)); } - private static boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { + private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { final var text = assignmentContext.lValue().getText(); if (text.equalsIgnoreCase(groupingData.collectionName) || text.equalsIgnoreCase(groupingData.firstParamName)) { return true; } final var textWithDot = text.concat("."); - return startWithIgnoreCase(groupingData.collectionName, textWithDot) - || startWithIgnoreCase(groupingData.firstParamName, textWithDot); + if (startWithIgnoreCase(groupingData.collectionName, textWithDot) + || startWithIgnoreCase(groupingData.firstParamName, textWithDot)){ + return true; + } + final List complexIdentifierContexts = getFirstParamComplexIdentifierContexts(groupingData); + return complexIdentifierContexts.stream() + .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) + .map(complexIdentifierContext -> + getFullIdentifier(complexIdentifierContext.IDENTIFIER().getText(), complexIdentifierContext.modifier())) + .anyMatch(identifier -> text.equalsIgnoreCase(identifier) || startWithIgnoreCase(identifier, textWithDot)); } private boolean hasBreakersBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock) { @@ -318,6 +324,24 @@ private List getCallParams(BSLParser.CodeBlockContex return blockCallParams; } + private List getFirstParamComplexIdentifierContexts(GroupingData groupingData) { + if (firstParamComplexIdentifiersStorage.isEmpty()){ + final var complexIdentifierContexts = + Trees.findAllRuleNodes(groupingData.callParams.get(0), BSLParser.RULE_complexIdentifier).stream() + .map(BSLParser.ComplexIdentifierContext.class::cast) + .collect(Collectors.toUnmodifiableList()); + firstParamComplexIdentifiersStorage.add(complexIdentifierContexts); + } + return firstParamComplexIdentifiersStorage.get(0); + } + + private static String getFullIdentifier(String firstIdentifier, List modifiers) { + return modifiers.stream() + .map(BSLParserRuleContext::getText) + .reduce(firstIdentifier, (x, y) -> x.concat(".").concat(y)) + .replace("..", "."); + } + private static boolean startWithIgnoreCase(String identifier, String textWithDot) { return identifier.length() >= textWithDot.length() && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 53095d7b844..b99e6c6bcd5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -156,13 +156,8 @@ private String getMessage(String keyName, String collectionName) { void newCollectionAssignBetweenDuplications() { var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + " ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n" + -// " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + " ПовторнаяСоздаваемаяКоллекция.Добавить(1); // не ошибка\n"; -// "//TODO ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n" + -// "//TODO ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; - - // TODO проверить Массив.sdf().asf = Новый Массив; - вызов метода посередине var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); @@ -185,11 +180,8 @@ void newCollectionAssignWithDotsBetweenDuplications() { @Test void newElemAssignBetweenDuplications() { var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + -// " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\");\n" + " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + -// " ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n"; -// "//TODO ПовторнаяСоздаваемаяКоллекция.Добавить(\"Пользователь\"); // не ошибка\n" + " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; var context = TestUtils.getDocumentContext(code); diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 497e9eafaaa..3de38e9d776 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -215,20 +215,20 @@ НомСуффикса = НомСуффикса + 1; - //Лист.Данные.Вставить("П000001000102_" + Формат(НомСуффикса, "ЧГ="), "5000"); // TODO ошибка или не искать подобные сложные кейсы?? + Лист.Данные.Вставить("П000001000102_" + Формат(НомСуффикса, "ЧГ="), "5000"); // не ошибка Протокол = "HTTP"; Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол)); Протокол = "HTTPS"; - //Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол)); // TODO ошибка или не искать подобные сложные кейсы?? - в КА 2.5 их совсем мало + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол)); // не ошибка // Добавим имена событий механизмов расчета партий и себестоимости ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Истина); ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Ложь); - //ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // TODO ошибка или не искать подобные сложные кейсы?? - в КА 2.5 их совсем мало + ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // не ошибка КонецПроцедуры Процедура ИзменениеЗначенияИспользуемогоВКлюче2(Результат) From 5f45a8f1c4adc3108ccb40764cf967751b84b61c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 27 May 2022 00:29:45 +0300 Subject: [PATCH 018/595] =?UTF-8?q?=D0=BA=D0=B5=D0=B9=D1=81=D1=8B=20=D1=81?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 50 +++++++++++-------- ...InsertionIntoCollectionDiagnosticTest.java | 12 +++++ ...catedInsertionIntoCollectionDiagnostic.bsl | 31 ++---------- 3 files changed, 46 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index dd78fd5a05c..a711cac5573 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -73,7 +73,7 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor private List blockAssignments; private List blockBreakers; private List blockCallParams; - private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(); + private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(); @Value private static class GroupingData { @@ -81,8 +81,10 @@ private static class GroupingData { String collectionName; String methodName; String firstParamName; - List callParams; // TODO не используется, удалить? - } + String firstParamNameWithDot; + BSLParser.CallParamContext firstParamContext; + +} @Override public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { @@ -131,7 +133,8 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars final var fullIdentifier = getFullIdentifier(callStatement.IDENTIFIER().getText(), callStatement.modifier()); - return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, callParams); + return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, firstParam.concat("."), + firstParamContext); } private static boolean isAppropriateMethodCall(String methodName) { @@ -189,17 +192,18 @@ private boolean excludeValidElements(List listOfDuplicatedData, in if (listOfDuplicatedData.size() - currIndex <= 1) { return false; } - final var elem = listOfDuplicatedData.get(currIndex); + final var first = listOfDuplicatedData.get(currIndex); var alreadyAdd = false; for (int i = currIndex + 1; i < listOfDuplicatedData.size(); i++) { - if (hasValidChange(elem, listOfDuplicatedData.get(i), codeBlock)) { + final var next = listOfDuplicatedData.get(i); + if (hasValidChange(first, next, codeBlock)) { break;// последующие элементы нет смысла проверять, их нужно исключать } if (!alreadyAdd) { alreadyAdd = true; - listForIssue.add(elem); + listForIssue.add(first); } - listForIssue.add(listOfDuplicatedData.get(i)); + listForIssue.add(next); } return true; } @@ -220,22 +224,23 @@ private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BS } private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { - final var text = assignmentContext.lValue().getText(); - if (text.equalsIgnoreCase(groupingData.collectionName) - || text.equalsIgnoreCase(groupingData.firstParamName)) { + final var assignText = assignmentContext.lValue().getText(); + if (assignText.equalsIgnoreCase(groupingData.collectionName) + || assignText.equalsIgnoreCase(groupingData.firstParamName)) { return true; } - final var textWithDot = text.concat("."); - if (startWithIgnoreCase(groupingData.collectionName, textWithDot) - || startWithIgnoreCase(groupingData.firstParamName, textWithDot)){ + final var assignTextWithDot = assignText.concat("."); + if (startWithIgnoreCase(groupingData.collectionName, assignTextWithDot) + || startWithIgnoreCase(groupingData.firstParamName, assignTextWithDot) + || startWithIgnoreCase(assignTextWithDot, groupingData.firstParamNameWithDot) + ){ return true; } - final List complexIdentifierContexts = getFirstParamComplexIdentifierContexts(groupingData); + final List complexIdentifierContexts = getFirstParamComplexIdentifiers(groupingData.firstParamContext); return complexIdentifierContexts.stream() - .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) - .map(complexIdentifierContext -> - getFullIdentifier(complexIdentifierContext.IDENTIFIER().getText(), complexIdentifierContext.modifier())) - .anyMatch(identifier -> text.equalsIgnoreCase(identifier) || startWithIgnoreCase(identifier, textWithDot)); + .anyMatch(identifier -> assignText.equalsIgnoreCase(identifier) + || startWithIgnoreCase(identifier, assignTextWithDot) + || startWithIgnoreCase(assignTextWithDot, identifier.concat("."))); } private boolean hasBreakersBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock) { @@ -324,11 +329,14 @@ private List getCallParams(BSLParser.CodeBlockContex return blockCallParams; } - private List getFirstParamComplexIdentifierContexts(GroupingData groupingData) { + private List getFirstParamComplexIdentifiers(BSLParser.CallParamContext param) { if (firstParamComplexIdentifiersStorage.isEmpty()){ final var complexIdentifierContexts = - Trees.findAllRuleNodes(groupingData.callParams.get(0), BSLParser.RULE_complexIdentifier).stream() + Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() .map(BSLParser.ComplexIdentifierContext.class::cast) + .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) + .map(complexIdentifierContext -> + getFullIdentifier(complexIdentifierContext.IDENTIFIER().getText(), complexIdentifierContext.modifier())) .collect(Collectors.toUnmodifiableList()); firstParamComplexIdentifiersStorage.add(complexIdentifierContexts); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index b99e6c6bcd5..5e351e9a43a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -200,6 +200,18 @@ void useAsFunctionParamsBetweenDuplications() { assertThat(diagnostics).hasSize(0); } + @Test + void changeInnerValueBetweenDuplications() { + var code = "\tОписание.ИмяРеквизита = \"ТабельныйНомер\";\n" + + "\tОписания.Добавить(Описание);\n" + + "\tОписание.ИмяРеквизита = \"ДатаПриема\";\n" + + "\tОписания.Добавить(Описание); // TODO не ошибка\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); + } + // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest // TODO перенести в DiagnosticAssert private void checkContent( diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 3de38e9d776..61e5f0fb02b 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -144,7 +144,6 @@ ПовторнаяСоздаваемаяКоллекция = Новый Массив; ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // не ошибка - //TODO ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); // ошибка - нужно ли повторять?? КонецПроцедуры Процедура ДублированиеПустыхЗначений(Сведения, Метаданные) @@ -177,7 +176,11 @@ Описание.ИмяРеквизита = "ТабельныйНомер"; Описания.Добавить(Описание); Описание.ИмяРеквизита = "ДатаПриема"; - //Описания.Добавить(Описание); // TODO не ошибка + Описания.Добавить(Описание); // не ошибка + + Описания2.Добавить(Метод(Описание) + Коллекция.Значение); + Коллекция.Значение.ИмяРеквизита = "ДатаПриема"; + Описания2.Добавить(Метод(Описание) + Коллекция.Значение); // не ошибка КонецПроцедуры Процедура ПереиспользованиеВставленногоЭлемента(Результат) @@ -231,30 +234,6 @@ ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // не ошибка КонецПроцедуры -Процедура ИзменениеЗначенияИспользуемогоВКлюче2(Результат) - КонтекстОтчета = Новый Структура; - КонтекстВыполнения.Вставить("КонтекстОтчета", КонтекстОтчета); - - КонтекстОтчета.Вставить("Графа", "03"); - ЗаполнитьМПФормаОтчета2012Кв4_БалансПоГрафе(КонтекстВыполнения, Контейнер); - - //КонтекстОтчета.Вставить("Графа", "04"); // TODO ошибка или не искать подобные очень сложные кейсы?? -КонецПроцедуры - -Процедура РазныйРегистрКлюча(Результат) - // в большой КА 2.5 всего одна такая ошибка - пусть выдается замечание, иначе реализация усложнится, а профит малый - ВидОшибки.ОбработчикиНажатия.Вставить("Обратитесь", ОбработчикОткрытияФормыОбращенияВТехподдержку); - //ВидОшибки.ОбработчикиНажатия.Вставить("обратитесь", ОбработчикОткрытияФормыОбращенияВТехподдержку); // TODO ошибка или пропускать подобные строки с регистром?? -КонецПроцедуры - -Процедура ОчисткаКоллекции(Результат) - МассивСумм = Новый Массив; - МассивСумм.Добавить("Амортизация"); - - МассивСумм.Очистить(); // в большой КА 2.5 таких срабатываний всего два ) - //МассивСумм.Добавить("Амортизация"); // TODO ошибка или пропускать подобное?? -КонецПроцедуры - Процедура СписокЗначений(Результат) Сведения = Новый СписокЗначений; Сведения.Добавить("", "ИННЮЛ"); From e10a62f7ca0125be80914aea0d930ec45af209d2 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 00:12:18 +0300 Subject: [PATCH 019/595] =?UTF-8?q?=D0=BA=D0=B5=D0=B9=D1=81=D1=8B=20=D1=81?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=20=D0=B8=D0=BB=D0=B8=20=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=87=D0=B0=D1=81=D1=82=D0=B8=20=D0=B2=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ускорил\улучшил проверку передачи частей ключа --- ...atedInsertionIntoCollectionDiagnostic.java | 179 +++++++++--------- ...InsertionIntoCollectionDiagnosticTest.java | 15 +- ...catedInsertionIntoCollectionDiagnostic.bsl | 17 +- 3 files changed, 115 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index a711cac5573..85589344714 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -29,6 +29,8 @@ import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParser.AssignmentContext; +import com.github._1c_syntax.bsl.parser.BSLParser.CallParamContext; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.Value; @@ -44,6 +46,7 @@ import java.util.Optional; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -69,26 +72,40 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor public static final int LENGTH_OF_EMPTY_STRING_WITH_QUOTES = 2; + // ленивое вычисление всех полей, только в нужный момент + private BSLParser.CodeBlockContext codeBlock; private Range blockRange; - private List blockAssignments; + private List blockAssignments; private List blockBreakers; - private List blockCallParams; - private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(); + private List blockCallParams; + private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(1); @Value private static class GroupingData { BSLParser.CallStatementContext callStatement; String collectionName; + String collectionNameWithDot; String methodName; String firstParamName; String firstParamNameWithDot; - BSLParser.CallParamContext firstParamContext; - -} + CallParamContext firstParamContext; + } @Override public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { - final var statements = codeBlock.statement().stream() + this.codeBlock = codeBlock; + final List possibleDuplicateStatements = getPossibleDuplicates(); + + if (!possibleDuplicateStatements.isEmpty()) { + final var duplicatesStream = explorePossibleDuplicateStatements(possibleDuplicateStatements); + duplicatesStream.forEach(this::fireIssue); + } + clearCodeBlockFields(); + return super.visitCodeBlock(codeBlock); + } + + private List getPossibleDuplicates() { + return codeBlock.statement().stream() .map(BSLParser.StatementContext::callStatement) .filter(Objects::nonNull) .filter(callStatement -> callStatement.IDENTIFIER() != null) @@ -96,16 +113,6 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { .map(callStatement -> groupingCalls(callStatement, callStatement.accessCall())) .filter(Objects::nonNull) .collect(Collectors.toList()); - - if (!statements.isEmpty()) { - exploreStatements(codeBlock, statements); - - blockRange = null; - blockAssignments = null; - blockBreakers = null; - blockCallParams = null; - } - return super.visitCodeBlock(codeBlock); } private @Nullable @@ -118,7 +125,7 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars if (callParams.isEmpty()) { return null; } - final BSLParser.CallParamContext firstParamContext = callParams.get(0); + final CallParamContext firstParamContext = callParams.get(0); if (firstParamContext.getChildCount() == 0) { return null; } @@ -133,8 +140,8 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars final var fullIdentifier = getFullIdentifier(callStatement.IDENTIFIER().getText(), callStatement.modifier()); - return new GroupingData(callStatement, fullIdentifier, methodName, firstParam, firstParam.concat("."), - firstParamContext); + return new GroupingData(callStatement, fullIdentifier, fullIdentifier.concat("."), methodName, + firstParam, firstParam.concat("."), firstParamContext); } private static boolean isAppropriateMethodCall(String methodName) { @@ -152,7 +159,7 @@ private static boolean isIgnoredBSLValues(String text) { return IGNORED_BSL_VALUES_PATTERN.matcher(text).matches(); } - private void exploreStatements(BSLParser.CodeBlockContext codeBlock, List statements) { + private Stream> explorePossibleDuplicateStatements(List statements) { final var mapOfMapsByIdentifier = statements.stream() .collect(Collectors.groupingBy( GroupingData::getCollectionName, @@ -166,20 +173,19 @@ private void exploreStatements(BSLParser.CodeBlockContext codeBlock, List groupingData, Collectors.toList())) ) )); - mapOfMapsByIdentifier.values().stream() + return mapOfMapsByIdentifier.values().stream() .flatMap(mapByMethod -> mapByMethod.values().stream()) .flatMap(mapByFirstParam -> mapByFirstParam.values().stream()) - .filter(listOfDuplicatedData -> listOfDuplicatedData.size() > 1) - .map(listOfDuplicatedData -> excludeValidChanges(listOfDuplicatedData, codeBlock)) - .filter(list -> list.size() > 1) - .forEach(this::fireIssue); + .filter(duplicates -> duplicates.size() > 1) + .map(this::excludeValidChanges) + .filter(duplicates -> duplicates.size() > 1); } - private List excludeValidChanges(List listOfDuplicatedData, BSLParser.CodeBlockContext codeBlock) { + private List excludeValidChanges(List duplicates) { var result = new ArrayList(); - for (var i = 0; i < listOfDuplicatedData.size(); i++) { - if (!excludeValidElements(listOfDuplicatedData, i, codeBlock, result)) { + for (var i = 0; i < duplicates.size(); i++) { + if (!excludeValidElements(duplicates, i, result)) { break; } } @@ -187,16 +193,16 @@ private List excludeValidChanges(List listOfDuplicat return result; } - private boolean excludeValidElements(List listOfDuplicatedData, int currIndex, - BSLParser.CodeBlockContext codeBlock, List listForIssue) { - if (listOfDuplicatedData.size() - currIndex <= 1) { + private boolean excludeValidElements(List duplicates, int currIndex, + List listForIssue) { + if (duplicates.size() - currIndex <= 1) { return false; } - final var first = listOfDuplicatedData.get(currIndex); + final var first = duplicates.get(currIndex); var alreadyAdd = false; - for (int i = currIndex + 1; i < listOfDuplicatedData.size(); i++) { - final var next = listOfDuplicatedData.get(i); - if (hasValidChange(first, next, codeBlock)) { + for (int i = currIndex + 1; i < duplicates.size(); i++) { + final var next = duplicates.get(i); + if (hasValidChange(first, next)) { break;// последующие элементы нет смысла проверять, их нужно исключать } if (!alreadyAdd) { @@ -208,48 +214,39 @@ private boolean excludeValidElements(List listOfDuplicatedData, in return true; } - private boolean hasValidChange(GroupingData groupingData, GroupingData groupingData1, BSLParser.CodeBlockContext codeBlock) { - final var range = Ranges.create(groupingData.callStatement, groupingData1.callStatement); - if (hasAssignBetweenCalls(groupingData, range, codeBlock) - || hasBreakersBetweenCalls(range, codeBlock)) { - return true; - } - return usedAsFunctionParamsBetweenCalls(range, codeBlock, groupingData); + private boolean hasValidChange(GroupingData first, GroupingData next) { + final var border = Ranges.create(first.callStatement.getStop(), next.callStatement.getStart()); + return hasAssignBetweenCalls(first, border) + || hasBreakersBetweenCalls(border) + || usedAsFunctionParamsBetweenCalls(border, first); } - private boolean hasAssignBetweenCalls(GroupingData groupingData, Range range, BSLParser.CodeBlockContext codeBlock) { - return getAssignments(codeBlock).stream() - .filter(assignmentContext -> Ranges.containsRange(range, Ranges.create(assignmentContext))) - .anyMatch(assignmentContext -> hasValidAssign(assignmentContext, groupingData)); + private boolean hasAssignBetweenCalls(GroupingData groupingData, Range border) { + return getAssignments().stream() + .filter(assignmentContext -> Ranges.containsRange(border, Ranges.create(assignmentContext))) + .map(assignmentContext -> assignmentContext.lValue().getText()) + .anyMatch(assignText -> usedIdentifiers(assignText, groupingData)); } - private boolean hasValidAssign(BSLParser.AssignmentContext assignmentContext, GroupingData groupingData) { - final var assignText = assignmentContext.lValue().getText(); - if (assignText.equalsIgnoreCase(groupingData.collectionName) - || assignText.equalsIgnoreCase(groupingData.firstParamName)) { - return true; - } - final var assignTextWithDot = assignText.concat("."); - if (startWithIgnoreCase(groupingData.collectionName, assignTextWithDot) - || startWithIgnoreCase(groupingData.firstParamName, assignTextWithDot) - || startWithIgnoreCase(assignTextWithDot, groupingData.firstParamNameWithDot) - ){ + private boolean usedIdentifiers(String expression, GroupingData groupingData) { + final var expressionWithDot = expression.concat("."); + if (startWithIgnoreCase(groupingData.collectionNameWithDot, expressionWithDot)) { return true; } - final List complexIdentifierContexts = getFirstParamComplexIdentifiers(groupingData.firstParamContext); - return complexIdentifierContexts.stream() - .anyMatch(identifier -> assignText.equalsIgnoreCase(identifier) - || startWithIgnoreCase(identifier, assignTextWithDot) - || startWithIgnoreCase(assignTextWithDot, identifier.concat("."))); + return getAllInnerFirstParamIdentifiersWithDot(groupingData.firstParamContext).stream() + .anyMatch(identifierWithDot -> + startWithIgnoreCase(identifierWithDot, expressionWithDot) + || startWithIgnoreCase(expressionWithDot, identifierWithDot) + ); } - private boolean hasBreakersBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock) { - return getBreakers(codeBlock).stream() - .filter(bslParserRuleContext -> Ranges.containsRange(range, Ranges.create(bslParserRuleContext))) - .anyMatch(breakerContext -> hasBreakerFromCodeBlock(breakerContext, codeBlock)); + private boolean hasBreakersBetweenCalls(Range border) { + return getBreakers().stream() + .filter(bslParserRuleContext -> Ranges.containsRange(border, Ranges.create(bslParserRuleContext))) + .anyMatch(this::hasBreakerFromCodeBlock); } - private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext, BSLParser.CodeBlockContext codeBlock) { + private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext) { if (breakerContext.getRuleIndex() == BSLParser.RULE_returnStatement) { return true; } @@ -257,31 +254,28 @@ private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext, BSL if (rootParent == null || rootParent.getRuleIndex() == BSLParser.RULE_subCodeBlock) { return true; } - return !Ranges.containsRange(getBlockRange(codeBlock), Ranges.create(rootParent)); + return !Ranges.containsRange(getBlockRange(), Ranges.create(rootParent)); } - private boolean usedAsFunctionParamsBetweenCalls(Range range, BSLParser.CodeBlockContext codeBlock, GroupingData groupingData) { - return getCallParams(codeBlock).stream() - .filter(callParamContext -> Ranges.containsRange(range, Ranges.create(callParamContext))) + private boolean usedAsFunctionParamsBetweenCalls(Range border, GroupingData groupingData) { + return getCallParams().stream() + .filter(callParamContext -> Ranges.containsRange(border, Ranges.create(callParamContext))) .anyMatch(callParamContext -> usedAsFunctionParams(callParamContext, groupingData)); } - private static boolean usedAsFunctionParams(BSLParser.CallParamContext callParamContext, GroupingData groupingData) { + private boolean usedAsFunctionParams(CallParamContext callParamContext, GroupingData groupingData) { return Optional.of(callParamContext) - .map(BSLParser.CallParamContext::expression) + .map(CallParamContext::expression) .filter(expression -> !expression.member().isEmpty()) .map(BSLParser.ExpressionContext::member) .filter(memberContexts -> memberContexts.stream() .map(BSLParser.MemberContext::complexIdentifier) .filter(Objects::nonNull) - .anyMatch(complexIdentifierContext -> similarIdentifier(complexIdentifierContext, groupingData.collectionName))) + .map(BSLParserRuleContext::getText) + .anyMatch(identifier -> usedIdentifiers(identifier, groupingData))) .isPresent(); } - private static boolean similarIdentifier(BSLParser.ComplexIdentifierContext complexIdentifierContext, String collectionName) { - return startWithIgnoreCase(collectionName, complexIdentifierContext.getText()); - } - private void fireIssue(List listOfDuplicatedData) { final var dataForIssue = listOfDuplicatedData.get(1); final var relatedInformationList = listOfDuplicatedData.stream() @@ -295,23 +289,23 @@ private void fireIssue(List listOfDuplicatedData) { diagnosticStorage.addDiagnostic(dataForIssue.callStatement, message, relatedInformationList); } - private Range getBlockRange(BSLParser.CodeBlockContext codeBlock) { + private Range getBlockRange() { if (blockRange == null) { blockRange = Ranges.create(codeBlock); } return blockRange; } - private List getAssignments(BSLParser.CodeBlockContext codeBlock) { + private List getAssignments() { if (blockAssignments == null) { blockAssignments = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() - .map(BSLParser.AssignmentContext.class::cast) + .map(AssignmentContext.class::cast) .collect(Collectors.toUnmodifiableList()); } return blockAssignments; } - private List getBreakers(BSLParser.CodeBlockContext codeBlock) { + private List getBreakers() { if (blockBreakers == null) { blockBreakers = Trees.findAllRuleNodes(codeBlock, BREAKERS_INDEXES).stream() .map(BSLParserRuleContext.class::cast) @@ -320,29 +314,38 @@ private List getBreakers(BSLParser.CodeBlockContext codeBl return blockBreakers; } - private List getCallParams(BSLParser.CodeBlockContext codeBlock) { + private List getCallParams() { if (blockCallParams == null) { blockCallParams = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_callParam).stream() - .map(BSLParser.CallParamContext.class::cast) + .map(CallParamContext.class::cast) .collect(Collectors.toUnmodifiableList()); } return blockCallParams; } - private List getFirstParamComplexIdentifiers(BSLParser.CallParamContext param) { - if (firstParamComplexIdentifiersStorage.isEmpty()){ + private List getAllInnerFirstParamIdentifiersWithDot(CallParamContext param) { + if (firstParamComplexIdentifiersStorage.isEmpty()) { final var complexIdentifierContexts = Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() .map(BSLParser.ComplexIdentifierContext.class::cast) .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) .map(complexIdentifierContext -> getFullIdentifier(complexIdentifierContext.IDENTIFIER().getText(), complexIdentifierContext.modifier())) - .collect(Collectors.toUnmodifiableList()); + .map(text -> text.concat(".")) + .collect(Collectors.toList()); firstParamComplexIdentifiersStorage.add(complexIdentifierContexts); } return firstParamComplexIdentifiersStorage.get(0); } + private void clearCodeBlockFields() { + codeBlock = null; + blockRange = null; + blockAssignments = null; + blockBreakers = null; + blockCallParams = null; + } + private static String getFullIdentifier(String firstIdentifier, List modifiers) { return modifiers.stream() .map(BSLParserRuleContext::getText) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 5e351e9a43a..8258578272e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -205,7 +205,20 @@ void changeInnerValueBetweenDuplications() { var code = "\tОписание.ИмяРеквизита = \"ТабельныйНомер\";\n" + "\tОписания.Добавить(Описание);\n" + "\tОписание.ИмяРеквизита = \"ДатаПриема\";\n" + - "\tОписания.Добавить(Описание); // TODO не ошибка\n"; + "\tОписания.Добавить(Описание); // не ошибка\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(0); + } + + @Test + void useAsGlobalMethodParamsBetweenDuplications() { + var code = + "\tСоздатьВТСотрудникиДляВедомостиПоОснованиям(ИмяВТСотрудники);\n" + + "\tИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники);\n" + + "\tСоздатьВТСотрудникиДляВедомостиПоМестуРаботы(ИмяВТСотрудники);\n" + + "\tИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); // не ошибка\n"; var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 61e5f0fb02b..a9c8ac2acdd 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -138,6 +138,15 @@ КонецФункции +Процедура СписокЗначений(Результат) + Сведения = Новый СписокЗначений; + Сведения.Добавить("", "ИННЮЛ"); + Сведения.Добавить("", "КППЮЛ"); // не ошибка + + Сведения2.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); + //Сведения2.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); // TODO не ошибка, если включен параметр для исключения метода Добавить +КонецПроцедуры + Процедура ПрисваиваниеРодителюИОбращениеКПотомку(Данные) ПовторнаяСоздаваемаяКоллекция = Новый Массив; ПовторнаяСоздаваемаяКоллекция.Данные.Добавить("Пользователь"); @@ -210,7 +219,7 @@ // Отбор сотрудников по организации и подразделению. СоздатьВТСотрудникиДляВедомостиПоМестуРаботы(МенеджерВременныхТаблиц, ОписаниеОперации, ОтборСотрудников, ИмяВТСотрудники); - //ИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); // TODO не ошибка + ИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); // не ошибка КонецПроцедуры Процедура ИзменениеЗначенияИспользуемогоВКлюче(Результат) @@ -233,9 +242,3 @@ ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Ложь); ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // не ошибка КонецПроцедуры - -Процедура СписокЗначений(Результат) - Сведения = Новый СписокЗначений; - Сведения.Добавить("", "ИННЮЛ"); - Сведения.Добавить("", "КППЮЛ"); // не ошибка -КонецПроцедуры From e3ce2ef62e1c9802ac8f7161a44800bc8f361e61 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 00:52:14 +0300 Subject: [PATCH 020/595] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 85589344714..d1ca1fc90f1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -233,7 +233,7 @@ private boolean usedIdentifiers(String expression, GroupingData groupingData) { if (startWithIgnoreCase(groupingData.collectionNameWithDot, expressionWithDot)) { return true; } - return getAllInnerFirstParamIdentifiersWithDot(groupingData.firstParamContext).stream() + return getAllInnerIdentifiersWithDot(groupingData.firstParamContext).stream() .anyMatch(identifierWithDot -> startWithIgnoreCase(identifierWithDot, expressionWithDot) || startWithIgnoreCase(expressionWithDot, identifierWithDot) @@ -266,19 +266,22 @@ private boolean usedAsFunctionParamsBetweenCalls(Range border, GroupingData grou private boolean usedAsFunctionParams(CallParamContext callParamContext, GroupingData groupingData) { return Optional.of(callParamContext) .map(CallParamContext::expression) - .filter(expression -> !expression.member().isEmpty()) .map(BSLParser.ExpressionContext::member) - .filter(memberContexts -> memberContexts.stream() - .map(BSLParser.MemberContext::complexIdentifier) - .filter(Objects::nonNull) - .map(BSLParserRuleContext::getText) - .anyMatch(identifier -> usedIdentifiers(identifier, groupingData))) + .filter(memberContexts -> usedIdentifiers(memberContexts, groupingData)) .isPresent(); } - private void fireIssue(List listOfDuplicatedData) { - final var dataForIssue = listOfDuplicatedData.get(1); - final var relatedInformationList = listOfDuplicatedData.stream() + private boolean usedIdentifiers(List memberContexts, GroupingData groupingData) { + return memberContexts.stream() + .map(BSLParser.MemberContext::complexIdentifier) + .filter(Objects::nonNull) + .map(BSLParserRuleContext::getText) + .anyMatch(identifier -> usedIdentifiers(identifier, groupingData)); + } + + private void fireIssue(List duplicates) { + final var dataForIssue = duplicates.get(1); + final var relatedInformationList = duplicates.stream() .map(GroupingData::getCallStatement) .map(context -> RelatedInformation.create( documentContext.getUri(), @@ -323,7 +326,7 @@ private List getCallParams() { return blockCallParams; } - private List getAllInnerFirstParamIdentifiersWithDot(CallParamContext param) { + private List getAllInnerIdentifiersWithDot(CallParamContext param) { if (firstParamComplexIdentifiersStorage.isEmpty()) { final var complexIdentifierContexts = Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() From ca756ed0076862f6b24ec45e71a584846b36ea5e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 12:57:17 +0300 Subject: [PATCH 021/595] =?UTF-8?q?=D1=83=D1=87=D0=B5=D1=82=20=D1=87=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=B9=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit также исключаются дубли имен из методов --- ...atedInsertionIntoCollectionDiagnostic.java | 47 +++++++----- ...InsertionIntoCollectionDiagnosticTest.java | 72 ++++++++++++++++++- ...catedInsertionIntoCollectionDiagnostic.bsl | 42 ++++++----- 3 files changed, 125 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index d1ca1fc90f1..ca3f28a423f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -78,7 +78,7 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor private List blockAssignments; private List blockBreakers; private List blockCallParams; - private final List> firstParamComplexIdentifiersStorage = new ArrayList<>(1); + private List firstParamInnerIdentifiers; @Value private static class GroupingData { @@ -189,7 +189,7 @@ private List excludeValidChanges(List duplicates) { break; } } - firstParamComplexIdentifiersStorage.clear(); + firstParamInnerIdentifiers = null; return result; } @@ -240,6 +240,11 @@ private boolean usedIdentifiers(String expression, GroupingData groupingData) { ); } + private static boolean startWithIgnoreCase(String identifier, String textWithDot) { + return identifier.length() >= textWithDot.length() + && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); + } + private boolean hasBreakersBetweenCalls(Range border) { return getBreakers().stream() .filter(bslParserRuleContext -> Ranges.containsRange(border, Ranges.create(bslParserRuleContext))) @@ -275,6 +280,7 @@ private boolean usedIdentifiers(List memberCo return memberContexts.stream() .map(BSLParser.MemberContext::complexIdentifier) .filter(Objects::nonNull) + .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) .map(BSLParserRuleContext::getText) .anyMatch(identifier -> usedIdentifiers(identifier, groupingData)); } @@ -327,18 +333,28 @@ private List getCallParams() { } private List getAllInnerIdentifiersWithDot(CallParamContext param) { - if (firstParamComplexIdentifiersStorage.isEmpty()) { - final var complexIdentifierContexts = - Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() - .map(BSLParser.ComplexIdentifierContext.class::cast) - .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) - .map(complexIdentifierContext -> - getFullIdentifier(complexIdentifierContext.IDENTIFIER().getText(), complexIdentifierContext.modifier())) - .map(text -> text.concat(".")) - .collect(Collectors.toList()); - firstParamComplexIdentifiersStorage.add(complexIdentifierContexts); + if (firstParamInnerIdentifiers == null) { + final var identifiers = Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() + .map(BSLParser.ComplexIdentifierContext.class::cast) + .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) + .collect(Collectors.toList()); + final var reducedIdentifiers = new ArrayList(); + for (BSLParser.ComplexIdentifierContext identifier : identifiers) { + final List modifiers = identifier.modifier(); + final var firstIdentifier = identifier.IDENTIFIER().getText(); + var fullIdentifier = getFullIdentifier(firstIdentifier, modifiers); + reducedIdentifiers.add(fullIdentifier); + + var reducedIdentifier = firstIdentifier; + for (BSLParser.ModifierContext modifier : modifiers) { + var modfifier = modifier.getText(); + reducedIdentifier = reducedIdentifier.concat(".").concat(modfifier); + reducedIdentifiers.add(reducedIdentifier); + } + } + firstParamInnerIdentifiers = reducedIdentifiers; } - return firstParamComplexIdentifiersStorage.get(0); + return firstParamInnerIdentifiers; } private void clearCodeBlockFields() { @@ -355,9 +371,4 @@ private static String getFullIdentifier(String firstIdentifier, List x.concat(".").concat(y)) .replace("..", "."); } - - private static boolean startWithIgnoreCase(String identifier, String textWithDot) { - return identifier.length() >= textWithDot.length() - && identifier.substring(0, textWithDot.length()).equalsIgnoreCase(textWithDot); - } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 8258578272e..f2fbe3de302 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -144,8 +144,46 @@ void test() { Ranges.create(136, 4, 136, 58)) ); - assertThat(diagnostics).hasSize(11); + checkContent( + diagnostics.get(12), + Ranges.create(147, 8, 147, 90), + getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), + Arrays.asList( + Ranges.create(145, 8, 145, 90), + Ranges.create(147, 8, 147, 90)) + ); + + checkContent( + diagnostics.get(11), + Ranges.create(151, 8, 151, 90), + getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), + Arrays.asList( + Ranges.create(149, 8, 149, 90), + Ranges.create(151, 8, 151, 90)) + ); + + checkContent( + diagnostics.get(13), + Ranges.create(157, 4, 157, 27), + getMessage("Ключ", "Описания"), + Arrays.asList( + Ranges.create(155, 4, 155, 27), + Ranges.create(157, 4, 157, 27)) + ); + + checkContent( + diagnostics.get(14), + Ranges.create(161, 4, 161, 37), + getMessage("Часть1.Часть2", "Описания2"), + Arrays.asList( + Ranges.create(159, 4, 159, 37), + Ranges.create(161, 4, 161, 37) +// , +// Ranges.create(162, 4, 162, 37) + ) + ); + assertThat(diagnostics).hasSize(15); } private String getMessage(String keyName, String collectionName) { @@ -225,6 +263,38 @@ void useAsGlobalMethodParamsBetweenDuplications() { assertThat(diagnostics).hasSize(0); } + @Test + void useIdentifierPart() { + var code = + " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2);\n" + + " Реквизит2.ПовторнаяСоздаваемаяКоллекция2 = Новый Массив;\n" + + " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // не ошибка\n"; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(1); + } + + @Test + void useEqualNameWithMethodAndKey() { + var code = +// "Процедура ОдинаковыеИменаКлючаИМетода(Описания)\n" + + "\tОписания.Добавить(Ключ);\n" + + "\tМетод(Ключ());\n" + + "\tОписания.Добавить(Ключ); // ошибка\n" + + "" +// "\n" + +// "\tОписания2.Добавить(Часть1.Часть2);\n" + +// "\tМетод(Часть1().Часть2());\n" + +// "\tОписания2.Добавить(Часть1.Часть2); // ошибка\n" + +// "КонецПроцедуры\n" + ; + + var context = TestUtils.getDocumentContext(code); + var diagnostics = getDiagnostics(context); + assertThat(diagnostics).hasSize(1); + } + // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest // TODO перенести в DiagnosticAssert private void checkContent( diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index a9c8ac2acdd..eeb2f860a11 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -138,6 +138,31 @@ КонецФункции +Процедура ЧастиКлюча(Данные) + Данные.ОбщаяКоллекция.Вставить(Данные.Реквизит.ПовторнаяСоздаваемаяКоллекция); + Данные.Реквизит = Выражение(); + Данные.ОбщаяКоллекция.Вставить(Данные.Реквизит.ПовторнаяСоздаваемаяКоллекция); // не ошибка + + Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); + Реквизит2.ПовторнаяСоздаваемаяКоллекция2 = Новый Массив; + Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // ошибка + + Данные3.ОбщаяКоллекция3.Вставить(Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3); + ПовторнаяСоздаваемаяКоллекция3 = Новый Массив; + Данные3.ОбщаяКоллекция3.Вставить(Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3); // ошибка +КонецПроцедуры + +Процедура ОдинаковыеИменаКлючаИМетода(Описания) + Описания.Добавить(Ключ); + Метод(Ключ()); + Описания.Добавить(Ключ); // ошибка + + Описания2.Добавить(Часть1.Часть2); + Метод(Часть1().Часть2()); + Описания2.Добавить(Часть1.Часть2); // ошибка + //Описания2.Добавить(Часть1.Часть2); // TODO а эта строка должна попасть в связанные элементы +КонецПроцедуры + Процедура СписокЗначений(Результат) Сведения = Новый СписокЗначений; Сведения.Добавить("", "ИННЮЛ"); @@ -192,23 +217,6 @@ Описания2.Добавить(Метод(Описание) + Коллекция.Значение); // не ошибка КонецПроцедуры -Процедура ПереиспользованиеВставленногоЭлемента(Результат) - Результат.Вставить("СтатусИзвлеченияТекста", ТекущаяВерсияОбъект.СтатусИзвлеченияТекста); - Результат.Вставить("ПолноеНаименованиеВерсии", СокрЛП(ТекущаяВерсияОбъект.Наименование)); - - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - Если Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - ИначеЕсли Результат["СтатусИзвлеченияТекста"] = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда - СтатусИзвлеченияТекстаСтрока = "Извлечен"; - ИначеЕсли Результат.Получить("СтатусИзвлеченияТекста") = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда - СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; - ИначеЕсли Результат.Свойство("СтатусИзвлеченияТекста", ХХХ) Тогда - СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; - КонецЕсли; - //Результат.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); // TODO не ошибка -КонецПроцедуры - Процедура ИзменениеРеквизитаВставленногоОбъекта(Результат) ИменаПромежуточныхВТ = Новый Массив; ИмяВТСотрудники = ""; From 2243d644b856b90d7b4c9179650d932ed9a6fc00 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 13:29:51 +0300 Subject: [PATCH 022/595] =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20"=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 28 ++++++- ...tionIntoCollectionDiagnostic_en.properties | 2 + ...tionIntoCollectionDiagnostic_ru.properties | 2 + ...InsertionIntoCollectionDiagnosticTest.java | 76 +++++++++++++++++++ 4 files changed, 104 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index ca3f28a423f..b6b91fd4414 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; @@ -42,6 +43,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.regex.Pattern; @@ -60,7 +62,8 @@ ) public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { - private static final Pattern ADD_METHOD_PATTERN = CaseInsensitivePattern.compile("добавить|вставить|add|insert"); + private static final Pattern INSERT_ADD_METHOD_PATTERN = CaseInsensitivePattern.compile("вставить|добавить|insert|add"); + private static final Pattern INSERT_METHOD_PATTERN = CaseInsensitivePattern.compile("вставить|insert"); private static final Pattern IGNORED_BSL_VALUES_PATTERN = CaseInsensitivePattern.compile( "неопределено|undefined|0|символы\\.[\\wа-яё]+|chars\\.[\\wа-яё]+"); @@ -70,7 +73,15 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor BSLParser.RULE_forEachStatement, BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, BSLParser.RULE_tryStatement); - public static final int LENGTH_OF_EMPTY_STRING_WITH_QUOTES = 2; + private static final int LENGTH_OF_EMPTY_STRING_WITH_QUOTES = 2; + private static final boolean IS_ALLOWED_METHOD_ADD = true; + + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + IS_ALLOWED_METHOD_ADD + ) + private boolean isAllowedMethodADD = IS_ALLOWED_METHOD_ADD; + private Pattern methodPattern = INSERT_ADD_METHOD_PATTERN; // ленивое вычисление всех полей, только в нужный момент private BSLParser.CodeBlockContext codeBlock; @@ -91,6 +102,15 @@ private static class GroupingData { CallParamContext firstParamContext; } + @Override + public void configure(Map configuration) { + super.configure(configuration); + + if (!isAllowedMethodADD){ + methodPattern = INSERT_METHOD_PATTERN; + } + } + @Override public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { this.codeBlock = codeBlock; @@ -144,8 +164,8 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars firstParam, firstParam.concat("."), firstParamContext); } - private static boolean isAppropriateMethodCall(String methodName) { - return ADD_METHOD_PATTERN.matcher(methodName).matches(); + private boolean isAppropriateMethodCall(String methodName) { + return methodPattern.matcher(methodName).matches(); } private static boolean isBlankBSLString(String text) { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties index c51d207d589..99ed1f8a3a8 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_en.properties @@ -1,2 +1,4 @@ diagnosticMessage=Check the re-addition of %s to the collection with name %s diagnosticName=Duplicate adding or pasting a value to a collection + +isAllowedMethodADD=Analysis of methods named "Add" is allowed - both useful and false issues may appear diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties index 756f74cb265..024796a4a95 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic_ru.properties @@ -1,2 +1,4 @@ diagnosticMessage=Проверьте повторную вставку %s в коллекцию %s diagnosticName=Повторное добавление/вставка значений в коллекцию + +isAllowedMethodADD=Разрешен анализ методов "Добавить" - могут появиться и полезные и ложные замечания diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index f2fbe3de302..8d4fe7a2cbf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -32,6 +32,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -186,6 +187,81 @@ void test() { assertThat(diagnostics).hasSize(15); } + @Test + void testWithoutAdd() { + + Map configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); + configuration.put("isAllowedMethodADD", false); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + checkContent( + diagnostics.get(0), + Ranges.create(8, 4, 8, 34), + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(7, 4, 7, 34), + Ranges.create(8, 4, 8, 34)) + ); + + checkContent( + diagnostics.get(1), + Ranges.create(12, 4, 12, 35), + getMessage("\"Ключ1\"", "Коллекция2"), + Arrays.asList( + Ranges.create(11, 4, 11, 35), + Ranges.create(12, 4, 12, 35)) + ); + + checkContent( + diagnostics.get(2), + Ranges.create(22, 8, 22, 38), + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(21, 8, 21, 38), + Ranges.create(22, 8, 22, 38)) + ); + + checkContent( + diagnostics.get(3), + Ranges.create(58, 12, 58, 76), + getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), + Arrays.asList( + Ranges.create(56, 12, 56, 87), + Ranges.create(58, 12, 58, 76)) + ); + + checkContent( + diagnostics.get(4), + Ranges.create(119, 4, 119, 65), + getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), + Arrays.asList( + Ranges.create(112, 4, 112, 63), + Ranges.create(119, 4, 119, 65)) + ); + + checkContent( + diagnostics.get(6), + Ranges.create(147, 8, 147, 90), + getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), + Arrays.asList( + Ranges.create(145, 8, 145, 90), + Ranges.create(147, 8, 147, 90)) + ); + + checkContent( + diagnostics.get(5), + Ranges.create(151, 8, 151, 90), + getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), + Arrays.asList( + Ranges.create(149, 8, 149, 90), + Ranges.create(151, 8, 151, 90)) + ); + + assertThat(diagnostics).hasSize(7); + } + private String getMessage(String keyName, String collectionName) { return String.format("Проверьте повторную вставку %s в коллекцию %s", keyName, collectionName); } From e51010d93aa22a8b6becd1a70f8fbe18bcc5828a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 13:33:48 +0300 Subject: [PATCH 023/595] =?UTF-8?q?=D0=BA=D0=B5=D0=B9=D1=81=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20"=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...licatedInsertionIntoCollectionDiagnosticTest.java | 12 +++++++++++- .../DuplicatedInsertionIntoCollectionDiagnostic.bsl | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 8d4fe7a2cbf..467d3b3483a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -184,7 +184,17 @@ void test() { ) ); - assertThat(diagnostics).hasSize(15); + checkContent( + diagnostics.get(15), + Ranges.create(171, 4, 171, 65), + getMessage("ИмяКоманды", "Сведения2.ДобавленныеЭлементы"), + Arrays.asList( + Ranges.create(170, 4, 170, 57), + Ranges.create(171, 4, 171, 65) + ) + ); + + assertThat(diagnostics).hasSize(16); } @Test diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index eeb2f860a11..ef6d1da1124 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -169,7 +169,7 @@ Сведения.Добавить("", "КППЮЛ"); // не ошибка Сведения2.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); - //Сведения2.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); // TODO не ошибка, если включен параметр для исключения метода Добавить + Сведения2.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); // не ошибка, если включен параметр для исключения метода Добавить КонецПроцедуры Процедура ПрисваиваниеРодителюИОбращениеКПотомку(Данные) From cfe8522cf1f10f82386fa2116d22ed6f68b61209 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 16:21:32 +0300 Subject: [PATCH 024/595] =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B4=D1=83=D0=B1=D0=BB=D1=8C=20=D0=B2=20=D1=81?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=8D=D0=BB?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnosticTest.java | 9 +++++---- .../DuplicatedInsertionIntoCollectionDiagnostic.bsl | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index b6b91fd4414..6021660023e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -219,7 +219,7 @@ private boolean excludeValidElements(List duplicates, int currInde return false; } final var first = duplicates.get(currIndex); - var alreadyAdd = false; + var alreadyAdd = !listForIssue.isEmpty() && listForIssue.get(listForIssue.size() - 1) == first; for (int i = currIndex + 1; i < duplicates.size(); i++) { final var next = duplicates.get(i); if (hasValidChange(first, next)) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 467d3b3483a..eda4b0687eb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -178,9 +178,8 @@ void test() { getMessage("Часть1.Часть2", "Описания2"), Arrays.asList( Ranges.create(159, 4, 159, 37), - Ranges.create(161, 4, 161, 37) -// , -// Ranges.create(162, 4, 162, 37) + Ranges.create(161, 4, 161, 37), + Ranges.create(162, 4, 162, 37) ) ); @@ -354,7 +353,9 @@ void useIdentifierPart() { var code = " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2);\n" + " Реквизит2.ПовторнаяСоздаваемаяКоллекция2 = Новый Массив;\n" + - " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // не ошибка\n"; + " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // не ошибка\n" + + " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // доп.данные\n" + + ""; var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index ef6d1da1124..91848dbe3b5 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -160,7 +160,7 @@ Описания2.Добавить(Часть1.Часть2); Метод(Часть1().Часть2()); Описания2.Добавить(Часть1.Часть2); // ошибка - //Описания2.Добавить(Часть1.Часть2); // TODO а эта строка должна попасть в связанные элементы + Описания2.Добавить(Часть1.Часть2); // а эта строка должна попасть в связанные элементы КонецПроцедуры Процедура СписокЗначений(Результат) From c1f54c9d812936df054682f186e946628cc2c8ac Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 16:37:49 +0300 Subject: [PATCH 025/595] precommit --- .../DuplicatedInsertionIntoCollection.md | 2 +- .../DuplicatedInsertionIntoCollection.md | 2 +- .../configuration/parameters-schema.json | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/diagnostics/DuplicatedInsertionIntoCollection.md b/docs/diagnostics/DuplicatedInsertionIntoCollection.md index 8a341d6f99e..2d2b18cdef9 100644 --- a/docs/diagnostics/DuplicatedInsertionIntoCollection.md +++ b/docs/diagnostics/DuplicatedInsertionIntoCollection.md @@ -1,4 +1,4 @@ -# (DuplicatedInsertionIntoCollection) +# Повторное добавление/вставка значений в коллекцию (DuplicatedInsertionIntoCollection) ## Описание диагностики diff --git a/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md b/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md index 5a6a8bb2efa..aff2ea4e18a 100644 --- a/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md +++ b/docs/en/diagnostics/DuplicatedInsertionIntoCollection.md @@ -1,4 +1,4 @@ -# (DuplicatedInsertionIntoCollection) +# Duplicate adding or pasting a value to a collection (DuplicatedInsertionIntoCollection) ## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index ee0bede0e41..73311df3c8e 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -540,6 +540,24 @@ }, "$id": "#/definitions/DuplicateStringLiteral" }, + "DuplicatedInsertionIntoCollection": { + "description": "Duplicate adding or pasting a value to a collection", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Duplicate adding or pasting a value to a collection", + "properties": { + "isAllowedMethodADD": { + "description": "Analysis of methods named \"Add\" is allowed - both useful and false issues may appear", + "default": true, + "type": "boolean", + "title": "Analysis of methods named \"Add\" is allowed - both useful and false issues may appear" + } + }, + "$id": "#/definitions/DuplicatedInsertionIntoCollection" + }, "EmptyCodeBlock": { "description": "Empty code block", "default": true, From 59d70444e82bd6dfd12bf358d9c6fb0114daac41 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 28 May 2022 16:53:00 +0300 Subject: [PATCH 026/595] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=8E=D0=BD=D0=B8=D1=82-=D0=BA=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...InsertionIntoCollectionDiagnosticTest.java | 107 ------------------ 1 file changed, 107 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index eda4b0687eb..185206a417f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -275,113 +275,6 @@ private String getMessage(String keyName, String collectionName) { return String.format("Проверьте повторную вставку %s в коллекцию %s", keyName, collectionName); } - @Test - void newCollectionAssignBetweenDuplications() { - var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n" + - " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ПовторнаяСоздаваемаяКоллекция.Добавить(1); // не ошибка\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void newCollectionAssignWithDotsBetweenDuplications() { - var code = - " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n" + - " Данные.ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " Данные.ПовторнаяСоздаваемаяКоллекция.Добавить(1);\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void newElemAssignBetweenDuplications() { - var code = " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция);\n" + - " ПовторнаяСоздаваемаяКоллекция = Новый Массив;\n" + - " ОбщаяКоллекция.Добавить(ПовторнаяСоздаваемаяКоллекция); // не ошибка\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void useAsFunctionParamsBetweenDuplications() { - var code = " Контекст.Коллекция.Вставить(1, Парам);\n" + - " Метод(Контекст.Коллекция, 1 + Контекст.Коллекция + 2);\n" + - " Контекст.Коллекция.Вставить(1, ДругойПарам); // не ошибка или все-таки подозрительно??\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void changeInnerValueBetweenDuplications() { - var code = "\tОписание.ИмяРеквизита = \"ТабельныйНомер\";\n" + - "\tОписания.Добавить(Описание);\n" + - "\tОписание.ИмяРеквизита = \"ДатаПриема\";\n" + - "\tОписания.Добавить(Описание); // не ошибка\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void useAsGlobalMethodParamsBetweenDuplications() { - var code = - "\tСоздатьВТСотрудникиДляВедомостиПоОснованиям(ИмяВТСотрудники);\n" + - "\tИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники);\n" + - "\tСоздатьВТСотрудникиДляВедомостиПоМестуРаботы(ИмяВТСотрудники);\n" + - "\tИменаПромежуточныхВТ.Добавить(ИмяВТСотрудники); // не ошибка\n"; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(0); - } - - @Test - void useIdentifierPart() { - var code = - " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2);\n" + - " Реквизит2.ПовторнаяСоздаваемаяКоллекция2 = Новый Массив;\n" + - " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // не ошибка\n" + - " Данные2.ОбщаяКоллекция2.Вставить(Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2); // доп.данные\n" + - ""; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(1); - } - - @Test - void useEqualNameWithMethodAndKey() { - var code = -// "Процедура ОдинаковыеИменаКлючаИМетода(Описания)\n" + - "\tОписания.Добавить(Ключ);\n" + - "\tМетод(Ключ());\n" + - "\tОписания.Добавить(Ключ); // ошибка\n" + - "" -// "\n" + -// "\tОписания2.Добавить(Часть1.Часть2);\n" + -// "\tМетод(Часть1().Часть2());\n" + -// "\tОписания2.Добавить(Часть1.Часть2); // ошибка\n" + -// "КонецПроцедуры\n" - ; - - var context = TestUtils.getDocumentContext(code); - var diagnostics = getDiagnostics(context); - assertThat(diagnostics).hasSize(1); - } - // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest // TODO перенести в DiagnosticAssert private void checkContent( From fecf932dbb75ad13cb7af394a4885144ff4cb4ad Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 29 May 2022 13:53:01 +0300 Subject: [PATCH 027/595] =?UTF-8?q?=D0=BA=D0=B5=D0=B9=D1=81=20=D1=81=20?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=BE=D0=BC=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0-=D1=86=D0=B8=D0=BA=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit убрал невыполнимые условия улучшено покрытие упрощены утверждения --- ...atedInsertionIntoCollectionDiagnostic.java | 11 +- ...InsertionIntoCollectionDiagnosticTest.java | 399 +++++++----------- ...catedInsertionIntoCollectionDiagnostic.bsl | 14 +- 3 files changed, 170 insertions(+), 254 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 6021660023e..5686161c2c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -69,9 +69,8 @@ public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitor private static final List BREAKERS_INDEXES = Arrays.asList(BSLParser.RULE_returnStatement, BSLParser.RULE_breakStatement, BSLParser.RULE_continueStatement, BSLParser.RULE_raiseStatement); - private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_subCodeBlock, - BSLParser.RULE_forEachStatement, BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, - BSLParser.RULE_tryStatement); + private static final List BREAKERS_ROOTS = Arrays.asList(BSLParser.RULE_forEachStatement, + BSLParser.RULE_forStatement, BSLParser.RULE_whileStatement, BSLParser.RULE_tryStatement); private static final int LENGTH_OF_EMPTY_STRING_WITH_QUOTES = 2; private static final boolean IS_ALLOWED_METHOD_ADD = true; @@ -268,15 +267,15 @@ private static boolean startWithIgnoreCase(String identifier, String textWithDot private boolean hasBreakersBetweenCalls(Range border) { return getBreakers().stream() .filter(bslParserRuleContext -> Ranges.containsRange(border, Ranges.create(bslParserRuleContext))) - .anyMatch(this::hasBreakerFromCodeBlock); + .anyMatch(this::hasBreakerIntoCodeBlock); } - private boolean hasBreakerFromCodeBlock(BSLParserRuleContext breakerContext) { + private boolean hasBreakerIntoCodeBlock(BSLParserRuleContext breakerContext) { if (breakerContext.getRuleIndex() == BSLParser.RULE_returnStatement) { return true; } final var rootParent = Trees.getRootParent(breakerContext, BREAKERS_ROOTS); - if (rootParent == null || rootParent.getRuleIndex() == BSLParser.RULE_subCodeBlock) { + if (rootParent == null) { return true; } return !Ranges.containsRange(getBlockRange(), Ranges.create(rootParent)); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 185206a417f..009ccb92784 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -21,16 +21,11 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; -import org.assertj.core.api.Assertions; import org.eclipse.lsp4j.Diagnostic; -import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import org.eclipse.lsp4j.Range; import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -46,156 +41,120 @@ void test() { List diagnostics = getDiagnostics(); - checkContent( - diagnostics.get(0), - Ranges.create(8, 4, 8, 34), - getMessage("\"Ключ1\"", "Коллекция"), - Arrays.asList( - Ranges.create(7, 4, 7, 34), - Ranges.create(8, 4, 8, 34)) - ); - - checkContent( - diagnostics.get(1), - Ranges.create(12, 4, 12, 35), - getMessage("\"Ключ1\"", "Коллекция2"), - Arrays.asList( - Ranges.create(11, 4, 11, 35), - Ranges.create(12, 4, 12, 35)) - ); - - checkContent( - diagnostics.get(2), - Ranges.create(4, 4, 4, 34), - getMessage("СтрокаТаблицы", "Массив"), - Arrays.asList( - Ranges.create(3, 4, 3, 34), - Ranges.create(4, 4, 4, 34)) - ); - - checkContent( - diagnostics.get(3), - Ranges.create(22, 8, 22, 38), - getMessage("\"Ключ1\"", "Коллекция"), - Arrays.asList( - Ranges.create(21, 8, 21, 38), - Ranges.create(22, 8, 22, 38)) - ); - - checkContent( - diagnostics.get(4), - Ranges.create(27, 8, 27, 55), - getMessage("\"Пользователь\"", "Итог.Коллекция.Индексы"), - Arrays.asList( - Ranges.create(26, 8, 26, 55), - Ranges.create(27, 8, 27, 55)) - ); - - checkContent( - diagnostics.get(5), - Ranges.create(58, 12, 58, 76), - getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), - Arrays.asList( - Ranges.create(56, 12, 56, 87), - Ranges.create(58, 12, 58, 76)) - ); - - checkContent( - diagnostics.get(6), - Ranges.create(99, 8, 99, 77), - getMessage("\"Пользователь\"", "Данные.Метод().ПовторнаяСоздаваемаяКоллекция"), - Arrays.asList( - Ranges.create(98, 8, 98, 77), - Ranges.create(99, 8, 99, 77)) - ); - - checkContent( - diagnostics.get(7), - Ranges.create(102, 8, 102, 92), - getMessage("Данные.Метод().ПовторнаяСоздаваемаяКоллекция", "Данные.Метод().ОбщаяКоллекция"), - Arrays.asList( - Ranges.create(101, 8, 101, 92), - Ranges.create(102, 8, 102, 92)) - ); - - checkContent( - diagnostics.get(8), - Ranges.create(119, 4, 119, 65), - getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), - Arrays.asList( - Ranges.create(112, 4, 112, 63), - Ranges.create(119, 4, 119, 65)) - ); - - checkContent( - diagnostics.get(9), - Ranges.create(133, 4, 133, 58), - getMessage("\"Пользователь\"", "ПовторнаяСоздаваемаяКоллекция"), - Arrays.asList( - Ranges.create(132, 4, 132, 58), - Ranges.create(133, 4, 133, 58)) - ); - - checkContent( - diagnostics.get(10), - Ranges.create(136, 4, 136, 58), - getMessage("ПовторнаяСоздаваемаяКоллекция", "ОбщаяКоллекция"), - Arrays.asList( - Ranges.create(135, 4, 135, 58), - Ranges.create(136, 4, 136, 58)) - ); - - checkContent( - diagnostics.get(12), - Ranges.create(147, 8, 147, 90), - getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), - Arrays.asList( - Ranges.create(145, 8, 145, 90), - Ranges.create(147, 8, 147, 90)) - ); - - checkContent( - diagnostics.get(11), - Ranges.create(151, 8, 151, 90), - getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), - Arrays.asList( - Ranges.create(149, 8, 149, 90), - Ranges.create(151, 8, 151, 90)) - ); - - checkContent( - diagnostics.get(13), - Ranges.create(157, 4, 157, 27), - getMessage("Ключ", "Описания"), - Arrays.asList( - Ranges.create(155, 4, 155, 27), - Ranges.create(157, 4, 157, 27)) - ); - - checkContent( - diagnostics.get(14), - Ranges.create(161, 4, 161, 37), - getMessage("Часть1.Часть2", "Описания2"), - Arrays.asList( - Ranges.create(159, 4, 159, 37), - Ranges.create(161, 4, 161, 37), - Ranges.create(162, 4, 162, 37) - ) - ); - - checkContent( - diagnostics.get(15), - Ranges.create(171, 4, 171, 65), - getMessage("ИмяКоманды", "Сведения2.ДобавленныеЭлементы"), - Arrays.asList( - Ranges.create(170, 4, 170, 57), - Ranges.create(171, 4, 171, 65) - ) - ); + assertThat(diagnostics, true) + .hasIssueOnRange(8, 4, 8, 34, + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(7, 4, 34), + Ranges.create(8, 4, 34))) + + .hasIssueOnRange(12, 4, 35, + getMessage("\"Ключ1\"", "Коллекция2"), + Arrays.asList( + Ranges.create(11, 4, 35), + Ranges.create(12, 4, 35))) + + .hasIssueOnRange(4, 4, 34, + getMessage("СтрокаТаблицы", "Массив"), + Arrays.asList( + Ranges.create(3, 4, 34), + Ranges.create(4, 4, 34))) + + .hasIssueOnRange(22, 8, 38, + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(21, 8, 38), + Ranges.create(22, 8, 38))) + + .hasIssueOnRange(27, 8, 55, + getMessage("\"Пользователь\"", "Итог.Коллекция.Индексы"), + Arrays.asList( + Ranges.create(26, 8, 55), + Ranges.create(27, 8, 55))) + + .hasIssueOnRange(58, 12, 76, + getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), + Arrays.asList( + Ranges.create(56, 12, 87), + Ranges.create(58, 12, 76))) + + .hasIssueOnRange(99, 8, 77, + getMessage("\"Пользователь\"", "Данные.Метод().ПовторнаяСоздаваемаяКоллекция"), + Arrays.asList( + Ranges.create(98, 8, 77), + Ranges.create(99, 8, 77))) + + .hasIssueOnRange(102, 8, 92, + getMessage("Данные.Метод().ПовторнаяСоздаваемаяКоллекция", "Данные.Метод().ОбщаяКоллекция"), + Arrays.asList( + Ranges.create(101, 8, 92), + Ranges.create(102, 8, 92))) + + .hasIssueOnRange(119, 4, 65, + getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), + Arrays.asList( + Ranges.create(112, 4, 63), + Ranges.create(119, 4, 65))) + + .hasIssueOnRange(133, 4, 58, + getMessage("\"Пользователь\"", "ПовторнаяСоздаваемаяКоллекция"), + Arrays.asList( + Ranges.create(132, 4, 58), + Ranges.create(133, 4, 58))) + + .hasIssueOnRange(136, 4, 58, + getMessage("ПовторнаяСоздаваемаяКоллекция", "ОбщаяКоллекция"), + Arrays.asList( + Ranges.create(135, 4, 58), + Ranges.create(136, 4, 58))) + + .hasIssueOnRange(147, 8, 90, + getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), + Arrays.asList( + Ranges.create(145, 8, 90), + Ranges.create(147, 8, 90))) + + .hasIssueOnRange(151, 8, 90, + getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), + Arrays.asList( + Ranges.create(149, 8, 90), + Ranges.create(151, 8, 90))) + + .hasIssueOnRange(157, 4, 27, + getMessage("Ключ", "Описания"), + Arrays.asList( + Ranges.create(155, 4, 27), + Ranges.create(157, 4, 27))) + + .hasIssueOnRange(161, 4, 37, + getMessage("Часть1.Часть2", "Описания2"), + Arrays.asList( + Ranges.create(159, 4, 37), + Ranges.create(161, 4, 37), + Ranges.create(162, 4, 37) + )) + + .hasIssueOnRange(171, 4, 65, + getMessage("ИмяКоманды", "Сведения2.ДобавленныеЭлементы"), + Arrays.asList( + Ranges.create(170, 4, 57), + Ranges.create(171, 4, 65) + ) + ); assertThat(diagnostics).hasSize(16); } + @Test + void testWithAdd() { + + Map configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); + configuration.put("isAllowedMethodADD", true); + diagnosticInstance.configure(configuration); + + test(); + } + @Test void testWithoutAdd() { @@ -205,68 +164,49 @@ void testWithoutAdd() { List diagnostics = getDiagnostics(); - checkContent( - diagnostics.get(0), - Ranges.create(8, 4, 8, 34), - getMessage("\"Ключ1\"", "Коллекция"), - Arrays.asList( - Ranges.create(7, 4, 7, 34), - Ranges.create(8, 4, 8, 34)) - ); - - checkContent( - diagnostics.get(1), - Ranges.create(12, 4, 12, 35), - getMessage("\"Ключ1\"", "Коллекция2"), - Arrays.asList( - Ranges.create(11, 4, 11, 35), - Ranges.create(12, 4, 12, 35)) - ); - - checkContent( - diagnostics.get(2), - Ranges.create(22, 8, 22, 38), - getMessage("\"Ключ1\"", "Коллекция"), - Arrays.asList( - Ranges.create(21, 8, 21, 38), - Ranges.create(22, 8, 22, 38)) - ); - - checkContent( - diagnostics.get(3), - Ranges.create(58, 12, 58, 76), - getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), - Arrays.asList( - Ranges.create(56, 12, 56, 87), - Ranges.create(58, 12, 58, 76)) - ); - - checkContent( - diagnostics.get(4), - Ranges.create(119, 4, 119, 65), - getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), - Arrays.asList( - Ranges.create(112, 4, 112, 63), - Ranges.create(119, 4, 119, 65)) - ); - - checkContent( - diagnostics.get(6), - Ranges.create(147, 8, 147, 90), - getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), - Arrays.asList( - Ranges.create(145, 8, 145, 90), - Ranges.create(147, 8, 147, 90)) - ); - - checkContent( - diagnostics.get(5), - Ranges.create(151, 8, 151, 90), - getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), - Arrays.asList( - Ranges.create(149, 8, 149, 90), - Ranges.create(151, 8, 151, 90)) - ); + assertThat(diagnostics, true) + .hasIssueOnRange(8, 4, 8, 34, + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(7, 4, 34), + Ranges.create(8, 4, 34))) + + .hasIssueOnRange(12, 4, 35, + getMessage("\"Ключ1\"", "Коллекция2"), + Arrays.asList( + Ranges.create(11, 4, 35), + Ranges.create(12, 4, 35))) + + .hasIssueOnRange(22, 8, 38, + getMessage("\"Ключ1\"", "Коллекция"), + Arrays.asList( + Ranges.create(21, 8, 38), + Ranges.create(22, 8, 38))) + + .hasIssueOnRange(58, 12, 76, + getMessage("ЭлементСтиля.Ключ", "ЭлементыСтиля"), + Arrays.asList( + Ranges.create(56, 12, 87), + Ranges.create(58, 12, 76))) + + .hasIssueOnRange(119, 4, 65, + getMessage("\"ДополнительныеРеквизиты\"", "ВидыСвойствНабора"), + Arrays.asList( + Ranges.create(112, 4, 63), + Ranges.create(119, 4, 65))) + + .hasIssueOnRange(147, 8, 90, + getMessage("Данные2.Реквизит2.ПовторнаяСоздаваемаяКоллекция2", "Данные2.ОбщаяКоллекция2"), + Arrays.asList( + Ranges.create(145, 8, 90), + Ranges.create(147, 8, 90))) + + .hasIssueOnRange(151, 8, 90, + getMessage("Данные3.Реквизит3.ПовторнаяСоздаваемаяКоллекция3", "Данные3.ОбщаяКоллекция3"), + Arrays.asList( + Ranges.create(149, 8, 90), + Ranges.create(151, 8, 90)) + ); assertThat(diagnostics).hasSize(7); } @@ -274,37 +214,4 @@ void testWithoutAdd() { private String getMessage(String keyName, String collectionName) { return String.format("Проверьте повторную вставку %s в коллекцию %s", keyName, collectionName); } - - // дубль следующих методов из кода FieldsFromJoinsWithoutIsNullDiagnosticTest - // TODO перенести в DiagnosticAssert - private void checkContent( - Diagnostic diagnostic, - Range diagnosticRange, - Range relatedLocationRange - ) { - checkContent(diagnostic, diagnosticRange, Collections.singletonList(relatedLocationRange)); - } - - private void checkContent( - Diagnostic diagnostic, - Range diagnosticRange, - List relatedLocationRanges - ) { - checkContent(diagnostic, diagnosticRange, "", relatedLocationRanges); - } - - private void checkContent(Diagnostic diagnostic, Range diagnosticRange, String message, List relatedLocationRanges) { - assertThat(diagnostic.getRange()).isEqualTo(diagnosticRange); - if (!message.isEmpty()){ - assertThat(diagnostic.getMessage()).isEqualTo(message); - } - List relatedInformationList = diagnostic.getRelatedInformation(); - assertThat(relatedInformationList).hasSize(relatedLocationRanges.size()); - - for (int i = 0; i < relatedLocationRanges.size(); i++) { - var relatedInformation = relatedInformationList.get(i); - var relatedLocationRange = relatedLocationRanges.get(i); - Assertions.assertThat(relatedInformation.getLocation().getRange()).isEqualTo(relatedLocationRange); - } - } } diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 91848dbe3b5..6fa11a681c0 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -67,7 +67,7 @@ КонецПроцедуры -Функция ПрерываниеПотокаВыполнения(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт +Функция ПрерываниеПотокаВыполнения_Возврат(Ссылка, УчитыватьПометкуУдаления = Истина) Экспорт ВидыСвойствНабора = Новый Структура; ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); @@ -107,7 +107,7 @@ Данные.Метод().ОбщаяКоллекция.Добавить(Данные.Метод().ПовторнаяСоздаваемаяКоллекция); // не ошибка КонецПроцедуры -Функция ВнутреннееПрерываниеПотокаВыполнения() +Функция ВнутреннееПрерываниеПотокаВыполнения_ЦиклВнутриБлока() ВидыСвойствНабора = Новый Структура; ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); @@ -250,3 +250,13 @@ ПараметрыРасчета = Новый Структура("ЗапущенРасчетПартий", Ложь); ОтборПоСобытию.Добавить(ИмяСобытияОшибкиДляЖурналаРегистрации(ПараметрыРасчета)); // не ошибка КонецПроцедуры + +Процедура ПрерываниеПотокаВыполнения_БлокВЦикле(Коллекция, Коллекция2) + Для Каждого Элемент Из Коллекция Цикл + Коллекция2.Добавить(Элемент); + Если Условие() Тогда + Прервать; + КонецЕсли; + Коллекция2.Добавить(Элемент); // не ошибка + КонецЦикла; +КонецПроцедуры From 66a5fbbc6616d9ca9c8afdedaea30faa6faeb60d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 29 May 2022 13:53:41 +0300 Subject: [PATCH 028/595] =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B-?= =?UTF-8?q?=D1=83=D1=82=D0=B8=D0=BB=D0=B8=D1=82=D1=8B=20hasIssueOnRange?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit используются в новой диагностике --- .../util/assertions/DiagnosticAssert.java | 43 +++++++++++++++++++ .../util/assertions/DiagnosticsAssert.java | 37 ++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java index 676017b165e..7d2c7b688c3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java @@ -24,8 +24,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.assertj.core.api.AbstractAssert; import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.DiagnosticRelatedInformation; import org.eclipse.lsp4j.Range; +import java.util.List; import java.util.Objects; public class DiagnosticAssert extends AbstractAssert { @@ -81,4 +83,45 @@ public DiagnosticAssert hasMessageOnRange(String message, int startLine, int sta // return the current assertion for method chaining return this; } + + /** + * Проверка на совпадение сообщения диагностики и диапазона текста, где она обнаружена + * + * @param expectedRange Первая строка диапазона + * @param expectedMessage Сообщение диагностики + * @param expectedRelatedInformation Список связанных диапазонов + * @return Ссылка на объект для текучести + */ + public DiagnosticAssert hasIssueOnRange(Range expectedRange, String expectedMessage, List expectedRelatedInformation) { + // check that actual TolkienCharacter we want to make assertions on is not null. + isNotNull(); + + // check condition + Range actualRange = actual.getRange(); + if (!Objects.equals(actualRange, expectedRange)) { + failWithMessage("Expected diagnostic's range to be <%s> but was <%s>", expectedRange.toString(), actualRange.toString()); + } + + if (!Objects.equals(expectedMessage, actual.getMessage())) { + failWithMessage("Expected diagnostic's expectedMessage to be <%s> but was <%s>", expectedMessage, actual.getMessage()); + } + + List actualRelatedInformation = actual.getRelatedInformation(); + if (expectedRelatedInformation.size() != actualRelatedInformation.size()){ + failWithMessage("Expected size of diagnostic's RelatedInformation to be <%d> but was <%d>", + expectedRelatedInformation.size(), actualRelatedInformation.size()); + } + + for (int i = 0; i < expectedRelatedInformation.size(); i++) { + var actualElem = actualRelatedInformation.get(i); + final var actualRelatedRange = actualElem.getLocation().getRange(); + var expectedRelatedRange = expectedRelatedInformation.get(i); + if (!Objects.equals(actualRelatedRange, expectedRelatedRange)) { + failWithMessage("Expected diagnostic's actualRange to be <%s> but was <%s>", expectedRelatedRange.toString(), actualRelatedRange.toString()); + } + } + + // return the current assertion for method chaining + return this; + } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java index a989bc17fea..a97aa7d3a47 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java @@ -21,9 +21,11 @@ */ package com.github._1c_syntax.bsl.languageserver.util.assertions; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.assertj.core.api.AbstractListAssert; import org.assertj.core.util.Lists; import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.Range; import java.util.List; @@ -82,6 +84,41 @@ public DiagnosticsAssert hasMessageOnRange(String message, int lineNo, int start ); } + /** + * Ассерт для проверки совпадения диапазона-строки и сообщения + * + * @param lineNo Номер строки диапазона + * @param startChar Первый символ диапазона + * @param endChar Последний символ диапазона + * @param message Сообщение диагностики + * @param relatedLocationRanges Список связанных диапазонов + * @return Ссылка на объект для текучести + */ + public DiagnosticsAssert hasIssueOnRange(int lineNo, int startChar, int endChar, String message, + List relatedLocationRanges) { + return hasIssueOnRange(lineNo, startChar, lineNo, endChar, + message, relatedLocationRanges); + } + + /** + * Ассерт для проверки совпадения диапазона-строки и сообщения + * + * @param startLine Номер строки диапазона + * @param startChar Первый символ диапазона + * @param endLine Последняя строка диапазона + * @param endChar Последний символ диапазона + * @param message Сообщение диагностики + * @param relatedLocationRanges Список связанных диапазонов + * @return Ссылка на объект для текучести + */ + public DiagnosticsAssert hasIssueOnRange(int startLine, int startChar, int endLine, int endChar, String message, + List relatedLocationRanges) { + return anySatisfy(diagnostic -> + assertFactory.createAssert(diagnostic).hasIssueOnRange(Ranges.create(startLine, startChar, endLine, endChar), + message, relatedLocationRanges) + ); + } + @Override protected DiagnosticAssert toAssert(Diagnostic value, String description) { return assertFactory.createAssert(value); From f1dde3da11e0cfafc24f6e27552a347ae3db8040 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 29 May 2022 17:21:59 +0300 Subject: [PATCH 029/595] =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B4?= =?UTF-8?q?=D1=83=D0=B1=D0=BB=D0=B5=D0=B9=20=D0=B3=D0=BB=D0=BE=D0=B1.=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...atedInsertionIntoCollectionDiagnostic.java | 21 ++++++++++++------- ...InsertionIntoCollectionDiagnosticTest.java | 20 +++++++++++++++--- ...catedInsertionIntoCollectionDiagnostic.bsl | 16 ++++++++++++++ 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 5686161c2c9..a572ad55f6c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -36,6 +36,7 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.tree.TerminalNode; import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.eclipse.lsp4j.Range; @@ -127,7 +128,6 @@ private List getPossibleDuplicates() { return codeBlock.statement().stream() .map(BSLParser.StatementContext::callStatement) .filter(Objects::nonNull) - .filter(callStatement -> callStatement.IDENTIFIER() != null) .filter(callStatement -> callStatement.accessCall() != null) .map(callStatement -> groupingCalls(callStatement, callStatement.accessCall())) .filter(Objects::nonNull) @@ -137,9 +137,6 @@ private List getPossibleDuplicates() { private @Nullable GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLParser.AccessCallContext accessCallContext) { final var methodCallContext = accessCallContext.methodCall(); - if (methodCallContext == null) { - return null; - } final var callParams = methodCallContext.doCall().callParamList().callParam(); if (callParams.isEmpty()) { return null; @@ -156,10 +153,18 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars if (isBlankBSLString(firstParam) || isIgnoredBSLValues(firstParam)) { return null; } + final TerminalNode identifierContext; + final String parens; + if (callStatement.IDENTIFIER() != null){ + identifierContext = callStatement.IDENTIFIER(); + parens = ""; + } else { + identifierContext = callStatement.globalMethodCall().methodName().IDENTIFIER(); + parens = "()"; + } + final var collectionName = getFullIdentifier(identifierContext.getText().concat(parens), callStatement.modifier()); - final var fullIdentifier = getFullIdentifier(callStatement.IDENTIFIER().getText(), callStatement.modifier()); - - return new GroupingData(callStatement, fullIdentifier, fullIdentifier.concat("."), methodName, + return new GroupingData(callStatement, collectionName, collectionName.concat("."), methodName, firstParam, firstParam.concat("."), firstParamContext); } @@ -276,7 +281,7 @@ private boolean hasBreakerIntoCodeBlock(BSLParserRuleContext breakerContext) { } final var rootParent = Trees.getRootParent(breakerContext, BREAKERS_ROOTS); if (rootParent == null) { - return true; + return true; // сюда должны попасть, только если модуль не по грамматике, но иначе ругань на возможный null } return !Ranges.containsRange(getBlockRange(), Ranges.create(rootParent)); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 009ccb92784..97287d3b8da 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -139,10 +139,24 @@ void test() { Arrays.asList( Ranges.create(170, 4, 57), Ranges.create(171, 4, 65) - ) - ); + )) + + .hasIssueOnRange(265, 4, 39, + getMessage("СтрокаТаблицы", "Коллекция()"), + Arrays.asList( + Ranges.create(264, 4, 39), + Ranges.create(265, 4, 39) + )) + + .hasIssueOnRange(268, 4, 50, + getMessage("СтрокаТаблицы2", "Коллекция2().Реквизит"), + Arrays.asList( + Ranges.create(267, 4, 50), + Ranges.create(268, 4, 50) + )) + ; - assertThat(diagnostics).hasSize(16); + assertThat(diagnostics).hasSize(18); } @Test diff --git a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl index 6fa11a681c0..5d99e9badbf 100644 --- a/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl +++ b/src/test/resources/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.bsl @@ -260,3 +260,19 @@ Коллекция2.Добавить(Элемент); // не ошибка КонецЦикла; КонецПроцедуры + +Процедура ДубльПриВызовеГлобальногоМетода(СтрокаТаблицы) + Коллекция().Добавить(СтрокаТаблицы); + Коллекция().Добавить(СтрокаТаблицы); // ошибка + + Коллекция2().Реквизит.Добавить(СтрокаТаблицы2); + Коллекция2().Реквизит.Добавить(СтрокаТаблицы2); // ошибка +КонецПроцедуры + +Процедура СтранноеДляПокрытия() + Коллекция.Вставить(); + Коллекция.Вставить(); //не ошибка + + Коллекция2().Реквизит.Добавить(); + Коллекция2().Реквизит.Добавить(); // не ошибка +КонецПроцедуры From 9e79d6d289109c865a9d7630ace27e1ef7901ac2 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 29 May 2022 17:51:09 +0300 Subject: [PATCH 030/595] =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=83=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index a572ad55f6c..672ccf66507 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -138,9 +138,6 @@ private List getPossibleDuplicates() { GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLParser.AccessCallContext accessCallContext) { final var methodCallContext = accessCallContext.methodCall(); final var callParams = methodCallContext.doCall().callParamList().callParam(); - if (callParams.isEmpty()) { - return null; - } final CallParamContext firstParamContext = callParams.get(0); if (firstParamContext.getChildCount() == 0) { return null; From 757594fa6c7645716dba38bbdc830473189f8a99 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 29 May 2022 18:08:35 +0300 Subject: [PATCH 031/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=20=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D1=8C=D0=B1=D0=B0=20=D0=B7=D0=B0=20=D0=BF=D0=BE=D0=BA=D1=80?= =?UTF-8?q?=D1=8B=D1=82=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...uplicatedInsertionIntoCollectionDiagnostic.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 672ccf66507..1890ad38c28 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -117,8 +117,9 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { final List possibleDuplicateStatements = getPossibleDuplicates(); if (!possibleDuplicateStatements.isEmpty()) { - final var duplicatesStream = explorePossibleDuplicateStatements(possibleDuplicateStatements); - duplicatesStream.forEach(this::fireIssue); + blockRange = Ranges.create(codeBlock); + explorePossibleDuplicateStatements(possibleDuplicateStatements) + .forEach(this::fireIssue); } clearCodeBlockFields(); return super.visitCodeBlock(codeBlock); @@ -280,7 +281,7 @@ private boolean hasBreakerIntoCodeBlock(BSLParserRuleContext breakerContext) { if (rootParent == null) { return true; // сюда должны попасть, только если модуль не по грамматике, но иначе ругань на возможный null } - return !Ranges.containsRange(getBlockRange(), Ranges.create(rootParent)); + return !Ranges.containsRange(blockRange, Ranges.create(rootParent)); } private boolean usedAsFunctionParamsBetweenCalls(Range border, GroupingData groupingData) { @@ -319,13 +320,6 @@ private void fireIssue(List duplicates) { diagnosticStorage.addDiagnostic(dataForIssue.callStatement, message, relatedInformationList); } - private Range getBlockRange() { - if (blockRange == null) { - blockRange = Ranges.create(codeBlock); - } - return blockRange; - } - private List getAssignments() { if (blockAssignments == null) { blockAssignments = Trees.findAllRuleNodes(codeBlock, BSLParser.RULE_assignment).stream() From f48903d021d85e2f57c0cd469f4d5041dd62f09b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 30 May 2022 13:16:05 +0300 Subject: [PATCH 032/595] severity MAJOR --- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 1890ad38c28..af0628ee6c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -53,7 +53,7 @@ @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, - severity = DiagnosticSeverity.CRITICAL, + severity = DiagnosticSeverity.MAJOR, minutesToFix = 1, tags = { DiagnosticTag.BRAINOVERLOAD, From 03e9fe5786ebcd2102895c848ae0e5119793f0fc Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 17 Jul 2022 20:42:39 +0300 Subject: [PATCH 033/595] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...etersBetweenClientAndServerDiagnostic.java | 148 ++++++++++++++++++ ...eenClientAndServerDiagnostic_en.properties | 2 + ...eenClientAndServerDiagnostic_ru.properties | 2 + ...sBetweenClientAndServerDiagnosticTest.java | 54 +++++++ ...metersBetweenClientAndServerDiagnostic.bsl | 27 ++++ 5 files changed, 233 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java new file mode 100644 index 00000000000..6125fae9d96 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -0,0 +1,148 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.context.symbol.VariableSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.CompilerDirectiveKind; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.languageserver.references.model.OccurrenceType; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.tuple.Triple; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.Collection; +import java.util.EnumSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 2, + tags = { + DiagnosticTag.BADPRACTICE, + DiagnosticTag.PERFORMANCE, + DiagnosticTag.STANDARD + } + // TODO учесть подходящие типы модулей - только клиентские, только серверные или все? +) + +@RequiredArgsConstructor +public class TransferringParametersBetweenClientAndServerDiagnostic extends AbstractDiagnostic { + private static final Set SERVER_COMPILER_DIRECTIVE_KINDS = EnumSet.of( + CompilerDirectiveKind.AT_SERVER, +// CompilerDirectiveKind.AT_CLIENT_AT_SERVER_NO_CONTEXT, + CompilerDirectiveKind.AT_SERVER_NO_CONTEXT + ); + private final ReferenceIndex referenceIndex; + + // Не учитываются вложенные вызовы. Только прямые - клиентский метод вызывает серверный метод напрямую + + @Override + protected void check() { + getMethodParamsStream() + // сначала получаю вызовы из клиентских методов, а уже потом проверяю использование параметров внутри метода, + // чтобы исключить лишний анализ серверных методов, которые вызываются из серверных методов + .map(pair -> Triple.of(pair.getLeft(), + pair.getRight(), + getRefCalls(pair.getLeft()))) + .filter(triple -> !triple.getRight().isEmpty()) + .map(triple -> Triple.of(triple.getLeft(), + notAssignedParams(triple.getLeft(), triple.getMiddle()), + triple.getRight())) + .forEach(triple -> triple.getMiddle().forEach(parameterDefinition -> + diagnosticStorage.addDiagnostic(parameterDefinition.getRange(), + info.getMessage(parameterDefinition.getName(), triple.getLeft().getName()))) + ); // TODO добавить места вызовов как связанную информацию + } + + private Stream>> getMethodParamsStream() { + return documentContext.getSymbolTree().getMethods().stream() + .filter(methodSymbol -> isEqualCompilerDirective(methodSymbol, SERVER_COMPILER_DIRECTIVE_KINDS)) + .map(methodSymbol -> Pair.of(methodSymbol, + methodSymbol.getParameters().stream() + .filter(parameterDefinition -> !parameterDefinition.isByValue()) + .collect(Collectors.toUnmodifiableList()))) + .filter(pair -> !pair.getRight().isEmpty()); + } + + private List getRefCalls(MethodSymbol methodSymbol) { + return referenceIndex.getReferencesTo(methodSymbol).stream() + .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE) + .filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall) + .collect(Collectors.toUnmodifiableList()); + } + + private static boolean isClientCall(Reference ref) { + // TODO учесть возможность вызова из клиентского модуля, в котором не нужны\не указаны директивы компиляции + return Optional.of(ref.getFrom()) + .filter(MethodSymbol.class::isInstance) + .map(MethodSymbol.class::cast) + .filter(methodSymbol -> isEqualCompilerDirective(methodSymbol, CompilerDirectiveKind.AT_CLIENT)) + .isPresent(); + } + + private List notAssignedParams(MethodSymbol method, List parameterDefinitions) { + return parameterDefinitions.stream() + .filter(parameterDefinition -> nonAssignedParam(method, parameterDefinition)) + .collect(Collectors.toUnmodifiableList()); + } + + private boolean nonAssignedParam(MethodSymbol method, ParameterDefinition parameterDefinition) { + return getVariableByParameter(method, parameterDefinition) + .anyMatch(variableSymbol -> referenceIndex.getReferencesTo(variableSymbol).stream() + .noneMatch(ref -> ref.getOccurrenceType() == OccurrenceType.DEFINITION)); + } + + private static Stream getVariableByParameter(MethodSymbol method, ParameterDefinition parameterDefinition) { + return method.getChildren().stream() + // в будущем могут появиться и другие символы, подчиненные методам + .filter(sourceDefinedSymbol -> sourceDefinedSymbol.getSymbolKind() == SymbolKind.Variable) + .filter(variable -> parameterDefinition.getRange().getStart().equals(variable.getSelectionRange().getStart())) + .filter(VariableSymbol.class::isInstance) + .map(VariableSymbol.class::cast) + .findFirst().stream(); + } + + private static boolean isEqualCompilerDirective(MethodSymbol method, Collection compilerDirectiveKinds){ + return method.getCompilerDirectiveKind() + .filter(compilerDirectiveKinds::contains) + .isPresent(); + } + + private static boolean isEqualCompilerDirective(MethodSymbol method, CompilerDirectiveKind compilerDirectiveKind){ + return method.getCompilerDirectiveKind() + .filter(compilerDirective -> compilerDirective == compilerDirectiveKind) + .isPresent(); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_en.properties new file mode 100644 index 00000000000..5fb24da373e --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Set the modifier "ByValue" for the "%s" parameter of the "%s" method +diagnosticName=Transferring parameters between the client and the server diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties new file mode 100644 index 00000000000..357d7453ecd --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Установите модификатор Знач для параметра %s метода %s +diagnosticName=Передача параметров между клиентом и сервером diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java new file mode 100644 index 00000000000..dc3514d13b5 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java @@ -0,0 +1,54 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +@CleanupContextBeforeClassAndAfterClass +class TransferringParametersBetweenClientAndServerDiagnosticTest extends AbstractDiagnosticTest { + TransferringParametersBetweenClientAndServerDiagnosticTest() { + super(TransferringParametersBetweenClientAndServerDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasMessageOnRange(getMessage("Парам1", "Сервер1"), 6, 18, 24) + .hasSize(1); + } + + private String getMessage(String paramName, String methodName) { + return String.format("Установите модификатор Знач для параметра %s метода %s", + paramName, methodName); + } + + +} diff --git a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl new file mode 100644 index 00000000000..a805b3d06a2 --- /dev/null +++ b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl @@ -0,0 +1,27 @@ +&НаКлиенте +Процедура Клиент1() + Сервер1(2); +КонецПроцедуры + +&НаСервере +Процедура Сервер1(Парам1) // ошибка +КонецПроцедуры + +&НаКлиенте +Процедура Клиент2() + Сервер2(2); +КонецПроцедуры + +&НаСервере +Процедура Сервер2(Знач Парам1) // не ошибка +КонецПроцедуры + +&НаКлиенте +Процедура Клиент3() + Сервер3(2); +КонецПроцедуры + +&НаСервере +Процедура Сервер3(Парам1) // не ошибка + Парам1 = 10; +КонецПроцедуры From a72f9f939e4f121375a25e1d9b492575def2360c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 17 Jul 2022 19:30:08 +0300 Subject: [PATCH 034/595] =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20super.visitNewExpression?= =?UTF-8?q?(ctx);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 88b82eb2ea8..b9c435a0239 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -132,7 +132,7 @@ public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ct if (NotifyDescription.isNotifyDescription(ctx)) { final var doCallContext = ctx.doCall(); if (doCallContext == null){ - return ctx; + return super.visitNewExpression(ctx); } var callParamList = doCallContext.callParamList().callParam(); From 16b5f3d87534de80dadf841e62bcdd336bf728ef Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 19 Jul 2022 08:26:41 +0300 Subject: [PATCH 035/595] =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ferringParametersBetweenClientAndServer.md | 50 +++++++++++++++++++ ...ferringParametersBetweenClientAndServer.md | 16 ++++++ 2 files changed, 66 insertions(+) create mode 100644 docs/diagnostics/TransferringParametersBetweenClientAndServer.md create mode 100644 docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md new file mode 100644 index 00000000000..3d877dc6a30 --- /dev/null +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -0,0 +1,50 @@ +# (TransferringParametersBetweenClientAndServer) + + +## Описание диагностики + +При передаче управления с клиента на сервер (и обратно) всегда передаются копии параметров. + +- При вызове серверной процедуры или функции с клиента происходит создание копии фактического параметра и передача этой копии на сторону сервера. +- При возврате управления с сервера на клиента также происходит создание копии формального параметра (с которым происходила работы в вызванной процедуре или функции) для передачи обратно на клиента. + +Если формальный параметр указан с модификатором Знач, то значение параметра будет передаваться только при вызове процедуры или функции и не будет передаваться обратно при возврате управления на клиента. + +Текущее правило находит вызовы серверных методов, выполняемых из клиентских методов, и выдает замечания на параметры без модификатора Знач, для которых не выполняется установка значения. + +## Примеры + +Пример неточной передачи параметров +```bsl +&НаКлиенте +Процедура ВставитьИзБуфераОбменаЗавершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт + + Если НайденныеОбъекты = Неопределено Тогда + Возврат; + КонецЕсли; + + ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты); + +КонецПроцедуры + +&НаСервере +Процедура ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты) + // входная коллекция НайденныеОбъекты не меняется и поэтому нет смысла дополнительно возвращать ее с клиента + + Для Каждого Значение Из НайденныеОбъекты Цикл + ВыбранныеПользователиИГруппы.Добавить().Пользователь = Значение; + КонецЦикла; + Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); + +КонецПроцедуры +``` + +## Источники + + + +- [Статья на 1С:ИТС - Вызов с передачей управления с клиента на сервер](https://its.1c.ru/db/v8318doc#bookmark:dev:TI000000153) diff --git a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md new file mode 100644 index 00000000000..b841a6b0bde --- /dev/null +++ b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -0,0 +1,16 @@ +# (TransferringParametersBetweenClientAndServer) + + +## Description + + +## Examples + + +## Sources + + From b92b84200b79ab99cdb7dc48c31b5351a6ec75b1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 19 Jul 2022 12:46:39 +0300 Subject: [PATCH 036/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ferringParametersBetweenClientAndServer.md | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index 3d877dc6a30..1efdc4fc69b 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -17,26 +17,38 @@ Пример неточной передачи параметров ```bsl &НаКлиенте -Процедура ВставитьИзБуфераОбменаЗавершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт +Процедура ГруппыПользователейПеретаскиваниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт - Если НайденныеОбъекты = Неопределено Тогда + Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; - ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты); + СообщениеПользователю = ПеремещениеПользователяВНовуюГруппу( + ДополнительныеПараметры.ПараметрыПеретаскивания, + ДополнительныеПараметры.Строка, + ДополнительныеПараметры.Перемещение); КонецПроцедуры +// входные параметры МассивПользователей и остальные параметры не меняются +// и поэтому нет смысла дополнительно возвращать их с сервера &НаСервере -Процедура ВставитьИзБуфераОбменаЗавершениеСервер(НайденныеОбъекты) - // входная коллекция НайденныеОбъекты не меняется и поэтому нет смысла дополнительно возвращать ее с клиента - - Для Каждого Значение Из НайденныеОбъекты Цикл - ВыбранныеПользователиИГруппы.Добавить().Пользователь = Значение; - КонецЦикла; - Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); - -КонецПроцедуры +Функция ПеремещениеПользователяВНовуюГруппу(МассивПользователей, НоваяГруппаВладелец, Перемещение) + + Если НоваяГруппаВладелец = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ТекущаяГруппаВладелец = Элементы.ГруппыПользователей.ТекущаяСтрока; + СообщениеПользователю = ПользователиСлужебный.ПеремещениеПользователяВНовуюГруппу( + МассивПользователей, ТекущаяГруппаВладелец, НоваяГруппаВладелец, Перемещение); + + Элементы.ПользователиСписок.Обновить(); + Элементы.ГруппыПользователей.Обновить(); + + Возврат СообщениеПользователю; + +КонецФункции ``` ## Источники From 654f9c6499f30ea378f091bebca3b0987126dafb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 19:31:49 +0300 Subject: [PATCH 037/595] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rringParametersBetweenClientAndServerDiagnostic.bsl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl index a805b3d06a2..c207f1a0e66 100644 --- a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl +++ b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl @@ -25,3 +25,13 @@ Процедура Сервер3(Парам1) // не ошибка Парам1 = 10; КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура КлиентСервер4(Парам1) // не ошибка + Сервер4(2); +КонецПроцедуры + +&НаСервере +Процедура Сервер4(Парам1) // не ошибка + ЕщеМетод(Парам1); +КонецПроцедуры From bae731696358fdec00d701444450749d204d8f40 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 19:33:20 +0300 Subject: [PATCH 038/595] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TransferringParametersBetweenClientAndServerDiagnostic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 6125fae9d96..b8e85013cca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -98,6 +98,7 @@ private Stream>> getMethodParamsStr private List getRefCalls(MethodSymbol methodSymbol) { return referenceIndex.getReferencesTo(methodSymbol).stream() + // в будущем могут появиться и другие виды ссылок .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE) .filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall) .collect(Collectors.toUnmodifiableList()); From 209ef8a9111b013931e3795796801b10900fc95c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 19:45:22 +0300 Subject: [PATCH 039/595] =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TransferringParametersBetweenClientAndServer.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index 1efdc4fc69b..c5a3492088c 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -10,7 +10,14 @@ Если формальный параметр указан с модификатором Знач, то значение параметра будет передаваться только при вызове процедуры или функции и не будет передаваться обратно при возврате управления на клиента. -Текущее правило находит вызовы серверных методов, выполняемых из клиентских методов, и выдает замечания на параметры без модификатора Знач, для которых не выполняется установка значения. +Возможные сценарии: + +- Если из клиентского метода в серверный метод без модификатора Знач передается структура со вложенными структурами, и параметр не меняется внутри серверного метода, в этом случае при возврате управления от сервера будет передана копия этой структуры со всеми ее вложениями. +- В случае передачи плоской коллекции, которая не изменяется, например, массив, копия этой коллекции также зря будет возвращаться с сервера на клиент. + +Как итого, отсутствие модификатора Знач при клиент-серверном взаимодействии может привести к ухудшению производительности и выполнению лишней\ненужной нагрузки как клиентом, так и сервером. + +Текущее правило находит серверные методы, выполняемые из клиентских методов, и выдает замечания на параметры без модификатора Знач, для которых не выполняется установка значения. ## Примеры From 8daa68cef2df305a1e782aaa3e8c4f09a55e92d8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 19:48:13 +0300 Subject: [PATCH 040/595] =?UTF-8?q?=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/TransferringParametersBetweenClientAndServer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index c5a3492088c..f483070a5e8 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -15,7 +15,7 @@ - Если из клиентского метода в серверный метод без модификатора Знач передается структура со вложенными структурами, и параметр не меняется внутри серверного метода, в этом случае при возврате управления от сервера будет передана копия этой структуры со всеми ее вложениями. - В случае передачи плоской коллекции, которая не изменяется, например, массив, копия этой коллекции также зря будет возвращаться с сервера на клиент. -Как итого, отсутствие модификатора Знач при клиент-серверном взаимодействии может привести к ухудшению производительности и выполнению лишней\ненужной нагрузки как клиентом, так и сервером. +В итоге отсутствие модификатора Знач при клиент-серверном взаимодействии может привести к ухудшению производительности и выполнению лишней\ненужной нагрузки как клиентом, так и сервером. Текущее правило находит серверные методы, выполняемые из клиентских методов, и выдает замечания на параметры без модификатора Знач, для которых не выполняется установка значения. From 662b8012f16ed9267636a8d9e39b0b3e33b90347 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 20:08:56 +0300 Subject: [PATCH 041/595] =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TransferringParametersBetweenClientAndServerDiagnostic.bsl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl index c207f1a0e66..196060aaf18 100644 --- a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl +++ b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl @@ -5,6 +5,7 @@ &НаСервере Процедура Сервер1(Парам1) // ошибка + Метод(Парам1); КонецПроцедуры &НаКлиенте From 51a285f0dc64168f8de98d341e70031095160b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Wed, 26 Oct 2022 18:19:43 +0300 Subject: [PATCH 042/595] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/MissedRequiredParameter.md | 16 ++++++ .../en/diagnostics/MissedRequiredParameter.md | 16 ++++++ .../MissedRequiredParameterDiagnostic.java | 49 +++++++++++++++++++ ...dRequiredParameterDiagnostic_en.properties | 2 + ...dRequiredParameterDiagnostic_ru.properties | 2 + ...MissedRequiredParameterDiagnosticTest.java | 26 ++++++++++ .../MissedRequiredParameterDiagnostic.bsl | 25 ++++++++++ 7 files changed, 136 insertions(+) create mode 100644 docs/diagnostics/MissedRequiredParameter.md create mode 100644 docs/en/diagnostics/MissedRequiredParameter.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl diff --git a/docs/diagnostics/MissedRequiredParameter.md b/docs/diagnostics/MissedRequiredParameter.md new file mode 100644 index 00000000000..ac6446a351d --- /dev/null +++ b/docs/diagnostics/MissedRequiredParameter.md @@ -0,0 +1,16 @@ +# (MissedRequiredParameter) + + +## Описание диагностики + + +## Примеры + + +## Источники + + diff --git a/docs/en/diagnostics/MissedRequiredParameter.md b/docs/en/diagnostics/MissedRequiredParameter.md new file mode 100644 index 00000000000..86aaa78f3b0 --- /dev/null +++ b/docs/en/diagnostics/MissedRequiredParameter.md @@ -0,0 +1,16 @@ +# Missed required parameter (MissedRequiredParameter) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java new file mode 100644 index 00000000000..bc98bb717c8 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -0,0 +1,49 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.parser.BSLParser; +import org.antlr.v4.runtime.tree.ParseTree; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.INFO, + minutesToFix = 1, + tags = { + DiagnosticTag.ERROR + } + +) +public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic { + + @Override + public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { + String methodName = ctx.methodName().IDENTIFIER().getText(); + var method = documentContext.getSymbolTree().getMethodSymbol(methodName); + if (method.isEmpty()) { + return ctx; + } + + var callParameters = ctx.doCall().callParamList().callParam(); + var methodParameters = method.get().getParameters(); + int callParametersCount = callParameters.size(); + int methodParametersCount = methodParameters.size(); + + for (int i = 0; i < methodParametersCount; i++) { + var methodParameter = methodParameters.get(i); + if (methodParameter.isOptional()) { + continue; + } + if (callParametersCount <= i) { + diagnosticStorage.addDiagnostic(ctx, "Не указан обязательный параметр " + methodParameter.getName()); + } else if (callParameters.get(i).expression() == null) { + diagnosticStorage.addDiagnostic(ctx, "Пропущен обязательный параметры " + methodParameter.getName()); + } + } + + return ctx; + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties new file mode 100644 index 00000000000..cec12a86e80 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage= +diagnosticName=Missed required parameter diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties new file mode 100644 index 00000000000..7f851cb4250 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=<Сообщение> +diagnosticName=Пропущен обязательный параметр метода diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java new file mode 100644 index 00000000000..3d1f04277fd --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -0,0 +1,26 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class MissedRequiredParameterDiagnosticTest extends AbstractDiagnosticTest { + MissedRequiredParameterDiagnosticTest() { + super(MissedRequiredParameterDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).hasSize(2); + assertThat(diagnostics, true) + .hasRange(2, 16, 2, 29) + .hasRange(8, 16, 8, 27); + + } +} diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl new file mode 100644 index 00000000000..31206d4fbb3 --- /dev/null +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -0,0 +1,25 @@ +Процедура Рассчет() + + Результат = Сложение(, 2); + Сообщить(Результат); + + Инкремент(Результат); + Сообщить(Результат); + + Результат = Сложение(5); + Сообщить(Результат); + + Результат = Сложение(5, 4, 3); + Сообщить(Результат); + +КонецПроцедуры + +Функция Сложение(Левый, Правый) + Возврат Левый + Правый; +КонецФункции + +Функция Инкремент(Значение, Приращение = 1) + Значение = Значение + Приращение; + Возврат Значение; +КонецФункции + From 2af2d8949c833de2c701795b3bef6f692b43fa37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Wed, 26 Oct 2022 18:29:41 +0300 Subject: [PATCH 043/595] =?UTF-8?q?=D0=A1=D0=BE=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20+=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MissedRequiredParameterDiagnostic.java | 8 +++----- .../MissedRequiredParameterDiagnostic_en.properties | 2 +- .../MissedRequiredParameterDiagnostic_ru.properties | 2 +- .../MissedRequiredParameterDiagnosticTest.java | 6 +++--- .../diagnostics/MissedRequiredParameterDiagnostic.bsl | 3 +++ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index bc98bb717c8..8eda21e6681 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,6 +1,5 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -37,10 +36,9 @@ public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { if (methodParameter.isOptional()) { continue; } - if (callParametersCount <= i) { - diagnosticStorage.addDiagnostic(ctx, "Не указан обязательный параметр " + methodParameter.getName()); - } else if (callParameters.get(i).expression() == null) { - diagnosticStorage.addDiagnostic(ctx, "Пропущен обязательный параметры " + methodParameter.getName()); + + if (callParametersCount <= i || callParameters.get(i).expression() == null) { + diagnosticStorage.addDiagnostic(ctx, info.getMessage(methodParameter.getName())); } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties index cec12a86e80..fecc494204e 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage= +diagnosticMessage=Missed required parameter '%s' diagnosticName=Missed required parameter diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties index 7f851cb4250..854aec8befc 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=<Сообщение> +diagnosticMessage=Пропущен обязательный параметр '%s' diagnosticName=Пропущен обязательный параметр метода diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 3d1f04277fd..76902254233 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -17,10 +17,10 @@ void test() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(2); + assertThat(diagnostics).hasSize(4); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) - .hasRange(8, 16, 8, 27); - + .hasRange(8, 16, 8, 27) + .hasRange(14, 16, 14, 26); } } diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index 31206d4fbb3..4f24ae6523c 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -12,6 +12,9 @@ Результат = Сложение(5, 4, 3); Сообщить(Результат); + Результат = Сложение(); + Сообщить(Результат); + КонецПроцедуры Функция Сложение(Левый, Правый) From ed1080cdaa4b3c840a31690d6c9050883eacdbca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Thu, 27 Oct 2022 22:57:34 +0300 Subject: [PATCH 044/595] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=B2=D1=8B=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=20"=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D1=85"=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MissedRequiredParameterDiagnostic.java | 81 ++++++++++++++++--- ...MissedRequiredParameterDiagnosticTest.java | 20 ++++- .../MissedRequiredParameterDiagnostic.bsl | 11 +++ 3 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 8eda21e6681..90d30097745 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,11 +1,22 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.parser.BSLParser; +import lombok.RequiredArgsConstructor; +import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.HashMap; +import java.util.Map; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -16,32 +27,76 @@ } ) +@RequiredArgsConstructor public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic { + private final ReferenceIndex referenceIndex; + + Map calls = new HashMap<>(); + + @Override + public ParseTree visitFile(BSLParser.FileContext ctx) { + calls.clear(); + super.visitFile(ctx); + + for (var reference : referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method)) { + if (calls.containsKey(reference.getSelectionRange())) { + checkMethod((MethodSymbol) reference.getSymbol(), calls.get(reference.getSelectionRange())); + } + } + + calls.clear(); + return ctx; + } + @Override public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { String methodName = ctx.methodName().IDENTIFIER().getText(); - var method = documentContext.getSymbolTree().getMethodSymbol(methodName); - if (method.isEmpty()) { - return ctx; + if (documentContext.getSymbolTree().getMethodSymbol(methodName).isPresent()) { + appendMethodCall(ctx.methodName().getStart(), ctx.doCall()); + } + + return super.visitGlobalMethodCall(ctx); + } + + @Override + public ParseTree visitMethodCall(BSLParser.MethodCallContext ctx) { + appendMethodCall(ctx.methodName().getStart(), ctx.doCall()); + return super.visitMethodCall(ctx); + } + + void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext) { + var parameters = doCallContext.callParamList().callParam(); + MethodCall methodCall = new MethodCall(); + methodCall.parameters = new Boolean[parameters.size()]; + + for (int i = 0; i < methodCall.parameters.length; i++) { + methodCall.parameters[i] = parameters.get(i).expression() != null; } - var callParameters = ctx.doCall().callParamList().callParam(); - var methodParameters = method.get().getParameters(); - int callParametersCount = callParameters.size(); - int methodParametersCount = methodParameters.size(); + methodCall.range = Ranges.create(methodName); + calls.put(methodCall.range, methodCall); + } + + private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { + int callParametersCount = callInfo.parameters.length; - for (int i = 0; i < methodParametersCount; i++) { - var methodParameter = methodParameters.get(i); + ParameterDefinition methodParameter; + for (int i = 0; i < methodDefinition.getParameters().size(); i++) { + + methodParameter = methodDefinition.getParameters().get(i); if (methodParameter.isOptional()) { continue; } - if (callParametersCount <= i || callParameters.get(i).expression() == null) { - diagnosticStorage.addDiagnostic(ctx, info.getMessage(methodParameter.getName())); + if (callParametersCount <= i || !callInfo.parameters[i]) { + diagnosticStorage.addDiagnostic(callInfo.range, info.getMessage(methodParameter.getName())); } } + } - return ctx; + private static class MethodCall { + Boolean[] parameters; + Range range; } -} +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 76902254233..bd2884e0a47 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -1,8 +1,14 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.utils.Absolute; +import org.apache.commons.io.FileUtils; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -11,9 +17,10 @@ class MissedRequiredParameterDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); @@ -23,4 +30,15 @@ void test() { .hasRange(8, 16, 8, 27) .hasRange(14, 16, 14, 26); } + + @Test + void testSideMethod() { + initServerContext(Absolute.path(PATH_TO_METADATA)); + List diagnostics = getDiagnostics(); + assertThat(diagnostics).hasSize(4); + assertThat(diagnostics, true) + .hasRange(2, 16, 2, 29) + .hasRange(8, 16, 8, 27) + .hasRange(14, 16, 14, 26); + } } diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index 4f24ae6523c..201f8a98d9d 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -15,6 +15,17 @@ Результат = Сложение(); Сообщить(Результат); + Сообщить(Сложение(5)); + +КонецПроцедуры + +Процедура Версионирование() + ВерсионированиеПриЗаписи(1); + Документ.ПКО.ВерсионированиеПриЗаписи(1); + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(1); + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(,2); + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); + Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); КонецПроцедуры Функция Сложение(Левый, Правый) From c29efd56277d970aa38cf939afb02e0f3e62175d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 28 Oct 2022 12:43:33 +0300 Subject: [PATCH 045/595] =?UTF-8?q?=D0=9D=D0=B0=D0=BA=D0=B8=D0=BD=D1=83?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=B8=20=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=B7=D0=B8=D1=86=D0=B8=D1=8E?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MissedRequiredParameterDiagnostic.java | 11 +++++----- ...MissedRequiredParameterDiagnosticTest.java | 20 +++++++++++++++---- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 90d30097745..40d1a103713 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -9,6 +9,7 @@ import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; @@ -53,7 +54,7 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { String methodName = ctx.methodName().IDENTIFIER().getText(); if (documentContext.getSymbolTree().getMethodSymbol(methodName).isPresent()) { - appendMethodCall(ctx.methodName().getStart(), ctx.doCall()); + appendMethodCall(ctx.methodName().getStart(), ctx.doCall(), ctx); } return super.visitGlobalMethodCall(ctx); @@ -61,11 +62,11 @@ public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { @Override public ParseTree visitMethodCall(BSLParser.MethodCallContext ctx) { - appendMethodCall(ctx.methodName().getStart(), ctx.doCall()); + appendMethodCall(ctx.methodName().getStart(), ctx.doCall(), ctx); return super.visitMethodCall(ctx); } - void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext) { + void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext, BSLParserRuleContext node) { var parameters = doCallContext.callParamList().callParam(); MethodCall methodCall = new MethodCall(); methodCall.parameters = new Boolean[parameters.size()]; @@ -74,8 +75,8 @@ void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext) { methodCall.parameters[i] = parameters.get(i).expression() != null; } - methodCall.range = Ranges.create(methodName); - calls.put(methodCall.range, methodCall); + methodCall.range = Ranges.create(node); + calls.put(Ranges.create(methodName), methodCall); } private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index bd2884e0a47..e06bed91272 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -17,6 +17,7 @@ class MissedRequiredParameterDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(4); + assertThat(diagnostics).hasSize(5); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) - .hasRange(14, 16, 14, 26); + .hasRange(14, 16, 14, 26) + .hasRange(17, 13, 17, 24) + ; } @Test void testSideMethod() { + initServerContext(Absolute.path(PATH_TO_METADATA)); + List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(4); + + assertThat(diagnostics).hasSize(11); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) - .hasRange(14, 16, 14, 26); + .hasRange(14, 16, 14, 26) + .hasRange(17, 13, 17, 24) + .hasRange(25, 22, 25, 50) + .hasRange(24, 22, 24, 49) + .hasRange(26, 22, 26, 48) + .hasRange(27, 31, 27, 57) + ; } } From d145e0d186efdf0e4f69889a2435fe1ebec2e424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 28 Oct 2022 14:40:01 +0300 Subject: [PATCH 046/595] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=20=D0=B8=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/MissedRequiredParameter.md | 31 ++++++++++++++----- .../MissedRequiredParameterDiagnostic.java | 21 +++++++++++++ .../configuration/parameters-schema.json | 10 ++++++ ...MissedRequiredParameterDiagnosticTest.java | 21 +++++++++++++ 4 files changed, 75 insertions(+), 8 deletions(-) diff --git a/docs/diagnostics/MissedRequiredParameter.md b/docs/diagnostics/MissedRequiredParameter.md index ac6446a351d..4c01a46e2f7 100644 --- a/docs/diagnostics/MissedRequiredParameter.md +++ b/docs/diagnostics/MissedRequiredParameter.md @@ -1,16 +1,31 @@ -# (MissedRequiredParameter) +# Пропущен обязательный параметр метода (MissedRequiredParameter) ## Описание диагностики - + +При вызове функций не следует пропускать обязательные параметры. В противном случае, в параметр будет передано значение `Неопределено`, на которое функция может быть не рассчитана. Если же значение `Неопределено` является допустимым, то нужно или его передавать в функцию явно, или сделать этот параметр необязательным со значением по умолчанию `Неопределено`. ## Примеры - + +Например, для вызова процедуры + +```bsl +Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет) +``` + +неправильно: + +```bsl +ПоменятьЦветПоляФормы(,"РезультатПроверки", ЦветаСтиля.ПоясняющийОшибкуТекст); // пропущен первый параметр Форма +ПоменятьЦветПоляФормы(,,); // пропущены все обязательные параметры +``` + +правильно: + +```bsl +ПоменятьЦветПоляФормы(ЭтотОбъект, "РезультатПроверки", Цвет); // указаны все обязательные параметры +``` ## Источники - - +https://its.1c.ru/db/v8std#content:640:hdoc diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 40d1a103713..9c6a8534529 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 7eb26253098..2fb2ec7434e 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1046,6 +1046,16 @@ }, "$id": "#/definitions/MethodSize" }, + "MissedRequiredParameter": { + "description": "Missed required parameter", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Missed required parameter", + "$id": "#/definitions/MissedRequiredParameter" + }, "MissingCodeTryCatchEx": { "description": "Missing code in Raise block in \"Try ... Raise ... EndTry\"", "default": true, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index e06bed91272..3c98b4034d3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; From d8bffec423e3b8a875dde36ef66ae0a21e24d687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 28 Oct 2022 23:36:17 +0300 Subject: [PATCH 047/595] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MissedRequiredParameterDiagnostic.java | 3 +-- .../diagnostics/MissedRequiredParameterDiagnosticTest.java | 7 ++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 9c6a8534529..164796644e8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -53,8 +53,7 @@ public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic { private final ReferenceIndex referenceIndex; - - Map calls = new HashMap<>(); + private final Map calls = new HashMap<>(); @Override public ParseTree visitFile(BSLParser.FileContext ctx) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 3c98b4034d3..f0a13c46d2f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -21,19 +21,16 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.utils.Absolute; -import org.apache.commons.io.FileUtils; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +@CleanupContextBeforeClassAndAfterEachTestMethod class MissedRequiredParameterDiagnosticTest extends AbstractDiagnosticTest { MissedRequiredParameterDiagnosticTest() { super(MissedRequiredParameterDiagnostic.class); From d0f29e34a08e375cf58996e7ca507e815f622835 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Tue, 1 Nov 2022 12:52:03 +0300 Subject: [PATCH 048/595] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MissedRequiredParameterDiagnostic.java | 9 +++------ ...dRequiredParameterDiagnostic_en.properties | 2 +- ...dRequiredParameterDiagnostic_ru.properties | 2 +- ...MissedRequiredParameterDiagnosticTest.java | 6 +++--- .../MissedRequiredParameterDiagnostic.bsl | 19 ++++++++++--------- .../Ext/ManagerModule.bsl" | 2 +- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 164796644e8..f1d9b55ac0c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -41,8 +41,8 @@ import java.util.Map; @DiagnosticMetadata( - type = DiagnosticType.CODE_SMELL, - severity = DiagnosticSeverity.INFO, + type = DiagnosticType.ERROR, + severity = DiagnosticSeverity.MAJOR, minutesToFix = 1, tags = { DiagnosticTag.ERROR @@ -57,7 +57,6 @@ public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic @Override public ParseTree visitFile(BSLParser.FileContext ctx) { - calls.clear(); super.visitFile(ctx); for (var reference : referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method)) { @@ -65,8 +64,6 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { checkMethod((MethodSymbol) reference.getSymbol(), calls.get(reference.getSelectionRange())); } } - - calls.clear(); return ctx; } @@ -86,7 +83,7 @@ public ParseTree visitMethodCall(BSLParser.MethodCallContext ctx) { return super.visitMethodCall(ctx); } - void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext, BSLParserRuleContext node) { + private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext, BSLParserRuleContext node) { var parameters = doCallContext.callParamList().callParam(); MethodCall methodCall = new MethodCall(); methodCall.parameters = new Boolean[parameters.size()]; diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties index fecc494204e..c126ce1efaa 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Missed required parameter '%s' +diagnosticMessage=Specify a required parameter '%s' diagnosticName=Missed required parameter diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties index 854aec8befc..38458264add 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Пропущен обязательный параметр '%s' +diagnosticMessage=Укажите обязательный параметр '%s' diagnosticName=Пропущен обязательный параметр метода diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index f0a13c46d2f..59c50cd3ba5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -32,12 +32,12 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class MissedRequiredParameterDiagnosticTest extends AbstractDiagnosticTest { + private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; + MissedRequiredParameterDiagnosticTest() { super(MissedRequiredParameterDiagnostic.class); } - private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; - @Test void testLocalMethod() { @@ -65,8 +65,8 @@ void testSideMethod() { .hasRange(8, 16, 8, 27) .hasRange(14, 16, 14, 26) .hasRange(17, 13, 17, 24) - .hasRange(25, 22, 25, 50) .hasRange(24, 22, 24, 49) + .hasRange(25, 22, 25, 50) .hasRange(26, 22, 26, 48) .hasRange(27, 31, 27, 57) ; diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index 201f8a98d9d..59620a50160 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -1,31 +1,32 @@ Процедура Рассчет() - Результат = Сложение(, 2); + Результат = Сложение(, 2); // Range(2, 16, 2, 29) Сообщить(Результат); Инкремент(Результат); Сообщить(Результат); - Результат = Сложение(5); + Результат = Сложение(5); // Range(8, 16, 8, 27) Сообщить(Результат); Результат = Сложение(5, 4, 3); Сообщить(Результат); - Результат = Сложение(); + Результат = Сложение(); // 2xRange(14, 16, 14, 26) Сообщить(Результат); - Сообщить(Сложение(5)); + Сообщить(Сложение(5)); // Range(17, 13, 17, 24) КонецПроцедуры Процедура Версионирование() ВерсионированиеПриЗаписи(1); - Документ.ПКО.ВерсионированиеПриЗаписи(1); - ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(1); - ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(,2); - ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); - Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); + Документы.ПКО.ВерсионированиеПриЗаписи(1); + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(1); // Range(24, 22, 24, 49) + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(,2); // Range(25, 22, 25, 50) + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); // 2xRange(26, 22, 26, 48) + Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); // 2xRange(27, 31, 27, 57) + Справочники.Справочник1.Тест(); // Range(28, 28, 28, 34) КонецПроцедуры Функция Сложение(Левый, Правый) diff --git "a/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2721/Ext/ManagerModule.bsl" "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2721/Ext/ManagerModule.bsl" index 5dbe084b1dd..9be9b3f25af 100644 --- "a/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2721/Ext/ManagerModule.bsl" +++ "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2721/Ext/ManagerModule.bsl" @@ -15,7 +15,7 @@ #Область СлужебныеПроцедурыИФункции -Процедура Тест() +Процедура Тест(Параметр) Справочники.Справочник1.ТестЭкспортная(); // Ошибка: Обращение через менеджер избыточно ТестЭкспортная(); From 9d58848eff3e8932786fbbfb505e61bf3bcf4b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Tue, 1 Nov 2022 16:18:44 +0300 Subject: [PATCH 049/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поддержка работы с ЭтотОбъект в ReferenceIndex --- .../MissedRequiredParameterDiagnostic.java | 6 +-- .../references/ReferenceIndexFiller.java | 50 ++++++++++++------- ...MissedRequiredParameterDiagnosticTest.java | 6 ++- .../MissedRequiredParameterDiagnostic.bsl | 3 +- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index f1d9b55ac0c..949a681e09f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -69,7 +69,7 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { @Override public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - String methodName = ctx.methodName().IDENTIFIER().getText(); + var methodName = ctx.methodName().IDENTIFIER().getText(); if (documentContext.getSymbolTree().getMethodSymbol(methodName).isPresent()) { appendMethodCall(ctx.methodName().getStart(), ctx.doCall(), ctx); } @@ -85,7 +85,7 @@ public ParseTree visitMethodCall(BSLParser.MethodCallContext ctx) { private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallContext, BSLParserRuleContext node) { var parameters = doCallContext.callParamList().callParam(); - MethodCall methodCall = new MethodCall(); + var methodCall = new MethodCall(); methodCall.parameters = new Boolean[parameters.size()]; for (int i = 0; i < methodCall.parameters.length; i++) { @@ -97,7 +97,7 @@ private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallCo } private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { - int callParametersCount = callInfo.parameters.length; + var callParametersCount = callInfo.parameters.length; ParameterDefinition methodParameter; for (int i = 0; i < methodDefinition.getParameters().size(); i++) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 74f44f8fe66..4e61f0fef2e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -54,6 +54,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.TreeSet; import java.util.stream.Collectors; import java.util.function.Predicate; @@ -87,6 +88,11 @@ public void fill(DocumentContext documentContext) { @RequiredArgsConstructor private class MethodSymbolReferenceIndexFinder extends BSLParserBaseVisitor { + private final Set THIS_OBJECT_IDENTIFIER = new TreeSet<>(String.CASE_INSENSITIVE_ORDER) {{ + add("ЭтотОбъект"); + add("ThisObject"); + }}; + private final DocumentContext documentContext; private Set commonModuleMdoRefFromSubParams = Collections.emptySet(); @@ -124,26 +130,23 @@ public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ct @Override public BSLParserRuleContext visitComplexIdentifier(BSLParser.ComplexIdentifierContext ctx) { - String mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); - if (mdoRef.isEmpty()) { - return super.visitComplexIdentifier(ctx); - } - - Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + if (ctx.IDENTIFIER() != null && THIS_OBJECT_IDENTIFIER.contains(ctx.IDENTIFIER().getText())) { + // TODO реализовать контексно зависимую проверку (добавить ЭтаФорма, разные версии платформы, oscript) + Methods.getMethodName(ctx).ifPresent(this::checkLocalMethod); + } else { + String mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); + if (mdoRef.isEmpty()) { + return super.visitComplexIdentifier(ctx); + } + Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + } return super.visitComplexIdentifier(ctx); } @Override public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - var mdoRef = MdoRefBuilder.getMdoRef(documentContext); - var moduleType = documentContext.getModuleType(); - var methodName = ctx.methodName().getStart(); - var methodNameText = methodName.getText(); - - documentContext.getSymbolTree().getMethodSymbol(methodNameText) - .ifPresent(methodSymbol -> addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName))); - + checkLocalMethod(ctx.getStart()); return super.visitGlobalMethodCall(ctx); } @@ -151,7 +154,7 @@ public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallCont public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ctx) { if (NotifyDescription.isNotifyDescription(ctx)) { final var doCallContext = ctx.doCall(); - if (doCallContext == null){ + if (doCallContext == null) { return super.visitNewExpression(ctx); } var callParamList = doCallContext.callParamList().callParam(); @@ -179,7 +182,7 @@ public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ct @Override public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { final var identifier = ctx.IDENTIFIER(); - if (identifier != null){ + if (identifier != null) { final List modifiers = Optional.ofNullable(ctx.acceptor()) .map(BSLParser.AcceptorContext::modifier) .orElseGet(Collections::emptyList); @@ -197,7 +200,7 @@ private void checkCall(String mdoRef, Token methodName) { Map modules = configuration.getModulesByMDORef(mdoRef); for (ModuleType moduleType : modules.keySet()) { if (!DEFAULT_MODULE_TYPES.contains(moduleType) - || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { + || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { continue; } addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName)); @@ -210,7 +213,7 @@ private void addMethodCall(String mdoRef, ModuleType moduleType, String methodNa private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String mdoRef) { // todo: move this out of method - if (mdoRef.isEmpty()){ + if (mdoRef.isEmpty()) { return; } Methods.getMethodName(methodName).ifPresent((Token methodNameToken) -> { @@ -232,7 +235,7 @@ private String getModule(BSLParser.CallParamContext callParamContext) { .map(BSLParser.MemberContext::complexIdentifier) .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) .filter(complexIdentifierContext -> complexIdentifierContext.modifier().isEmpty()); - if (complexIdentifierContext1.isEmpty()){ + if (complexIdentifierContext1.isEmpty()) { return ""; } return complexIdentifierContext1 @@ -256,6 +259,15 @@ private Set calcParams(@Nullable BSLParser.ParamListContext paramList) { .map(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef()) .collect(Collectors.toSet()); } + + private void checkLocalMethod(Token methodName) { + var mdoRef = MdoRefBuilder.getMdoRef(documentContext); + var moduleType = documentContext.getModuleType(); + var methodNameText = methodName.getText(); + + documentContext.getSymbolTree().getMethodSymbol(methodNameText) + .ifPresent(methodSymbol -> addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName))); + } } @RequiredArgsConstructor diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 59c50cd3ba5..ac8df8e858e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -43,12 +43,13 @@ void testLocalMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(5); + assertThat(diagnostics).hasSize(6); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) .hasRange(14, 16, 14, 26) .hasRange(17, 13, 17, 24) + .hasRange(29, 27, 29, 40) ; } @@ -59,7 +60,7 @@ void testSideMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(11); + assertThat(diagnostics).hasSize(12); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) @@ -69,6 +70,7 @@ void testSideMethod() { .hasRange(25, 22, 25, 50) .hasRange(26, 22, 26, 48) .hasRange(27, 31, 27, 57) + .hasRange(29, 27, 29, 40) ; } } diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index 59620a50160..cf4982a4e26 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -26,7 +26,8 @@ ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(,2); // Range(25, 22, 25, 50) ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); // 2xRange(26, 22, 26, 48) Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); // 2xRange(27, 31, 27, 57) - Справочники.Справочник1.Тест(); // Range(28, 28, 28, 34) + Справочники.Справочник1.Тест(); // Range(28, 28, 28, 34); + Результат = ЭтотОбъект.Сложение(, 2); // Range(29, 27, 29, 40); КонецПроцедуры Функция Сложение(Левый, Правый) From 3a1681ac3762720aae73e1fb853a6ea7703daf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=8F=D0=BA=D0=B8=D0=BD=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Tue, 1 Nov 2022 19:50:19 +0300 Subject: [PATCH 050/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Накинул тестов --- docs/diagnostics/MissedRequiredParameter.md | 8 +++++--- .../MissedRequiredParameterDiagnostic.java | 11 +++++------ .../MissedRequiredParameterDiagnostic_en.properties | 2 +- .../MissedRequiredParameterDiagnosticTest.java | 6 ++++-- .../diagnostics/MissedRequiredParameterDiagnostic.bsl | 5 +++-- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/diagnostics/MissedRequiredParameter.md b/docs/diagnostics/MissedRequiredParameter.md index 4c01a46e2f7..8454bae0df7 100644 --- a/docs/diagnostics/MissedRequiredParameter.md +++ b/docs/diagnostics/MissedRequiredParameter.md @@ -3,8 +3,10 @@ ## Описание диагностики -При вызове функций не следует пропускать обязательные параметры. В противном случае, в параметр будет передано значение `Неопределено`, на которое функция может быть не рассчитана. Если же значение `Неопределено` является допустимым, то нужно или его передавать в функцию явно, или сделать этот параметр необязательным со значением по умолчанию `Неопределено`. - +При вызове функций не следует пропускать обязательные параметры. В противном случае в параметр будет передано значение `Неопределено`, на которое функция может быть не рассчитана. +Если же значение `Неопределено` является допустимым, то нужно +- или его передавать в функцию явно +- или сделать этот параметр необязательным со значением по умолчанию `Неопределено`. ## Примеры Например, для вызова процедуры @@ -28,4 +30,4 @@ ## Источники -https://its.1c.ru/db/v8std#content:640:hdoc +[Параметры процедур и функций](https://its.1c.ru/db/v8std#content:640:hdoc) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 949a681e09f..c6d253412c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -39,6 +39,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Objects; @DiagnosticMetadata( type = DiagnosticType.ERROR, @@ -58,10 +59,10 @@ public class MissedRequiredParameterDiagnostic extends AbstractVisitorDiagnostic @Override public ParseTree visitFile(BSLParser.FileContext ctx) { super.visitFile(ctx); - for (var reference : referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method)) { - if (calls.containsKey(reference.getSelectionRange())) { - checkMethod((MethodSymbol) reference.getSymbol(), calls.get(reference.getSelectionRange())); + var call = calls.get(reference.getSelectionRange()); + if (call != null) { + checkMethod((MethodSymbol) reference.getSymbol(), call); } } return ctx; @@ -99,10 +100,8 @@ private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallCo private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { var callParametersCount = callInfo.parameters.length; - ParameterDefinition methodParameter; for (int i = 0; i < methodDefinition.getParameters().size(); i++) { - - methodParameter = methodDefinition.getParameters().get(i); + var methodParameter = methodDefinition.getParameters().get(i); if (methodParameter.isOptional()) { continue; } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties index c126ce1efaa..39796e667a0 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties @@ -1,2 +1,2 @@ diagnosticMessage=Specify a required parameter '%s' -diagnosticName=Missed required parameter +diagnosticName=Missed a required method parameter diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index ac8df8e858e..37868e57cf2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -43,7 +43,8 @@ void testLocalMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(6); + assertThat(diagnostics).hasSize(7); // Есть дубли диагностик, + // если пропущено несколько параметров, то на каждый пропуск будет создано уведомление и повешено на один вызов assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) @@ -60,7 +61,8 @@ void testSideMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(12); + assertThat(diagnostics).hasSize(13);// Есть дубли диагностик, + // если пропущено несколько параметров, то на каждый пропуск будет создано уведомление и повешено на один вызов assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index cf4982a4e26..c4b605e1892 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -15,7 +15,7 @@ Результат = Сложение(); // 2xRange(14, 16, 14, 26) Сообщить(Результат); - Сообщить(Сложение(5)); // Range(17, 13, 17, 24) + Сообщить(Сложение(,)); // 2хRange(17, 13, 17, 24) КонецПроцедуры @@ -23,11 +23,12 @@ ВерсионированиеПриЗаписи(1); Документы.ПКО.ВерсионированиеПриЗаписи(1); ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(1); // Range(24, 22, 24, 49) - ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(,2); // Range(25, 22, 25, 50) + ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(2,); // Range(25, 22, 25, 50) ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); // 2xRange(26, 22, 26, 48) Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); // 2xRange(27, 31, 27, 57) Справочники.Справочник1.Тест(); // Range(28, 28, 28, 34); Результат = ЭтотОбъект.Сложение(, 2); // Range(29, 27, 29, 40); + КонецПроцедуры Функция Сложение(Левый, Правый) From 73289174458ca11379f1258a478f505d3ce51d97 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Tue, 1 Nov 2022 22:12:01 +0300 Subject: [PATCH 051/595] =?UTF-8?q?=D0=90=D0=B3=D1=80=D0=B5=D0=B3=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MissedRequiredParameterDiagnostic.java | 10 +++++++--- .../MissedRequiredParameterDiagnostic_en.properties | 2 +- .../MissedRequiredParameterDiagnostic_ru.properties | 2 +- .../MissedRequiredParameterDiagnosticTest.java | 6 ++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index c6d253412c3..1664d4fc8d5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -37,9 +36,9 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.SymbolKind; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.Objects; @DiagnosticMetadata( type = DiagnosticType.ERROR, @@ -100,6 +99,7 @@ private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallCo private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { var callParametersCount = callInfo.parameters.length; + var missedParameters = new ArrayList(); for (int i = 0; i < methodDefinition.getParameters().size(); i++) { var methodParameter = methodDefinition.getParameters().get(i); if (methodParameter.isOptional()) { @@ -107,9 +107,13 @@ private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { } if (callParametersCount <= i || !callInfo.parameters[i]) { - diagnosticStorage.addDiagnostic(callInfo.range, info.getMessage(methodParameter.getName())); + missedParameters.add(methodParameter.getName()); } } + if (!missedParameters.isEmpty()) { + var message = info.getMessage('\'' + String.join("', '", missedParameters) + '\''); + diagnosticStorage.addDiagnostic(callInfo.range, message); + } } private static class MethodCall { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties index 39796e667a0..e8b392b8ab3 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Specify a required parameter '%s' +diagnosticMessage=Specify a required parameter %s diagnosticName=Missed a required method parameter diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties index 38458264add..eb968defac0 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Укажите обязательный параметр '%s' +diagnosticMessage=Укажите обязательный параметр %s diagnosticName=Пропущен обязательный параметр метода diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 37868e57cf2..9a42d65cfd2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -43,8 +43,7 @@ void testLocalMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(7); // Есть дубли диагностик, - // если пропущено несколько параметров, то на каждый пропуск будет создано уведомление и повешено на один вызов + assertThat(diagnostics).hasSize(5); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) @@ -61,8 +60,7 @@ void testSideMethod() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(13);// Есть дубли диагностик, - // если пропущено несколько параметров, то на каждый пропуск будет создано уведомление и повешено на один вызов + assertThat(diagnostics).hasSize(9); assertThat(diagnostics, true) .hasRange(2, 16, 2, 29) .hasRange(8, 16, 8, 27) From 319332b1160085e09eb0a587ddab9db5202b44fb Mon Sep 17 00:00:00 2001 From: alkoleft Date: Mon, 7 Nov 2022 21:34:58 +0300 Subject: [PATCH 052/595] =?UTF-8?q?Revert=20"=D0=9F=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 86a44df818c80816ae83ca92452795b7c8f65bd6. --- .../references/ReferenceIndexFiller.java | 50 +++++++------------ 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 4e61f0fef2e..74f44f8fe66 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -54,7 +54,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.TreeSet; import java.util.stream.Collectors; import java.util.function.Predicate; @@ -88,11 +87,6 @@ public void fill(DocumentContext documentContext) { @RequiredArgsConstructor private class MethodSymbolReferenceIndexFinder extends BSLParserBaseVisitor { - private final Set THIS_OBJECT_IDENTIFIER = new TreeSet<>(String.CASE_INSENSITIVE_ORDER) {{ - add("ЭтотОбъект"); - add("ThisObject"); - }}; - private final DocumentContext documentContext; private Set commonModuleMdoRefFromSubParams = Collections.emptySet(); @@ -130,23 +124,26 @@ public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ct @Override public BSLParserRuleContext visitComplexIdentifier(BSLParser.ComplexIdentifierContext ctx) { - if (ctx.IDENTIFIER() != null && THIS_OBJECT_IDENTIFIER.contains(ctx.IDENTIFIER().getText())) { - // TODO реализовать контексно зависимую проверку (добавить ЭтаФорма, разные версии платформы, oscript) - Methods.getMethodName(ctx).ifPresent(this::checkLocalMethod); - } else { - String mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); - if (mdoRef.isEmpty()) { - return super.visitComplexIdentifier(ctx); - } - - Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + String mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); + if (mdoRef.isEmpty()) { + return super.visitComplexIdentifier(ctx); } + + Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + return super.visitComplexIdentifier(ctx); } @Override public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - checkLocalMethod(ctx.getStart()); + var mdoRef = MdoRefBuilder.getMdoRef(documentContext); + var moduleType = documentContext.getModuleType(); + var methodName = ctx.methodName().getStart(); + var methodNameText = methodName.getText(); + + documentContext.getSymbolTree().getMethodSymbol(methodNameText) + .ifPresent(methodSymbol -> addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName))); + return super.visitGlobalMethodCall(ctx); } @@ -154,7 +151,7 @@ public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallCont public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ctx) { if (NotifyDescription.isNotifyDescription(ctx)) { final var doCallContext = ctx.doCall(); - if (doCallContext == null) { + if (doCallContext == null){ return super.visitNewExpression(ctx); } var callParamList = doCallContext.callParamList().callParam(); @@ -182,7 +179,7 @@ public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ct @Override public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { final var identifier = ctx.IDENTIFIER(); - if (identifier != null) { + if (identifier != null){ final List modifiers = Optional.ofNullable(ctx.acceptor()) .map(BSLParser.AcceptorContext::modifier) .orElseGet(Collections::emptyList); @@ -200,7 +197,7 @@ private void checkCall(String mdoRef, Token methodName) { Map modules = configuration.getModulesByMDORef(mdoRef); for (ModuleType moduleType : modules.keySet()) { if (!DEFAULT_MODULE_TYPES.contains(moduleType) - || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { + || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { continue; } addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName)); @@ -213,7 +210,7 @@ private void addMethodCall(String mdoRef, ModuleType moduleType, String methodNa private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String mdoRef) { // todo: move this out of method - if (mdoRef.isEmpty()) { + if (mdoRef.isEmpty()){ return; } Methods.getMethodName(methodName).ifPresent((Token methodNameToken) -> { @@ -235,7 +232,7 @@ private String getModule(BSLParser.CallParamContext callParamContext) { .map(BSLParser.MemberContext::complexIdentifier) .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) .filter(complexIdentifierContext -> complexIdentifierContext.modifier().isEmpty()); - if (complexIdentifierContext1.isEmpty()) { + if (complexIdentifierContext1.isEmpty()){ return ""; } return complexIdentifierContext1 @@ -259,15 +256,6 @@ private Set calcParams(@Nullable BSLParser.ParamListContext paramList) { .map(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef()) .collect(Collectors.toSet()); } - - private void checkLocalMethod(Token methodName) { - var mdoRef = MdoRefBuilder.getMdoRef(documentContext); - var moduleType = documentContext.getModuleType(); - var methodNameText = methodName.getText(); - - documentContext.getSymbolTree().getMethodSymbol(methodNameText) - .ifPresent(methodSymbol -> addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName))); - } } @RequiredArgsConstructor From 0240ade7b5b0ee452b7efbe432c35b48448d5f89 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Mon, 7 Nov 2022 21:35:17 +0300 Subject: [PATCH 053/595] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MissedRequiredParameterDiagnostic.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 1664d4fc8d5..013235f3856 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -88,7 +88,7 @@ private void appendMethodCall(Token methodName, BSLParser.DoCallContext doCallCo var methodCall = new MethodCall(); methodCall.parameters = new Boolean[parameters.size()]; - for (int i = 0; i < methodCall.parameters.length; i++) { + for (var i = 0; i < methodCall.parameters.length; i++) { methodCall.parameters[i] = parameters.get(i).expression() != null; } @@ -100,7 +100,7 @@ private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { var callParametersCount = callInfo.parameters.length; var missedParameters = new ArrayList(); - for (int i = 0; i < methodDefinition.getParameters().size(); i++) { + for (var i = 0; i < methodDefinition.getParameters().size(); i++) { var methodParameter = methodDefinition.getParameters().get(i); if (methodParameter.isOptional()) { continue; @@ -111,7 +111,7 @@ private void checkMethod(MethodSymbol methodDefinition, MethodCall callInfo) { } } if (!missedParameters.isEmpty()) { - var message = info.getMessage('\'' + String.join("', '", missedParameters) + '\''); + var message = info.getMessage(String.format("'%s'", String.join("', '", missedParameters))); diagnosticStorage.addDiagnostic(callInfo.range, message); } } From 498119a4642a819df814db20a4880fe0edc544dc Mon Sep 17 00:00:00 2001 From: alkoleft Date: Wed, 9 Nov 2022 21:44:27 +0300 Subject: [PATCH 054/595] #577 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Вынес в отдельный метод алгоритм получения типа создаваемого объекта --- .../ConstructorColorInformationSupplier.java | 16 +----- .../CreateQueryInCycleDiagnostic.java | 15 +---- .../StyleElementConstructorsDiagnostic.java | 23 ++------ .../languageserver/utils/Constructors.java | 55 +++++++++++++++++++ 4 files changed, 63 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index 5f1df21f905..0b95184548d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.color; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.utils.Constructors; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; @@ -46,7 +47,6 @@ @Component public class ConstructorColorInformationSupplier implements ColorInformationSupplier { - private static final Pattern QUOTE_PATTERN = Pattern.compile("\""); private static final Pattern COLOR_PATTERN = CaseInsensitivePattern.compile("^(?:Цвет|Color)$"); @Override @@ -58,23 +58,11 @@ public List getColorInformation(DocumentContext documentContex return newExpressions.stream() .map(BSLParser.NewExpressionContext.class::cast) - .filter(newExpression -> COLOR_PATTERN.matcher(typeName(newExpression)).matches()) + .filter(newExpression -> Constructors.typeName(newExpression).filter(name -> COLOR_PATTERN.matcher(name).matches()).isPresent()) .map(ConstructorColorInformationSupplier::toColorInformation) .collect(Collectors.toList()); } - private static String typeName(BSLParser.NewExpressionContext ctx) { - if (ctx.typeName() != null) { - return ctx.typeName().getText(); - } - - if (ctx.doCall() == null || ctx.doCall().callParamList().isEmpty()) { - return ""; - } - - return QUOTE_PATTERN.matcher(ctx.doCall().callParamList().callParam(0).getText()).replaceAll(""); - } - private static ColorInformation toColorInformation(BSLParser.NewExpressionContext ctx) { byte redPosition; byte greenPosition; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index c177079958e..0bf1c2b5a8e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParser.AssignmentContext; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; @@ -98,19 +99,7 @@ private static String getTypeFromConstValue(BSLParser.ConstValueContext constVal private static String getTypeFromNewExpressionContext(BSLParser.NewExpressionContext newExpression) { - String typeName = Optional.ofNullable(newExpression.typeName()) - .map(RuleContext::getText) - .or(() -> Optional.ofNullable(newExpression.doCall()) - .map(BSLParser.DoCallContext::callParamList) - .flatMap(callParamListContext -> callParamListContext.callParam().stream().findFirst()) - .map(BSLParser.CallParamContext::expression) - .map(BSLParser.ExpressionContext::member) - .flatMap(memberListContext -> memberListContext.stream().findFirst()) - .map(BSLParser.MemberContext::constValue) - .filter(constValue -> getTypeFromConstValue(constValue).equals(STRING_TYPE)) - .map(RuleContext::getText) - .map(constValueText -> constValueText.substring(1, constValueText.length() - 1)) - ) + String typeName = Constructors.typeName(newExpression) .orElse(UNDEFINED_TYPE); if (QUERY_BUILDER_PATTERN.matcher(typeName).matches()) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java index 5cca7acb8e3..bb105164133 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; @@ -45,29 +46,13 @@ public class StyleElementConstructorsDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern PATTERN = CaseInsensitivePattern.compile("^(Рамка|Цвет|Шрифт|Color|Border|Font)$"); - private static final Pattern QUOTE_PATTERN = Pattern.compile("\""); @Override public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { - var ctxTypeName = typeName(ctx); - - if (PATTERN.matcher(ctxTypeName).find()) { - diagnosticStorage.addDiagnostic(ctx, info.getMessage(ctxTypeName)); - } + Constructors.typeName(ctx) + .filter(it -> PATTERN.matcher(it).matches()) + .ifPresent(name -> diagnosticStorage.addDiagnostic(ctx, info.getMessage(name))); return super.visitNewExpression(ctx); } - - private static String typeName(BSLParser.NewExpressionContext ctx) { - if (ctx.typeName() != null) { - return ctx.typeName().getText(); - } - - if (ctx.doCall().callParamList().isEmpty()) { - return ""; - } - - return QUOTE_PATTERN.matcher(ctx.doCall().callParamList().callParam(0).getText()).replaceAll(""); - } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java new file mode 100644 index 00000000000..69581c9a10f --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java @@ -0,0 +1,55 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.utils; + +import com.github._1c_syntax.bsl.parser.BSLParser; +import org.antlr.v4.runtime.RuleContext; + +import java.util.List; +import java.util.Optional; + +public class Constructors { + + public static Optional typeName(BSLParser.NewExpressionContext newExpression) { + return Optional.ofNullable(newExpression.typeName()) + .map(RuleContext::getText) + .or(() -> Optional.ofNullable(newExpression.doCall()) + .map(BSLParser.DoCallContext::callParamList) + .map(BSLParser.CallParamListContext::callParam) + .flatMap(Constructors::first) + .map(BSLParser.CallParamContext::expression) + .map(BSLParser.ExpressionContext::member) + .flatMap(Constructors::first) + .map(BSLParser.MemberContext::constValue) + .filter(constValue -> constValue.string() != null) + .map(RuleContext::getText) + .map(constValueText -> constValueText.substring(1, constValueText.length() - 1))); + } + + static private Optional first(List list) { + if (list.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(list.get(0)); + } + } +} From 6a7be533247c4b4b3eb6885a680fa78636187cf0 Mon Sep 17 00:00:00 2001 From: alkoleft Date: Wed, 9 Nov 2022 21:44:43 +0300 Subject: [PATCH 055/595] #577 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверка наличия использования СистемнаяИнформация --- docs/diagnostics/UseSystemInformation.md | 12 ++++ docs/en/diagnostics/UseSystemInformation.md | 12 ++++ .../UseSystemInformationDiagnostic.java | 58 +++++++++++++++++++ .../configuration/parameters-schema.json | 10 ++++ ...eSystemInformationDiagnostic_en.properties | 2 + ...eSystemInformationDiagnostic_ru.properties | 2 + .../UseSystemInformationDiagnosticTest.java | 51 ++++++++++++++++ .../UseSystemInformationDiagnostic.bsl | 10 ++++ 8 files changed, 157 insertions(+) create mode 100644 docs/diagnostics/UseSystemInformation.md create mode 100644 docs/en/diagnostics/UseSystemInformation.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl diff --git a/docs/diagnostics/UseSystemInformation.md b/docs/diagnostics/UseSystemInformation.md new file mode 100644 index 00000000000..ae280ef3a48 --- /dev/null +++ b/docs/diagnostics/UseSystemInformation.md @@ -0,0 +1,12 @@ +# Использование системной информации (UseSystemInformation) + + +## Описание диагностики + +Объект `СистемнаяИнформация` предоставляет данные о компьютере и конфигурации в 1С, которая может быть использована в злонамерянных целях. + +## Примеры + + +## Источники + diff --git a/docs/en/diagnostics/UseSystemInformation.md b/docs/en/diagnostics/UseSystemInformation.md new file mode 100644 index 00000000000..68856e6dc52 --- /dev/null +++ b/docs/en/diagnostics/UseSystemInformation.md @@ -0,0 +1,12 @@ +# Use of system information (UseSystemInformation) + + +## Description + +The `SystemInformation` object provides data about the computer and configuration in 1C, which can be used for malicious purposes. + +## Examples + + +## Sources + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java new file mode 100644 index 00000000000..2d447a6dad5 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java @@ -0,0 +1,58 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Constructors; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; +import org.antlr.v4.runtime.tree.ParseTree; + +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.SECURITY_HOTSPOT, + severity = DiagnosticSeverity.CRITICAL, + activatedByDefault = false, + minutesToFix = 5, + tags = { + DiagnosticTag.SUSPICIOUS + } + +) +public class UseSystemInformationDiagnostic extends AbstractVisitorDiagnostic { + + private static final Pattern PATTERN = CaseInsensitivePattern.compile("^(СистемнаяИнформация|SystemInfo)$"); + + + @Override + public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { + Constructors.typeName(ctx) + .filter(it -> PATTERN.matcher(it).matches()) + .ifPresent(it -> diagnosticStorage.addDiagnostic(ctx)); + + return super.visitNewExpression(ctx); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 7eb26253098..3186dfe1ab6 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1878,6 +1878,16 @@ "title": "Useless collection iteration", "$id": "#/definitions/UseLessForEach" }, + "UseSystemInformation": { + "description": "Use of system information", + "default": false, + "type": [ + "boolean", + "object" + ], + "title": "Use of system information", + "$id": "#/definitions/UseSystemInformation" + }, "UsingCancelParameter": { "description": "Using parameter \"Cancel\"", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties new file mode 100644 index 00000000000..a9d611b7f7f --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=It is necessary to get rid of the use of the `SystemInformation` object +diagnosticName=Use of system information diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties new file mode 100644 index 00000000000..a3163d6c6d7 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Необходимо избавиться от использования объекта `СистемнаяИнформация` +diagnosticName=Использование системной информации diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java new file mode 100644 index 00000000000..c17174562a1 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java @@ -0,0 +1,51 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class UseSystemInformationDiagnosticTest extends AbstractDiagnosticTest { + UseSystemInformationDiagnosticTest() { + super(UseSystemInformationDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).hasSize(5); + assertThat(diagnostics, true) + .hasRange(1, 26, 1, 51) + .hasRange(5, 22, 5, 49) + .hasRange(6, 22, 6, 50) + .hasRange(7, 22, 7, 38) + .hasRange(8, 22, 8, 41) + ; + + } +} diff --git a/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl b/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl new file mode 100644 index 00000000000..0719cc0e312 --- /dev/null +++ b/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl @@ -0,0 +1,10 @@ +Функция ТипТекущейПлатформы() Экспорт + СистемнаяИнформация = Новый СистемнаяИнформация; // Range(1, 26, 1, 51) + Возврат СистемнаяИнформация.ТипПлатформы; +КонецФункции + +СистемнаяИнформация = Новый СистемнаяИнформация(); // Range(5, 22, 5, 49) +СистемнаяИнформация = Новый("СистемнаяИнформация"); // Range(6, 22, 6, 50) +СистемнаяИнформация = Новый SystemInfo; // Range(7, 22, 7, 38) +СистемнаяИнформация = Новый("SystemInfo"); // Range(8, 22, 8, 41) +СистемнаяИнформация = Новый("СистемнаяИнформация2"); From 99a41a9c421987bb57c071e8077e8f045173f88d Mon Sep 17 00:00:00 2001 From: alkoleft Date: Thu, 10 Nov 2022 22:17:23 +0300 Subject: [PATCH 056/595] #577 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Фикс замечаний --- .../languageserver/utils/Constructors.java | 40 +++++++++++++------ ...eSystemInformationDiagnostic_en.properties | 2 +- ...eSystemInformationDiagnostic_ru.properties | 2 +- .../UseSystemInformationDiagnostic.bsl | 3 ++ 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java index 69581c9a10f..d5b59268df1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java @@ -22,30 +22,46 @@ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.parser.BSLParser; +import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.RuleContext; import java.util.List; import java.util.Optional; +/** + * Набор методов для работы с конструкторами объектов 1С + */ +@UtilityClass public class Constructors { + /** + * Вычисляет имя типа создаваемого объекта, работает с + * Новый ТипОбъекта; + * Новый("ТипОбъекта") + * @param newExpression контекст выражения + * @return имя типа объекта + */ public static Optional typeName(BSLParser.NewExpressionContext newExpression) { return Optional.ofNullable(newExpression.typeName()) .map(RuleContext::getText) - .or(() -> Optional.ofNullable(newExpression.doCall()) - .map(BSLParser.DoCallContext::callParamList) - .map(BSLParser.CallParamListContext::callParam) - .flatMap(Constructors::first) - .map(BSLParser.CallParamContext::expression) - .map(BSLParser.ExpressionContext::member) - .flatMap(Constructors::first) - .map(BSLParser.MemberContext::constValue) - .filter(constValue -> constValue.string() != null) - .map(RuleContext::getText) - .map(constValueText -> constValueText.substring(1, constValueText.length() - 1))); + .or(() -> getTypeNameFromArgs(newExpression)); + } + + private static Optional getTypeNameFromArgs(BSLParser.NewExpressionContext newExpression){ + return Optional.ofNullable(newExpression.doCall()) + .map(BSLParser.DoCallContext::callParamList) + .map(BSLParser.CallParamListContext::callParam) + .flatMap(Constructors::first) + .map(BSLParser.CallParamContext::expression) + .map(BSLParser.ExpressionContext::member) + .flatMap(Constructors::first) + .map(BSLParser.MemberContext::constValue) + .filter(constValue -> constValue.string() != null) + .map(RuleContext::getText) + .map(Strings::trimQuotes); } - static private Optional first(List list) { + private static Optional first(List list) { if (list.isEmpty()) { return Optional.empty(); } else { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties index a9d611b7f7f..d04ce9a561a 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage=It is necessary to get rid of the use of the `SystemInformation` object +diagnosticMessage=Get rid of using the `SystemInformation` object diagnosticName=Use of system information diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties index a3163d6c6d7..2e71780e845 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Необходимо избавиться от использования объекта `СистемнаяИнформация` +diagnosticMessage=Избавьтеся от использования объекта `СистемнаяИнформация` diagnosticName=Использование системной информации diff --git a/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl b/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl index 0719cc0e312..8148506c721 100644 --- a/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl +++ b/src/test/resources/diagnostics/UseSystemInformationDiagnostic.bsl @@ -8,3 +8,6 @@ СистемнаяИнформация = Новый SystemInfo; // Range(7, 22, 7, 38) СистемнаяИнформация = Новый("SystemInfo"); // Range(8, 22, 8, 41) СистемнаяИнформация = Новый("СистемнаяИнформация2"); + +ИмяТипа = "СистемнаяИнформация"; +СистемнаяИнформация = Новый(ИмяТипа); \ No newline at end of file From bc89a7175de2025dec3ce1916a1e78ad86053b7c Mon Sep 17 00:00:00 2001 From: alkoleft Date: Fri, 11 Nov 2022 13:29:33 +0300 Subject: [PATCH 057/595] #577 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Переместил в пакет --- .../color/ConstructorColorInformationSupplier.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnostic.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnostic.java | 2 +- .../diagnostics/UseSystemInformationDiagnostic.java | 2 +- .../bsl/languageserver/utils/{ => bsl}/Constructors.java | 3 ++- .../diagnostics/UseSystemInformationDiagnostic_ru.properties | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/{ => bsl}/Constructors.java (95%) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index 0b95184548d..a14b817ae4e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -22,7 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.color; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.utils.Constructors; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index 0bf1c2b5a8e..fdcb4d36334 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -25,7 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.utils.Constructors; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParser.AssignmentContext; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java index bb105164133..558d9d562ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java @@ -26,7 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.utils.Constructors; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java index 2d447a6dad5..ddc1057941a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java @@ -25,7 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.utils.Constructors; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java similarity index 95% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java index d5b59268df1..0df808d3e9b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Constructors.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java @@ -19,8 +19,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -package com.github._1c_syntax.bsl.languageserver.utils; +package com.github._1c_syntax.bsl.languageserver.utils.bsl; +import com.github._1c_syntax.bsl.languageserver.utils.Strings; import com.github._1c_syntax.bsl.parser.BSLParser; import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.RuleContext; diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties index 2e71780e845..ff81ebc0d8f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Избавьтеся от использования объекта `СистемнаяИнформация` +diagnosticMessage=Избавьтесь от использования объекта `СистемнаяИнформация` diagnosticName=Использование системной информации From ccc1c14019d31f56b6021ee7abf23a0a3c542285 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 5 Dec 2022 16:49:10 +0300 Subject: [PATCH 058/595] CommandProvider --- docs/en/index.md | 2 +- docs/index.md | 2 +- .../bsl/languageserver/BSLLanguageServer.java | 10 +++ .../languageserver/BSLWorkspaceService.java | 10 +++ .../codelenses/DefaultCodeLensData.java | 2 +- .../commands/CommandArguments.java | 37 ++++++++ .../commands/CommandSupplier.java | 53 ++++++++++++ .../DefaultCommandArguments.java} | 23 +++-- .../infrastructure/CommandsConfiguration.java | 51 +++++++++++ .../ObjectMapperConfiguration.java} | 44 +++++++--- .../databind/URITypeAdapter.java | 2 +- .../providers/CodeLensProvider.java | 32 ++++--- .../providers/CommandProvider.java | 86 +++++++++++++++++++ 13 files changed, 316 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java rename src/main/java/com/github/_1c_syntax/bsl/languageserver/{codelenses/databind/package-info.java => commands/DefaultCommandArguments.java} (68%) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java rename src/main/java/com/github/_1c_syntax/bsl/languageserver/{codelenses/databind/CodeLensDataObjectMapper.java => databind/ObjectMapperConfiguration.java} (50%) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/{codelenses => }/databind/URITypeAdapter.java (95%) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java diff --git a/docs/en/index.md b/docs/en/index.md index bddae9cae38..99d4ccf23dc 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -60,7 +60,7 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) | [didChangeConfiguration](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration) | yes | with restrictions, see [#1431](https://github.com/1c-syntax/bsl-language-server/issues/1431) | | [didChangeWatchedFiles](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles) | no | | | [symbol](https://microsoft.github.io/language-server-protocol/specification#workspace_symbol) | yes | | -| [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | no | | +| [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | yes | | | [applyEdit](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_applyEdit) | no | | | [willCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_willCreateFiles) | no | | diff --git a/docs/index.md b/docs/index.md index 82eff10f92a..a6e0216b65b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -61,7 +61,7 @@ | [didChangeConfiguration](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration) | yes | с ограничениями, см. [#1431](https://github.com/1c-syntax/bsl-language-server/issues/1431) | | [didChangeWatchedFiles](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles) | no | | | [symbol](https://microsoft.github.io/language-server-protocol/specification#workspace_symbol) | yes | | - | [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | no | | + | [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | yes | | | [applyEdit](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_applyEdit) | no | | | [willCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_willCreateFiles) | no | | diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 11e6595c7f4..327b985ecce 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.jsonrpc.DiagnosticParams; import com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics; import com.github._1c_syntax.bsl.languageserver.jsonrpc.ProtocolExtension; +import com.github._1c_syntax.bsl.languageserver.providers.CommandProvider; import com.github._1c_syntax.bsl.languageserver.providers.DocumentSymbolProvider; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -40,6 +41,7 @@ import org.eclipse.lsp4j.DocumentLinkOptions; import org.eclipse.lsp4j.DocumentRangeFormattingOptions; import org.eclipse.lsp4j.DocumentSymbolOptions; +import org.eclipse.lsp4j.ExecuteCommandOptions; import org.eclipse.lsp4j.FoldingRangeProviderOptions; import org.eclipse.lsp4j.HoverOptions; import org.eclipse.lsp4j.InitializeParams; @@ -78,6 +80,7 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension { private final LanguageServerConfiguration configuration; private final BSLTextDocumentService textDocumentService; private final BSLWorkspaceService workspaceService; + private final CommandProvider commandProvider; private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final ServerContext context; private final ServerInfo serverInfo; @@ -108,6 +111,7 @@ public CompletableFuture initialize(InitializeParams params) { capabilities.setSelectionRangeProvider(getSelectionRangeProvider()); capabilities.setColorProvider(getColorProvider()); capabilities.setRenameProvider(getRenameProvider(params)); + capabilities.setExecuteCommandProvider(getExecuteCommandProvider()); var result = new InitializeResult(capabilities, serverInfo); @@ -308,4 +312,10 @@ private static Boolean getRenamePrepareSupport(InitializeParams params) { .orElse(false); } + private ExecuteCommandOptions getExecuteCommandProvider() { + var executeCommandOptions = new ExecuteCommandOptions(); + executeCommandOptions.setCommands(commandProvider.getCommandIds()); + executeCommandOptions.setWorkDoneProgress(Boolean.FALSE); + return executeCommandOptions; + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 3b56b944cf8..ca26f03ffc2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -22,11 +22,13 @@ package com.github._1c_syntax.bsl.languageserver; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.providers.CommandProvider; import com.github._1c_syntax.bsl.languageserver.providers.SymbolProvider; import lombok.RequiredArgsConstructor; import org.apache.commons.beanutils.PropertyUtils; import org.eclipse.lsp4j.DidChangeConfigurationParams; import org.eclipse.lsp4j.DidChangeWatchedFilesParams; +import org.eclipse.lsp4j.ExecuteCommandParams; import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.lsp4j.WorkspaceSymbol; import org.eclipse.lsp4j.WorkspaceSymbolParams; @@ -43,6 +45,7 @@ public class BSLWorkspaceService implements WorkspaceService { private final LanguageServerConfiguration configuration; + private final CommandProvider commandProvider; private final SymbolProvider symbolProvider; @Override @@ -64,4 +67,11 @@ public void didChangeConfiguration(DidChangeConfigurationParams params) { public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) { // no-op } + + @Override + public CompletableFuture executeCommand(ExecuteCommandParams params) { + var arguments = commandProvider.extractArguments(params); + + return CompletableFuture.supplyAsync(() -> commandProvider.executeCommand(arguments)); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java index 1976dc1d253..5c1dc1b30cc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java @@ -21,7 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; -import com.github._1c_syntax.bsl.languageserver.codelenses.databind.URITypeAdapter; +import com.github._1c_syntax.bsl.languageserver.databind.URITypeAdapter; import com.google.gson.annotations.JsonAdapter; import lombok.Value; import lombok.experimental.NonFinal; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java new file mode 100644 index 00000000000..82ccc865614 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java @@ -0,0 +1,37 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +import java.net.URI; + +import static com.fasterxml.jackson.annotation.JsonTypeInfo.As.EXISTING_PROPERTY; +import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonTypeInfo(use = NAME, include = EXISTING_PROPERTY, property = "id", visible = true) +public interface CommandArguments { + URI getUri(); + String getId(); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java new file mode 100644 index 00000000000..45ffb8edb9e --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -0,0 +1,53 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import org.eclipse.lsp4j.Command; + +import java.beans.Introspector; +import java.util.Optional; + +public interface CommandSupplier { + + default String getId() { + String simpleName = getClass().getSimpleName(); + if (simpleName.endsWith("CommandSupplier")) { + simpleName = simpleName.substring(0, simpleName.length() - "CommandSupplier".length()); + simpleName = Introspector.decapitalize(simpleName); + } + + return simpleName; + } + + default Command createCommand(String title) { + return new Command(title, getId()); + } + + Class getCommandArgumentsClass(); + + Optional execute(T arguments); + + default boolean refreshCodeLensesAfterExecuteCommand() { + return false; + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java similarity index 68% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java index d1478cbc737..32102ff3ded 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java @@ -19,11 +19,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -/** - * Сериализация и десериализация классов пакета - * {@link com.github._1c_syntax.bsl.languageserver.codelenses}. - */ -@ParametersAreNonnullByDefault -package com.github._1c_syntax.bsl.languageserver.codelenses.databind; +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.databind.URITypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import lombok.Value; +import lombok.experimental.NonFinal; + +import java.net.URI; + +@Value +@NonFinal +public class DefaultCommandArguments implements CommandArguments { + @JsonAdapter(URITypeAdapter.class) + URI uri; + String id; -import javax.annotation.ParametersAreNonnullByDefault; +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java new file mode 100644 index 00000000000..7c4238048e2 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java @@ -0,0 +1,51 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands.infrastructure; + +import com.github._1c_syntax.bsl.languageserver.commands.CommandArguments; +import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Spring-конфигурация для определения бинов + * пакета {@link com.github._1c_syntax.bsl.languageserver.commands}. + */ +@Configuration +public class CommandsConfiguration { + + @Bean + @SuppressWarnings("unchecked") + public Map> commandSuppliersById( + Collection> codeLensSuppliers + ) { + return codeLensSuppliers.stream() + .map(commandSupplier -> (CommandSupplier) commandSupplier) + .collect(Collectors.toMap(CommandSupplier::getId, Function.identity())); + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java similarity index 50% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java index 7f1ecd561db..429fe3347c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java @@ -19,33 +19,51 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -package com.github._1c_syntax.bsl.languageserver.codelenses.databind; +package com.github._1c_syntax.bsl.languageserver.databind; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.jsontype.NamedType; import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensData; import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensSupplier; -import org.springframework.stereotype.Component; +import com.github._1c_syntax.bsl.languageserver.commands.CommandArguments; +import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; -/** - * Преднастроенный экземпляр {@link ObjectMapper} для десериализации {@link CodeLensData}. - */ -@Component -public class CodeLensDataObjectMapper extends ObjectMapper { - - private static final long serialVersionUID = 8904131809077953315L; +@Configuration +public class ObjectMapperConfiguration { - public CodeLensDataObjectMapper(List> codeLensResolvers) { - super(); + @Bean + public ObjectMapper objectMapper( + List> codeLensResolvers, + List> commandSuppliers + ) { + var namedTypes = new ArrayList(); codeLensResolvers.stream() - .map(CodeLensDataObjectMapper::toNamedType) - .forEach(this::registerSubtypes); + .map(ObjectMapperConfiguration::toNamedType) + .collect(Collectors.toCollection(() -> namedTypes)); + commandSuppliers.stream() + .map(ObjectMapperConfiguration::toNamedType) + .collect(Collectors.toCollection(() -> namedTypes)); + + var objectMapperBuilder = JsonMapper.builder(); + + namedTypes.forEach(objectMapperBuilder::registerSubtypes); + + return objectMapperBuilder.build(); } private static NamedType toNamedType(CodeLensSupplier codeLensSupplier) { return new NamedType(codeLensSupplier.getCodeLensDataClass(), codeLensSupplier.getId()); } + + private static NamedType toNamedType(CommandSupplier commandSupplier) { + return new NamedType(commandSupplier.getCommandArgumentsClass(), commandSupplier.getId()); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java similarity index 95% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java index 7ee6244af2f..04ff7c169d5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java @@ -19,7 +19,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -package com.github._1c_syntax.bsl.languageserver.codelenses.databind; +package com.github._1c_syntax.bsl.languageserver.databind; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index b264896b973..e3f091b36df 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -21,11 +21,11 @@ */ package com.github._1c_syntax.bsl.languageserver.providers; +import com.fasterxml.jackson.databind.ObjectMapper; import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensData; import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensSupplier; -import com.github._1c_syntax.bsl.languageserver.codelenses.databind.CodeLensDataObjectMapper; import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import lombok.RequiredArgsConstructor; @@ -61,7 +61,7 @@ public class CodeLensProvider { private final ObjectProvider>> enabledCodeLensSuppliersProvider; private final LanguageClientHolder clientHolder; private final ClientCapabilitiesHolder clientCapabilitiesHolder; - private final CodeLensDataObjectMapper codeLensDataObjectMapper; + private final ObjectMapper objectMapper; private List> enabledCodeLensSuppliers; @@ -118,17 +118,7 @@ public CodeLens resolveCodeLens( public void handleEvent(LanguageServerConfigurationChangedEvent event) { enabledCodeLensSuppliers = enabledCodeLensSuppliersProvider.getObject(); - boolean clientSupportsRefreshCodeLenses = clientCapabilitiesHolder.getCapabilities() - .map(ClientCapabilities::getWorkspace) - .map(WorkspaceClientCapabilities::getCodeLens) - .map(CodeLensWorkspaceCapabilities::getRefreshSupport) - .orElse(false); - - if (!clientSupportsRefreshCodeLenses) { - return; - } - - clientHolder.execIfConnected(LanguageClient::refreshCodeLenses); + refreshCodeLenses(); } /** @@ -148,6 +138,20 @@ public CodeLensData extractData(CodeLens codeLens) { return (CodeLensData) rawCodeLensData; } - return codeLensDataObjectMapper.readValue(rawCodeLensData.toString(), CodeLensData.class); + return objectMapper.readValue(rawCodeLensData.toString(), CodeLensData.class); + } + + public void refreshCodeLenses() { + boolean clientSupportsRefreshCodeLenses = clientCapabilitiesHolder.getCapabilities() + .map(ClientCapabilities::getWorkspace) + .map(WorkspaceClientCapabilities::getCodeLens) + .map(CodeLensWorkspaceCapabilities::getRefreshSupport) + .orElse(false); + + if (!clientSupportsRefreshCodeLenses) { + return; + } + + clientHolder.execIfConnected(LanguageClient::refreshCodeLenses); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java new file mode 100644 index 00000000000..ae5bffff7d2 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -0,0 +1,86 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github._1c_syntax.bsl.languageserver.commands.CommandArguments; +import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.eclipse.lsp4j.ExecuteCommandParams; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Component +@RequiredArgsConstructor +public class CommandProvider { + + private final Map> commandSuppliersById; + private final ObjectMapper objectMapper; + private final CodeLensProvider codeLensProvider; + + public Object executeCommand(CommandArguments arguments) { + var commandId = arguments.getId(); + + var commandSupplier = commandSuppliersById.get(commandId); + if (commandSupplier == null) { + throw new RuntimeException("Unknown command id: " + commandId); + } + + var result = commandSupplier + .execute(arguments) + .orElse(null); + + CompletableFuture.runAsync(() -> { + if (commandSupplier.refreshCodeLensesAfterExecuteCommand()) { + codeLensProvider.refreshCodeLenses(); + } + }); + + return result; + } + + public List getCommandIds() { + return List.copyOf(commandSuppliersById.keySet()); + } + + @SneakyThrows + public CommandArguments extractArguments(ExecuteCommandParams codeLens) { + var rawArguments = codeLens.getArguments(); + + if (rawArguments.isEmpty()) { + throw new RuntimeException("Command arguments is empty"); + } + + var rawArgument = rawArguments.get(0); + + if (rawArgument instanceof CommandArguments) { + return (CommandArguments) rawArgument; + } + + return objectMapper.readValue(rawArgument.toString(), CommandArguments.class); + } + +} From d5c03a7f329bfd966a614206d199269510fb73f6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 5 Dec 2022 18:40:23 +0300 Subject: [PATCH 059/595] inlayHints --- .../bsl/languageserver/BSLLanguageServer.java | 9 + .../BSLTextDocumentService.java | 14 ++ ...tractMethodComplexityCodeLensSupplier.java | 11 +- .../CognitiveComplexityCodeLensSupplier.java | 8 +- .../CyclomaticComplexityCodeLensSupplier.java | 8 +- ...leComplexityInlayHintsCommandSupplier.java | 76 ++++++ .../commands/CommandSupplier.java | 6 +- ...veComplexityInlayHintsCommandSupplier.java | 36 +++ ...icComplexityInlayHintsCommandSupplier.java | 36 +++ .../MethodSymbolMarkupContentBuilder.java | 216 +++++++++--------- .../AbstractComplexityInlayHintSupplier.java | 81 +++++++ .../CognitiveComplexityInlayHintSupplier.java | 45 ++++ ...CyclomaticComplexityInlayHintSupplier.java | 45 ++++ .../inlayhints/InlayHintSupplier.java | 33 +++ ...rceDefinedMethodCallInlayHintSupplier.java | 154 +++++++++++++ .../providers/CommandProvider.java | 5 + .../providers/InlayHintProvider.java | 68 ++++++ .../providers/InlayHintProviderTest.java | 66 ++++++ src/test/resources/providers/inlayHints.bsl | 106 +++++++++ 19 files changed, 908 insertions(+), 115 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java create mode 100644 src/test/resources/providers/inlayHints.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 327b985ecce..b66950a17d8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -46,6 +46,7 @@ import org.eclipse.lsp4j.HoverOptions; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; +import org.eclipse.lsp4j.InlayHintRegistrationOptions; import org.eclipse.lsp4j.ReferenceOptions; import org.eclipse.lsp4j.RenameCapabilities; import org.eclipse.lsp4j.RenameOptions; @@ -111,6 +112,7 @@ public CompletableFuture initialize(InitializeParams params) { capabilities.setSelectionRangeProvider(getSelectionRangeProvider()); capabilities.setColorProvider(getColorProvider()); capabilities.setRenameProvider(getRenameProvider(params)); + capabilities.setInlayHintProvider(getInlayHintProvider()); capabilities.setExecuteCommandProvider(getExecuteCommandProvider()); var result = new InitializeResult(capabilities, serverInfo); @@ -312,6 +314,13 @@ private static Boolean getRenamePrepareSupport(InitializeParams params) { .orElse(false); } + private static InlayHintRegistrationOptions getInlayHintProvider() { + var inlayHintOptions = new InlayHintRegistrationOptions(); + inlayHintOptions.setResolveProvider(Boolean.FALSE); + inlayHintOptions.setWorkDoneProgress(Boolean.FALSE); + return inlayHintOptions; + } + private ExecuteCommandOptions getExecuteCommandProvider() { var executeCommandOptions = new ExecuteCommandOptions(); executeCommandOptions.setCommands(commandProvider.getCommandIds()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 53ce1ed6b1b..d3d722efbc0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -39,6 +39,7 @@ import com.github._1c_syntax.bsl.languageserver.providers.FoldingRangeProvider; import com.github._1c_syntax.bsl.languageserver.providers.FormatProvider; import com.github._1c_syntax.bsl.languageserver.providers.HoverProvider; +import com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider; import com.github._1c_syntax.bsl.languageserver.providers.ReferencesProvider; import com.github._1c_syntax.bsl.languageserver.providers.RenameProvider; import com.github._1c_syntax.bsl.languageserver.providers.SelectionRangeProvider; @@ -74,6 +75,8 @@ import org.eclipse.lsp4j.FoldingRangeRequestParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.LocationLink; import org.eclipse.lsp4j.PrepareRenameDefaultBehavior; @@ -118,6 +121,7 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final SelectionRangeProvider selectionRangeProvider; private final ColorProvider colorProvider; private final RenameProvider renameProvider; + private final InlayHintProvider inlayHintProvider; @Override public CompletableFuture hover(HoverParams params) { @@ -304,6 +308,16 @@ public CompletableFuture> colorPresentation(ColorPresent return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params)); } + @Override + public CompletableFuture> inlayHint(InlayHintParams params) { + var documentContext = context.getDocument(params.getTextDocument().getUri()); + if (documentContext == null) { + return CompletableFuture.completedFuture(Collections.emptyList()); + } + + return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params)); + } + @Override public void didOpen(DidOpenTextDocumentParams params) { var textDocumentItem = params.getTextDocument(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index 7e9d5ac6fda..cd2d5d33582 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.AbstractToggleComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -30,7 +31,6 @@ import lombok.ToString; import lombok.Value; import org.eclipse.lsp4j.CodeLens; -import org.eclipse.lsp4j.Command; import org.eclipse.lsp4j.jsonrpc.messages.Either; import java.beans.ConstructorProperties; @@ -52,6 +52,7 @@ public abstract class AbstractMethodComplexityCodeLensSupplier private static final int DEFAULT_COMPLEXITY_THRESHOLD = -1; protected final LanguageServerConfiguration configuration; + private final AbstractToggleComplexityInlayHintsCommandSupplier commandSupplier; @Override public List getCodeLenses(DocumentContext documentContext) { @@ -70,7 +71,13 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Co documentContext.getSymbolTree().getMethodSymbol(methodName).ifPresent((MethodSymbol methodSymbol) -> { int complexity = methodsComplexity.get(methodSymbol); var title = Resources.getResourceString(configuration.getLanguage(), getClass(), TITLE_KEY, complexity); - var command = new Command(title, ""); + var command = commandSupplier.createCommand(title); + // todo: refactor + var arguments = new AbstractToggleComplexityInlayHintsCommandSupplier.ToggleComplexityInlayHintsCommandArguments( + commandSupplier.getId(), + data + ); + command.setArguments(List.of(arguments)); unresolved.setCommand(command); }); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java index 851525faa7b..eb65fce8b88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.ToggleCognitiveComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -34,8 +35,11 @@ @Component public class CognitiveComplexityCodeLensSupplier extends AbstractMethodComplexityCodeLensSupplier { - public CognitiveComplexityCodeLensSupplier(LanguageServerConfiguration configuration) { - super(configuration); + public CognitiveComplexityCodeLensSupplier( + LanguageServerConfiguration configuration, + ToggleCognitiveComplexityInlayHintsCommandSupplier commandSupplier + ) { + super(configuration, commandSupplier); } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java index 0356d9aa740..15df494927a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.ToggleCyclomaticComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -34,8 +35,11 @@ @Component public class CyclomaticComplexityCodeLensSupplier extends AbstractMethodComplexityCodeLensSupplier { - public CyclomaticComplexityCodeLensSupplier(LanguageServerConfiguration configuration) { - super(configuration); + public CyclomaticComplexityCodeLensSupplier( + LanguageServerConfiguration configuration, + ToggleCyclomaticComplexityInlayHintsCommandSupplier commandSupplier + ) { + super(configuration, commandSupplier); } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..36887b3c2f6 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,76 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier; +import com.github._1c_syntax.bsl.languageserver.inlayhints.AbstractComplexityInlayHintSupplier; +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; +import lombok.ToString; +import lombok.Value; + +import java.beans.ConstructorProperties; +import java.net.URI; +import java.util.Optional; + +@RequiredArgsConstructor +public abstract class AbstractToggleComplexityInlayHintsCommandSupplier + implements CommandSupplier +{ + private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; + + @Override + public Class getCommandArgumentsClass() { + return ToggleComplexityInlayHintsCommandArguments.class; + } + + @Override + public Optional execute(ToggleComplexityInlayHintsCommandArguments arguments) { + complexityInlayHintSupplier.toggleHints(arguments.getUri(), arguments.getMethodName()); + return Optional.empty(); + } + + @Override + public boolean refreshInlayHintsAfterExecuteCommand() { + return true; + } + + @Value + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + public static class ToggleComplexityInlayHintsCommandArguments extends DefaultCommandArguments { + /** + * Имя метода. + */ + String methodName; + + @ConstructorProperties({"uri", "id", "methodName"}) + public ToggleComplexityInlayHintsCommandArguments(URI uri, String id, String methodName) { + super(uri, id); + this.methodName = methodName; + } + + public ToggleComplexityInlayHintsCommandArguments(String id, AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData data) { + this(data.getUri(), id, data.getMethodName()); + } + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 45ffb8edb9e..7f63051f446 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -45,7 +45,11 @@ default Command createCommand(String title) { Class getCommandArgumentsClass(); Optional execute(T arguments); - + + default boolean refreshInlayHintsAfterExecuteCommand() { + return false; + } + default boolean refreshCodeLensesAfterExecuteCommand() { return false; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..51efcdc843f --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,36 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; +import org.springframework.stereotype.Component; + +@Component +public class ToggleCognitiveComplexityInlayHintsCommandSupplier + extends AbstractToggleComplexityInlayHintsCommandSupplier { + + public ToggleCognitiveComplexityInlayHintsCommandSupplier( + CognitiveComplexityInlayHintSupplier complexityInlayHintSupplier + ) { + super(complexityInlayHintSupplier); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..8fbb90bd20a --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,36 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.inlayhints.CyclomaticComplexityInlayHintSupplier; +import org.springframework.stereotype.Component; + +@Component +public class ToggleCyclomaticComplexityInlayHintsCommandSupplier + extends AbstractToggleComplexityInlayHintsCommandSupplier { + + public ToggleCyclomaticComplexityInlayHintsCommandSupplier( + CyclomaticComplexityInlayHintSupplier complexityInlayHintSupplier + ) { + super(complexityInlayHintSupplier); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index 366b22347a1..2b12a5afbc1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -62,6 +62,113 @@ public class MethodSymbolMarkupContentBuilder implements MarkupContentBuilder typeDescriptions) { + return typeDescriptions.stream() + .map(TypeDescription::getName) + .flatMap(parameterType -> Stream.of(parameterType.split(","))) + .map(String::trim) + .collect(Collectors.joining(" | ")); + } + + public static String parameterToString(ParameterDescription parameter, int level) { + var result = new StringJoiner(" \n"); // два пробела + Map typesMap = typesToMap(parameter.getTypes(), level); + var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; + + if (typesMap.size() == 1) { + result.add(String.format(parameterTemplate, + parameter.getName(), + typesMapToString(typesMap, 0))); + } else { + result.add(String.format(parameterTemplate, parameter.getName(), "")); + result.add(typesMapToString(typesMap, level + 1)); + } + return result.toString(); + } + + public static String parameterToString(ParameterDefinition parameterDefinition) { + int level = 0; + if (parameterDefinition.getDescription().isPresent()) { + return parameterToString(parameterDefinition.getDescription().get(), level); + } + + return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); + } + + private static Map typesToMap(List parameterTypes, int level) { + Map types = new HashMap<>(); + + parameterTypes.forEach((TypeDescription type) -> { + var typeDescription = typeToString(type, level); + String typeName; + if (type.isHyperlink()) { + typeName = String.format("[%s](%s)", type.getName(), type.getLink()); + } else { + typeName = String.format("`%s`", type.getName()); + } + + types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); + }); + return types; + } + + private static String typesMapToString(Map types, int level) { + var result = new StringJoiner(" \n"); // два пробела + var indent = "  ".repeat(level); + types.forEach((String key, String value) -> { + if (key.isBlank()) { + result.add(value); + } else { + result.add(String.format("%s%s %s", indent, value, key)); + } + }); + return result.toString(); + } + + private static String typeToString(TypeDescription type, int level) { + var result = new StringJoiner(" \n"); // два пробела + var description = type.getDescription().replace("\n", "
" + "  ".repeat(level + 1)); + + if (!description.isBlank()) { + description = "- " + description; + } + if (!type.getParameters().isEmpty()) { + description += ":"; + } + + result.add(description); + type.getParameters().forEach((ParameterDescription parameter) -> + result.add(parameterToString(parameter, level + 1))); + return result.toString(); + } + @Override public MarkupContent getContent(MethodSymbol symbol) { var markupBuilder = new StringJoiner("\n"); @@ -112,29 +219,10 @@ public SymbolKind getSymbolKind() { return SymbolKind.Method; } - private static void addSectionIfNotEmpty(StringJoiner markupBuilder, String newContent) { - if (!newContent.isEmpty()) { - markupBuilder.add(newContent); - markupBuilder.add(""); - markupBuilder.add("---"); - } - } - - private static String getPurposeSection(MethodSymbol methodSymbol) { - return methodSymbol.getDescription() - .map(MethodDescription::getPurposeDescription) - .orElse(""); - } - private String getParametersSection(MethodSymbol methodSymbol) { var result = new StringJoiner(" \n"); // два пробела - var level = 0; methodSymbol.getParameters().forEach((ParameterDefinition parameterDefinition) -> { - if (parameterDefinition.getDescription().isPresent()) { - result.add(parameterToString(parameterDefinition.getDescription().get(), level)); - } else { - result.add(parameterToString(parameterDefinition)); - } + result.add(parameterToString(parameterDefinition)); } ); @@ -195,19 +283,6 @@ private String getSectionWithCodeFences(List codeBlocks, String resource return codeFences; } - private static String getLocation(MethodSymbol symbol) { - var documentContext = symbol.getOwner(); - var startPosition = symbol.getSelectionRange().getStart(); - String mdoRef = MdoRefBuilder.getMdoRef(documentContext); - - return String.format( - "[%s](%s#%d)", - mdoRef, - documentContext.getUri(), - startPosition.getLine() + 1 - ); - } - private String getSignature(MethodSymbol methodSymbol) { String signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; @@ -267,82 +342,7 @@ private String getSignature(MethodSymbol methodSymbol) { ); } - private static String getTypes(List typeDescriptions) { - return typeDescriptions.stream() - .map(TypeDescription::getName) - .flatMap(parameterType -> Stream.of(parameterType.split(","))) - .map(String::trim) - .collect(Collectors.joining(" | ")); - } - private String getResourceString(String key) { return Resources.getResourceString(configuration.getLanguage(), getClass(), key); } - - private static String parameterToString(ParameterDescription parameter, int level) { - var result = new StringJoiner(" \n"); // два пробела - Map typesMap = typesToMap(parameter.getTypes(), level); - var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; - - if (typesMap.size() == 1) { - result.add(String.format(parameterTemplate, - parameter.getName(), - typesMapToString(typesMap, 0))); - } else { - result.add(String.format(parameterTemplate, parameter.getName(), "")); - result.add(typesMapToString(typesMap, level + 1)); - } - return result.toString(); - } - - private static String parameterToString(ParameterDefinition parameterDefinition) { - return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); - } - - private static Map typesToMap(List parameterTypes, int level) { - Map types = new HashMap<>(); - - parameterTypes.forEach((TypeDescription type) -> { - var typeDescription = typeToString(type, level); - String typeName; - if (type.isHyperlink()) { - typeName = String.format("[%s](%s)", type.getName(), type.getLink()); - } else { - typeName = String.format("`%s`", type.getName()); - } - - types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); - }); - return types; - } - - private static String typesMapToString(Map types, int level) { - var result = new StringJoiner(" \n"); // два пробела - var indent = "  ".repeat(level); - types.forEach((String key, String value) -> { - if (key.isBlank()) { - result.add(value); - } else { - result.add(String.format("%s%s %s", indent, value, key)); - } - }); - return result.toString(); - } - - private static String typeToString(TypeDescription type, int level) { - var result = new StringJoiner(" \n"); // два пробела - var description = type.getDescription().replace("\n", "
" + "  ".repeat(level + 1)); - - if (!description.isBlank()) { - description = "- " + description; - } - if (!type.getParameters().isEmpty()) { - description += ":"; - } - - result.add(description); - type.getParameters().forEach((ParameterDescription parameter) -> - result.add(parameterToString(parameter, level + 1))); - return result.toString(); - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..f531bb77aca --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -0,0 +1,81 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; + +import java.net.URI; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public abstract class AbstractComplexityInlayHintSupplier implements InlayHintSupplier { + private final Map> enabledMethods = new HashMap<>(); + + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var enabledMethodsInFile = enabledMethods.getOrDefault(documentContext.getUri(), Collections.emptySet()); + var cognitiveComplexityLocations = getComplexityLocations(documentContext); + + return documentContext.getSymbolTree().getMethodsByName().entrySet().stream() + .filter(entry -> enabledMethodsInFile.contains(entry.getKey())) + .map(Map.Entry::getValue) + .map(methodSymbol -> cognitiveComplexityLocations.getOrDefault(methodSymbol, Collections.emptyList()).stream() + .map(AbstractComplexityInlayHintSupplier::toInlayHint) + .collect(Collectors.toList())) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + protected abstract Map> getComplexityLocations( + DocumentContext documentContext + ); + + private static InlayHint toInlayHint(ComplexitySecondaryLocation complexitySecondaryLocation) { + var inlayHint = new InlayHint(); + inlayHint.setPosition(complexitySecondaryLocation.getRange().getStart()); + inlayHint.setPaddingRight(Boolean.TRUE); + inlayHint.setKind(InlayHintKind.Parameter); + inlayHint.setLabel(complexitySecondaryLocation.getMessage()); + return inlayHint; + } + + public void toggleHints(URI uri, String methodName) { + var methodsInFile = enabledMethods.computeIfAbsent(uri, uri1 -> new HashSet<>()); + if (methodsInFile.contains(methodName)) { + methodsInFile.remove(methodName); + } else { + methodsInFile.add(methodName); + } + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..30bd1ceaf20 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -0,0 +1,45 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class CognitiveComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + + @Override + protected Map> getComplexityLocations( + DocumentContext documentContext + ) { + return documentContext + .getCognitiveComplexityData() + .getMethodsComplexitySecondaryLocations(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..256b71c8acf --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -0,0 +1,45 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class CyclomaticComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + + @Override + protected Map> getComplexityLocations( + DocumentContext documentContext + ) { + return documentContext + .getCyclomaticComplexityData() + .getMethodsComplexitySecondaryLocations(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java new file mode 100644 index 00000000000..ced342f21eb --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -0,0 +1,33 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; + +import java.util.List; + +public interface InlayHintSupplier { + + List getInlayHints(DocumentContext documentContext, InlayHintParams params); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java new file mode 100644 index 00000000000..0458a5171c0 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -0,0 +1,154 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.hover.MethodSymbolMarkupContentBuilder; +import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.MarkupContent; +import org.eclipse.lsp4j.MarkupKind; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.SymbolKind; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSupplier { + + private final ReferenceIndex referenceIndex; + + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var range = params.getRange(); + +// var ast = documentContext.getAst(); +// Trees.findAllRuleNodes( +// ast, +// BSLParser.RULE_methodCall, +// BSLParser.RULE_globalMethodCall +// ); + + return referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream() + .filter(reference -> Ranges.containsPosition(range, reference.getSelectionRange().getStart())) + .filter(Reference::isSourceDefinedSymbolReference) + .map(SourceDefinedMethodCallInlayHintSupplier::toInlayHints) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + + private static List toInlayHints(Reference reference) { + + var methodSymbol = (MethodSymbol) reference.getSymbol(); + var parameters = methodSymbol.getParameters(); + + var ast = reference.getFrom().getOwner().getAst(); + var doCalls = Trees.findAllRuleNodes(ast, BSLParser.RULE_doCall); + + return doCalls.stream() + .map(BSLParser.DoCallContext.class::cast) + .filter(doCall -> isRightMethod(doCall.getParent(), reference)) + .map(BSLParser.DoCallContext::callParamList) + .map(BSLParser.CallParamListContext::callParam) + .map((List callParams) -> { + var hints = new ArrayList(); + for (var i = 0; i < parameters.size(); i++) { + + // todo: show all parameters (in config)? + if (callParams.size() < i + 1) { + break; + } + + var parameter = parameters.get(i); + var callParam = callParams.get(i); + + var passedValue = callParam.getText(); + var defaultValue = parameter.getDefaultValue(); + + if (StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { + continue; + } + + var inlayHint = new InlayHint(); + inlayHint.setKind(InlayHintKind.Parameter); + + var labelBuilder = new StringBuilder(); + labelBuilder.append(parameter.getName()); + if (passedValue.isBlank() && !defaultValue.equals(ParameterDefinition.DefaultValue.EMPTY)) { + labelBuilder.append(" ("); + labelBuilder.append(defaultValue.getValue()); + labelBuilder.append(")"); + } else { + labelBuilder.append(":"); + inlayHint.setPaddingRight(Boolean.TRUE); + } + + inlayHint.setLabel(labelBuilder.toString()); + + var position = new Position(callParam.getStart().getLine() - 1, callParam.getStart().getCharPositionInLine()); + inlayHint.setPosition(position); + + // todo: refactor + var markdown = MethodSymbolMarkupContentBuilder.parameterToString(parameter); + var tooltip = new MarkupContent(MarkupKind.MARKDOWN, markdown); + inlayHint.setTooltip(tooltip); + + hints.add(inlayHint); + } + + return hints; + }) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + + } + + private static boolean isRightMethod(BSLParserRuleContext doCallParent, Reference reference) { + var selectionRange = reference.getSelectionRange(); + + if (doCallParent instanceof BSLParser.MethodCallContext) { + var methodCallContext = (BSLParser.MethodCallContext) doCallParent; + return selectionRange.equals(Ranges.create(methodCallContext.methodName())); + } else if (doCallParent instanceof BSLParser.GlobalMethodCallContext) { + var globalMethodCallContext = (BSLParser.GlobalMethodCallContext) doCallParent; + return selectionRange.equals(Ranges.create(globalMethodCallContext.methodName())); + } + return false; + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index ae5bffff7d2..2754443fb0b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -39,7 +39,9 @@ public class CommandProvider { private final Map> commandSuppliersById; private final ObjectMapper objectMapper; + private final CodeLensProvider codeLensProvider; + private final InlayHintProvider inlayHintProvider; public Object executeCommand(CommandArguments arguments) { var commandId = arguments.getId(); @@ -54,6 +56,9 @@ public Object executeCommand(CommandArguments arguments) { .orElse(null); CompletableFuture.runAsync(() -> { + if (commandSupplier.refreshInlayHintsAfterExecuteCommand()) { + inlayHintProvider.refreshInlayHints(); + } if (commandSupplier.refreshCodeLensesAfterExecuteCommand()) { codeLensProvider.refreshCodeLenses(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java new file mode 100644 index 00000000000..d30283dc91d --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -0,0 +1,68 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; +import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.ClientCapabilities; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.InlayHintWorkspaceCapabilities; +import org.eclipse.lsp4j.WorkspaceClientCapabilities; +import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class InlayHintProvider { + + private final Collection suppliers; + + private final ClientCapabilitiesHolder clientCapabilitiesHolder; + private final LanguageClientHolder clientHolder; + + public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { + return suppliers.stream() + .map(supplier -> supplier.getInlayHints(documentContext, params)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + public void refreshInlayHints() { + boolean refreshSupport = clientCapabilitiesHolder.getCapabilities() + .map(ClientCapabilities::getWorkspace) + .map(WorkspaceClientCapabilities::getInlayHint) + .map(InlayHintWorkspaceCapabilities::getRefreshSupport) + .orElse(Boolean.FALSE); + + if (refreshSupport) { + clientHolder.execIfConnected(LanguageClient::refreshInlayHints); + } + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java new file mode 100644 index 00000000000..98a9862a8be --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -0,0 +1,66 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class InlayHintProviderTest { + + @Autowired + private InlayHintProvider provider; + + private DocumentContext documentContext; + + @BeforeEach + void init() { + String filePath = "./src/test/resources/providers/inlayHints.bsl"; + documentContext = TestUtils.getDocumentContextFromFile(filePath); + } + + @Test + void getInlayHint() { + + // given + var params = new InlayHintParams(); + params.setTextDocument(new TextDocumentIdentifier(documentContext.getUri().toString())); + params.setRange(Ranges.create(documentContext.getAst())); + + // when + var inlayHints = provider.getInlayHint(documentContext, params); + + // then + assertThat(inlayHints).hasSizeGreaterThan(0); + } +} \ No newline at end of file diff --git a/src/test/resources/providers/inlayHints.bsl b/src/test/resources/providers/inlayHints.bsl new file mode 100644 index 00000000000..c72278111a2 --- /dev/null +++ b/src/test/resources/providers/inlayHints.bsl @@ -0,0 +1,106 @@ + +&AtClient +Procedure Player1HealthPlus1(Command) + ChangeHealth(Player1, Health1, 1); +EndProcedure + +&AtClient +Procedure Player1HealthPlus5(Command) + ChangeHealth(Player1, Health1, 5); +EndProcedure + +&AtClient +Procedure Player1HealthMinus1(Command) + ChangeHealth(Player1, Health1, -1); +EndProcedure + +&AtClient +Procedure Player1HealthMinus5(Command) + ChangeHealth(Player1, Health1, -5); +EndProcedure + +&AtClient +Procedure Player2HealthPlus1(Command) + ChangeHealth(Player2, Health2, 1); +EndProcedure + +&AtClient +Procedure Player2HealthPlus5(Command) + ChangeHealth(Player2, Health2, 5); +EndProcedure + +&AtClient +Procedure Player2HealthMinus1(Command) + ChangeHealth(Player2, Health2, -1); +EndProcedure + +&AtClient +Procedure Player2HealthMinus5(Command) + ChangeHealth(Player2, Health2, -5); +EndProcedure + +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + NewGameAtServer(True); +EndProcedure + +&AtClient +Procedure NewGame(Command) + NewGameAtServer(); +EndProcedure + +&AtServer +Procedure NewGameAtServer(FirstTime = False) + + Health1 = 20; + Health2 = 20; + + If FirstTime Then + Player1 = Catalogs.Players.Player1; + Player2 = Catalogs.Players.Player2; + + Deck1 = Catalogs.Decks.DefaultDeck; + Deck2 = Catalogs.Decks.DefaultDeck; + EndIf; + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = False; + ThisObject.ChildItems.Buttons.Enabled = True; + +EndProcedure + +&AtClient +Procedure ChangeHealth(Player, PlayersHealth, Amount) + + PlayersHealth = PlayersHealth + Amount; + + If PlayersHealth <= 0 Then + + // TODO: rewrite + PlayerWon = ?(Player = Player1, Player2, Player1); + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = True; + ThisObject.ChildItems.PlayerWon.Title = String(PlayerWon) + " won!"; + ThisObject.ChildItems.Buttons.Enabled = False; + + SaveGameStat(PlayerWon); + + EndIf; + +EndProcedure + +&AtServer +Procedure SaveGameStat(PlayerWon) + + NewRecord = InformationRegisters.GameStats.CreateRecordManager(); + NewRecord.Date = CurrentDate(); + NewRecord.Player1 = Player1; + NewRecord.Player2 = Player2; + NewRecord.Deck1 = Deck1; + NewRecord.Deck2 = Deck2; + NewRecord.Won = PlayerWon; + + NewRecord.Write(); + +EndProcedure From 6fb3d115a1b7cf94121a8e1eae08c8ad3f08e0a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Dec 2022 09:02:06 +0000 Subject: [PATCH 060/595] build(deps): bump JetBrains/qodana-action from 2022.2.4 to 2022.3.0 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2022.2.4 to 2022.3.0. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2022.2.4...v2022.3.0) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 52134cffbb0..c29ec740ccf 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2022.2.4 + uses: JetBrains/qodana-action@v2022.3.0 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From 92b7767f92a907ef52fbb5612c7b55a171093a78 Mon Sep 17 00:00:00 2001 From: Aleksey Koryakin Date: Fri, 9 Dec 2022 13:15:51 +0300 Subject: [PATCH 061/595] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MissedRequiredParameterDiagnosticTest.java | 4 ++-- .../diagnostics/MissedRequiredParameterDiagnostic.bsl | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 9a42d65cfd2..13b83f992a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -49,7 +49,7 @@ void testLocalMethod() { .hasRange(8, 16, 8, 27) .hasRange(14, 16, 14, 26) .hasRange(17, 13, 17, 24) - .hasRange(29, 27, 29, 40) + .hasRange(18, 13, 18, 35) ; } @@ -66,11 +66,11 @@ void testSideMethod() { .hasRange(8, 16, 8, 27) .hasRange(14, 16, 14, 26) .hasRange(17, 13, 17, 24) + .hasRange(18, 13, 18, 35) .hasRange(24, 22, 24, 49) .hasRange(25, 22, 25, 50) .hasRange(26, 22, 26, 48) .hasRange(27, 31, 27, 57) - .hasRange(29, 27, 29, 40) ; } } diff --git a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl index c4b605e1892..98053044559 100644 --- a/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl +++ b/src/test/resources/diagnostics/MissedRequiredParameterDiagnostic.bsl @@ -16,7 +16,7 @@ Сообщить(Результат); Сообщить(Сложение(,)); // 2хRange(17, 13, 17, 24) - + Сообщить(Менеджер("Справочник")); // Range(18, 13, 18, 35) КонецПроцедуры Процедура Версионирование() @@ -27,11 +27,11 @@ ПервыйОбщийМодуль.ВерсионированиеПриЗаписи(); // 2xRange(26, 22, 26, 48) Сообщить(ПервыйОбщийМодуль.ВерсионированиеПриЗаписи()); // 2xRange(27, 31, 27, 57) Справочники.Справочник1.Тест(); // Range(28, 28, 28, 34); - Результат = ЭтотОбъект.Сложение(, 2); // Range(29, 27, 29, 40); + Результат = ЭтотОбъект.Сложение(, 2); КонецПроцедуры -Функция Сложение(Левый, Правый) +Функция Сложение(Левый, Правый) Экспорт Возврат Левый + Правый; КонецФункции @@ -40,3 +40,7 @@ Возврат Значение; КонецФункции +Функция Менеджер(Тип = "Справочник", Вид) + ИмяТипа = СтрШаблон("%1Менеджер.%2", Тип, Вид); + Возврат Новый(Тип(ИмяТипа)); +КонецФункции From d0b0a79b50a731271c78a2315ee5ddca1c83fdd4 Mon Sep 17 00:00:00 2001 From: Aleksey Koryakin Date: Fri, 9 Dec 2022 13:21:45 +0300 Subject: [PATCH 062/595] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/diagnostics/MissedRequiredParameter.md | 2 +- .../bsl/languageserver/configuration/parameters-schema.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/diagnostics/MissedRequiredParameter.md b/docs/en/diagnostics/MissedRequiredParameter.md index 86aaa78f3b0..75653101c70 100644 --- a/docs/en/diagnostics/MissedRequiredParameter.md +++ b/docs/en/diagnostics/MissedRequiredParameter.md @@ -1,4 +1,4 @@ -# Missed required parameter (MissedRequiredParameter) +# Missed a required method parameter (MissedRequiredParameter) ## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 2fb2ec7434e..780a8f5c699 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1047,13 +1047,13 @@ "$id": "#/definitions/MethodSize" }, "MissedRequiredParameter": { - "description": "Missed required parameter", + "description": "Missed a required method parameter", "default": true, "type": [ "boolean", "object" ], - "title": "Missed required parameter", + "title": "Missed a required method parameter", "$id": "#/definitions/MissedRequiredParameter" }, "MissingCodeTryCatchEx": { From 94e062745525dd3315d5ee108dc5ec018104c92d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 13 Dec 2022 18:01:35 +0300 Subject: [PATCH 063/595] deps bump --- build.gradle.kts | 12 ++++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8d0748c34ef..5844415d982 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.github.ben-manes.versions") version "0.44.0" id("org.springframework.boot") version "2.7.5" id("io.spring.dependency-management") version "1.1.0" - id("io.github.1c-syntax.bslls-dev-tools") version "0.7.1" + id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" id("io.codearte.nexus-staging") version "0.30.0" @@ -69,8 +69,8 @@ dependencies { api("info.picocli:picocli-spring-boot-starter:4.7.0") // lsp4j core - api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.17.0") - api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.17.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.19.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.19.0") // 1c-syntax api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { @@ -92,7 +92,7 @@ dependencies { implementation("org.languagetool", "language-ru", languageToolVersion) // AOP - implementation("org.aspectj", "aspectjrt", "1.9.7") + implementation("org.aspectj", "aspectjrt", "1.9.9.1") // commons utils implementation("commons-io", "commons-io", "2.11.0") @@ -101,7 +101,7 @@ dependencies { implementation("org.apache.commons", "commons-collections4", "4.4") // progress bar - implementation("me.tongfei", "progressbar", "0.9.2") + implementation("me.tongfei", "progressbar", "0.9.5") // (de)serialization implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") @@ -131,7 +131,7 @@ dependencies { // test utils testImplementation("com.ginsberg", "junit5-system-exit", "1.1.2") - testImplementation("org.awaitility", "awaitility", "4.1.1") + testImplementation("org.awaitility", "awaitility", "4.2.0") } java { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e6e5897b52..070cb702f09 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From b179dc66ccb46f6bbb33adc9a9d645b34df3c37e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 14 Oct 2022 18:59:33 +0400 Subject: [PATCH 064/595] =?UTF-8?q?#734=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=20=D1=8D?= =?UTF-8?q?=D0=BA=D1=88=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B2=D0=BE=D1=80=D0=B0=D1=87=D0=B8=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Alexey Sosnoviy --- .../ExtractStructureConstructorSupplier.java | 157 ++++++++++++++++++ ...StructureConstructorSupplier_en.properties | 2 + ...StructureConstructorSupplier_ru.properties | 2 + ...tractStructureConstructorSupplierTest.java | 84 ++++++++++ .../suppliers/extractStructureConstructor.bsl | 4 + 5 files changed, 249 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java create mode 100644 src/test/resources/suppliers/extractStructureConstructor.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java new file mode 100644 index 00000000000..04de6cfa0b1 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -0,0 +1,157 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codeactions; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.utils.DiagnosticHelper; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import com.github._1c_syntax.bsl.languageserver.utils.Strings; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.parser.BSLLexer; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import lombok.RequiredArgsConstructor; +import org.antlr.v4.runtime.tree.TerminalNode; +import org.eclipse.lsp4j.CodeAction; +import org.eclipse.lsp4j.CodeActionKind; +import org.eclipse.lsp4j.CodeActionParams; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextEdit; +import org.eclipse.lsp4j.WorkspaceEdit; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class ExtractStructureConstructorSupplier implements CodeActionSupplier { + + private final LanguageServerConfiguration configuration; + + @Override + public List getCodeActions(CodeActionParams params, DocumentContext documentContext) { + + var start = params.getRange().getStart(); + var parseTree = documentContext.getAst(); + + var maybeDoCall = Trees.findTerminalNodeContainsPosition(parseTree, start) + .map(TerminalNode::getParent) + .filter(BSLParser.TypeNameContext.class::isInstance) + .map(BSLParser.TypeNameContext.class::cast) + .filter(DiagnosticHelper::isStructureType) + .map(BSLParserRuleContext::getParent) + .map(BSLParser.NewExpressionContext.class::cast) + .map(BSLParser.NewExpressionContext::doCall); + + if (maybeDoCall.isEmpty()) { + return Collections.emptyList(); + } + + var doCall = maybeDoCall.get(); + + List parameters = maybeDoCall + .map(BSLParser.DoCallContext::callParamList) + .map(callParamListContext -> callParamListContext.children) + .stream() + .flatMap(Collection::stream) + .filter(Predicate.not(TerminalNode.class::isInstance)) + .map(BSLParser.CallParamContext.class::cast) + .collect(Collectors.toList()); + + if (parameters.isEmpty()) { + return Collections.emptyList(); + } + + var firstParam = parameters.get(0); + if (firstParam.getTokens().isEmpty()) { + return Collections.emptyList(); + } + + var firstToken = firstParam.getTokens().get(0); + if (firstToken.getType() != BSLLexer.STRING) { + return Collections.emptyList(); + } + + var assignment = (BSLParser.AssignmentContext) Trees.getAncestorByRuleIndex(doCall, BSLParser.RULE_assignment); + if (assignment == null) { + return Collections.emptyList(); + } + + var lValue = assignment.lValue().IDENTIFIER(); + if (lValue == null) { + return Collections.emptyList(); + } + + var lValueName = lValue.getText(); + var insert = Resources.getResourceString(configuration.getLanguage(), getClass(), "insert"); + + String[] keys = Strings.trimQuotes(firstToken.getText()).split(","); + var workspaceEdit = new WorkspaceEdit(); + var changes = new ArrayList(); + + var constructorEdit = new TextEdit(Ranges.create(doCall), "()"); + changes.add(constructorEdit); + + int intendSize = Ranges.create(lValue).getStart().getCharacter(); + + var rparenRange = Ranges.create(doCall.RPAREN()); + var constructorLine = rparenRange.getEnd().getLine(); + var position = new Position(constructorLine + 1, 0); + var range = new Range(position, position); + + var indent = documentContext.getContentList()[constructorLine].substring(0, intendSize); + + for (var i = 0; i < keys.length; i++) { + String key = keys[i].trim(); + var value = ""; + var separator = ""; + if (parameters.size() > i + 1) { + value = parameters.get(i + 1).getText(); + separator = ", "; + } + + var newText = String.format("%s%s.%s(\"%s\"%s%s);\n", indent, lValueName, insert, key, separator, value); + var textEdit = new TextEdit(range, newText); + changes.add(textEdit); + } + + workspaceEdit.setChanges(Map.of(documentContext.getUri().toString(), changes)); + + var codeAction = new CodeAction(); + codeAction.setEdit(workspaceEdit); + codeAction.setKind(CodeActionKind.RefactorExtract); + codeAction.setIsPreferred(Boolean.TRUE); + codeAction.setTitle(Resources.getResourceString(configuration.getLanguage(), getClass(), "title")); + + return Collections.singletonList(codeAction); + + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_en.properties new file mode 100644 index 00000000000..7698b450dd8 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_en.properties @@ -0,0 +1,2 @@ +insert=Insert +title=Unwrap constructor \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_ru.properties new file mode 100644 index 00000000000..2b01795e857 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier_ru.properties @@ -0,0 +1,2 @@ +insert=Вставить +title=Развернуть конструктор \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java new file mode 100644 index 00000000000..fb865b12900 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java @@ -0,0 +1,84 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codeactions; + +import com.github._1c_syntax.bsl.languageserver.configuration.Language; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.CodeAction; +import org.eclipse.lsp4j.CodeActionContext; +import org.eclipse.lsp4j.CodeActionParams; +import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class ExtractStructureConstructorSupplierTest { + + + @Autowired + private LanguageServerConfiguration configuration; + + @Autowired + private ExtractStructureConstructorSupplier codeActionSupplier; + + @Test + void testGetCodeActions() { + + // given + configuration.setLanguage(Language.EN); + + String filePath = "./src/test/resources/suppliers/extractStructureConstructor.bsl"; + var documentContext = TestUtils.getDocumentContextFromFile(filePath); + + List diagnostics = new ArrayList<>(); + + TextDocumentIdentifier textDocumentIdentifier = new TextDocumentIdentifier(documentContext.getUri().toString()); + + CodeActionContext codeActionContext = new CodeActionContext(); + codeActionContext.setDiagnostics(diagnostics); + + CodeActionParams params = new CodeActionParams(); + params.setRange(Ranges.create(1, 21, 23)); + params.setTextDocument(textDocumentIdentifier); + params.setContext(codeActionContext); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(1) + .anyMatch(codeAction -> codeAction.getTitle().equals("Generate missing regions")); + } + + @Test + void getCodeActions() { + } +} \ No newline at end of file diff --git a/src/test/resources/suppliers/extractStructureConstructor.bsl b/src/test/resources/suppliers/extractStructureConstructor.bsl new file mode 100644 index 00000000000..c1c1da486cd --- /dev/null +++ b/src/test/resources/suppliers/extractStructureConstructor.bsl @@ -0,0 +1,4 @@ + +Структура = Новый Структура("а, б, в", а, б, в); + + Структура = Новый Структура("а, б, в", а, б, в); From 0b3ce1a7fa5b204f823735610a647a129760fa53 Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Wed, 14 Dec 2022 11:22:28 +0300 Subject: [PATCH 065/595] =?UTF-8?q?#734=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=D1=85=20?= =?UTF-8?q?=D0=B8=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtractStructureConstructorSupplier.java | 15 +- ...tractStructureConstructorSupplierTest.java | 151 ++++++++++++++++-- .../suppliers/extractStructureConstructor.bsl | 14 ++ 3 files changed, 163 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 04de6cfa0b1..0b437c6fd88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -32,6 +32,7 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import lombok.RequiredArgsConstructor; +import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.tree.TerminalNode; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionKind; @@ -101,11 +102,11 @@ public List getCodeActions(CodeActionParams params, DocumentContext } var assignment = (BSLParser.AssignmentContext) Trees.getAncestorByRuleIndex(doCall, BSLParser.RULE_assignment); - if (assignment == null) { + if (assignment == null || isParentAssignment(doCall, assignment)) { return Collections.emptyList(); } - var lValue = assignment.lValue().IDENTIFIER(); + var lValue = assignment.lValue(); if (lValue == null) { return Collections.emptyList(); } @@ -147,11 +148,19 @@ public List getCodeActions(CodeActionParams params, DocumentContext var codeAction = new CodeAction(); codeAction.setEdit(workspaceEdit); - codeAction.setKind(CodeActionKind.RefactorExtract); + codeAction.setKind(CodeActionKind.Refactor); codeAction.setIsPreferred(Boolean.TRUE); codeAction.setTitle(Resources.getResourceString(configuration.getLanguage(), getClass(), "title")); return Collections.singletonList(codeAction); } + + private static boolean isParentAssignment(BSLParser.DoCallContext doCall, BSLParser.AssignmentContext assignment) { + return assignment.expression().member().stream() + .map(BSLParser.MemberContext::complexIdentifier) + .map(BSLParser.ComplexIdentifierContext::newExpression) + .filter(newExpressionContext -> newExpressionContext == doCall.getParent()) + .findAny().isEmpty(); + } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java index fb865b12900..c44ac2397e2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java @@ -23,13 +23,16 @@ import com.github._1c_syntax.bsl.languageserver.configuration.Language; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionContext; import org.eclipse.lsp4j.CodeActionParams; import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.eclipse.lsp4j.TextEdit; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -42,21 +45,151 @@ @SpringBootTest class ExtractStructureConstructorSupplierTest { - @Autowired private LanguageServerConfiguration configuration; @Autowired private ExtractStructureConstructorSupplier codeActionSupplier; + private DocumentContext documentContext; + private CodeActionParams params; @Test void testGetCodeActions() { // given + setRange(Ranges.create(1, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(1) + .anyMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + + assertThat((((ArrayList) (codeActions.get(0).getEdit().getChanges().values()).toArray()[0]))) + .hasSize(4) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("()")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Структура.Insert(\"а\", а);\n")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Структура.Insert(\"б\", б);\n")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Структура.Insert(\"в\", в);\n")) + ; + } + + @Test + void testGetCodeActionsDouble() { + + // given + setRange(Ranges.create(6, 14, 17)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + } + + @Test + void testGetCodeActionsFind() { + + // given + setRange(Ranges.create(10, 76, 78)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + } + + @Test + void testGetCodeActionsArray() { + + // given + setRange(Ranges.create(12, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + + } + + @Test + void testGetCodeActionsNOParams() { + + // given + setRange(Ranges.create(14, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + + } + + @Test + void testGetCodeActionsEmptyParams() { + + // given + setRange(Ranges.create(14, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + + } + + @Test + void testGetCodeActionsIdentifier() { + + // given + setRange(Ranges.create(15, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(0) + .noneMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + + } + + @Test + void testGetCodeActionsObject() { + + // given + setRange(Ranges.create(17, 21, 23)); + + // when + List codeActions = codeActionSupplier.getCodeActions(params, documentContext); + + assertThat(codeActions) + .hasSize(1) + .anyMatch(codeAction -> codeAction.getTitle().equals("Unwrap constructor")); + assertThat((((ArrayList) (codeActions.get(0).getEdit().getChanges().values()).toArray()[0]))) + .hasSize(4) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("()")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Чтото.Поле.Insert(\"а\", а);\n")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Чтото.Поле.Insert(\"б\", б);\n")) + .anyMatch(textedit -> ((TextEdit) textedit).getNewText().equals("Чтото.Поле.Insert(\"в\", в);\n")) + ; + + } + + void setRange(Range range) { configuration.setLanguage(Language.EN); String filePath = "./src/test/resources/suppliers/extractStructureConstructor.bsl"; - var documentContext = TestUtils.getDocumentContextFromFile(filePath); + documentContext = TestUtils.getDocumentContextFromFile(filePath); List diagnostics = new ArrayList<>(); @@ -65,20 +198,10 @@ void testGetCodeActions() { CodeActionContext codeActionContext = new CodeActionContext(); codeActionContext.setDiagnostics(diagnostics); - CodeActionParams params = new CodeActionParams(); - params.setRange(Ranges.create(1, 21, 23)); + params = new CodeActionParams(); + params.setRange(range); params.setTextDocument(textDocumentIdentifier); params.setContext(codeActionContext); - - // when - List codeActions = codeActionSupplier.getCodeActions(params, documentContext); - - assertThat(codeActions) - .hasSize(1) - .anyMatch(codeAction -> codeAction.getTitle().equals("Generate missing regions")); } - @Test - void getCodeActions() { - } } \ No newline at end of file diff --git a/src/test/resources/suppliers/extractStructureConstructor.bsl b/src/test/resources/suppliers/extractStructureConstructor.bsl index c1c1da486cd..31ed8f64068 100644 --- a/src/test/resources/suppliers/extractStructureConstructor.bsl +++ b/src/test/resources/suppliers/extractStructureConstructor.bsl @@ -2,3 +2,17 @@ Структура = Новый Структура("а, б, в", а, б, в); Структура = Новый Структура("а, б, в", а, б, в); + +СтруктураПолей = Новый Структура("Измерения, Реквизиты, Ресурсы", + Новый Структура("СтрокаПолей", ""), + Новый Структура("СтрокаПолей", ""), + Новый Структура("СтрокаПолей", "")); + +СтрокиВопроса = СтрокаДерева.СоставКомплексногоВопроса.НайтиСтроки(Новый Структура("ЭлементарныйВопрос", ВыборкаВопрос.ЭлементарныйВопрос)); + +Структура = Новый Массив(); +Структура = Новый Структура; +Структура = Новый Структура(); +Структура = Новый Структура(Идентификатор); + +Чтото.Поле = Новый Структура("а, б, в", а, б, в); From e8ee0de6f63cc8262841c16a5bb5e24503936f8e Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Wed, 14 Dec 2022 11:54:04 +0300 Subject: [PATCH 066/595] #734 npe fix --- .../codeactions/ExtractStructureConstructorSupplier.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 0b437c6fd88..0f3302de711 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -61,6 +61,10 @@ public class ExtractStructureConstructorSupplier implements CodeActionSupplier { public List getCodeActions(CodeActionParams params, DocumentContext documentContext) { var start = params.getRange().getStart(); + if (start == null) { + return Collections.emptyList(); + } + var parseTree = documentContext.getAst(); var maybeDoCall = Trees.findTerminalNodeContainsPosition(parseTree, start) From ed0e113ad9bf57837fffdbae3a0ab3c9c3a94c3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Dec 2022 09:01:49 +0000 Subject: [PATCH 067/595] build(deps): bump cirrus-actions/rebase from 1.7 to 1.8 Bumps [cirrus-actions/rebase](https://github.com/cirrus-actions/rebase) from 1.7 to 1.8. - [Release notes](https://github.com/cirrus-actions/rebase/releases) - [Commits](https://github.com/cirrus-actions/rebase/compare/1.7...1.8) --- updated-dependencies: - dependency-name: cirrus-actions/rebase dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/rebase.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index af3f5a54c79..4e1a59c9938 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -14,6 +14,6 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo - name: Automatic Rebase - uses: cirrus-actions/rebase@1.7 + uses: cirrus-actions/rebase@1.8 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From f8a0f3783bf9a6772a51c076bd8f90ca1983efa1 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 00:22:26 +0300 Subject: [PATCH 068/595] jdk17 --- .github/workflows/qa.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 43d2422400e..853e05ca374 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -47,10 +47,10 @@ jobs: git checkout -B ${{ fromJson(steps.get_pr_data.outputs.data).base.ref }} upstream/${{ fromJson(steps.get_pr_data.outputs.data).base.ref }} git checkout ${{ github.event.workflow_run.head_branch }} git clean -ffdx && git reset --hard HEAD - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 17 distribution: 'temurin' - name: SonarCloud Scan on PR if: github.event.workflow_run.event == 'pull_request' From 7dcdfd7dda6a5cc31dfa5a6e4f85b90bef9b7495 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 21:39:12 +0300 Subject: [PATCH 069/595] =?UTF-8?q?=D0=9C=D0=B8=D0=B3=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=20jsr305=20=D0=BD=D0=B0=20spotbugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 4 +--- docs/contributing/StyleGuide.md | 23 +++++++++++++++++-- .../bsl/languageserver/BSLLSPLauncher.java | 2 -- .../languageserver/LanguageClientHolder.java | 4 ++-- .../aop/measures/package-info.java | 5 ++-- .../bsl/languageserver/aop/package-info.java | 5 ++-- .../PermissionFilterBeforeSendCallback.java | 8 +++---- .../aop/sentry/SentryScopeConfigurer.java | 3 +-- .../aop/sentry/package-info.java | 5 ++-- .../languageserver/cfg/ConditionalVertex.java | 1 + .../cli/lsp/FileAwarePrintWriter.java | 4 ++-- .../languageserver/cli/lsp/package-info.java | 5 ++-- .../DisableDiagnosticTriggeringSupplier.java | 2 -- .../GenerateStandardRegionsSupplier.java | 2 -- .../codelenses/databind/package-info.java | 5 ++-- .../infrastructure/package-info.java | 5 ++-- .../codelenses/package-info.java | 5 ++-- .../languageserver/color/package-info.java | 5 ++-- .../LanguageServerConfiguration.java | 2 +- .../configuration/databind/package-info.java | 5 ++-- .../configuration/events/package-info.java | 5 ++-- .../configuration/watcher/package-info.java | 5 ++-- .../context/DocumentContext.java | 2 +- .../languageserver/context/ServerContext.java | 8 +++---- .../computer/DiagnosticIgnoranceComputer.java | 5 ++-- .../computer/MethodSymbolComputer.java | 2 +- .../context/computer/QueryComputer.java | 2 -- .../context/events/package-info.java | 5 ++-- .../languageserver/context/package-info.java | 5 ++-- .../symbol/description/DescriptionReader.java | 2 +- .../symbol/description/package-info.java | 5 ++-- .../AbstractMetadataDiagnostic.java | 3 +-- .../diagnostics/BadWordsDiagnostic.java | 7 +++--- .../CreateQueryInCycleDiagnostic.java | 8 +++---- .../DataExchangeLoadingDiagnostic.java | 3 --- .../DeprecatedMethodCallDiagnostic.java | 2 +- .../DeprecatedTypeManagedFormDiagnostic.java | 1 - .../diagnostics/DiagnosticStorage.java | 2 +- ...atedInsertionIntoCollectionDiagnostic.java | 2 +- ...ieldsFromJoinsWithoutIsNullDiagnostic.java | 2 +- .../IncorrectUseLikeInQueryDiagnostic.java | 5 ++-- .../IncorrectUseOfStrTemplateDiagnostic.java | 7 ++---- .../diagnostics/IsInRoleMethodDiagnostic.java | 2 +- .../MissingTempStorageDeletionDiagnostic.java | 2 +- .../NestedFunctionInParametersDiagnostic.java | 2 +- .../SelectTopWithoutOrderByDiagnostic.java | 3 +-- ...TimeoutsInExternalResourcesDiagnostic.java | 4 ++-- .../UsageWriteLogEventDiagnostic.java | 2 +- .../infrastructure/package-info.java | 5 ++-- .../diagnostics/package-info.java | 5 ++-- .../documentlink/package-info.java | 5 ++-- .../languageserver/events/package-info.java | 5 ++-- .../CodeBlockFoldingRangeSupplier.java | 4 ++-- .../languageserver/folding/package-info.java | 5 ++-- .../languageserver/hover/package-info.java | 5 ++-- .../infrastructure/package-info.java | 5 ++-- .../jsonrpc/DiagnosticParams.java | 3 +-- .../languageserver/jsonrpc/package-info.java | 5 ++-- .../bsl/languageserver/package-info.java | 5 ++-- .../providers/CallHierarchyProvider.java | 2 +- .../providers/DefinitionProvider.java | 2 +- .../providers/HoverProvider.java | 2 +- .../providers/ReferencesProvider.java | 2 +- .../providers/SelectionRangeProvider.java | 7 +++--- .../references/ReferenceIndexFiller.java | 5 ++-- .../references/model/Symbol.java | 3 +-- .../references/model/SymbolOccurrence.java | 3 +-- .../references/model/package-info.java | 5 ++-- .../references/package-info.java | 5 ++-- .../utils/DiagnosticHelper.java | 5 ++-- .../languageserver/utils/MdoRefBuilder.java | 2 +- .../bsl/languageserver/utils/Trees.java | 8 +++---- .../utils/expressiontree/package-info.java | 5 ++-- .../languageserver/utils/package-info.java | 4 ++++ ...sableDiagnosticTriggeringSupplierTest.java | 1 - .../DiagnosticIgnoranceComputerTest.java | 1 - ...ctionPathMustHaveReturnDiagnosticTest.java | 1 - ...nonicalSpellingKeywordsDiagnosticTest.java | 1 - ...precatedTypeManagedFormDiagnosticTest.java | 1 - .../EmptyRegionDiagnosticTest.java | 1 - .../UsingThisFormDiagnosticTest.java | 1 - ...icDescriptionDocumentLinkSupplierTest.java | 2 -- .../providers/CodeActionProviderTest.java | 4 ++-- .../providers/FoldingRangeProviderTest.java | 1 - .../providers/HoverProviderTest.java | 1 - .../references/model/ReferenceTest.java | 2 -- .../reporters/ConsoleReporterTest.java | 1 - .../reporters/GenericReporterTest.java | 1 - .../reporters/JUnitReporterTest.java | 1 - .../reporters/JsonReporterTest.java | 1 - .../reporters/ReportersAggregatorTest.java | 1 - .../reporters/SarifReporterTest.java | 1 - .../reporters/TSLintReporterTest.java | 1 - .../util/TestApplicationContext.java | 3 +-- .../bsl/languageserver/util/TestUtils.java | 2 +- .../bsl/languageserver/util/package-info.java | 6 +++-- .../ExpressionParseTreeRewriterTest.java | 1 - 97 files changed, 177 insertions(+), 174 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5844415d982..b09a509abc8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -118,9 +118,7 @@ dependencies { implementation("io.sentry:sentry-logback") // COMPILE - - // stat analysis - compileOnly("com.google.code.findbugs", "jsr305", "3.0.2") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.7.3") // TEST diff --git a/docs/contributing/StyleGuide.md b/docs/contributing/StyleGuide.md index b11c76c6939..0d9053a2a72 100644 --- a/docs/contributing/StyleGuide.md +++ b/docs/contributing/StyleGuide.md @@ -4,10 +4,29 @@ Постарайтесь придерживаться их, и процесс ревью Вашего кода будет гладким и шелковистым (с). -## Общие рекомендации +## Обработка null Если метод на законных основаниях может возвращать `null`, рекомендуется вместо явного возврата `null` возвращать `Optional`. Исключения (например, высокочастотные или перфомансные функции) обговариваются отдельно. +В описании пакета `package-info.java` необходимо указать, что в пакете по умолчанию используется NonNull API. +Для этого над именем пакета добавляется аннотация `@DefaultAnnotation(NonNull.class)` + +Пример: +```java +// ...Лицензия... +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; +``` + +Для явного указания того, что метод может принимать или возвращать `null`, используется аннотация `@edu.umd.cs.findbugs.annotations.Nullable`. + +В общем случае это позволяет не использовать аннотации `@edu.umd.cs.findbugs.annotations.NonNull` вообще. + +Аннотации по контролю за `null` из пакета `javax.annotations` или `jetbrains.annotations` использоваться не должны. + ## Форматирование 1. Весь код в модулях должен быть автоматически отформатирован. @@ -56,6 +75,6 @@ 1. Подключение новых библиотек в implementation scope стоит производить аккуратно, с контролем увеличения размера итогового jar-файла. По возможности "лишние" и незадействованные суб-зависимости стоит исключать через `exclude`. 1. Явное подключение библиотеки `com.google.guava`, `Google Collections` или прочих частей библиотек семейства Guava запрещено. В случае **крайней** необходимости допустимо копирование реализации из `Guava` внутрь BSL Language Server с выполнением условий лицензии Guava. Для всего остального есть Apache Commons. 1. Прямой импорт классов `*.google.*`, а так же прочих частей библиотек Guava запрещено. Без исключений. - +1. Пакет `jsr305` и его аннотации не должны использоваться в коде. См. раздел "Обработка null". > В процессе наполнения... diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 2e2051ceec6..71b5af3091f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.bsl.languageserver.cli.WebsocketCommand; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.RequiredArgsConstructor; -import org.jetbrains.annotations.NotNull; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; @@ -147,7 +146,6 @@ public void run(String[] args) { } - @NotNull private static String[] addDefaultCommand(String[] args) { List tmpList = new ArrayList<>(Arrays.asList(args)); tmpList.add(0, DEFAULT_COMMAND); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java index 02f194aab59..a3a46cf4208 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java @@ -21,12 +21,12 @@ */ package com.github._1c_syntax.bsl.languageserver; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.NoArgsConstructor; import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.LanguageClientAware; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; import java.util.Optional; import java.util.function.Consumer; @@ -38,7 +38,7 @@ @NoArgsConstructor public class LanguageClientHolder implements LanguageClientAware { - @CheckForNull + @Nullable private LanguageClient client; /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java index c046b455dd8..1240f4ec0ca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java @@ -22,7 +22,8 @@ /** * Выполнение замеров производительности. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.aop.measures; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java index b952bfe26a3..614982f6c49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java @@ -22,7 +22,8 @@ /** * Слой работы в парадигме аспектно-ориентированного программирования. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.aop; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java index 9f57bef9767..8d82e9eacd8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java @@ -27,6 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.configuration.SendErrorsMode; import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.Nullable; import io.sentry.Hint; import io.sentry.SentryEvent; import io.sentry.SentryOptions.BeforeSendCallback; @@ -37,10 +39,8 @@ import org.eclipse.lsp4j.ServerInfo; import org.eclipse.lsp4j.ShowMessageRequestParams; import org.eclipse.lsp4j.services.LanguageClient; -import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; @@ -71,7 +71,7 @@ public class PermissionFilterBeforeSendCallback implements BeforeSendCallback { private final AtomicBoolean questionWasSend = new AtomicBoolean(false); @Override - public SentryEvent execute(@NotNull SentryEvent event, @NotNull Hint hint) { + public SentryEvent execute(SentryEvent event, Hint hint) { if (sendToSentry()) { return event; } @@ -132,7 +132,7 @@ private CompletableFuture askUserForPermission(LanguageClient return languageClient.showMessageRequest(requestParams); } - @CheckForNull + @Nullable private MessageActionItem waitForPermission(CompletableFuture sendQuestion) { try { return sendQuestion.get(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index 6ebcf061aa7..2f865fba563 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -26,7 +26,6 @@ import io.sentry.protocol.User; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.ServerInfo; -import org.jetbrains.annotations.NotNull; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; @@ -49,7 +48,7 @@ public class SentryScopeConfigurer { @PostConstruct public void init() { - Sentry.configureScope((@NotNull Scope scope) -> { + Sentry.configureScope((Scope scope) -> { var user = new User(); user.setId(UUID.randomUUID().toString()); scope.setUser(user); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java index 0bd3708c131..4a386c20b1b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java @@ -22,7 +22,8 @@ /** * Отправка аналитики в Sentry. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.aop.sentry; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java index bdfe509815e..9339cee6477 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java @@ -24,6 +24,7 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import lombok.EqualsAndHashCode; + import java.util.Optional; @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java index 011b239957e..892543550a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java @@ -22,12 +22,12 @@ package com.github._1c_syntax.bsl.languageserver.cli.lsp; import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; @@ -59,7 +59,7 @@ public FileAwarePrintWriter() { /** * @param file Файл, в который отныне нужно перенаправлять вывод PrintWriter */ - public void setFile(@CheckForNull File file) { + public void setFile(@Nullable File file) { // sync on non-private field, cause this#lock is supposed to be used as lock-object. See field description. synchronized (lock) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java index 10c444cef37..1bcd74cdb6c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java @@ -23,7 +23,8 @@ * Классы для конфигурирования и запуска команды * {@link com.github._1c_syntax.bsl.languageserver.cli.LanguageServerStartCommand} */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.cli.lsp; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java index 78358797006..d2dfa90ad5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java @@ -34,7 +34,6 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.WorkspaceEdit; -import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -205,7 +204,6 @@ private List createInFileTextEdits(String diagnosticName) { return Collections.singletonList(textEdit); } - @NotNull private CodeAction createCodeAction(String title, List edits, DocumentContext documentContext) { Map> changes = Map.of(documentContext.getUri().toString(), edits); WorkspaceEdit edit = new WorkspaceEdit(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java index 893aafca9c4..4decdb5bd35 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java @@ -37,7 +37,6 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.WorkspaceEdit; -import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -130,7 +129,6 @@ private ScriptVariant getRegionsLanguage(DocumentContext documentContext, FileTy return regionsLanguage; } - @NotNull private ScriptVariant getScriptVariantFromConfigLanguage() { ScriptVariant regionsLanguage; if (languageServerConfiguration.getLanguage() == Language.EN) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java index d1478cbc737..8ecc978bc84 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java @@ -23,7 +23,8 @@ * Сериализация и десериализация классов пакета * {@link com.github._1c_syntax.bsl.languageserver.codelenses}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.codelenses.databind; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java index ef3110f6ce2..367fea59461 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java @@ -23,7 +23,8 @@ * Spring-специфичные классы для настройки внутренней инфраструктуры * пакета {@link com.github._1c_syntax.bsl.languageserver.codelenses}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.codelenses.infrastructure; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java index 7c51585d1a6..7b56ad28c43 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java @@ -23,7 +23,8 @@ * Пакет предназначен для реализации различных видов линз ("code lenses"), * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.CodeLensProvider}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.codelenses; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java index 122ecf253ab..82f98a9d037 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java @@ -23,7 +23,8 @@ * Пакет предназначен для реализации различных видов представления цвета ("documentColor" и "colorPresentation"), * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.ColorProvider}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.color; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index e1e9f171168..0b5ea2db9ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -31,6 +31,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.documentlink.DocumentLinkOptions; import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; import com.github._1c_syntax.utils.Absolute; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -44,7 +45,6 @@ import org.springframework.context.annotation.Role; import org.springframework.stereotype.Component; -import javax.annotation.Nullable; import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java index 4ff5332e5bc..68168cdeba3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java @@ -23,7 +23,8 @@ * Сериализация и десериализация верхнеуровневых или общих частей * {@link com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.configuration.databind; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java index 2721bb795c3..a208f0be582 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java @@ -22,7 +22,8 @@ /** * События пакета com.github._1c_syntax.bsl.languageserver.configuration. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.configuration.events; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java index bb55781ed62..199a1463224 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java @@ -23,7 +23,8 @@ * В пакете содержатся классы, относящиеся к отслеживанию факта изменения (удаление, создание, редактирование) файла * конфигурации ({@link com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration}). */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.configuration.watcher; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index 3f936c90aa0..cb34534123e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -44,6 +44,7 @@ import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.utils.Lazy; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -59,7 +60,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.annotation.Nullable; import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 0ff492bc08a..9e3c78dac16 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -29,6 +29,7 @@ import com.github._1c_syntax.mdclasses.Configuration; import com.github._1c_syntax.utils.Absolute; import com.github._1c_syntax.utils.Lazy; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -36,7 +37,6 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; import java.io.File; import java.net.URI; import java.nio.file.Path; @@ -63,7 +63,7 @@ public class ServerContext { private final Map documents = Collections.synchronizedMap(new HashMap<>()); private final Lazy configurationMetadata = new Lazy<>(this::computeConfigurationMetadata); - @CheckForNull + @Nullable @Setter private Path configurationRoot; private final Map mdoRefs = Collections.synchronizedMap(new HashMap<>()); @@ -127,7 +127,7 @@ public Map getDocuments() { return Collections.unmodifiableMap(documents); } - @CheckForNull + @Nullable public DocumentContext getDocument(String uri) { return getDocument(URI.create(uri)); } @@ -140,7 +140,7 @@ public Optional getDocument(String mdoRef, ModuleType moduleTyp return Optional.empty(); } - @CheckForNull + @Nullable public DocumentContext getDocument(URI uri) { return documents.get(Absolute.uri(uri)); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index f491af56693..dc624262a9d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -28,12 +28,13 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCode; import com.github._1c_syntax.bsl.parser.BSLLexer; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AllArgsConstructor; import org.antlr.v4.runtime.Token; import org.apache.commons.lang3.Range; import org.eclipse.lsp4j.Diagnostic; -import javax.annotation.CheckForNull; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; @@ -181,7 +182,7 @@ private boolean checkTrailingComment(Set codeLines, Token comment) { return true; } - @CheckForNull + @Nullable private DiagnosticCode checkIgnoreOff( Pattern ignoreOff, Token comment diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index 94014d30a10..1ebfe4d1e98 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -36,13 +36,13 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ErrorNode; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.eclipse.lsp4j.Range; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java index 460ed79c4db..938b4c37031 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -143,7 +142,6 @@ public ParseTree visitString(BSLParser.StringContext ctx) { return ctx; } - @NotNull private static String getString(int startLine, Token token) { var string = addEmptyLines(startLine, token) + " ".repeat(token.getCharPositionInLine()); if (token.getText().startsWith("|")) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java index 6970ddd91cc..af9941f0abe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java @@ -22,7 +22,8 @@ /** * События пакета com.github._1c_syntax.bsl.languageserver.configuration. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.context.events; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java index b22c38f6367..9e3b968268d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java @@ -19,7 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.context; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java index 06ab2f3401e..e6bf6139fa2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java @@ -23,8 +23,8 @@ import com.github._1c_syntax.bsl.parser.BSLMethodDescriptionParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.experimental.UtilityClass; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java index 9962f6c4d12..212c75d66e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java @@ -22,7 +22,8 @@ /** * Классы для хранения информации, прочитанной из комментариев-описаний */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.context.symbol.description; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index f87cc78052a..c192b826435 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -26,7 +26,6 @@ import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBSL; import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import org.checkerframework.checker.nullness.qual.NonNull; import org.eclipse.lsp4j.Range; import java.util.ArrayList; @@ -60,7 +59,7 @@ public abstract class AbstractMetadataDiagnostic extends AbstractDiagnostic { */ private Range diagnosticRange; - protected AbstractMetadataDiagnostic(@NonNull List types) { + protected AbstractMetadataDiagnostic(List types) { filterMdoTypes = new ArrayList<>(types); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 714b4f05cd6..d6d74e9eafa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -22,16 +22,15 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; -import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; -import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; - +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.Map; -import java.util.regex.Pattern; import java.util.regex.Matcher; +import java.util.regex.Pattern; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index c177079958e..3363d99ddba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -29,12 +29,12 @@ import com.github._1c_syntax.bsl.parser.BSLParser.AssignmentContext; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.ToString; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.CheckForNull; import java.util.ArrayDeque; import java.util.Collection; import java.util.Deque; @@ -145,7 +145,7 @@ private static String getVariableNameFromModifierContext(BSLParser.ModifierConte private static String getComplexPathName( BSLParser.ComplexIdentifierContext ci, - @CheckForNull BSLParser.ModifierContext to + @Nullable BSLParser.ModifierContext to ) { return ci.modifier().stream() @@ -226,7 +226,7 @@ private Set getTypesFromComplexIdentifier(BSLParser.ComplexIdentifierCon } } - private void visitDescendantCodeBlock(@CheckForNull BSLParser.CodeBlockContext ctx) { + private void visitDescendantCodeBlock(@Nullable BSLParser.CodeBlockContext ctx) { Optional.ofNullable(ctx) .map(e -> e.children) .stream() @@ -369,7 +369,7 @@ public boolean codeFlowInCycle() { return flowType == CodeFlowType.CYCLE; } - public Optional getVariableByName(@CheckForNull String variableName) { + public Optional getVariableByName(@Nullable String variableName) { return Optional.ofNullable(current().variables.get(variableName)); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java index 1e5a2eee1b2..273393c076a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java @@ -34,7 +34,6 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; -import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Optional; @@ -97,7 +96,6 @@ private boolean checkPassed(BSLParser.ProcDeclarationContext ctx) { .isPresent(); } - @NotNull private Optional searchStatementWithCorrectLoadCondition(List context) { return context.stream() .limit(calculateStatementLimit(context.size())) @@ -117,7 +115,6 @@ && foundReturnStatement(context)) .isPresent(); } - @NotNull private Optional methodSymbol(BSLParser.ProcDeclarationContext ctx) { return Optional.of(documentContext.getSymbolTree()) .flatMap(symbolTree -> symbolTree.getMethodSymbol((BSLParser.SubContext) getSubContext(ctx))); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java index b80dc6b6355..b393bad2a4e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java @@ -28,8 +28,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.SymbolKind; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java index 6fcc0a21f8b..d66b3850f5a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java @@ -29,7 +29,6 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.providers.CodeActionProvider; -import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java index d0f80bc3245..4e7b5672d4c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java @@ -24,6 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.SourceDefinedSymbol; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; @@ -32,7 +33,6 @@ import org.eclipse.lsp4j.DiagnosticRelatedInformation; import org.eclipse.lsp4j.Range; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Queue; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index af0628ee6c3..3fec16ae7cc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -34,13 +34,13 @@ import com.github._1c_syntax.bsl.parser.BSLParser.CallParamContext; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.eclipse.lsp4j.Range; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java index eab40dfe648..89d62b72014 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java @@ -30,11 +30,11 @@ import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.bsl.parser.SDBLParser; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java index dc621404a88..5519688e852 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java @@ -29,11 +29,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.bsl.parser.SDBLParser; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; -import org.jetbrains.annotations.Nullable; -import javax.annotation.CheckForNull; import java.util.List; @DiagnosticMetadata( @@ -72,7 +71,7 @@ private void checkRightStatement(BSLParserRuleContext ctx, diagnosticStorage.addDiagnostic(ctx); } - @CheckForNull + @Nullable private static SDBLParser.PrimitiveExpressionContext getPrimitiveExpression(SDBLParser.ExpressionContext ctx) { var primitive = Trees.findAllRuleNodes(ctx, SDBLParser.RULE_primitiveExpression).stream() .filter(SDBLParser.PrimitiveExpressionContext.class::isInstance) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java index 68a3b3f5c7c..64e3fee7db8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java @@ -29,9 +29,8 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; -import org.jetbrains.annotations.NotNull; +import edu.umd.cs.findbugs.annotations.Nullable; -import javax.annotation.Nullable; import java.util.HashSet; import java.util.Objects; import java.util.Optional; @@ -129,7 +128,6 @@ private static Optional getString(Optional c return getStringFromExpression(expressionContext); } - @NotNull private static Optional getStringFromExpression(Optional expressionContext) { final var LENGTH_OF_EMPTY_STRING_FROM_AST = 2; return getConstValue(expressionContext, true) @@ -138,8 +136,7 @@ private static Optional getStringFromExpression(Optional s.length() > LENGTH_OF_EMPTY_STRING_FROM_AST); } - @NotNull - private static Optional getConstValue(Optional expressionContext, + private static Optional getConstValue(Optional expressionContext, boolean isFullSearch) { return expressionContext .map(BSLParser.ExpressionContext::member) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java index 80cd94b18df..ee358aec654 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java @@ -30,9 +30,9 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.Nullable; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java index 634ccd8cbcd..00d56d697a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java @@ -33,9 +33,9 @@ import com.github._1c_syntax.bsl.parser.BSLParser.StatementContext; import com.github._1c_syntax.bsl.parser.BSLParser.SubContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.Nullable; import java.util.Collection; import java.util.Collections; import java.util.Objects; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java index 67ed454b546..55f8213dc1a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java @@ -29,10 +29,10 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.Nullable; import java.util.Map; import java.util.regex.Pattern; import java.util.stream.IntStream; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java index 696bc4f662f..644ba2d8c95 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java @@ -29,10 +29,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.SDBLParser; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.Nullable; - @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, severity = DiagnosticSeverity.MAJOR, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java index 20d3b39023b..bef3a085941 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java @@ -32,9 +32,9 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.support.CompatibilityMode; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.CheckForNull; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -84,7 +84,7 @@ private Pattern getPatternNewExpression() { } } - private static String getVariableName(@CheckForNull BSLParser.StatementContext statement) { + private static String getVariableName(@Nullable BSLParser.StatementContext statement) { var variableName = ""; if (statement != null && statement.assignment() != null) { var lValueContext = statement.assignment().lValue(); 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 bd5ec8f1877..ea54cedab91 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 @@ -29,9 +29,9 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.tree.ParseTree; -import javax.annotation.Nullable; import java.util.Collection; import java.util.List; import java.util.Objects; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java index d0246d96a4f..18620ed73ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java @@ -19,7 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java index f4a133e61b2..96768f3968b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java @@ -19,7 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.diagnostics; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java index 62c397b375c..d1004d9f024 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java @@ -23,7 +23,8 @@ * Пакет предназначен для реализации различных ссылок на внешние источники информации ("documentLink"), * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.DocumentLinkProvider}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.documentlink; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java index 8f61c646d52..387c313f486 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java @@ -22,7 +22,8 @@ /** * События пакета com.github._1c_syntax.bsl.languageserver. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.events; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java index f4df0b83192..d0bf0bd4d48 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java @@ -24,6 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.Getter; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; @@ -31,7 +32,6 @@ import org.eclipse.lsp4j.FoldingRangeKind; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; import java.util.ArrayList; import java.util.List; @@ -95,7 +95,7 @@ public ParseTree visitTryStatement(BSLParser.TryStatementContext ctx) { return super.visitTryStatement(ctx); } - private void addRegionRange(@CheckForNull TerminalNode start, @CheckForNull TerminalNode stop) { + private void addRegionRange(@Nullable TerminalNode start, @Nullable TerminalNode stop) { if (start == null || stop == null) { return; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java index 71f4981a421..ade8b012c01 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java @@ -23,7 +23,8 @@ * Пакет предназначен для реализации различных видов сворачивания ("folding"), * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.FoldingRangeProvider}. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.folding; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java index a2c7583cfcb..f618dea3d38 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java @@ -22,7 +22,8 @@ /** * Формирование всплывающего окна. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.hover; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java index ae08f421ea3..a443f70ccd5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java @@ -22,7 +22,8 @@ /** * Spring-специфичные классы для настройки внутренней инфраструктуры уровня приложения. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.infrastructure; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java index 82fa20549a9..acc18681821 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.jsonrpc; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -30,8 +31,6 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.TextDocumentIdentifier; -import javax.annotation.Nullable; - /** * Параметры запроса textDocument/x-diagnostics. *
diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java index e4da6e90689..5a63a9eb041 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java @@ -22,7 +22,8 @@ /** * Кастомные расширения Language Server Protocol. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.jsonrpc; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java index 8133cdafc9f..8730c40fc23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java @@ -19,7 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java index 81e5c357044..7aba9f6c5df 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java @@ -23,9 +23,9 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.SourceDefinedSymbol; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.ReferenceResolver; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.CallHierarchyIncomingCall; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java index c7e3f070c64..f1e290a88ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java @@ -23,8 +23,8 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.SourceDefinedSymbol; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.references.ReferenceResolver; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.DefinitionParams; import org.eclipse.lsp4j.LocationLink; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java index b67e92c5a25..4e18596a5fe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java @@ -24,8 +24,8 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.Symbol; import com.github._1c_syntax.bsl.languageserver.hover.MarkupContentBuilder; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.references.ReferenceResolver; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java index f0437d45cf3..c19a2caefb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java @@ -22,9 +22,9 @@ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.ReferenceResolver; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.ReferenceParams; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java index c0aa60e0242..628c5cec71f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java @@ -26,14 +26,13 @@ import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import edu.umd.cs.findbugs.annotations.Nullable; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.SelectionRange; import org.eclipse.lsp4j.SelectionRangeParams; import org.springframework.stereotype.Component; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -92,7 +91,7 @@ public List getSelectionRange(DocumentContext documentContext, S .collect(Collectors.toList()); } - @CheckForNull + @Nullable private static SelectionRange toSelectionRange(@Nullable ParseTree node) { if (node == null) { return null; @@ -137,7 +136,7 @@ private static BSLParserRuleContext getParentContext(ParseTree ctx) { return getDefaultParent(ctx); } - @CheckForNull + @Nullable private static BSLParserRuleContext getDefaultParent(ParseTree ctx) { return (BSLParserRuleContext) ctx.getParent(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 74f44f8fe66..82406279ef8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -36,6 +36,7 @@ import com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.bsl.types.ModuleType; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; @@ -44,9 +45,7 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; -import javax.annotation.Nullable; import java.net.URI; -import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.List; @@ -54,8 +53,8 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import java.util.function.Predicate; +import java.util.stream.Collectors; @Component @RequiredArgsConstructor diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java index 54576ef3e4f..d4105e93e1f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java @@ -26,7 +26,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Value; -import org.jetbrains.annotations.NotNull; import org.eclipse.lsp4j.SymbolKind; /** @@ -71,7 +70,7 @@ public Symbol intern() { } @Override - public int compareTo(@NotNull Symbol o) { + public int compareTo(Symbol o) { if (this.equals(o)) { return 0; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java index a0a62a297c1..a6cc317e807 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java @@ -25,7 +25,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Value; -import org.jetbrains.annotations.NotNull; /** * Обращение к символу в файле. @@ -51,7 +50,7 @@ public class SymbolOccurrence implements Comparable { Location location; @Override - public int compareTo(@NotNull SymbolOccurrence o) { + public int compareTo(SymbolOccurrence o) { if (this.equals(o)) { return 0; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java index 709aa73ae9d..7575b12f3ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java @@ -22,7 +22,8 @@ /** * DTO и хранилища данных индекса ссылок. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.references.model; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java index a875e8bd46b..b581005b21a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java @@ -22,7 +22,8 @@ /** * Разрешение ссылок на символы. */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.references; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java index d56a04b42af..b9ef457cf2b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java @@ -30,7 +30,6 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.antlr.v4.runtime.tree.Tree; -import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.HashSet; @@ -140,7 +139,7 @@ public static void configureDiagnostic(BSLDiagnostic diagnostic, * @param words Строка со словами * @return Созданный паттерн */ - public static Pattern createPatternFromString(@NotNull String words) { + public static Pattern createPatternFromString(String words) { return createPatternFromString(words, ","); } @@ -151,7 +150,7 @@ public static Pattern createPatternFromString(@NotNull String words) { * @param words Строка со словами * @return Созданный паттерн */ - public static Pattern createPatternFromString(@NotNull String words, String delimiter) { + public static Pattern createPatternFromString(String words, String delimiter) { StringJoiner stringJoiner = new StringJoiner("|"); for (String elem : words.split(delimiter)) { stringJoiner.add(Pattern.quote(elem.trim())); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index ee24a7efe4b..3feec8bd7e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -30,11 +30,11 @@ import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.mdclasses.utils.MDOUtils; import com.github._1c_syntax.utils.StringInterner; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; -import javax.annotation.Nullable; import java.util.Collections; import java.util.List; import java.util.Optional; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index 876140d4bc5..735469e1ce9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -23,6 +23,7 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.Token; @@ -32,7 +33,6 @@ import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.util.Positions; -import javax.annotation.CheckForNull; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -165,7 +165,7 @@ private static List getDescendantsWithFilter(ParseTree parent, ParseT * Пример: * BSLParserRuleContext parent = Trees.getAncestorByRuleIndex(ctx, BSLParser.RULE_statement); */ - @CheckForNull + @Nullable public static BSLParserRuleContext getAncestorByRuleIndex(BSLParserRuleContext element, int type) { var parent = element.getParent(); if (parent == null) { @@ -295,7 +295,7 @@ public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc) { * @param ruleindex - BSLParser.RULE_* * @return tnc - если родитель не найден, вернет null */ - @CheckForNull + @Nullable public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, int ruleindex) { final var parent = tnc.getParent(); if (parent == null) { @@ -316,7 +316,7 @@ public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, int r * @param indexes - Collection of BSLParser.RULE_* * @return tnc - если родитель не найден, вернет null */ - @CheckForNull + @Nullable public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, Collection indexes) { final var parent = tnc.getParent(); if (parent == null) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java index ad2c4e46c74..66361499b92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java @@ -22,7 +22,8 @@ /** * Преобразователь дерева разбора в берево вычисления выражений с учетом приоритетов операций */ -@ParametersAreNonnullByDefault +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java index 15690e18753..e5fa6adcbdc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java @@ -19,4 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ +@DefaultAnnotation(NonNull.class) package com.github._1c_syntax.bsl.languageserver.utils; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java index 68c74eeaa03..9a827b48809 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java @@ -23,7 +23,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.Language; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.CodeAction; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java index 24ffb492e31..cc90a42d722 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.context.computer; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java index dc646ee9489..07853174bcf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java index 3a7b051e513..b491d8e934c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java index be35eb825bc..ff74d38753b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java index 824830a2c6a..f3cbea4526f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java index bad63ee0915..4b66678de9a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index 3ee82ce4c6b..7f055f3a20c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -25,7 +25,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -195,7 +194,6 @@ void testSiteRoot() { ; } - @NotNull private DocumentContext getDocumentContext() { var filePath = "./src/test/resources/documentlink/diagnosticDescriptionDocumentLinkSupplier.bsl"; var documentContext = TestUtils.getDocumentContextFromFile(filePath); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java index 0bcdea55c55..5afbf02c936 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.utils.StringInterner; +import edu.umd.cs.findbugs.annotations.Nullable; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionContext; import org.eclipse.lsp4j.CodeActionKind; @@ -42,7 +43,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.CheckForNull; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -167,7 +167,7 @@ void testOnly() { ; } - private static boolean toBoolean(@CheckForNull Boolean value) { + private static boolean toBoolean(@Nullable Boolean value) { if (value == null) { return false; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java index c64b8a99fd5..ff59abefa30 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.providers; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import org.eclipse.lsp4j.FoldingRange; import org.eclipse.lsp4j.FoldingRangeKind; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java index fd924c1d53a..87a0c914813 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.providers; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.Hover; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java index 57d5ebb132f..ac3e2af9570 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java @@ -23,8 +23,6 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.ModuleSymbol; -import com.github._1c_syntax.bsl.languageserver.references.model.OccurrenceType; -import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Range; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java index 78477b1e98b..be719c67687 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.reporters; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java index 3d206ce69fb..c232cb68139 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.reporters; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java index 91f282c6d07..9da9d603d5d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java index ffce1b70abb..353fe47eb99 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.reporters; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import com.github._1c_syntax.bsl.languageserver.reporters.databind.AnalysisInfoObjectMapper; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java index 7d1b2254a8e..8d7b81f1052 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.reporters; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java index 1d83ac680e2..2c2639b9e3d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java @@ -27,7 +27,6 @@ import com.contrastsecurity.sarif.SarifSchema210; import com.fasterxml.jackson.databind.ObjectMapper; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java index 2b4aeaf7a96..f77dcdaacc3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java index 459500c3eac..33476ccac07 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.util; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -32,7 +31,7 @@ public class TestApplicationContext implements ApplicationContextAware { private static ApplicationContext CONTEXT; @Override - public void setApplicationContext(@NotNull ApplicationContext context) throws BeansException { + public void setApplicationContext(ApplicationContext context) throws BeansException { CONTEXT = context; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java index 0f79b160d27..1a751452813 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java @@ -24,10 +24,10 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.utils.Absolute; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; -import javax.annotation.Nullable; import java.io.File; import java.net.URI; import java.nio.charset.StandardCharsets; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java index c4573559f5d..0c5918b15fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java @@ -19,6 +19,8 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -@ParametersAreNonnullByDefault package com.github._1c_syntax.bsl.languageserver.util; +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.util; -import javax.annotation.ParametersAreNonnullByDefault; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index 3893037cf21..ae16dec0920 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -36,7 +36,6 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import static org.assertj.core.api.Assertions.as; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest From daf3c7f2ccad5d6791f193d2cc190c027b5ddf00 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 21:39:22 +0300 Subject: [PATCH 070/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20qodana?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qodana.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qodana.yaml b/qodana.yaml index 446ab3156d0..2e36017fbd0 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,5 +1,5 @@ version: "1.0" -linter: jetbrains/qodana-jvm-community:2022.2 +linter: jetbrains/qodana-jvm-community:2022.3 profile: name: qodana.starter include: From 73402b8a3f5214de467b9e59ce104413157bc66b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 21:39:56 +0300 Subject: [PATCH 071/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA,=20=D0=BD=D0=B0=D0=B9=D0=B4=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20spotbugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cli/lsp/FileAwarePrintWriter.java | 59 ++++++++-------- .../ConfigurationFileSystemWatcher.java | 4 ++ .../context/DocumentContext.java | 70 +++++++++++-------- .../languageserver/context/ServerContext.java | 28 ++++---- .../context/computer/QueryComputer.java | 2 +- 5 files changed, 90 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java index 892543550a8..fc224a32439 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java @@ -59,42 +59,39 @@ public FileAwarePrintWriter() { /** * @param file Файл, в который отныне нужно перенаправлять вывод PrintWriter */ - public void setFile(@Nullable File file) { - - // sync on non-private field, cause this#lock is supposed to be used as lock-object. See field description. - synchronized (lock) { - if (Objects.equals(file, this.file)) { - return; - } - - this.file = file; - - if (file == null) { - closeOutputStream(); - return; - } - - if (file.isDirectory()) { - LOGGER.error("Trace log setting must lead to file, not directory! {}", file.getAbsolutePath()); - return; - } - - FileOutputStream fileOutputStream; - try { - // stream is not closed, cause it used as output stream in writer. See this#out field. - fileOutputStream = new FileOutputStream(file); - } catch (FileNotFoundException e) { - LOGGER.error("Can't create LSP trace file", e); - return; - } + public synchronized void setFile(@Nullable File file) { + if (Objects.equals(file, this.file)) { + return; + } + + this.file = file; + + if (file == null) { closeOutputStream(); + return; + } - this.out = new BufferedWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)); - this.lock = this.out; - this.isEmpty = false; + if (file.isDirectory()) { + LOGGER.error("Trace log setting must lead to file, not directory! {}", file.getAbsolutePath()); + return; + } + + FileOutputStream fileOutputStream; + try { + // stream is not closed, cause it used as output stream in writer. See this#out field. + fileOutputStream = new FileOutputStream(file); + } catch (FileNotFoundException e) { + LOGGER.error("Can't create LSP trace file", e); + return; } + closeOutputStream(); + + this.out = new BufferedWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)); + this.lock = this.out; + this.isEmpty = false; + } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index 5b1a2fed865..820e346ec72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -117,6 +117,10 @@ public void handleEvent(LanguageServerConfigurationChangedEvent event) { private void registerWatchService(File configurationFile) { Path configurationDir = Absolute.path(configurationFile).getParent(); + if (configurationDir == null) { + return; + } + if (configurationDir.equals(registeredPath)) { return; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index cb34534123e..a186b925d52 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -274,24 +274,29 @@ public void unfreezeComputedData() { protected void rebuild(String content, int version) { computeLock.lock(); - boolean versionMatches = version == this.version && version != 0; + try { - if (versionMatches && (this.content != null)) { - clearDependantData(); - computeLock.unlock(); - return; - } + boolean versionMatches = version == this.version && version != 0; - if (!isComputedDataFrozen) { - clearSecondaryData(); - } + if (versionMatches && (this.content != null)) { + clearDependantData(); + computeLock.unlock(); + return; + } + + if (!isComputedDataFrozen) { + clearSecondaryData(); + } - this.content = content; - tokenizer = new BSLTokenizer(content); - this.version = version; - symbolTree = computeSymbolTree(); + this.content = content; + tokenizer = new BSLTokenizer(content); + this.version = version; + symbolTree = computeSymbolTree(); + + } finally { + computeLock.unlock(); + } - computeLock.unlock(); } protected void rebuild() { @@ -306,29 +311,36 @@ protected void rebuild() { protected void clearSecondaryData() { computeLock.lock(); - content = null; - contentList.clear(); - tokenizer = null; - queries.clear(); - clearDependantData(); - - if (!isComputedDataFrozen) { - cognitiveComplexityData.clear(); - cyclomaticComplexityData.clear(); - metrics.clear(); - diagnosticIgnoranceData.clear(); + try { + + content = null; + contentList.clear(); + tokenizer = null; + queries.clear(); + clearDependantData(); + + if (!isComputedDataFrozen) { + cognitiveComplexityData.clear(); + cyclomaticComplexityData.clear(); + metrics.clear(); + diagnosticIgnoranceData.clear(); + } + } finally { + computeLock.unlock(); } - computeLock.unlock(); } private void clearDependantData() { computeLock.lock(); diagnosticsLock.lock(); - diagnostics.clear(); + try { + diagnostics.clear(); + } finally { + diagnosticsLock.unlock(); + computeLock.unlock(); + } - diagnosticsLock.unlock(); - computeLock.unlock(); } private static FileType computeFileType(URI uri) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 9e3c78dac16..0669b5f5011 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -103,21 +103,25 @@ public void populateContext(List files) { LOGGER.debug("Populating context..."); contextLock.writeLock().lock(); - files.parallelStream().forEach((File file) -> { + try { - workDoneProgressReporter.tick(); + files.parallelStream().forEach((File file) -> { - var uri = file.toURI(); - var documentContext = getDocument(uri); - if (documentContext == null) { - documentContext = createDocumentContext(uri); - rebuildDocument(documentContext); - documentContext.freezeComputedData(); - tryClearDocument(documentContext); - } - }); + workDoneProgressReporter.tick(); + + var uri = file.toURI(); + var documentContext = getDocument(uri); + if (documentContext == null) { + documentContext = createDocumentContext(uri); + rebuildDocument(documentContext); + documentContext.freezeComputedData(); + tryClearDocument(documentContext); + } + }); - contextLock.writeLock().unlock(); + } finally { + contextLock.writeLock().unlock(); + } workDoneProgressReporter.endProgress(getMessage("populateContextPopulated")); LOGGER.debug("Context populated."); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java index 938b4c37031..9c03b65ecc0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java @@ -154,7 +154,7 @@ private static String getString(int startLine, Token token) { private static String trimLastQuote(String text) { var quoteCount = text.length() - text.replace("\"", "").length(); - if (quoteCount % 2 == 1) { + if (quoteCount % 2 != 0) { String newString; var quotePosition = text.lastIndexOf("\""); newString = text.substring(0, quotePosition) + " "; From 62ff2d32a7ea8eb60f607a94b32c6132461ce44e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 21:40:17 +0300 Subject: [PATCH 072/595] junit5-system-exit -> jmockit --- build.gradle.kts | 5 +- .../languageserver/BSLLSPLauncherTest.java | 129 +++++++----------- .../languageserver/BSLLanguageServerTest.java | 33 +++-- .../languageserver/diagnostics/SmokyTest.java | 26 +++- 4 files changed, 97 insertions(+), 96 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b09a509abc8..bf9711d89e7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -128,7 +128,7 @@ dependencies { } // test utils - testImplementation("com.ginsberg", "junit5-system-exit", "1.1.2") + testImplementation("org.jmockit", "jmockit", "1.49") testImplementation("org.awaitility", "awaitility", "4.2.0") } @@ -175,6 +175,9 @@ tasks.test { reports { html.required.set(true) } + + val jmockitPath = classpath.find { it.name.contains("jmockit") }!!.absolutePath + jvmArgs("-javaagent:${jmockitPath}") } tasks.check { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java index e3974355711..66849e6d82e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java @@ -21,8 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver; -import com.ginsberg.junit.exit.ExpectSystemExitWithStatus; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import mockit.Mock; +import mockit.MockUp; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,6 +35,7 @@ import java.io.PrintStream; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @SpringBootTest @CleanupContextBeforeClassAndAfterEachTestMethod @@ -44,6 +46,13 @@ class BSLLSPLauncherTest { @BeforeEach void setUpStreams() { + new MockUp() { + @Mock + public void exit(int value) { + throw new RuntimeException(String.valueOf(value)); + } + }; + outContent = new ByteArrayOutputStream(); errContent = new ByteArrayOutputStream(); System.setOut(new PrintStream(outContent)); @@ -57,34 +66,28 @@ void restoreStreams() { } @Test - @ExpectSystemExitWithStatus(2) - void testParseError() { + void testParseError() throws Exception { // given String[] args = new String[]{"--error"}; - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("2"); // then assertThat(errContent.toString()).containsIgnoringCase("Unknown option: '--error'"); } @Test - @ExpectSystemExitWithStatus(0) void testAnalyze() { // given String[] args = "--analyze --srcDir ./src/test/resources/cli".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should run without exceptions @@ -94,17 +97,14 @@ void testAnalyze() { } @Test - @ExpectSystemExitWithStatus(0) void testAnalyzeSilent() { // given String[] args = "--analyze --srcDir ./src/test/resources/cli --silent".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -113,17 +113,14 @@ void testAnalyzeSilent() { } @Test - @ExpectSystemExitWithStatus(1) void testAnalyzeError() { // given String[] args = "--analyze --srcDir fake-dir".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("1"); // then // main-method should runs without exceptions @@ -132,17 +129,14 @@ void testAnalyzeError() { } @Test - @ExpectSystemExitWithStatus(0) void testFormat() { // given String[] args = "--format --src ./src/test/resources/cli".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -152,17 +146,14 @@ void testFormat() { } @Test - @ExpectSystemExitWithStatus(0) void testFormatOneFile() { // given String[] args = "--format --src ./src/test/resources/cli/test.bsl.txt".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -172,17 +163,14 @@ void testFormatOneFile() { } @Test - @ExpectSystemExitWithStatus(0) void testFormatTwoFiles() { // given String[] args = "--format --src ./src/test/resources/cli/test.bsl.txt,./src/test/resources/cli/test.bsl".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -192,17 +180,14 @@ void testFormatTwoFiles() { } @Test - @ExpectSystemExitWithStatus(0) void testFormatSilent() { // given String[] args = "--format --src ./src/test/resources/cli --silent".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -211,17 +196,14 @@ void testFormatSilent() { } @Test - @ExpectSystemExitWithStatus(1) void testFormatError() { // given String[] args = "--format --src fake-dir".split(" "); - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("1"); // then // main-method should runs without exceptions @@ -230,17 +212,14 @@ void testFormatError() { } @Test - @ExpectSystemExitWithStatus(0) void testVersion() { // given String[] args = {"-v"}; - // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); // then // main-method should runs without exceptions @@ -270,11 +249,7 @@ void testWithoutCommandWithConfig() { String[] args = "-c .".split(" "); // when - try { - BSLLSPLauncher.main(args); - } catch (RuntimeException ignored) { - // catch prevented system.exit call - } + BSLLSPLauncher.main(args); // then assertThat(outContent.toString()).contains("LanguageServerStartCommand"); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java index 43bdf5e4705..4c05d07939e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java @@ -21,15 +21,17 @@ */ package com.github._1c_syntax.bsl.languageserver; -import com.ginsberg.junit.exit.ExpectSystemExitWithStatus; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.utils.Absolute; +import mockit.Mock; +import mockit.MockUp; import org.eclipse.lsp4j.ClientCapabilities; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; import org.eclipse.lsp4j.RenameCapabilities; import org.eclipse.lsp4j.TextDocumentClientCapabilities; import org.eclipse.lsp4j.WorkspaceFolder; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -40,6 +42,7 @@ import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @SpringBootTest @CleanupContextBeforeClassAndAfterEachTestMethod @@ -48,6 +51,16 @@ class BSLLanguageServerTest { @Autowired private BSLLanguageServer server; + @BeforeEach + void setUp() { + new MockUp() { + @Mock + public void exit(int value) { + throw new RuntimeException(String.valueOf(value)); + } + }; + } + @Test void initialize() throws ExecutionException, InterruptedException { // given @@ -94,24 +107,22 @@ void shutdown() throws ExecutionException, InterruptedException { } @Test - @ExpectSystemExitWithStatus(1) void exitWithoutShutdown() { - // when - server.exit(); - - // then ExpectSystemExitWithStatus should not throw exception + // when-then + assertThatThrownBy(() -> server.exit()) + .isInstanceOf(RuntimeException.class) + .hasMessage("1"); } @Test - @ExpectSystemExitWithStatus(0) void exitWithShutdown() { // given server.shutdown(); - // when - server.exit(); - - // then ExpectSystemExitWithStatus should not throw exception + // when-then + assertThatThrownBy(() -> server.exit()) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java index 83ee8e262d5..ab15fd49064 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; -import com.ginsberg.junit.exit.ExpectSystemExitWithStatus; import com.github._1c_syntax.bsl.languageserver.BSLLSPLauncher; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; @@ -29,9 +28,12 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import mockit.Mock; +import mockit.MockUp; import org.apache.commons.io.FileUtils; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -46,6 +48,7 @@ import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @SpringBootTest @Slf4j @@ -58,18 +61,27 @@ class SmokyTest { @Autowired private Collection diagnosticInfos; + @BeforeEach + void setUpStreams() { + new MockUp() { + @Mock + public void exit(int value) { + throw new RuntimeException(String.valueOf(value)); + } + }; + } + @Test - @ExpectSystemExitWithStatus(0) - void test() { + void test() throws Exception { // given String[] args = new String[]{"--analyze", "--srcDir", "./src/test/resources/diagnostics"}; - // when - BSLLSPLauncher.main(args); + // when-then + assertThatThrownBy(() -> BSLLSPLauncher.main(args)) + .isInstanceOf(RuntimeException.class) + .hasMessage("0"); - // then - assertThat(true).isTrue(); } @Test From 994282ecce22c9f952c63159e93d17443830cd25 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 21:49:14 +0300 Subject: [PATCH 073/595] Fix QF --- .../aop/sentry/PermissionFilterBeforeSendCallback.java | 1 - .../context/computer/DiagnosticIgnoranceComputer.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java index 8d82e9eacd8..7e92734ddb2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java @@ -27,7 +27,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.configuration.SendErrorsMode; import com.github._1c_syntax.bsl.languageserver.utils.Resources; -import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.Nullable; import io.sentry.Hint; import io.sentry.SentryEvent; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index dc624262a9d..ee60dc1202f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCode; import com.github._1c_syntax.bsl.parser.BSLLexer; import com.github._1c_syntax.utils.CaseInsensitivePattern; -import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AllArgsConstructor; import org.antlr.v4.runtime.Token; From a60f9665af974307da87a79a66f5c09f09fd2ab3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Dec 2022 09:31:34 +0000 Subject: [PATCH 074/595] build(deps): bump org.springframework.boot from 2.7.5 to 3.0.0 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 2.7.5 to 3.0.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v2.7.5...v3.0.0) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index bf9711d89e7..738fb224312 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "6.6" id("me.qoomon.git-versioning") version "6.3.7" id("com.github.ben-manes.versions") version "0.44.0" - id("org.springframework.boot") version "2.7.5" + id("org.springframework.boot") version "3.0.0" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" From 358eadc586214e3554a79931441206b83592e7ea Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 17 Dec 2022 00:07:22 +0300 Subject: [PATCH 075/595] =?UTF-8?q?=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=B8=D1=82=D0=BE=D0=BD=D0=B0=20=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=B0=20=D1=83=D0=B1=D1=83?= =?UTF-8?q?=D0=BD=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index dfd41afb90b..e2426811eec 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -31,7 +31,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.6' + python-version: '3.6.15' architecture: 'x64' - name: Install dependencies From 829ef8031dcfb4d95a73c5ad122b9d5c8ca8c522 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 17 Dec 2022 00:42:05 +0300 Subject: [PATCH 076/595] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index e2426811eec..d00feec9098 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -31,7 +31,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.6.15' + python-version: '3.7.15' architecture: 'x64' - name: Install dependencies From 71ef0f2bfeb6d892ca26e309a14902b4f25efcf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 09:01:42 +0000 Subject: [PATCH 077/595] build(deps): bump io.freefair.lombok from 6.6 to 6.6.1 Bumps [io.freefair.lombok](https://github.com/freefair/gradle-plugins) from 6.6 to 6.6.1. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/6.6...6.6.1) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index bf9711d89e7..4cfe7193f63 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "3.5.0.2730" - id("io.freefair.lombok") version "6.6" + id("io.freefair.lombok") version "6.6.1" id("io.freefair.javadoc-links") version "6.6" id("io.freefair.javadoc-utf-8") version "6.6" id("io.freefair.aspectj.post-compile-weaving") version "6.6" From a9468fc99bab911600df1758c1598d271de7d05c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 09:01:54 +0000 Subject: [PATCH 078/595] build(deps): bump io.freefair.maven-central.validate-poms Bumps [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) from 6.6 to 6.6.1. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/6.6...6.6.1) --- updated-dependencies: - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index bf9711d89e7..8da77d2c181 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ plugins { id("io.freefair.javadoc-links") version "6.6" id("io.freefair.javadoc-utf-8") version "6.6" id("io.freefair.aspectj.post-compile-weaving") version "6.6" - id("io.freefair.maven-central.validate-poms") version "6.6" + id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.3.7" id("com.github.ben-manes.versions") version "0.44.0" id("org.springframework.boot") version "2.7.5" From 85d0907f45181570406f73deac4e556d18841d3d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 21 Dec 2022 09:35:06 +0300 Subject: [PATCH 079/595] =?UTF-8?q?feat(diagnostic):=20=D0=9D=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE=20"?= =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E?= =?UTF-8?q?=D1=89=D0=B5=D0=BC=D1=83=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8F=20MissingCommonModuleMethod=20"-=20=20=D0=93?= =?UTF-8?q?=D0=9E=D0=A2=D0=9E=D0=92=D0=9E=20(#2827)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Реализация правила * Обращение к приватным методам * Исключил ФП параметры с именами общих модулей * переименовал правило * документация + настройка правила * добавил тег правила * уточнил сообщения правила * использован символьный репозиторий вместо работы с аст-деревом * @CleanupContextBeforeClassAndAfterEachTestMethod * реализованы недостающие кейсы * убрал комментарий * комментарий про приватные методы исключил срабатывание на внутренних вызовах внутри общих модулей * Поправил текст сообщения исправил замечания из ПР * исправил замечания из ПР * кейс для покрытия * уточнил проверку приватных методов * замечание СонарЛинт --- docs/diagnostics/MissingCommonModuleMethod.md | 23 ++++ .../diagnostics/MissingCommonModuleMethod.md | 16 +++ .../MissingCommonModuleMethodDiagnostic.java | 128 ++++++++++++++++++ .../configuration/parameters-schema.json | 10 ++ ...CommonModuleMethodDiagnostic_en.properties | 4 + ...CommonModuleMethodDiagnostic_ru.properties | 4 + ...ssingCommonModuleMethodDiagnosticTest.java | 70 ++++++++++ .../MissingCommonModuleMethodDiagnostic.bsl | 37 +++++ 8 files changed, 292 insertions(+) create mode 100644 docs/diagnostics/MissingCommonModuleMethod.md create mode 100644 docs/en/diagnostics/MissingCommonModuleMethod.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/MissingCommonModuleMethodDiagnostic.bsl diff --git a/docs/diagnostics/MissingCommonModuleMethod.md b/docs/diagnostics/MissingCommonModuleMethod.md new file mode 100644 index 00000000000..7745c3825eb --- /dev/null +++ b/docs/diagnostics/MissingCommonModuleMethod.md @@ -0,0 +1,23 @@ +# Обращение к отсутствующему методу общего модуля (MissingCommonModuleMethod) + + +## Описание диагностики + +Правило регистрирует ошибочные обращения к методам общих модулей. +Находятся проблемные варианты +- когда метода нет в указанном общем модуле +- когда метод есть в общем модуле, но метод не является экспортным +- когда у общего модуля отсутствуют исходники, все обращения к любым его методам помечаются как ошибочные + +Исключаются варианты +- когда имя переменной совпадает с именем общего модуля +## Примеры + + +## Источники + + diff --git a/docs/en/diagnostics/MissingCommonModuleMethod.md b/docs/en/diagnostics/MissingCommonModuleMethod.md new file mode 100644 index 00000000000..306771c1e60 --- /dev/null +++ b/docs/en/diagnostics/MissingCommonModuleMethod.md @@ -0,0 +1,16 @@ +# Referencing a missing common module method (MissingCommonModuleMethod) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java new file mode 100644 index 00000000000..60d6465db7f --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java @@ -0,0 +1,128 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.references.model.LocationRepository; +import com.github._1c_syntax.bsl.languageserver.references.model.OccurrenceType; +import com.github._1c_syntax.bsl.languageserver.references.model.SymbolOccurrence; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import com.github._1c_syntax.bsl.types.ConfigurationSource; +import com.github._1c_syntax.bsl.types.ModuleType; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.Value; +import org.antlr.v4.runtime.tree.ParseTree; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.Optional; + +@DiagnosticMetadata( + type = DiagnosticType.ERROR, + severity = DiagnosticSeverity.BLOCKER, + scope = DiagnosticScope.BSL, + minutesToFix = 5, + tags = { + DiagnosticTag.ERROR + } +) + +@RequiredArgsConstructor +public class MissingCommonModuleMethodDiagnostic extends AbstractDiagnostic { + public static final String PRIVATE_METHOD_MESSAGE = "privateMethod"; + private final LocationRepository locationRepository; + + private static String getMethodNameByLocation(BSLParserRuleContext node, Range range) { + return Trees.findTerminalNodeContainsPosition(node, range.getEnd()) + .map(ParseTree::getText) + .orElseThrow(); + } + + @Override + protected void check() { + if (documentContext.getServerContext().getConfiguration().getConfigurationSource() == ConfigurationSource.EMPTY){ + return; + } + locationRepository.getSymbolOccurrencesByLocationUri(documentContext.getUri()) + .filter(symbolOccurrence -> symbolOccurrence.getOccurrenceType() == OccurrenceType.REFERENCE) + .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getSymbolKind() == SymbolKind.Method) + .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getModuleType() == ModuleType.CommonModule) + .map(this::getReferenceToMethodCall) + .flatMap(Optional::stream) + .forEach(this::fireIssue); + } + + private Optional getReferenceToMethodCall(SymbolOccurrence symbolOccurrence) { + final var symbol = symbolOccurrence.getSymbol(); + final var document = documentContext.getServerContext() + .getDocument(symbol.getMdoRef(), symbol.getModuleType()) + .orElseThrow(); + final var mdObject = document.getMdObject().orElseThrow(); + + // т.к. через refIndex.getReferences нельзя получить приватные методы, приходится обходить символы модуля + final var methodSymbol = document + .getSymbolTree().getMethodSymbol(symbol.getSymbolName()); + if (methodSymbol.isEmpty()){ + final var location = symbolOccurrence.getLocation(); + // Нельзя использовать symbol.getSymbolName(), т.к. имя в нижнем регистре + return Optional.of( + new CallData(mdObject.getName(), + getMethodNameByLocation(documentContext.getAst(), location.getRange()), + location.getRange(), false, false)); + } + // вызовы приватных методов внутри самого модуля пропускаем + if (document.getUri().equals(documentContext.getUri())){ + return Optional.empty(); + } + return methodSymbol + .filter(methodSymbol2 -> !methodSymbol2.isExport()) + .map(methodSymbol1 -> new CallData(mdObject.getName(), + methodSymbol1.getName(), + symbolOccurrence.getLocation().getRange(), true, true)); + } + + private void fireIssue(CallData callData) { + final String message; + if (!callData.exists){ + message = info.getMessage(callData.methodName, callData.moduleName); + } else { + message = info.getResourceString(PRIVATE_METHOD_MESSAGE, callData.methodName, callData.moduleName); + } + diagnosticStorage.addDiagnostic(callData.moduleMethodRange, message); + } + + @Value + @AllArgsConstructor + private static class CallData { + String moduleName; + String methodName; + Range moduleMethodRange; + boolean nonExport; + boolean exists; + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 25601dee8b8..e08a71965de 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1082,6 +1082,16 @@ }, "$id": "#/definitions/MissingCodeTryCatchEx" }, + "MissingCommonModuleMethod": { + "description": "Referencing a missing common module method", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Referencing a missing common module method", + "$id": "#/definitions/MissingCommonModuleMethod" + }, "MissingEventSubscriptionHandler": { "description": "Event subscription handler missing", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_en.properties new file mode 100644 index 00000000000..4710f919fa2 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_en.properties @@ -0,0 +1,4 @@ +diagnosticMessage=The method %s of %s common module does not exist +diagnosticName=Referencing a missing common module method + +privateMethod=Correct the reference to the non export %s method of the common module %s \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_ru.properties new file mode 100644 index 00000000000..1ae0931663e --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic_ru.properties @@ -0,0 +1,4 @@ +diagnosticMessage=Метод %s общего модуля %s не существует +diagnosticName=Обращение к отсутствующему методу общего модуля + +privateMethod=Исправьте обращение к закрытому, неэкспортному методу %s общего модуля %s \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java new file mode 100644 index 00000000000..92464a98b9f --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java @@ -0,0 +1,70 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.utils.Absolute; +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +@CleanupContextBeforeClassAndAfterEachTestMethod +class MissingCommonModuleMethodDiagnosticTest extends AbstractDiagnosticTest { + + private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; + + MissingCommonModuleMethodDiagnosticTest() { + super(MissingCommonModuleMethodDiagnostic.class); + } + + @Test + void test() { + initServerContext(Absolute.path(PATH_TO_METADATA)); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasMessageOnRange("Метод МетодНесуществующий общего модуля ПервыйОбщийМодуль не существует", 1, 22, 41) + .hasMessageOnRange("Метод ДругойМетодНесуществующий общего модуля ПервыйОбщийМодуль не существует", 2, 26, 51) + .hasMessageOnRange("Метод ЕщеМетодНесуществующий общего модуля ПервыйОбщийМодуль не существует", 3, 22, 44) + .hasMessageOnRange("Метод ЕщеОдинМетодНесуществующий общего модуля ПервыйОбщийМодуль не существует", 4, 22, 48) + .hasMessageOnRange("Метод ЕщеДругойМетодНесуществующий общего модуля ПервыйОбщийМодуль не существует", 5, 26, 54) + + .hasMessageOnRange("Исправьте обращение к закрытому, неэкспортному методу РегистрацияИзмененийПередУдалением общего модуля ПервыйОбщийМодуль", 11, 22, 56) + .hasMessageOnRange("Исправьте обращение к закрытому, неэкспортному методу Тест общего модуля ПервыйОбщийМодуль", 12, 26, 30) + .hasMessageOnRange("Исправьте обращение к закрытому, неэкспортному методу Тест общего модуля ПервыйОбщийМодуль", 13, 22, 26) + .hasMessageOnRange("Исправьте обращение к закрытому, неэкспортному методу Тест общего модуля ПервыйОбщийМодуль", 14, 22, 26) + .hasMessageOnRange("Исправьте обращение к закрытому, неэкспортному методу Тест общего модуля ПервыйОбщийМодуль", 15, 26, 30) + .hasSize(10); + } + + @Test + void testWithoutMetadata() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).isEmpty(); + } +} diff --git a/src/test/resources/diagnostics/MissingCommonModuleMethodDiagnostic.bsl b/src/test/resources/diagnostics/MissingCommonModuleMethodDiagnostic.bsl new file mode 100644 index 00000000000..aa665cee4fb --- /dev/null +++ b/src/test/resources/diagnostics/MissingCommonModuleMethodDiagnostic.bsl @@ -0,0 +1,37 @@ +Процедура Тест1() + ПервыйОбщийМодуль.МетодНесуществующий(1, 2); // ошибка + А = ПервыйОбщийМодуль.ДругойМетодНесуществующий(); // ошибка + ПервыйОбщийМодуль.ЕщеМетодНесуществующий().Добавить(); // ошибка + ПервыйОбщийМодуль.ЕщеОдинМетодНесуществующий().Реквизит = 10; // ошибка + Б = ПервыйОбщийМодуль.ЕщеДругойМетодНесуществующий().Добавить(); // ошибка + + НесуществующийОбщийМодульИлиПростоПеременная.МетодНесуществующий(1, 2); // не ошибка +КонецПроцедуры + +Процедура Тест2_ОбращениеКПриватномуМетоду() + ПервыйОбщийМодуль.РегистрацияИзмененийПередУдалением(Источник, Отказ); // ошибка + А = ПервыйОбщийМодуль.Тест(); // ошибка + ПервыйОбщийМодуль.Тест().Добавить(); // ошибка + ПервыйОбщийМодуль.Тест().Реквизит = 10; // ошибка + Б = ПервыйОбщийМодуль.Тест().Добавить(); // ошибка +КонецПроцедуры + +Процедура Тест3() + ПервыйОбщийМодуль.НеУстаревшаяПроцедура(); // не ошибка + А = ПервыйОбщийМодуль.НеУстаревшаяФункция(); // не ошибка + ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // не ошибка + ПервыйОбщийМодуль.НеУстаревшаяФункция().Реквизит = 10; // не ошибка + Б = ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // не ошибка +КонецПроцедуры + +Процедура Тест4_ИмяПараметр(ПервыйОбщийМодуль) + ПервыйОбщийМодуль.МетодНесуществующий(1, 2); // не ошибка + А = ПервыйОбщийМодуль.ДругойМетодНесуществующий(); // не ошибка + ПервыйОбщийМодуль.ЕщеМетодНесуществующий().Добавить(); // не ошибка + ПервыйОбщийМодуль.ЕщеОдинМетодНесуществующий().Реквизит = 10; // не ошибка + Б = ПервыйОбщийМодуль.ЕщеДругойМетодНесуществующий().Добавить(); // не ошибка +КонецПроцедуры + +Процедура Тест5_МодулиМенеджеров() + Справочники.Справочник1.НесуществующийМетод(); // пока не ошибка +КонецПроцедуры \ No newline at end of file From 9c6350e3efa85bfb0cfc1a898ef39c469d190423 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 24 Dec 2022 12:54:38 +0300 Subject: [PATCH 080/595] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D1=81=20=D0=BF=D0=BE=D1=8F=D1=81=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit добавил кавычки к строке-ресурса --- ...ferringParametersBetweenClientAndServer.md | 43 ++++++++++++++++++- ...etersBetweenClientAndServerDiagnostic.java | 10 ++--- ...eenClientAndServerDiagnostic_ru.properties | 2 +- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index f483070a5e8..28f8d7c25c7 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -21,7 +21,48 @@ ## Примеры -Пример неточной передачи параметров +1. Пример с передачей параметров с клиента на сервер без "Знач" и со "Знач" +```bsl +&НаСервереБезКонтекста +Процедура ПередачаПараметровНаСервер(Парам1, Знач ПарамСоЗнач, Коллекция, Знач КоллекцияСоЗнач) + Парам1 = "Изменено1"; + ПарамСоЗнач = "Изменено2"; + Коллекция.Вставить("Ключ1", "Изменено1"); + КоллекцияСоЗнач.Вставить("Ключ2", "Изменено2"); +КонецПроцедуры + +&НаКлиенте +Процедура ПередачаПараметров(Команда) + Парам1 = "Исходное1"; + ПарамСоЗнач = "Исходное2"; + Коллекция = Новый Структура("Ключ1", "Исходное1"); + КоллекцияСоЗнач = Новый Структура("Ключ2", "Исходное2"); + + Шаблон = "исходное %1 = <%2>"; + Сообщить(СтрШаблон(Шаблон, "Парам1", Парам1)); + Сообщить(СтрШаблон(Шаблон, "ПарамСоЗнач", ПарамСоЗнач)); + Сообщить(СтрШаблон(Шаблон, "Коллекция.Ключ1", Коллекция.Ключ1)); + Сообщить(СтрШаблон(Шаблон, "КоллекцияСоЗнач.Ключ2", КоллекцияСоЗнач.Ключ2)); + + ПередачаПараметровНаСервер(Парам1, ПарамСоЗнач, Коллекция, КоллекцияСоЗнач); + + Шаблон = "после сервера %1 = <%2>"; + Сообщить(СтрШаблон(Шаблон, "Парам1", Парам1)); + Сообщить(СтрШаблон(Шаблон, "ПарамСоЗнач", ПарамСоЗнач)); + Сообщить(СтрШаблон(Шаблон, "Коллекция.Ключ1", Коллекция.Ключ1)); + Сообщить(СтрШаблон(Шаблон, "КоллекцияСоЗнач.Ключ2", КоллекцияСоЗнач.Ключ2)); +КонецПроцедуры +``` +Этот код при выполнении покажет следующий результат +``` +после сервера Парам1 = <Изменено1> +после сервера ПарамСоЗнач = <Исходное2> +после сервера Коллекция.Ключ1 = <Изменено1> +после сервера КоллекцияСоЗнач.Ключ2 = <Исходное2> +``` +Видно, что все параметры, передаваемые через Знач, после выполнения не меняют свои значения, в т.ч. и значения внутри коллекций. + +2. Пример неточной передачи параметров ```bsl &НаКлиенте Процедура ГруппыПользователейПеретаскиваниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index b8e85013cca..5f10841c4f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -76,8 +76,8 @@ protected void check() { .map(pair -> Triple.of(pair.getLeft(), pair.getRight(), getRefCalls(pair.getLeft()))) - .filter(triple -> !triple.getRight().isEmpty()) - .map(triple -> Triple.of(triple.getLeft(), + .filter(triple -> !triple.getRight().isEmpty()) + .map(triple -> Triple.of(triple.getLeft(), notAssignedParams(triple.getLeft(), triple.getMiddle()), triple.getRight())) .forEach(triple -> triple.getMiddle().forEach(parameterDefinition -> @@ -135,15 +135,15 @@ private static Stream getVariableByParameter(MethodSymbol method .findFirst().stream(); } - private static boolean isEqualCompilerDirective(MethodSymbol method, Collection compilerDirectiveKinds){ + private static boolean isEqualCompilerDirective(MethodSymbol method, Collection compilerDirectiveKinds) { return method.getCompilerDirectiveKind() .filter(compilerDirectiveKinds::contains) .isPresent(); } - private static boolean isEqualCompilerDirective(MethodSymbol method, CompilerDirectiveKind compilerDirectiveKind){ + private static boolean isEqualCompilerDirective(MethodSymbol method, CompilerDirectiveKind compilerDirectiveKind) { return method.getCompilerDirectiveKind() - .filter(compilerDirective -> compilerDirective == compilerDirectiveKind) + .filter(compilerDirective -> compilerDirective == compilerDirectiveKind) .isPresent(); } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties index 357d7453ecd..636aa2c68a9 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic_ru.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Установите модификатор Знач для параметра %s метода %s +diagnosticMessage=Установите модификатор "Знач" для параметра %s метода %s diagnosticName=Передача параметров между клиентом и сервером From 15a89ab2d405a2f63e32c54b07a00024648ae190 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 24 Dec 2022 13:12:44 +0300 Subject: [PATCH 081/595] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TransferringParametersBetweenClientAndServer.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index 28f8d7c25c7..fb670801260 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -37,12 +37,6 @@ ПарамСоЗнач = "Исходное2"; Коллекция = Новый Структура("Ключ1", "Исходное1"); КоллекцияСоЗнач = Новый Структура("Ключ2", "Исходное2"); - - Шаблон = "исходное %1 = <%2>"; - Сообщить(СтрШаблон(Шаблон, "Парам1", Парам1)); - Сообщить(СтрШаблон(Шаблон, "ПарамСоЗнач", ПарамСоЗнач)); - Сообщить(СтрШаблон(Шаблон, "Коллекция.Ключ1", Коллекция.Ключ1)); - Сообщить(СтрШаблон(Шаблон, "КоллекцияСоЗнач.Ключ2", КоллекцияСоЗнач.Ключ2)); ПередачаПараметровНаСервер(Парам1, ПарамСоЗнач, Коллекция, КоллекцияСоЗнач); From f7fe633b260c9c7d72578e80805c781a1201390f Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 24 Dec 2022 14:43:43 +0300 Subject: [PATCH 082/595] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit замечания Сонара и ревью кода --- ...etersBetweenClientAndServerDiagnostic.java | 121 +++++++++++------- ...sBetweenClientAndServerDiagnosticTest.java | 2 +- ...metersBetweenClientAndServerDiagnostic.bsl | 8 ++ 3 files changed, 85 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 5f10841c4f8..5f622110139 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -32,12 +32,15 @@ import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.model.OccurrenceType; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; +import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.lang3.tuple.Triple; +import lombok.Value; +import org.eclipse.lsp4j.DiagnosticRelatedInformation; import org.eclipse.lsp4j.SymbolKind; import java.util.Collection; +import java.util.Collections; import java.util.EnumSet; import java.util.List; import java.util.Optional; @@ -61,7 +64,6 @@ public class TransferringParametersBetweenClientAndServerDiagnostic extends AbstractDiagnostic { private static final Set SERVER_COMPILER_DIRECTIVE_KINDS = EnumSet.of( CompilerDirectiveKind.AT_SERVER, -// CompilerDirectiveKind.AT_CLIENT_AT_SERVER_NO_CONTEXT, CompilerDirectiveKind.AT_SERVER_NO_CONTEXT ); private final ReferenceIndex referenceIndex; @@ -70,59 +72,51 @@ public class TransferringParametersBetweenClientAndServerDiagnostic extends Abst @Override protected void check() { - getMethodParamsStream() - // сначала получаю вызовы из клиентских методов, а уже потом проверяю использование параметров внутри метода, - // чтобы исключить лишний анализ серверных методов, которые вызываются из серверных методов - .map(pair -> Triple.of(pair.getLeft(), - pair.getRight(), - getRefCalls(pair.getLeft()))) - .filter(triple -> !triple.getRight().isEmpty()) - .map(triple -> Triple.of(triple.getLeft(), - notAssignedParams(triple.getLeft(), triple.getMiddle()), - triple.getRight())) - .forEach(triple -> triple.getMiddle().forEach(parameterDefinition -> + calcIssues() + .forEach(paramReference -> paramReference.getParameterDefinitions().forEach(parameterDefinition -> diagnosticStorage.addDiagnostic(parameterDefinition.getRange(), - info.getMessage(parameterDefinition.getName(), triple.getLeft().getName()))) - ); // TODO добавить места вызовов как связанную информацию + info.getMessage(parameterDefinition.getName(), paramReference.getMethodSymbol().getName()), + getRelatedInformation(paramReference.getReferences()))) + ); } - private Stream>> getMethodParamsStream() { + private Stream calcIssues() { return documentContext.getSymbolTree().getMethods().stream() - .filter(methodSymbol -> isEqualCompilerDirective(methodSymbol, SERVER_COMPILER_DIRECTIVE_KINDS)) - .map(methodSymbol -> Pair.of(methodSymbol, - methodSymbol.getParameters().stream() - .filter(parameterDefinition -> !parameterDefinition.isByValue()) - .collect(Collectors.toUnmodifiableList()))) - .filter(pair -> !pair.getRight().isEmpty()); + .filter(TransferringParametersBetweenClientAndServerDiagnostic::isEqualCompilerDirectives) + .flatMap(methodSymbol -> getParamReference(methodSymbol).stream()); } - private List getRefCalls(MethodSymbol methodSymbol) { - return referenceIndex.getReferencesTo(methodSymbol).stream() - // в будущем могут появиться и другие виды ссылок - .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE) - .filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall) - .collect(Collectors.toUnmodifiableList()); + private Optional getParamReference(MethodSymbol method) { + List parameterDefinitions = calcNotAssignedParams(method); + if (parameterDefinitions.isEmpty()) { + return Optional.empty(); + } + final var refsFromClientCalls = getRefsFromClientCalls(method); + if (refsFromClientCalls.isEmpty()) { + return Optional.empty(); + } + return Optional.of(new ParamReference(method, parameterDefinitions, + refsFromClientCalls)); } - private static boolean isClientCall(Reference ref) { - // TODO учесть возможность вызова из клиентского модуля, в котором не нужны\не указаны директивы компиляции - return Optional.of(ref.getFrom()) - .filter(MethodSymbol.class::isInstance) - .map(MethodSymbol.class::cast) - .filter(methodSymbol -> isEqualCompilerDirective(methodSymbol, CompilerDirectiveKind.AT_CLIENT)) - .isPresent(); + private List calcNotAssignedParams(MethodSymbol method) { + List parameterDefinitions = getMethodParamsByRef(method); + if (parameterDefinitions.isEmpty()) { + return Collections.emptyList(); + } + return calcNotAssignedParams(method, parameterDefinitions); } - private List notAssignedParams(MethodSymbol method, List parameterDefinitions) { + private List calcNotAssignedParams(MethodSymbol method, List parameterDefinitions) { return parameterDefinitions.stream() - .filter(parameterDefinition -> nonAssignedParam(method, parameterDefinition)) + .filter(parameterDefinition -> isAssignedParam(method, parameterDefinition)) .collect(Collectors.toUnmodifiableList()); } - private boolean nonAssignedParam(MethodSymbol method, ParameterDefinition parameterDefinition) { + private boolean isAssignedParam(MethodSymbol method, ParameterDefinition parameterDefinition) { return getVariableByParameter(method, parameterDefinition) - .anyMatch(variableSymbol -> referenceIndex.getReferencesTo(variableSymbol).stream() - .noneMatch(ref -> ref.getOccurrenceType() == OccurrenceType.DEFINITION)); + .noneMatch(variableSymbol -> referenceIndex.getReferencesTo(variableSymbol).stream() + .anyMatch(ref -> ref.getOccurrenceType() == OccurrenceType.DEFINITION)); } private static Stream getVariableByParameter(MethodSymbol method, ParameterDefinition parameterDefinition) { @@ -135,15 +129,52 @@ private static Stream getVariableByParameter(MethodSymbol method .findFirst().stream(); } - private static boolean isEqualCompilerDirective(MethodSymbol method, Collection compilerDirectiveKinds) { + private List getRefsFromClientCalls(MethodSymbol method) { + return referenceIndex.getReferencesTo(method).stream() + // в будущем могут появиться и другие виды ссылок + .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE) + .filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall) + .collect(Collectors.toUnmodifiableList()); + } + + private static boolean isClientCall(Reference ref) { + // TODO учесть возможность вызова из клиентского модуля, в котором не нужны\не указаны директивы компиляции + return Optional.of(ref.getFrom()) + .filter(MethodSymbol.class::isInstance) + .map(MethodSymbol.class::cast) + .filter(TransferringParametersBetweenClientAndServerDiagnostic::isEqualCompilerDirective) + .isPresent(); + } + + private static boolean isEqualCompilerDirectives(MethodSymbol method) { return method.getCompilerDirectiveKind() - .filter(compilerDirectiveKinds::contains) + .filter(((Collection) SERVER_COMPILER_DIRECTIVE_KINDS)::contains) .isPresent(); } - private static boolean isEqualCompilerDirective(MethodSymbol method, CompilerDirectiveKind compilerDirectiveKind) { + private static boolean isEqualCompilerDirective(MethodSymbol method) { return method.getCompilerDirectiveKind() - .filter(compilerDirective -> compilerDirective == compilerDirectiveKind) + .filter(compilerDirective -> compilerDirective == CompilerDirectiveKind.AT_CLIENT) .isPresent(); } + + private static List getMethodParamsByRef(MethodSymbol methodSymbol) { + return methodSymbol.getParameters().stream() + .filter(parameterDefinition -> !parameterDefinition.isByValue()) + .collect(Collectors.toUnmodifiableList()); + } + + private static List getRelatedInformation(List references) { + return references.stream() + .map(reference -> RelatedInformation.create(reference.getUri(), reference.getSelectionRange(), "+1")) + .collect(Collectors.toList()); + } + + @Value + @AllArgsConstructor + private static class ParamReference { + MethodSymbol methodSymbol; + List parameterDefinitions; + List references; + } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java index dc3514d13b5..7b54753f556 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java @@ -46,7 +46,7 @@ void test() { } private String getMessage(String paramName, String methodName) { - return String.format("Установите модификатор Знач для параметра %s метода %s", + return String.format("Установите модификатор \"Знач\" для параметра %s метода %s", paramName, methodName); } diff --git a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl index 196060aaf18..5efadc81e2b 100644 --- a/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl +++ b/src/test/resources/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.bsl @@ -36,3 +36,11 @@ Процедура Сервер4(Парам1) // не ошибка ЕщеМетод(Парам1); КонецПроцедуры + +&НаСервере +Процедура Метод(Парам1) +КонецПроцедуры + +&НаСервере +Процедура ЕщеМетод(Парам1) +КонецПроцедуры From 353568fafdb4d6d1e3f499ba64c5c8a03b40e394 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 24 Dec 2022 14:56:00 +0300 Subject: [PATCH 083/595] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit перенес в отдельную задачу --- .../TransferringParametersBetweenClientAndServerDiagnostic.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 5f622110139..873dcacc4b2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -57,7 +57,6 @@ DiagnosticTag.PERFORMANCE, DiagnosticTag.STANDARD } - // TODO учесть подходящие типы модулей - только клиентские, только серверные или все? ) @RequiredArgsConstructor @@ -138,7 +137,6 @@ private List getRefsFromClientCalls(MethodSymbol method) { } private static boolean isClientCall(Reference ref) { - // TODO учесть возможность вызова из клиентского модуля, в котором не нужны\не указаны директивы компиляции return Optional.of(ref.getFrom()) .filter(MethodSymbol.class::isInstance) .map(MethodSymbol.class::cast) From 76de5bc35c14e8c7d34c1757117e0c4044782204 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 09:01:12 +0000 Subject: [PATCH 084/595] build(deps): bump peaceiris/actions-gh-pages from 3.9.0 to 3.9.1 Bumps [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) from 3.9.0 to 3.9.1. - [Release notes](https://github.com/peaceiris/actions-gh-pages/releases) - [Changelog](https://github.com/peaceiris/actions-gh-pages/blob/main/CHANGELOG.md) - [Commits](https://github.com/peaceiris/actions-gh-pages/compare/v3.9.0...v3.9.1) --- updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/gh-pages.yml | 2 +- .github/workflows/qodana.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index d00feec9098..fab0faa85fc 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -145,7 +145,7 @@ jobs: cp -R temp/site/. public/dev/en - name: Deploy - uses: peaceiris/actions-gh-pages@v3.9.0 + uses: peaceiris/actions-gh-pages@v3.9.1 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_branch: gh-pages diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index c29ec740ccf..34e39cddf16 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -28,7 +28,7 @@ jobs: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json - name: Deploy to GitHub Pages if: github.event_name == 'push' - uses: peaceiris/actions-gh-pages@v3.9.0 + uses: peaceiris/actions-gh-pages@v3.9.1 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ runner.temp }}/qodana/results/report From 6b40825969460de74926b72f7424fefc4fa6b2c7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 16 Jan 2023 22:43:16 +0300 Subject: [PATCH 085/595] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/NewDiagnostic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/NewDiagnostic.md b/.github/ISSUE_TEMPLATE/NewDiagnostic.md index fdad78fe1e1..88df6f476ab 100644 --- a/.github/ISSUE_TEMPLATE/NewDiagnostic.md +++ b/.github/ISSUE_TEMPLATE/NewDiagnostic.md @@ -50,7 +50,7 @@ assignees: '' * [ ] `LOCALIZE` - "Проблемы локализации" ### Время на исправление (минут) - + ## Дополнительная информация From 92e21692c175ac7c78c160a955648dda064583ce Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 16 Jan 2023 23:02:12 +0300 Subject: [PATCH 086/595] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20#2975?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DenyIncompleteValues.md | 35 +++++++ docs/en/diagnostics/DenyIncompleteValues.md | 16 ++++ .../DenyIncompleteValuesDiagnostic.java | 75 +++++++++++++++ ...nyIncompleteValuesDiagnostic_en.properties | 2 + ...nyIncompleteValuesDiagnostic_ru.properties | 2 + .../DenyIncompleteValuesDiagnosticTest.java | 91 +++++++++++++++++++ .../DenyIncompleteValuesDiagnostic.bsl | 2 + 7 files changed, 223 insertions(+) create mode 100644 docs/diagnostics/DenyIncompleteValues.md create mode 100644 docs/en/diagnostics/DenyIncompleteValues.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/DenyIncompleteValuesDiagnostic.bsl diff --git a/docs/diagnostics/DenyIncompleteValues.md b/docs/diagnostics/DenyIncompleteValues.md new file mode 100644 index 00000000000..c42b8c392b0 --- /dev/null +++ b/docs/diagnostics/DenyIncompleteValues.md @@ -0,0 +1,35 @@ +# Запрет незаполненных значений (DenyIncompleteValues) + + +## Описание диагностики + +Довольно часто при проектировании структуры метаданных соблюдается правило - измерения регистра всегда должны быть заполнены конкретными значениями и не должны быть не заполнены. + +Проверку на заполненность измерений удобно выполнять с помощью простых встроенных средств платформы, а именно, флага "Запрет незаполненных значений" для измерения регистра. В этом случае платформа самостоятельно будет проверять заполненность измерений и не нужно дополнительно контролировать заполнение измерения ни при программной обработке регистров, ни при интерактивной обработке. +Фактически записи с незаполненным измерением не имеют смысла в информационной базе, каким бы образом они в нее ни попали: в результате интерактивного ввода или в результате выполнения программного кода. + +Без установки указанного флага могут возникать различные ситуации, которые приводят к проблемам или усложняют сопровождение систем 1С. Например, +- пользователи смогут интерактивно указать пустые значения +- или разработчики могут при разработке ошибаться, не указывая значения измерения при подготовке записей регистра. + +Текущее правило может выдавать ложные срабатывания для измерений, которые могут быть не заполнены. + +Правило применяется для следующих регистров: +- сведений +- накопления +- бухгалтерских +- расчетных + +## Примеры + + +## Источники + + +- [Книга "Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8" - глава "Проверка заполнения и проверка при записи"](https://its.1c.ru/db/pubv8devui#content:225:1) +- [Документация разработчика 1С 8.3 - Свойства измерения (ресурса, реквизита) регистра сведений](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000349) +- [Документация разработчика 1С 8.3 - Свойства измерения (ресурса, реквизита) регистра накопления](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000363) diff --git a/docs/en/diagnostics/DenyIncompleteValues.md b/docs/en/diagnostics/DenyIncompleteValues.md new file mode 100644 index 00000000000..cd35ff58118 --- /dev/null +++ b/docs/en/diagnostics/DenyIncompleteValues.md @@ -0,0 +1,16 @@ +# Запрет незаполненных значений (DenyIncompleteValues) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java new file mode 100644 index 00000000000..aa04082c582 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -0,0 +1,75 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.MdoReferences; +import com.github._1c_syntax.bsl.types.MDOType; +import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; +import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; +import com.github._1c_syntax.mdclasses.mdo.attributes.Dimension; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.stream.Stream; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 1, + tags = { + DiagnosticTag.BADPRACTICE + }, + scope = DiagnosticScope.BSL +) +public class DenyIncompleteValuesDiagnostic extends AbstractMetadataDiagnostic { + + public DenyIncompleteValuesDiagnostic() { + super(List.of( + MDOType.INFORMATION_REGISTER, + MDOType.ACCUMULATION_REGISTER, + MDOType.ACCOUNTING_REGISTER, + MDOType.CALCULATION_REGISTER + )); + } + + @Override + protected void checkMetadata(AbstractMDObjectBase mdo) { + getWrongDimensions((AbstractMDObjectComplex) mdo) + .forEach((Dimension dimension) -> { + var ownerMDOName = MdoReferences.getLocaleOwnerMdoName(documentContext, mdo); + addDiagnostic(info.getMessage(dimension.getName(), ownerMDOName)); + }); + } + + @NotNull + private static Stream getWrongDimensions(AbstractMDObjectComplex mdo) { + return mdo.getChildren().stream() + .filter(Dimension.class::isInstance) + .map(Dimension.class::cast) + .filter(dimension -> !dimension.isDenyIncompleteValues()); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties new file mode 100644 index 00000000000..1b1e3b773cc --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=The "Deny incomplete values" flag is not specified for the "%s" dimension of the "%s" metadata +diagnosticName=Deny incomplete values diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties new file mode 100644 index 00000000000..d3e061083e1 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Не указан флаг "Запрет незаполненных значений" у измерения "%s" метаданного "%s" +diagnosticName=Запрет незаполненных значений diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java new file mode 100644 index 00000000000..1e1c2c01bce --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -0,0 +1,91 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.types.MDOType; +import com.github._1c_syntax.bsl.types.MdoReference; +import com.github._1c_syntax.bsl.types.ModuleType; +import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; +import com.github._1c_syntax.mdclasses.mdo.MDInformationRegister; +import com.github._1c_syntax.utils.Absolute; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.Optional; +import java.util.Set; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +@CleanupContextBeforeClassAndAfterEachTestMethod +class DenyIncompleteValuesDiagnosticTest extends AbstractDiagnosticTest { + DenyIncompleteValuesDiagnosticTest() { + super(DenyIncompleteValuesDiagnostic.class); + } + + private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; + + @Test + void testMdoWithModule() { + checkMockHandler(ModuleType.RecordSetModule, false); + } + + @Test + void testMdoWithoutModule() { + checkMockHandler(ModuleType.SessionModule, true); + } + + private void checkMockHandler(ModuleType type, boolean noneModules) { + initServerContext(Absolute.path(PATH_TO_METADATA)); + + var documentContext = spy(getDocumentContext()); + when(documentContext.getModuleType()).thenReturn(type); + + final var mdObjectBase = context.getConfiguration().getChildrenByMdoRef().get( + MdoReference.create(MDOType.INFORMATION_REGISTER, + "РегистрСведений1")); + var spyMdo = spy((MDInformationRegister) mdObjectBase); + + when(documentContext.getMdObject()).thenReturn(Optional.of(spyMdo)); + + if (noneModules){ + when(spyMdo.getModules()).thenReturn(Collections.emptyList()); + + Set children = Set.of(spyMdo); + + var configuration = spy(context.getConfiguration()); + when(configuration.getChildren()).thenReturn(children); + var serverContext = spy(documentContext.getServerContext()); + when(serverContext.getConfiguration()).thenReturn(configuration); + when(documentContext.getServerContext()).thenReturn(serverContext); + } + + final var diagnostics = getDiagnostics(documentContext); + + assertThat(diagnostics, true) + .hasMessageOnRange("Не указан флаг \"Запрет незаполненных значений\" у измерения \"Справочник1\" метаданного \"РегистрСведений.РегистрСведений1\"", + 0, 0, 9) + .hasSize(1); + } +} diff --git a/src/test/resources/diagnostics/DenyIncompleteValuesDiagnostic.bsl b/src/test/resources/diagnostics/DenyIncompleteValuesDiagnostic.bsl new file mode 100644 index 00000000000..b0aa62f601a --- /dev/null +++ b/src/test/resources/diagnostics/DenyIncompleteValuesDiagnostic.bsl @@ -0,0 +1,2 @@ +Процедура Метод1() +КонецПроцедуры From 54645610af99f718f4f590ee53424573679ce6f6 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 16 Jan 2023 23:06:28 +0300 Subject: [PATCH 087/595] =?UTF-8?q?=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D1=81=D1=8C=20=D0=BC=D0=B5=D1=82=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=20=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=B8=D0=BC=D0=B8=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit небольшое ускорение проверки --- .../diagnostics/AbstractMetadataDiagnostic.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index c192b826435..f17126afd4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -30,10 +30,9 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** - * Базовый класс для анализа объектов метаданных, когда диагностика региструется на первый токен модуля + * Базовый класс для анализа объектов метаданных, когда диагностика регистрируется на первый токен модуля */ public abstract class AbstractMetadataDiagnostic extends AbstractDiagnostic { @@ -115,12 +114,13 @@ private void checkMetadataWithModules() { } private boolean haveMatchingModule(AbstractMDObjectBase mdo) { - var modules = ((AbstractMDObjectBSL) mdo).getModules().stream() - .filter(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType())) - .collect(Collectors.toList()); - // чтобы не анализировать несколько раз, выберем только один модуль, например модуль менеджера - return modules.size() == 1 || documentContext.getModuleType() == ModuleType.ManagerModule; + if (documentContext.getModuleType() == ModuleType.ManagerModule){ + return true; + } + + return ((AbstractMDObjectBSL) mdo).getModules().stream() + .anyMatch(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType())); } /** From 162a012b038e12b0019b5741bf2c83099ec6003d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 16 Jan 2023 23:19:16 +0300 Subject: [PATCH 088/595] =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81-=D1=83?= =?UTF-8?q?=D1=82=D0=B8=D0=BB=D0=B8=D1=82=D1=8B=20MdoReferences=20=D1=81?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B7=D0=BD=D1=8B=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/utils/MdoReferences.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java new file mode 100644 index 00000000000..9a8bc0b1fed --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java @@ -0,0 +1,45 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.utils; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class MdoReferences { + + public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { + final var mdoReference = mdo.getMdoReference(); + if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { + return mdoReference.getMdoRef(); + } + return mdoReference.getMdoRefRu(); + } + + public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { + final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); + return names[0].concat(".").concat(names[1]); + } + +} From 5640a2186ee196a8deb6257aec1ab35d4159cf63 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 17 Jan 2023 19:22:24 +0300 Subject: [PATCH 089/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit дублировались результаты для разных модулей одного объекта --- .../diagnostics/AbstractMetadataDiagnostic.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index f17126afd4f..7144271c541 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -114,13 +114,15 @@ private void checkMetadataWithModules() { } private boolean haveMatchingModule(AbstractMDObjectBase mdo) { - // чтобы не анализировать несколько раз, выберем только один модуль, например модуль менеджера + // чтобы не анализировать несколько раз и не выдавать одинаковые результаты для разных модулей, + // выберем только один модуль, например модуль менеджера if (documentContext.getModuleType() == ModuleType.ManagerModule){ return true; } return ((AbstractMDObjectBSL) mdo).getModules().stream() - .anyMatch(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType())); + .filter(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType())) + .count() == 1; } /** From 28a0cdc3dba874e242599727ff06cba0729fb6ee Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 17 Jan 2023 19:22:43 +0300 Subject: [PATCH 090/595] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/DenyIncompleteValuesDiagnostic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index aa04082c582..d70bba05a45 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -37,6 +37,7 @@ import java.util.stream.Stream; @DiagnosticMetadata( + activatedByDefault = false, type = DiagnosticType.CODE_SMELL, severity = DiagnosticSeverity.MAJOR, minutesToFix = 1, From 2c454adcff411d0b2b3248e7bdae8adb4c07ee46 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 17 Jan 2023 19:23:21 +0300 Subject: [PATCH 091/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82,=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B3=D0=B4=D0=B0=20=D1=83=20=D0=BC=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DenyIncompleteValuesDiagnosticTest.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index 1e1c2c01bce..51c33e13b8d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -21,6 +21,8 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; @@ -30,6 +32,7 @@ import com.github._1c_syntax.utils.Absolute; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Collections; import java.util.Optional; import java.util.Set; @@ -45,15 +48,36 @@ class DenyIncompleteValuesDiagnosticTest extends AbstractDiagnosticTest Date: Wed, 18 Jan 2023 09:01:10 +0000 Subject: [PATCH 092/595] build(deps): bump peaceiris/actions-gh-pages from 3.9.1 to 3.9.2 Bumps [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) from 3.9.1 to 3.9.2. - [Release notes](https://github.com/peaceiris/actions-gh-pages/releases) - [Changelog](https://github.com/peaceiris/actions-gh-pages/blob/main/CHANGELOG.md) - [Commits](https://github.com/peaceiris/actions-gh-pages/compare/v3.9.1...v3.9.2) --- updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/gh-pages.yml | 2 +- .github/workflows/qodana.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index fab0faa85fc..f1a20b5d016 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -145,7 +145,7 @@ jobs: cp -R temp/site/. public/dev/en - name: Deploy - uses: peaceiris/actions-gh-pages@v3.9.1 + uses: peaceiris/actions-gh-pages@v3.9.2 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_branch: gh-pages diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 34e39cddf16..91fbc4391c0 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -28,7 +28,7 @@ jobs: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json - name: Deploy to GitHub Pages if: github.event_name == 'push' - uses: peaceiris/actions-gh-pages@v3.9.1 + uses: peaceiris/actions-gh-pages@v3.9.2 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ runner.temp }}/qodana/results/report From c406f31bc7668fcbbebc4f2d5288a608f6c19394 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 16 Dec 2022 00:11:41 +0300 Subject: [PATCH 093/595] migrate to java17 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit javax -> jakarta/spotbugs jdk17 fix compile error import reordering fix guava exclusion Выключена ругань на неверную компиляцию picocli See https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/LocalVariableTableParameterNameDiscoverer.html Война с Nullable Update build.gradle.kts Обновление перехвата System.exit под jdk17+ Update qodana.yaml --- .github/workflows/gradle.yml | 2 +- build.gradle.kts | 10 ++++++---- docs/contributing/EnvironmentSetting.md | 4 ++-- docs/en/contributing/EnvironmentSetting.md | 4 ++-- docs/en/systemRequirements.md | 2 +- docs/systemRequirements.md | 2 +- qodana.yaml | 1 + .../bsl/languageserver/AutoServerInfo.java | 2 +- .../languageserver/aop/EventPublisherAspect.java | 2 +- .../bsl/languageserver/aop/MeasuresAspect.java | 2 +- .../bsl/languageserver/aop/SentryAspect.java | 4 ++-- .../aop/sentry/SentryScopeConfigurer.java | 2 +- .../configuration/LanguageServerConfiguration.java | 6 +++++- .../watcher/ConfigurationFileSystemWatcher.java | 4 ++-- .../languageserver/context/DocumentContext.java | 2 +- .../computer/CognitiveComplexityComputer.java | 2 +- .../computer/CyclomaticComplexityComputer.java | 2 +- .../IfElseDuplicatedCodeBlockDiagnostic.java | 2 +- .../IfElseDuplicatedConditionDiagnostic.java | 2 +- .../InvalidCharacterInFileDiagnostic.java | 2 +- ...nstructorsInStructureDeclarationDiagnostic.java | 2 +- .../diagnostics/NestedStatementsDiagnostic.java | 2 +- .../languageserver/providers/CodeLensProvider.java | 2 +- .../websocket/LSPWebSocketEndpoint.java | 2 +- .../websocket/WebSocketConfiguration.java | 5 ++--- src/main/resources/application.properties | 1 + .../DisableDiagnosticTriggeringSupplierTest.java | 2 +- .../diagnostics/AbstractDiagnosticTest.java | 2 +- ...uctorsInStructureDeclarationDiagnosticTest.java | 2 +- ...gnosticDescriptionDocumentLinkSupplierTest.java | 1 - .../MethodSymbolMarkupContentBuilderTest.java | 2 +- .../VariableSymbolMarkupContentBuilderTest.java | 2 +- .../providers/DefinitionProviderTest.java | 2 +- .../providers/ReferencesProviderTest.java | 2 +- .../providers/RenameProviderTest.java | 2 +- .../ReferenceIndexReferenceFinderTest.java | 2 +- .../references/ReferenceIndexTest.java | 2 +- .../bsl/languageserver/util/Assertions.java | 2 ++ .../websocket/WebsocketLauncherTest.java | 14 ++++++++------ src/test/resources/application-measures.properties | 1 + .../resources/application-websocket.properties | 1 + src/test/resources/application.properties | 1 + 42 files changed, 63 insertions(+), 50 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d791c53625b..266ce15841e 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - java_version: ['11', '17'] + java_version: ['17', '19'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v3 diff --git a/build.gradle.kts b/build.gradle.kts index 738fb224312..18bac881e3f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -69,8 +69,10 @@ dependencies { api("info.picocli:picocli-spring-boot-starter:4.7.0") // lsp4j core - api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.19.0") - api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.19.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.19.0") { + exclude(group = "com.google.guava", module = "guava") + } + api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.19.0") // 1c-syntax api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { @@ -133,8 +135,8 @@ dependencies { } java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 withSourcesJar() withJavadocJar() } diff --git a/docs/contributing/EnvironmentSetting.md b/docs/contributing/EnvironmentSetting.md index 9830b52b862..f2ce34b531e 100644 --- a/docs/contributing/EnvironmentSetting.md +++ b/docs/contributing/EnvironmentSetting.md @@ -4,7 +4,7 @@ ## Необходимое ПО -* Java Development Kit 11 +* Java Development Kit 17 * [IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/download/) * Плагины IntelliJ IDEA * Lombok Plugin @@ -14,7 +14,7 @@ ### Настройки IntelliJ IDEA -* Настроить [Java SDK на JDK11](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) +* Настроить [Java SDK на JDK17](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) * Включить обработку аннотаций: `File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors -> Enable annotation processing` * Выполнить настройки автоимпорта, подробно описано в [статье](https://www.jetbrains.com/help/idea/creating-and-optimizing-imports.html). Отдельно стоит обратить внимание на оптимизацию импорта. * Не надо запускать оптимизацию импортов всего проекта, за этим следят мейнтейнеры. Если после оптимизации импортов появились измененные файлы, которые не менялись в процессе разработки, стоит уведомить мейнтейнеров и откатить эти изменения. diff --git a/docs/en/contributing/EnvironmentSetting.md b/docs/en/contributing/EnvironmentSetting.md index ee86d2feb8a..94799ee9bdb 100644 --- a/docs/en/contributing/EnvironmentSetting.md +++ b/docs/en/contributing/EnvironmentSetting.md @@ -4,7 +4,7 @@ Development is underway using [IntelliJ IDEA Community Edition](https://www.jetb ## Required Software -* Java Development Kit 11 +* Java Development Kit 17 * [IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/download/) * Plugins IntelliJ IDEA * Lombok Plugin @@ -14,7 +14,7 @@ Please note that plugins do not have to be installed - if you have Internet acce ### IntelliJ IDEA Settings -* Configure [Java SDK на JDK11](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) +* Configure [Java SDK на JDK17](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) * Enable annotation processing: `File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors -> Enable annotation processing` * Configure auto import settings, details in the [article](https://www.jetbrains.com/help/idea/creating-and-optimizing-imports.html). Pay special attention to import optimization. * There is no need to start optimization of imports of the entire project, this is followed by maintainers. If, after optimizing imports, changed files appeared that did not change during the development process, you should notify the maintainers and roll back these changes. diff --git a/docs/en/systemRequirements.md b/docs/en/systemRequirements.md index 0bba7dd7804..cbff3d96733 100644 --- a/docs/en/systemRequirements.md +++ b/docs/en/systemRequirements.md @@ -6,7 +6,7 @@ Using `BSL Language Server` has some limitations, listed bellow `BSL Language Server` is a console Java application and requires the presence of a Java virtual machine on the computer. -The minimum supported version is Java 11, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 11 and 17 are currently supported. +The minimum supported version is Java 17, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 17 and 19 are currently supported. JDK vendor is also interesting. Due to the changed licensing policy of Oracle, it is recommended to use open implementations of the `OpenJDK` virtual machine: AdoptOpenJDK, Liberica JDK. diff --git a/docs/systemRequirements.md b/docs/systemRequirements.md index 750751402fa..f3749508a29 100644 --- a/docs/systemRequirements.md +++ b/docs/systemRequirements.md @@ -6,7 +6,7 @@ `BSL Language Server` представляет собой консольное Java приложение, соответственно, для его функционирования необходимо наличие виртуальной машины Java на компьютере. -На данный момент минимальной поддерживаемой версией является Java 11, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 11 и 17. +На данный момент минимальной поддерживаемой версией является Java 17, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 17 и 19. Кроме версии Java интересен и вендор JDK. В связи с изменившейся политикой лицензирования Oracle, рекомендуется использование открытых реализаций виртуальной машины `OpenJDK`: AdoptOpenJDK, Liberica JDK. diff --git a/qodana.yaml b/qodana.yaml index 2e36017fbd0..bbd99905474 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,5 +1,6 @@ version: "1.0" linter: jetbrains/qodana-jvm-community:2022.3 +projectJDK: 17 profile: name: qodana.starter include: diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java index a004af00003..6ee170129d2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java @@ -21,12 +21,12 @@ */ package com.github._1c_syntax.bsl.languageserver; +import jakarta.annotation.PostConstruct; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java index 88dfaf7dd87..d55321eda97 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.context.events.DocumentContextContentChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.events.ServerContextPopulatedEvent; import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import jakarta.annotation.PreDestroy; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; @@ -39,7 +40,6 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; -import javax.annotation.PreDestroy; import java.io.File; import java.util.Collection; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java index f348cfc273f..a18d72c9815 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.BSLDiagnostic; +import jakarta.annotation.PreDestroy; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -36,7 +37,6 @@ import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; -import javax.annotation.PreDestroy; import java.io.File; import java.util.Collection; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java index 3785c1a35a9..f76b30ceaa0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java @@ -22,12 +22,12 @@ package com.github._1c_syntax.bsl.languageserver.aop; import io.sentry.Sentry; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import lombok.NoArgsConstructor; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index 2f865fba563..4d90f75e4bc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -24,13 +24,13 @@ import io.sentry.Scope; import io.sentry.Sentry; import io.sentry.protocol.User; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.ServerInfo; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.util.UUID; /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 0b5ea2db9ac..feb756aa40a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -32,6 +32,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; +import jakarta.annotation.PostConstruct; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -45,7 +46,6 @@ import org.springframework.context.annotation.Role; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -175,6 +175,10 @@ public static Path getCustomConfigurationRoot(LanguageServerConfiguration config } + @SuppressFBWarnings( + value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE", + justification = "False positive" + ) private static File getConfigurationFile(Path rootPath) { File configurationFile = null; List listPath = new ArrayList<>(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index 820e346ec72..5d2bc3ea1a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -25,6 +25,8 @@ import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.utils.Absolute; import com.sun.nio.file.SensitivityWatchEventModifier; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.Synchronized; @@ -33,8 +35,6 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import java.io.File; import java.io.IOException; import java.nio.file.FileSystems; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index a186b925d52..08fded4cb0f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -45,6 +45,7 @@ import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.utils.Lazy; import edu.umd.cs.findbugs.annotations.Nullable; +import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -60,7 +61,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; import java.net.URI; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java index f4f1ef52ec8..96b18a2f416 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java @@ -29,6 +29,7 @@ import com.github._1c_syntax.bsl.parser.BSLParserBaseListener; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.StringInterner; +import jakarta.annotation.PostConstruct; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -40,7 +41,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java index ae93698686f..81e831094f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java @@ -29,6 +29,7 @@ import com.github._1c_syntax.bsl.parser.BSLParserBaseListener; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.StringInterner; +import jakarta.annotation.PostConstruct; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -41,7 +42,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java index 5639e1b8358..b22ca418450 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java @@ -29,10 +29,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; import com.github._1c_syntax.bsl.parser.BSLParser; +import jakarta.annotation.PostConstruct; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java index 26363650c40..becc7ca8b94 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java @@ -29,10 +29,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; import com.github._1c_syntax.bsl.parser.BSLParser; +import jakarta.annotation.PostConstruct; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java index 5ed149a3038..dca3bb45dce 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.providers.CodeActionProvider; import com.github._1c_syntax.bsl.parser.BSLLexer; +import jakarta.annotation.PostConstruct; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.Token; import org.eclipse.lsp4j.CodeAction; @@ -35,7 +36,6 @@ import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.TextEdit; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; import java.util.Set; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java index 3424f14be25..6230eb54ec2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java @@ -32,10 +32,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParser.NewExpressionContext; +import jakarta.annotation.PostConstruct; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java index c9117f4081a..20e91257662 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java @@ -31,10 +31,10 @@ import com.github._1c_syntax.bsl.languageserver.utils.RelatedInformation; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import jakarta.annotation.PostConstruct; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import javax.annotation.PostConstruct; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index b264896b973..77a0fe9ef66 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.codelenses.databind.CodeLensDataObjectMapper; import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.eclipse.lsp4j.ClientCapabilities; @@ -40,7 +41,6 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.util.Collection; import java.util.List; import java.util.Map; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java index 62f8bdd8e66..b587c6af83b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java @@ -26,7 +26,7 @@ import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.LanguageClientAware; import org.eclipse.lsp4j.services.LanguageServer; -import org.eclipse.lsp4j.websocket.WebSocketEndpoint; +import org.eclipse.lsp4j.websocket.jakarta.WebSocketEndpoint; import org.springframework.stereotype.Component; import java.util.Collection; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java index aa60bc989a5..019d7f0c7c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java @@ -21,8 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver.websocket; +import jakarta.websocket.server.ServerEndpointConfig; import org.eclipse.lsp4j.services.LanguageClient; -import org.eclipse.lsp4j.websocket.WebSocketEndpoint; +import org.eclipse.lsp4j.websocket.jakarta.WebSocketEndpoint; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.context.annotation.Bean; @@ -31,8 +32,6 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter; import org.springframework.web.socket.server.standard.ServerEndpointRegistration; -import javax.websocket.server.ServerEndpointConfig; - /** * Конфигурация модуля веб-сокетов. */ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b8fb1c1f81a..3e7a1bdfba1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -9,6 +9,7 @@ logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=fatal logging.level.org.springframework.data.repository.config.RepositoryConfigurationDelegate=warn logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn +logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer=error spring.application.name=BSL Language Server app.globalConfiguration.path=${user.home}/.bsl-language-server.json app.configuration.path=.bsl-language-server.json diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java index 9a827b48809..2725bdf9441 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionContext; import org.eclipse.lsp4j.CodeActionParams; @@ -36,7 +37,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; -import javax.annotation.PostConstruct; import java.util.List; import java.util.stream.Collectors; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index a17e31847c7..78cc94e2ca1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -27,6 +27,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure.DiagnosticObjectProvider; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.utils.Absolute; +import jakarta.annotation.PostConstruct; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; import org.eclipse.lsp4j.CodeAction; @@ -39,7 +40,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.Collections; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java index b01d5846813..ae91a20a1cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java @@ -22,12 +22,12 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticRelatedInformation; import org.eclipse.lsp4j.Range; import org.junit.jupiter.api.Test; -import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index 7f055f3a20c..4c4b2fa7be9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -30,7 +30,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; -import javax.annotation.PostConstruct; import java.io.File; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java index b1ae194b7f3..ad3feb49090 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java @@ -25,11 +25,11 @@ import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import java.util.Arrays; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java index f1d70479a97..e284ffefe91 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java @@ -25,11 +25,11 @@ import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import java.util.Arrays; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java index 78acc9ffac9..4cdc4fd850a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java @@ -26,13 +26,13 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.DefinitionParams; import org.eclipse.lsp4j.Position; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java index 008203f974d..1468c8af96f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.ReferenceParams; @@ -33,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java index 94b7258a48f..d616b59d8f9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.PrepareRenameParams; import org.eclipse.lsp4j.RenameParams; @@ -33,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java index cb082fc7c7e..07edb1a94f3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Position; import org.junit.jupiter.api.Test; @@ -35,7 +36,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.SpyBean; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import java.util.Optional; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java index ef2880eb1ab..048b0ca8349 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java @@ -27,6 +27,7 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.types.ModuleType; +import jakarta.annotation.PostConstruct; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.SymbolKind; @@ -35,7 +36,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; -import javax.annotation.PostConstruct; import java.nio.file.Paths; import java.util.stream.Collectors; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java index 2ddf9227221..d508128f88f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java @@ -29,6 +29,7 @@ import com.github._1c_syntax.bsl.languageserver.util.assertions.FoldingRangeAssert; import com.github._1c_syntax.bsl.languageserver.util.assertions.FoldingRangesAssert; import com.github._1c_syntax.bsl.languageserver.util.assertions.SelectionRangesAssert; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.ColorInformation; import org.eclipse.lsp4j.ColorPresentation; @@ -38,6 +39,7 @@ import java.util.List; +@SuppressFBWarnings("NM_SAME_SIMPLE_NAME_AS_SUPERCLASS") public class Assertions extends org.assertj.core.api.Assertions { public static DiagnosticAssert assertThat(Diagnostic actual) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java index a0f5159bf33..5204aca0263 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java @@ -22,6 +22,13 @@ package com.github._1c_syntax.bsl.languageserver.websocket; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import jakarta.websocket.ClientEndpoint; +import jakarta.websocket.ContainerProvider; +import jakarta.websocket.DeploymentException; +import jakarta.websocket.OnOpen; +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,12 +37,6 @@ import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.test.context.ActiveProfiles; -import javax.websocket.ClientEndpoint; -import javax.websocket.ContainerProvider; -import javax.websocket.DeploymentException; -import javax.websocket.OnOpen; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; import java.io.ByteArrayOutputStream; import java.io.FileDescriptor; import java.io.FileOutputStream; @@ -101,6 +102,7 @@ void connectClientToServer(int websocketPort) throws URISyntaxException, Deploym session = webSocketContainer.connectToServer(client, new URI("ws://localhost:" + websocketPort + endpointPath)); } + @SuppressFBWarnings("RV_RETURN_VALUE_IGNORED") void testWebsocketServer(int websocketPort) { try { latch.await(1, TimeUnit.SECONDS); diff --git a/src/test/resources/application-measures.properties b/src/test/resources/application-measures.properties index acf3564038e..a9692f5e26e 100644 --- a/src/test/resources/application-measures.properties +++ b/src/test/resources/application-measures.properties @@ -10,6 +10,7 @@ logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=fatal logging.level.org.springframework.data.repository.config.RepositoryConfigurationDelegate=warn logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn +logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer=error spring.application.name=BSL Language Server logging.level.org.springframework.test.context.support.AnnotationConfigContextLoaderUtils=warn diff --git a/src/test/resources/application-websocket.properties b/src/test/resources/application-websocket.properties index d3c156204d6..843f7ada7da 100644 --- a/src/test/resources/application-websocket.properties +++ b/src/test/resources/application-websocket.properties @@ -10,6 +10,7 @@ logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=fatal logging.level.org.springframework.data.repository.config.RepositoryConfigurationDelegate=warn logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn +logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer=error spring.application.name=BSL Language Server logging.level.org.springframework.test.context.support.AnnotationConfigContextLoaderUtils=warn diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 70a567bad3c..bddcb834f30 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -10,6 +10,7 @@ logging.level.org.hibernate.engine.jdbc.spi.SqlExceptionHelper=fatal logging.level.org.springframework.data.repository.config.RepositoryConfigurationDelegate=warn logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn +logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer=error spring.application.name=BSL Language Server logging.level.org.springframework.test.context.support.AnnotationConfigContextLoaderUtils=warn From b1a7a11f2ff4704e3a4ab10f6a18ff0d5f270e16 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 19 Jan 2023 16:42:28 +0400 Subject: [PATCH 094/595] happy new year --- .../bsl/languageserver/context/symbol/VariableSymbolCreate.java | 2 +- .../_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java | 2 +- .../github/_1c_syntax/bsl/languageserver/AutoServerInfo.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLTextDocumentService.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLWorkspaceService.java | 2 +- .../_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/LanguageClientHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcher.java | 2 +- .../_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java | 2 +- .../aop/measures/ConditionalOnMeasuresEnabled.java | 2 +- .../aop/measures/DocumentContextLazyDataMeasurer.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollector.java | 2 +- .../bsl/languageserver/aop/measures/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/package-info.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallback.java | 2 +- .../bsl/languageserver/aop/sentry/SentryScopeConfigurer.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/sentry/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java | 2 +- .../bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphWalker.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConditionVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConstraints.java | 2 +- .../bsl/languageserver/cfg/StatementsBlockWriter.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java | 2 +- .../bsl/languageserver/cli/LanguageServerStartCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java | 2 +- .../bsl/languageserver/cli/lsp/FileAwarePrintWriter.java | 2 +- .../cli/lsp/LanguageServerLauncherConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/lsp/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/package-info.java | 2 +- .../languageserver/codeactions/AbstractQuickFixSupplier.java | 2 +- .../bsl/languageserver/codeactions/CodeActionSupplier.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplier.java | 2 +- .../languageserver/codeactions/FixAllCodeActionSupplier.java | 2 +- .../codeactions/GenerateStandardRegionsSupplier.java | 2 +- .../languageserver/codeactions/QuickFixCodeActionSupplier.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codeactions/package-info.java | 2 +- .../codelenses/AbstractMethodComplexityCodeLensSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java | 2 +- .../bsl/languageserver/codelenses/CodeLensSupplier.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplier.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/DefaultCodeLensData.java | 2 +- .../codelenses/databind/CodeLensDataObjectMapper.java | 2 +- .../bsl/languageserver/codelenses/databind/URITypeAdapter.java | 2 +- .../bsl/languageserver/codelenses/databind/package-info.java | 2 +- .../codelenses/infrastructure/CodeLensesConfiguration.java | 2 +- .../languageserver/codelenses/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/BSLColor.java | 2 +- .../bsl/languageserver/color/ColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/ColorPresentationSupplier.java | 2 +- .../color/ConstructorColorInformationSupplier.java | 2 +- .../color/ConstructorColorPresentationSupplier.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/WebColor.java | 2 +- .../bsl/languageserver/color/WebColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/WebColorPresentationSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/color/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/configuration/Language.java | 2 +- .../configuration/LanguageServerConfiguration.java | 2 +- .../bsl/languageserver/configuration/SendErrorsMode.java | 2 +- .../languageserver/configuration/codelens/CodeLensOptions.java | 2 +- .../bsl/languageserver/configuration/codelens/package-info.java | 2 +- .../configuration/databind/ParametersDeserializer.java | 2 +- .../bsl/languageserver/configuration/databind/package-info.java | 2 +- .../configuration/diagnostics/ComputeTrigger.java | 2 +- .../configuration/diagnostics/DiagnosticsOptions.java | 2 +- .../bsl/languageserver/configuration/diagnostics/Mode.java | 2 +- .../languageserver/configuration/diagnostics/SkipSupport.java | 2 +- .../configuration/diagnostics/SubsystemFilter.java | 2 +- .../languageserver/configuration/diagnostics/package-info.java | 2 +- .../configuration/documentlink/DocumentLinkOptions.java | 2 +- .../languageserver/configuration/documentlink/package-info.java | 2 +- .../events/LanguageServerConfigurationChangedEvent.java | 2 +- .../bsl/languageserver/configuration/events/package-info.java | 2 +- .../configuration/formating/FormattingOptions.java | 2 +- .../languageserver/configuration/formating/package-info.java | 2 +- .../bsl/languageserver/configuration/package-info.java | 2 +- .../configuration/watcher/ConfigurationFileChangeListener.java | 2 +- .../configuration/watcher/ConfigurationFileSystemWatcher.java | 2 +- .../bsl/languageserver/configuration/watcher/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/DocumentContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/context/FileType.java | 2 +- .../_1c_syntax/bsl/languageserver/context/MetricStorage.java | 2 +- .../_1c_syntax/bsl/languageserver/context/ServerContext.java | 2 +- .../context/computer/CognitiveComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/ComplexityData.java | 2 +- .../context/computer/ComplexitySecondaryLocation.java | 2 +- .../bsl/languageserver/context/computer/Computer.java | 2 +- .../context/computer/CyclomaticComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/DiagnosticComputer.java | 2 +- .../context/computer/DiagnosticIgnoranceComputer.java | 2 +- .../languageserver/context/computer/MethodSymbolComputer.java | 2 +- .../languageserver/context/computer/ModuleSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/QueryComputer.java | 2 +- .../languageserver/context/computer/RegionSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/SymbolTreeComputer.java | 2 +- .../languageserver/context/computer/VariableSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/package-info.java | 2 +- .../context/events/DocumentContextContentChangedEvent.java | 2 +- .../context/events/ServerContextPopulatedEvent.java | 2 +- .../bsl/languageserver/context/events/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/package-info.java | 2 +- .../languageserver/context/symbol/AbstractVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/Describable.java | 2 +- .../bsl/languageserver/context/symbol/Exportable.java | 2 +- .../languageserver/context/symbol/IntBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/MethodSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ModuleSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ParameterDefinition.java | 2 +- .../bsl/languageserver/context/symbol/RegionSymbol.java | 2 +- .../languageserver/context/symbol/ShortBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/SourceDefinedSymbol.java | 2 +- .../_1c_syntax/bsl/languageserver/context/symbol/Symbol.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTree.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTreeVisitor.java | 2 +- .../bsl/languageserver/context/symbol/VariableSymbol.java | 2 +- .../languageserver/context/symbol/annotations/Annotation.java | 2 +- .../context/symbol/annotations/AnnotationKind.java | 2 +- .../symbol/annotations/AnnotationParameterDefinition.java | 2 +- .../context/symbol/annotations/CompilerDirectiveKind.java | 2 +- .../languageserver/context/symbol/annotations/package-info.java | 2 +- .../context/symbol/description/DescriptionReader.java | 2 +- .../context/symbol/description/MethodDescription.java | 2 +- .../context/symbol/description/ParameterDescription.java | 2 +- .../symbol/description/SourceDefinedSymbolDescription.java | 2 +- .../context/symbol/description/TypeDescription.java | 2 +- .../languageserver/context/symbol/description/package-info.java | 2 +- .../bsl/languageserver/context/symbol/package-info.java | 2 +- .../context/symbol/variable/VariableDescription.java | 2 +- .../languageserver/context/symbol/variable/VariableKind.java | 2 +- .../diagnostics/AbstractCommonModuleNameDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnostic.java | 2 +- .../diagnostics/AbstractExecuteExternalCodeDiagnostic.java | 2 +- .../diagnostics/AbstractFindMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractListenerDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractMetadataDiagnostic.java | 2 +- .../diagnostics/AbstractMultilingualStringDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLListenerDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLVisitorDiagnostic.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractVisitorDiagnostic.java | 2 +- .../diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BSLDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnostic.java | 2 +- .../diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CachedPublicDiagnostic.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnostic.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnostic.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnostic.java | 2 +- .../languageserver/diagnostics/CodeOutOfRegionDiagnostic.java | 2 +- .../diagnostics/CognitiveComplexityDiagnostic.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java | 2 +- .../diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java | 2 +- .../diagnostics/CommonModuleAssignDiagnostic.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnostic.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnostic.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnostic.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnostic.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnostic.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnostic.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnostic.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnostic.java | 2 +- .../diagnostics/DeprecatedAttributes8312Diagnostic.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedFindDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedMessageDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8310Diagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8317Diagnostic.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticStorage.java | 2 +- .../languageserver/diagnostics/DuplicateRegionDiagnostic.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnostic.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyCodeBlockDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyStatementDiagnostic.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnostic.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnostic.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnostic.java | 2 +- .../languageserver/diagnostics/ExportVariablesDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnostic.java | 2 +- .../languageserver/diagnostics/FormDataToValueDiagnostic.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnostic.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnostic.java | 2 +- .../diagnostics/FunctionOutParameterDiagnostic.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java | 2 +- .../diagnostics/GlobalContextMethodCollision8312Diagnostic.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnostic.java | 2 +- .../diagnostics/IfConditionComplexityDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnostic.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnostic.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnostic.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnostic.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnostic.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnostic.java | 2 +- .../languageserver/diagnostics/IsInRoleMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/JoinWithSubQueryDiagnostic.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnostic.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/LineLengthDiagnostic.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicNumberDiagnostic.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MethodSizeDiagnostic.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnostic.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnostic.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnostic.java | 2 +- .../diagnostics/MissingEventSubscriptionHandlerDiagnostic.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnostic.java | 2 +- .../diagnostics/MissingReturnedValueDescriptionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnostic.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnostic.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnostic.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnostic.java | 2 +- .../MultilingualStringHasAllDeclaredLanguagesDiagnostic.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnostic.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnostic.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnostic.java | 2 +- .../languageserver/diagnostics/NestedStatementsDiagnostic.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnostic.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/NonStandardRegionDiagnostic.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnostic.java | 2 +- .../languageserver/diagnostics/NumberOfParamsDiagnostic.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java | 2 +- .../diagnostics/OneStatementPerLineDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnostic.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ParseErrorDiagnostic.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnostic.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnostic.java | 2 +- .../languageserver/diagnostics/QueryParseErrorDiagnostic.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/QuickFixProvider.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnostic.java | 2 +- .../diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnostic.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfAssignDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java | 2 +- .../languageserver/diagnostics/SemicolonPresenceDiagnostic.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnostic.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnostic.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnostic.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnostic.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnostic.java | 2 +- .../languageserver/diagnostics/ThisObjectAssignDiagnostic.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnostic.java | 2 +- .../languageserver/diagnostics/TooManyReturnsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnostic.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnostic.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnostic.java | 2 +- .../languageserver/diagnostics/UnreachableCodeDiagnostic.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedLocalMethodDiagnostic.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedParametersDiagnostic.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnostic.java | 2 +- .../languageserver/diagnostics/UseLessForEachDiagnostic.java | 2 +- .../diagnostics/UseSystemInformationDiagnostic.java | 2 +- .../diagnostics/UsingCancelParameterDiagnostic.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnostic.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingHardcodePathDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeSecretInformationDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingLikeInQueryDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingModalWindowsDiagnostic.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingServiceTagDiagnostic.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java | 2 +- .../VirtualTableCallWithoutParametersDiagnostic.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnostic.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnostic.java | 2 +- .../diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnostic.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java | 2 +- .../diagnostics/infrastructure/DiagnosticBeanPostProcessor.java | 2 +- .../infrastructure/DiagnosticInfosConfiguration.java | 2 +- .../diagnostics/infrastructure/DiagnosticObjectProvider.java | 2 +- .../diagnostics/infrastructure/DiagnosticsConfiguration.java | 2 +- .../bsl/languageserver/diagnostics/infrastructure/Disabled.java | 2 +- .../languageserver/diagnostics/infrastructure/package-info.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticCode.java | 2 +- .../diagnostics/metadata/DiagnosticCompatibilityMode.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticMetadata.java | 2 +- .../diagnostics/metadata/DiagnosticParameter.java | 2 +- .../diagnostics/metadata/DiagnosticParameterInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticScope.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticSeverity.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticTag.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticType.java | 2 +- .../bsl/languageserver/diagnostics/metadata/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/package-info.java | 2 +- .../bsl/languageserver/diagnostics/typo/JLanguageToolPool.java | 2 +- .../documentlink/DiagnosticDescriptionDocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/DocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/package-info.java | 2 +- .../events/LanguageServerInitializeRequestReceivedEvent.java | 2 +- .../_1c_syntax/bsl/languageserver/events/package-info.java | 2 +- .../folding/AbstractCommentFoldingRangeSupplier.java | 2 +- .../languageserver/folding/CodeBlockFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/CommentFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/FoldingRangeSupplier.java | 2 +- .../languageserver/folding/PreprocIfFoldingRangeSupplier.java | 2 +- .../folding/QueryCommentFoldingRangeSupplier.java | 2 +- .../folding/QueryPackageFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/RegionFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/UseFoldingRangeSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/folding/package-info.java | 2 +- .../bsl/languageserver/hover/MarkupContentBuilder.java | 2 +- .../languageserver/hover/MarkupContentBuilderConfiguration.java | 2 +- .../languageserver/hover/MethodSymbolMarkupContentBuilder.java | 2 +- .../hover/VariableSymbolMarkupContentBuilder.java | 2 +- .../_1c_syntax/bsl/languageserver/hover/package-info.java | 2 +- .../languageserver/infrastructure/SchedulingConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/UtilsConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java | 2 +- .../bsl/languageserver/jsonrpc/ProtocolExtension.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/package-info.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/package-info.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProvider.java | 2 +- .../bsl/languageserver/providers/CodeActionProvider.java | 2 +- .../bsl/languageserver/providers/CodeLensProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/ColorProvider.java | 2 +- .../bsl/languageserver/providers/DefinitionProvider.java | 2 +- .../bsl/languageserver/providers/DiagnosticProvider.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProvider.java | 2 +- .../bsl/languageserver/providers/DocumentSymbolProvider.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/FormatProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/HoverProvider.java | 2 +- .../bsl/languageserver/providers/ReferencesProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/RenameProvider.java | 2 +- .../bsl/languageserver/providers/SelectionRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/SymbolProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/package-info.java | 2 +- .../bsl/languageserver/recognizer/AbstractDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetector.java | 2 +- .../bsl/languageserver/recognizer/CodeRecognizer.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetector.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetector.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetector.java | 2 +- .../bsl/languageserver/recognizer/LanguageFootprint.java | 2 +- .../bsl/languageserver/recognizer/PatternDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/package-info.java | 2 +- .../bsl/languageserver/references/ReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceIndex.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFiller.java | 2 +- .../references/ReferenceIndexReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceResolver.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinder.java | 2 +- .../bsl/languageserver/references/model/Location.java | 2 +- .../bsl/languageserver/references/model/LocationRepository.java | 2 +- .../bsl/languageserver/references/model/OccurrenceType.java | 2 +- .../bsl/languageserver/references/model/Reference.java | 2 +- .../_1c_syntax/bsl/languageserver/references/model/Symbol.java | 2 +- .../bsl/languageserver/references/model/SymbolOccurrence.java | 2 +- .../references/model/SymbolOccurrenceRepository.java | 2 +- .../bsl/languageserver/references/model/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/references/package-info.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporter.java | 2 +- .../bsl/languageserver/reporters/DiagnosticReporter.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReport.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReporter.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java | 2 +- .../bsl/languageserver/reporters/JUnitTestSuites.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JsonReporter.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregator.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/SarifReporter.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntry.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java | 2 +- .../bsl/languageserver/reporters/data/AnalysisInfo.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java | 2 +- .../bsl/languageserver/reporters/data/package-info.java | 2 +- .../reporters/databind/AnalysisInfoObjectMapper.java | 2 +- .../reporters/databind/DiagnosticCodeDeserializer.java | 2 +- .../reporters/databind/DiagnosticCodeSerializer.java | 2 +- .../bsl/languageserver/reporters/databind/DiagnosticMixIn.java | 2 +- .../bsl/languageserver/reporters/databind/package-info.java | 2 +- .../reporters/infrastructure/ReportersConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Keywords.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Methods.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Modules.java | 2 +- .../bsl/languageserver/utils/MultilingualStringAnalyser.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/NotifyDescription.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Regions.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/RelatedInformation.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Resources.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Strings.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Trees.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java | 2 +- .../languageserver/utils/expressiontree/AbstractCallNode.java | 2 +- .../utils/expressiontree/BinaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslExpression.java | 2 +- .../languageserver/utils/expressiontree/BslOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslOperator.java | 2 +- .../utils/expressiontree/ConstructorCallNode.java | 2 +- .../utils/expressiontree/DefaultNodeEqualityComparer.java | 2 +- .../languageserver/utils/expressiontree/ExpressionNodeType.java | 2 +- .../utils/expressiontree/ExpressionParseTreeRewriter.java | 2 +- .../utils/expressiontree/ExpressionTreeBuildingVisitor.java | 2 +- .../bsl/languageserver/utils/expressiontree/MethodCallNode.java | 2 +- .../utils/expressiontree/NodeEqualityComparer.java | 2 +- .../utils/expressiontree/SkippedCallArgumentNode.java | 2 +- .../languageserver/utils/expressiontree/TerminalSymbolNode.java | 2 +- .../utils/expressiontree/TernaryOperatorNode.java | 2 +- .../expressiontree/TransitiveOperationsIgnoringComparer.java | 2 +- .../languageserver/utils/expressiontree/UnaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/package-info.java | 2 +- .../bsl/languageserver/websocket/LSPWebSocketEndpoint.java | 2 +- .../bsl/languageserver/websocket/WebSocketConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/websocket/package-info.java | 2 +- .../bsl/languageserver/AnalyzeProjectOnStartTest.java | 2 +- .../_1c_syntax/bsl/languageserver/AutoServerInfoTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java | 2 +- .../bsl/languageserver/BSLTextDocumentServiceTest.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java | 2 +- .../bsl/languageserver/WorkDoneProgressHelperTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollectorTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasuresSubsystemTest.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallbackTest.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplierTest.java | 2 +- .../codeactions/GenerateStandardRegionsSupplierTest.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplierTest.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplierTest.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplierTest.java | 2 +- .../color/ConstructorColorInformationSupplierTest.java | 2 +- .../color/ConstructorColorPresentationSupplierTest.java | 2 +- .../languageserver/color/WebColorInformationSupplierTest.java | 2 +- .../languageserver/color/WebColorPresentationSupplierTest.java | 2 +- .../bsl/languageserver/configuration/ConfigurationTest.java | 2 +- .../languageserver/configuration/GlobalConfigurationTest.java | 2 +- .../configuration/LanguageServerConfigurationTest.java | 2 +- .../watcher/ConfigurationFileSystemWatcherTest.java | 2 +- .../bsl/languageserver/context/DocumentContextTest.java | 2 +- .../bsl/languageserver/context/ServerContextTest.java | 2 +- .../context/computer/CognitiveComplexityComputerTest.java | 2 +- .../context/computer/CyclomaticComplexityComputerTest.java | 2 +- .../context/computer/DiagnosticIgnoranceComputerTest.java | 2 +- .../context/computer/MethodSymbolComputerTest.java | 2 +- .../context/computer/ModuleSymbolComputerTest.java | 2 +- .../bsl/languageserver/context/computer/QueryComputerTest.java | 2 +- .../languageserver/context/computer/SymbolTreeComputerTest.java | 2 +- .../bsl/languageserver/context/computer/VariableSymbolTest.java | 2 +- .../context/symbol/description/MethodDescriptionTest.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnosticTest.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnosticTest.java | 2 +- .../AllFunctionPathMustHaveReturnDiagnosticTest.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java | 2 +- .../BeginTransactionBeforeTryCatchDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CachedPublicDiagnosticTest.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnosticTest.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnosticTest.java | 2 +- .../diagnostics/CodeOutOfRegionDiagnosticTest.java | 2 +- .../diagnostics/CognitiveComplexityDiagnosticTest.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CommentedCodeDiagnosticTest.java | 2 +- .../CommitTransactionOutsideTryCatchDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleAssignDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnosticTest.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnosticTest.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnosticTest.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnosticTest.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedAttributes8312DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedFindDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMessageDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8310DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8317DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticInfosTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticsTest.java | 2 +- .../diagnostics/DuplicateRegionDiagnosticTest.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnosticTest.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnosticTest.java | 2 +- .../diagnostics/EmptyCodeBlockDiagnosticTest.java | 2 +- .../languageserver/diagnostics/EmptyRegionDiagnosticTest.java | 2 +- .../diagnostics/EmptyStatementDiagnosticTest.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnosticTest.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnosticTest.java | 2 +- .../diagnostics/ExportVariablesDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ExtraCommasDiagnosticTest.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnosticTest.java | 2 +- .../diagnostics/FormDataToValueDiagnosticTest.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnosticTest.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnosticTest.java | 2 +- .../diagnostics/FunctionOutParameterDiagnosticTest.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnosticTest.java | 2 +- .../languageserver/diagnostics/GetFormMethodDiagnosticTest.java | 2 +- .../GlobalContextMethodCollision8312DiagnosticTest.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnosticTest.java | 2 +- .../diagnostics/IfConditionComplexityDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnosticTest.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnosticTest.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnosticTest.java | 2 +- .../diagnostics/IsInRoleMethodDiagnosticTest.java | 2 +- .../diagnostics/JoinWithSubQueryDiagnosticTest.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnosticTest.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java | 2 +- .../languageserver/diagnostics/LineLengthDiagnosticTest.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MagicNumberDiagnosticTest.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MethodSizeDiagnosticTest.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnosticTest.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnosticTest.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnosticTest.java | 2 +- .../MissingEventSubscriptionHandlerDiagnosticTest.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnosticTest.java | 2 +- .../MissingReturnedValueDescriptionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MissingSpaceDiagnosticTest.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnosticTest.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnosticTest.java | 2 +- ...MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnosticTest.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnosticTest.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnosticTest.java | 2 +- .../diagnostics/NestedStatementsDiagnosticTest.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnosticTest.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java | 2 +- .../diagnostics/NonStandardRegionDiagnosticTest.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnosticTest.java | 2 +- .../diagnostics/NumberOfParamsDiagnosticTest.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OSUsersMethodDiagnosticTest.java | 2 +- .../diagnostics/OneStatementPerLineDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OrderOfParamsDiagnosticTest.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnosticTest.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ParseErrorDiagnosticTest.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnosticTest.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnosticTest.java | 2 +- .../diagnostics/QueryParseErrorDiagnosticTest.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnosticTest.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnosticTest.java | 2 +- .../languageserver/diagnostics/RefOveruseDiagnosticTest.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnosticTest.java | 2 +- .../SameMetadataObjectAndChildNamesDiagnosticTest.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnosticTest.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfAssignDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfInsertionDiagnosticTest.java | 2 +- .../diagnostics/SemicolonPresenceDiagnosticTest.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnosticTest.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnosticTest.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnosticTest.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/TempFilesDirDiagnosticTest.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnosticTest.java | 2 +- .../diagnostics/ThisObjectAssignDiagnosticTest.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java | 2 +- .../diagnostics/TooManyReturnsDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnosticTest.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java | 2 +- .../diagnostics/UnreachableCodeDiagnosticTest.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalMethodDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnosticTest.java | 2 +- .../diagnostics/UnusedParametersDiagnosticTest.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnosticTest.java | 2 +- .../diagnostics/UseLessForEachDiagnosticTest.java | 2 +- .../diagnostics/UseSystemInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingCancelParameterDiagnosticTest.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnosticTest.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodePathDiagnosticTest.java | 2 +- .../UsingHardcodeSecretInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/UsingModalWindowsDiagnosticTest.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java | 2 +- .../diagnostics/UsingServiceTagDiagnosticTest.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/UsingThisFormDiagnosticTest.java | 2 +- .../VirtualTableCallWithoutParametersDiagnosticTest.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnosticTest.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnosticTest.java | 2 +- .../WrongUseFunctionProceedWithCallDiagnosticTest.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnosticTest.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnosticTest.java | 2 +- .../languageserver/diagnostics/YoLetterUsageDiagnosticTest.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticInfoTest.java | 2 +- .../DiagnosticDescriptionDocumentLinkSupplierTest.java | 2 +- .../folding/QueryCommentFoldingRangeSupplierTest.java | 2 +- .../folding/QueryPackageFoldingRangeSupplierTest.java | 2 +- .../hover/MethodSymbolMarkupContentBuilderTest.java | 2 +- .../hover/VariableSymbolMarkupContentBuilderTest.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeActionProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeLensProviderTest.java | 2 +- .../bsl/languageserver/providers/ColorProviderTest.java | 2 +- .../bsl/languageserver/providers/DefinitionProviderTest.java | 2 +- .../bsl/languageserver/providers/DiagnosticProviderTest.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProviderTest.java | 2 +- .../languageserver/providers/DocumentSymbolProviderTest.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/FormatProviderTest.java | 2 +- .../bsl/languageserver/providers/HoverProviderTest.java | 2 +- .../bsl/languageserver/providers/ReferencesProviderTest.java | 2 +- .../bsl/languageserver/providers/RenameProviderTest.java | 2 +- .../languageserver/providers/SelectionRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/SymbolProviderTest.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/PatternDetectorTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFillerTest.java | 2 +- .../references/ReferenceIndexReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexTest.java | 2 +- .../bsl/languageserver/references/ReferenceResolverTest.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/model/ReferenceTest.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporterTest.java | 2 +- .../bsl/languageserver/reporters/GenericReporterTest.java | 2 +- .../bsl/languageserver/reporters/JUnitReporterTest.java | 2 +- .../bsl/languageserver/reporters/JsonReporterTest.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregatorTest.java | 2 +- .../bsl/languageserver/reporters/SarifReporterTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntryTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReporterTest.java | 2 +- .../util/AbstractDirtyContextTestExecutionListener.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/Assertions.java | 2 +- .../util/CleanupContextBeforeClassAndAfterClass.java | 2 +- .../util/CleanupContextBeforeClassAndAfterEachTestMethod.java | 2 +- ...rtyContextBeforeClassAndAfterClassTestExecutionListener.java | 2 +- ...ntextBeforeClassAndAfterTestMethodTestExecutionListener.java | 2 +- .../util/RefreshContextTestExecutionListener.java | 2 +- .../bsl/languageserver/util/TestApplicationContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/TestUtils.java | 2 +- .../bsl/languageserver/util/assertions/CodeActionAssert.java | 2 +- .../languageserver/util/assertions/ColorInformationAssert.java | 2 +- .../util/assertions/ColorInformationAssertFactory.java | 2 +- .../languageserver/util/assertions/ColorInformationsAssert.java | 2 +- .../languageserver/util/assertions/ColorPresentationAssert.java | 2 +- .../util/assertions/ColorPresentationAssertFactory.java | 2 +- .../util/assertions/ColorPresentationsAssert.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticAssert.java | 2 +- .../languageserver/util/assertions/DiagnosticAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticsAssert.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangeAssert.java | 2 +- .../util/assertions/FoldingRangeAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangesAssert.java | 2 +- .../languageserver/util/assertions/SelectionRangeAssert.java | 2 +- .../util/assertions/SelectionRangeAssertFactory.java | 2 +- .../languageserver/util/assertions/SelectionRangesAssert.java | 2 +- .../bsl/languageserver/util/assertions/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/package-info.java | 2 +- .../languageserver/utils/ExpressionParseTreeRewriterTest.java | 2 +- .../bsl/languageserver/utils/ExpressionTreeComparersTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/RangesTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/StringsTest.java | 2 +- .../bsl/languageserver/websocket/WebsocketLauncherTest.java | 2 +- 761 files changed, 761 insertions(+), 761 deletions(-) diff --git a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java index 994dcca3d88..3b5a9e2d329 100644 --- a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java +++ b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java index dd8c52957f1..94ef6e95b14 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java index a004af00003..a329a5fbd0f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java index e6318fe9755..cc3e40d152c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 71b5af3091f..14a3a268349 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 11e6595c7f4..7a4e2a216db 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 53ce1ed6b1b..458930f9435 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 3b56b944cf8..0b03fcd5a86 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java index c8d45f6feba..7992a306fb5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java index a3a46cf4208..5f179ab0f3e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java index b7f419bf099..5c7ced2a0e5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java index bab2ddc4fda..c5d19f8a7a1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java index d4328b4face..4b2b2435ab6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java index 88dfaf7dd87..05e0cc39712 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java index f348cfc273f..8b7233984fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java index fe2f8527fb1..1285caca0a9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java index 3785c1a35a9..ba8439e2b68 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java index 1cfe1d46e3a..44fb92099b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java index 87abe20fb16..f82356afbff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java index d3740e34037..87b274c09a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java index 1240f4ec0ca..3af96a17ddb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java index 614982f6c49..e646d8a9ba5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java index 7e92734ddb2..15a3c4d835d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index 2f865fba563..fede5969d00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java index 4a386c20b1b..17c0c356ec1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java index 34615caf55c..c1fb0bd2b52 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java index d47eb56be47..e3d5d72ffd7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java index b642356c0da..de47fe605fc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java index 3e80e310029..9f4b65e72e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java index 6d5fdbc99ed..5b99f4d9dfc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java index c49463879d7..25adafc7be6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java index 2139783b75f..6f6cddf1392 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java index 9339cee6477..70b26a4431a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java index 5acf940e461..73af51e6e56 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java index e449f9f133c..ed4d97f67c2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java index d20feaa347a..f7dced458e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java index d94208bf401..98bec0a1932 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java index a2d3f66f1f7..b9b1a988f3c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java index ab572962488..5fa55c76c73 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java index b1e910cc051..9212464e231 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java index 8228aad54ec..6e10a64f960 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java index a8bb99362e9..c0d78a9b8e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java index 5dee8b62855..b7f77846ed8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java index 5cf5be89c23..32a9fa5e74d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java index 3e664eeb305..7fe1b979a27 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index a68ac359a6d..06908fbabc3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java index eba3610162c..11345db9657 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java index 868d56b7041..567f9fa3d9c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java index 91bc28fcb33..fd78b88588c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java index 0c8d2d05849..01cbed36e3d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java index fc224a32439..5a4392c293a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java index 6993b6e7feb..14e6306148d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java index 1bcd74cdb6c..ee164ce739b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java index 3a54e1dce8a..f418478518d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java index d9c5ad6c281..41b06a99f20 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java index 980cb6a39c6..7d23127aa46 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java index d2dfa90ad5d..5563997567b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java index 6c53bf4d736..6bb040d76d4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java index 4decdb5bd35..368c161de7b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java index a9ee156443b..48cee5f1f1e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java index 324e009ebc5..3d12744d685 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java index d876adbc51f..b5da17dd824 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index 7e9d5ac6fda..5d82425b396 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java index 9baab40a82f..c3c678afdcd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java index d249f68cc0c..dbba0daa334 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java index 851525faa7b..16aac7bb9a9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java index 0356d9aa740..52d8045da4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java index 1976dc1d253..57100d41d84 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java index 7f1ecd561db..9e2129001aa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/CodeLensDataObjectMapper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java index 7ee6244af2f..0fa975b48ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/URITypeAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java index 8ecc978bc84..5e27dbeb6ce 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java index ba1c22f0579..cbcfc32480d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java index 367fea59461..d9346663ff3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java index 7b56ad28c43..58586c08f71 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java index 6043d6b6b9c..c8c94119635 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java index b6fd5dd1068..77554e359de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java index a906bb5a747..e3e6f35fa95 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index a14b817ae4e..1c74bd6c233 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java index cd00ab01206..44cb4515b72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java index 83e77b94b1b..415b177453e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java index ecea3472797..82204162629 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java index ca0abb91481..36bf95d8b58 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java index 82f98a9d037..3c5be816cc3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java index e9fd22b2a80..7a05e0e4af8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 0b5ea2db9ac..9c363681db5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java index 52bee5e3af6..58aa3f340f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java index f00115a4472..011b10be8f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java index 95b81b3cf76..83d6eafb0c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java index 68c249e0bb7..3697e933f98 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java index 68168cdeba3..58b77385b71 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java index f27527cc606..93091091cfe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java index 7f644124ca6..040cb33f2ec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java index 4c2b7a94c2a..54bc8f0c477 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java index 55d4aba7ea1..67ffa7258ed 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java index 95247601054..db07d116bd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java index 83abd02302a..ac284d5e026 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java index 6d4ef5b66af..7d92105e989 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java index 179198bcdbf..0b3a1738e34 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java index 42a2245f7ac..0cc0037e1ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java index a208f0be582..f05a9a9449d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java index 25ee969c4bf..8b75ba75e24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java index de7689a5aae..3a06871316d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java index 9fbcd048625..f8801f1699d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java index e02b5c6844e..564d20a53fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index 820e346ec72..69927c6b7b8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java index 199a1463224..ccea8d07e41 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index a186b925d52..1d04850e0f3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java index f4253e641d4..1f9cce28965 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java index 9c6b69307d1..064aee78d0b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 0669b5f5011..c8a9b7067f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java index f4f1ef52ec8..8e4d36812aa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java index 2678b4a408b..de72240f2c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java index d6782987054..9763b40963a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java index d1e897d01a5..58b525ac782 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java index ae93698686f..0e6ac7a38b0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index b38162add0a..b13e8a41357 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index ee60dc1202f..dc28b5f33ba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index 1ebfe4d1e98..22a0fd295fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java index e97141d44d8..432c50a3f22 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java index 9c03b65ecc0..cb3f6765e67 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java index 2b29e1183e3..9f49d7171a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java index fa26b19a0bc..66a14639305 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java index 20693dee0a9..03665c3b20e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java index 3c1f963026b..bdc801d11ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java index 6db49adbc8d..8ce9ef55ff1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java index 02a7fdd2a27..f7fd2c6491c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java index af9941f0abe..9c717431fb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java index 9e3b968268d..6210f93446f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java index ab0a15b8764..ab41e8af344 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java index a1b67389e44..7e50096a7d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java index 5b803ad1299..f95de417026 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java index e83fe468c65..36c2b64eeba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java index e646e09ed84..fb86a38a296 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java index a47924a6668..42e0a89997e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java index 6a0ace8f760..be308284168 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java index df408fa8d6e..3bc6385a94a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java index e9953be9aff..df05f003cca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java index f9705e7ecfd..2e306c61cb7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java index 822f1f07a64..bb66b9f77b0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java index 4ac695a26ac..3da895c08a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java index 920af747708..47757b28271 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java index 3d8e3be6c3c..a47e2321f4a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java index 55430b1e4db..b45c4213908 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java index e58fb0e4ce9..b33cbf96db2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java index 64b83f57604..a1a89948ff2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java index f3a870cb00c..f12f2a2f0c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java index 8f9c581ab44..4cec16a53f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java index e6bf6139fa2..8a0882a888d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java index ca2a88039d9..4a871e5ae14 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java index d6789cd62bc..843c794adca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java index 4a06c4ae602..69c589d68d8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java index 569dc03b1d5..335857ebd3a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java index 212c75d66e9..eaa798e0009 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java index e552f2515da..c0806e5b864 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java index def143b8665..9c390277844 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java index dd74055a08a..a7cff3569c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java index 53fd5aa09d9..7d442b99905 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java index 00fbb5359b9..d6bcdf7a833 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java index 53cb8f2610c..03e50ad08a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java index 1866be5b212..624b71d56a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java index b333d4e855b..03c853dcdee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index c192b826435..34aab2ca100 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java index 18c3217c61a..0c60e0b4f00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java index 70a020f3f56..1b52ec5aa73 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java index f5f1b7b196b..a859272ac25 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java index 243f5c68aaa..4169c4bed49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java index 366128bbeb8..854c626738b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java index 6f769661a06..550c3be7953 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java index 528a84b8421..5c5cba9a51a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java index 02edf480147..8ba7530cfd7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index d6d74e9eafa..0a40ebb529a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java index 97bdbd3a4f2..65e103f4b06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java index b4568d566dd..efd49c36e72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java index 14df2376464..c82a69ec8a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java index cb5cd5b0a56..20a8e07f331 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java index 14b3edaab0d..adaffaa2247 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java index 270f869f672..a55e3a4c228 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java index 97b199f1960..92734d20c93 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java index 302a00b721b..1f4a22c53bc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java index 6d1f9aa7adc..98bc1581d9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java index 385d7f77adc..332dbb50f79 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java index 7566f10df85..050e29ec191 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java index 0a48aefbe73..48d16860240 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java index e38a1ae5786..0de2c03091e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java index 3ec85d7f004..07ee6bb7d53 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java index 03482e7ace6..2349de3a0e1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java index 42a27c2bdea..9e49412059a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java index a1eb2991bed..b88d86ec27e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java index 16a08af8118..ed7b5b1fe98 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java index 4fb881e7eac..8f6609550a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java index 7e7f663dcfd..7468c937aec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java index e2c21f44829..ecbd20b0e92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java index abdf0ae141d..fa4ce7d8369 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java index 879830e85cd..c916085d8ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java index 0cfab71c729..e43981931ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java index 68b0e07ada8..5054e52a2d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index fca868827c2..76ed4af40fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java index 2617b20cfd3..094bad96e11 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java index 273393c076a..3baa3fdefa0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java index 9aa4f57ced5..64ecc6a47cb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java index 5d018afe454..a53ff889f00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java index 501fe04f3ed..4453696ba64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java index 961762338b3..c6f2816ccab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java index b8d35c5d7f3..9e2b0251156 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java index b393bad2a4e..a2956c86e7e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java index 7d65aefb66d..c9037a66a34 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java index 5377ab9c45b..60adc5d849e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java index d66b3850f5a..1489fc62fac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java index 4e7b5672d4c..d45b7fd9878 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java index 176317f513b..89e89d223c0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java index 6577aaaa046..34c52920d73 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 3fec16ae7cc..12f37bfcc85 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java index 1b68f1cd8c0..53accb94018 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java index 4c169169d76..2fff5bf7c9d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java index d19fcb4621f..de74e91b652 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java index edad334ea7b..58fddb1b00e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java index c09aa5c3803..39cb27ba695 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java index f4fabb7e0c5..0573e40d9fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java index 6a532816e6a..7325bc1ac26 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java index 22d73b16bca..4e917a8d1ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java index 89d62b72014..552a62c9452 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index fbf8aa9b1f6..de12ab27d3e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java index 885c06558dd..d9a35614b2f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java index f5a8ef4d0c4..89cb2e2e4ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java index d333df99711..a0e3f1e4d60 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java index 8fda177c080..13c4e260155 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java index 269d1f869d9..39ce0386192 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java index e30b305040e..f031925bd5b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java index 5eb29e3a1e0..e4e230e64f6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java index 49caddb6404..9d920a3bef8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java index 34eddd1ef54..118947e1cee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java index d0a3d8d33fb..5e9fa7365f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java index 5639e1b8358..f572347259c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java index 26363650c40..e72cbd2b220 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java index 06527306352..df75d461dc6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java index 712d324e9aa..57a68257470 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java index 5519688e852..e972b4f5ca7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java index 64e3fee7db8..9c31b6db066 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java index 5ed149a3038..a6eeab4b407 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java index ee358aec654..79e13548ec3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java index 4a93d6b573a..f675f363a65 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java index da149fd34a6..7aebf5a6c9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java index 59b5e85a5c2..725291e88bc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java index be6ca23a349..255da942530 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java index 2747f9e4b59..05d73e1f9e8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index 39ca0097788..ab216658a53 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java index d81157a5413..c739e570cc4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java index 662ca2f48f6..7b6602d35c5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java index 0037613cee7..7c9becccd91 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 013235f3856..26a464bffdd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java index 5b72487aa3b..d38bde0ac5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java index 60d6465db7f..c4822681212 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java index 94a97cbd999..45a7c146688 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java index 82827f52313..00699b1a29f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java index 901f2b884dd..f6c471c9848 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java index 41167345575..9bdf174db6f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java index 00d56d697a2..4936abe1b49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java index ee9453d9f51..7ba1565e992 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java index fc152acc2d4..7db66864215 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java index dbcd7a31b6c..9d3ef00ed1a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java index e3bfed372b3..200fbebbbb6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java index e6191ecd94d..6a9141b7474 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java index 3424f14be25..f7e08309633 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java index 55f8213dc1a..fab4d1142b2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java index c9117f4081a..919d05fee80 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java index 6a55db9035e..66cfefc41a3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java index f2d1c537ee5..7ca071eacd0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java index 23b52e0e3de..00946886e32 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java index 6d72d7a39e8..1087ffee4cf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java index 059921873a8..e2110602620 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java index f5a30c1fffb..05e20485198 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java index 903a485ee96..6b25a7b9dc0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java index c22214e6234..a75ce4e5255 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java index 035a742cade..9ca55e4e4be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java index 973bbfec9ce..dcc55b9b7d0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java index 6e9bb0def5a..5d6c3f30f5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java index 719b95817ac..82e25478e0e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java index 119976d7abd..d65c22476f7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java index b6af806109a..aee6292c61a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java index fe4890f1b82..0ccd2fe438d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java index 7f012ab0741..cedb64f1875 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java index 3319a3ec68e..f2258c27874 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java index 7dc5bead313..acfcee7d451 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 21422768b32..a86eef0b26b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java index 11cec29d2d6..9949d5f4d25 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java index 1597324660e..b93f790761a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java index f8611afd67f..f89e66a7e2d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java index 644ba2d8c95..20233fa8792 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java index 72e22465984..0d773038121 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java index 35705ad24e7..9a6dd8f2657 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java index eb5556a4b24..8dd58606281 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java index 71a4a066503..84dea6a2502 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java index 9b6496680d0..ee070e84998 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java index da3d1dcd4b7..bb2035ee2be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java index f1ea4d37aa9..0e6cb6b984f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java index 558d9d562ee..c8e94f90236 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java index 95093dbeba7..5dce0d1baa5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java index 582fab9ef66..5ec3c096d23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java index dead2803477..ff8462cdd93 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java index bef3a085941..e06d7039cd8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java index 796a1a7e9d8..b06fca52a31 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java index 20bf2153458..9e7741f7014 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java index f69408ce566..804a7f72b3c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java index 530b547865e..119f93c5539 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java index c94762d1bd7..5a37399a69b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java index d64b5ee8d1c..47e4e98b408 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java index 4999bedebb9..d62d5678398 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java index ad37e3fb99c..2f8b9976495 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java index 2323e5201aa..886c7f2ae55 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java index f18110f93f3..3e64d706021 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index ae6714e993a..ef83cb1fd57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 ea54cedab91..febfa639257 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java index 487d3017daa..953c7b9c046 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java index ddc1057941a..7290a126e12 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java index 8584f355fd5..540b515d5f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java index d367979e05e..4423c1336d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java index 89590b7fc09..7414902952d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java index 727886808c4..03b1105fb5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java index 60f9d0bceeb..bb99b6e7df8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java index e0bfe39a78a..0d9437367f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java index dfdf9137115..bc0279b1e06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java index e43dae6e4d2..7d17fcc5ec9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java index c5443be0b4c..327938e4fac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java index 4467f37574f..224b80f160b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java index 8d58d95ae2d..d9ebe30ef31 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index a82de659945..0622ad0e411 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java index 506e94fbd3f..e6a0c62fa0a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java index 849f7ae7759..dbcc5b4cb34 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index d19e05e5c91..1f7085631e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java index ea863988492..96a85efae00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java index 1bceaf8f125..78ba1a15060 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java index e3fd2d8bfe8..910e148f784 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java index b281f8763a6..aeaa7be9699 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java index 7610e8f39d4..c7fc53f89a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java index 9f1082f77df..d2a164f4fa1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java index 51635f28a63..3c98b8ac90f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java index 2370f746df0..9892536bf70 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java index 30ad22fe4c3..47386ef182a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java index c257f1e6020..2f7e686db05 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java index 18620ed73ac..19e53bacee5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java index 7224ff6dccf..d173a8ed321 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java index 91170e68363..d1d5ee259d0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index f991100ff3b..eaf151b2d26 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java index 5cc14694b33..6a452a6ffb0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java index 3b983efa668..6c759c9b993 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java index 65305b7dfbd..2fe1e669207 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java index 6d698ebea8b..f904b2d69cc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java index 8c92f3070c6..e03c105e427 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java index cb334b4bf66..fa5b8632bf9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java index cef79e8c806..d71777dcf04 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java index c5e6f4b9074..0b737a92089 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java index 96768f3968b..7bfe61b4ecb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java index cf97229fad1..a01f15f9a23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java index cde1ab9b0f2..9589179f3fa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java index 2c732ace0e0..39c4f6f7d88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java index d1004d9f024..59a2af69363 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java index f67199ce418..1f87425c6b9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java index 387c313f486..ec8a9b42b85 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java index 5461c2ef28d..c45369b98a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java index d0bf0bd4d48..4ff5ba8dcaf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java index 57afef75cce..ce3e7481fe5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java index 15a5a3b10e8..d629a73bbe3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java index 3e4ea42c813..cb5fbcbf073 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java index fce4800fa1a..69f638d44ad 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java index fc027cbc872..c6a9986ad92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java index 1772aa7d1b3..dacc939481b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java index 2ded0503f88..1fc6e3271e7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java index ade8b012c01..8df58ac0838 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java index cc8855b645b..406ab49e871 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java index 6af3582aaba..568845cbb1d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index 366b22347a1..5dcbd311229 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java index 7a207053bf4..045a4a45c32 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java index f618dea3d38..b571bd8bac6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java index 654954f1560..96c4766b3ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java index 6b7a52e8946..55480c69a23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java index a443f70ccd5..156128d9b20 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java index acc18681821..de5d73e81c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java index 9252c6982ea..a502eff4d95 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java index 7a7d50c8709..f62865bb5e8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java index 5a63a9eb041..5c1cf9b61d1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java index 8730c40fc23..99ec344bb67 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java index 7aba9f6c5df..af6b69fe572 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java index 2b1dc6d7ba5..3abbd9ea9ea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index b264896b973..9a962b6a0f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java index a9a01229549..a57a62ceebd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java index f1e290a88ac..fea2b496e00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java index d50a5d19425..79371f49e5f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java index a716faaa136..e4c5f2d0f59 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java index 942b3a5407d..797b8aad309 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java index 168a868bc08..50537585acb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java index 8b76ba6e937..e95699fe35b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java index 4e18596a5fe..3b3e46e08bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java index c19a2caefb1..9c58fb4c817 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java index 38cee8e8570..7a094a0df46 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java index 628c5cec71f..6b2cdec75ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java index 8aa9d08211f..e7a9335a812 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java index 173678bdfeb..204fc864b46 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java index 69b0f70f292..50e85ce9704 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java index 9c367429f50..0b7dd1087f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java index a236c769356..a17e374ec24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java index 9c32d1b08b9..ce553aa4e15 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java index ceea8e205a9..12ebee5f621 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java index 737107c7a85..1b6ad826a3d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java index 46b2c053aa9..1a810929b86 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java index e45f9358de3..98a379446a3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java index 13138431b73..236deae155d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java index 0d3ed35fc8b..142a14ffb7c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java index fcea00ffd6f..fe4fefa42a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java index 8a06c63893d..30d43cdfba6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 82406279ef8..1ffbd75354e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java index a259a16b45f..044519450d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java index c665ca2d221..62897b040b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java index d21f9e4bfc5..36e64b6ae8a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java index 56254c17697..3329ec3c49f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java index abe04f0659f..bff5d9d50e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java index 021066674c4..87de3b37f08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java index 569e0132302..e1d28da00de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java index d4105e93e1f..e5120da2def 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java index a6cc317e807..b8e3fce3ab1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java index 72ce7d4e818..99b381dca96 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java index 7575b12f3ab..c00a0c05a74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java index b581005b21a..911569047c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java index df207af0f7b..84dc37bdc44 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java index becb34586d7..ffc3c2bf459 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java index bf192b60e92..39e343837b8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java index 2d23e321654..ebe2583200d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java index 03406dca2cb..fab1b44e366 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java index 189c7586942..b774aaebc63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java index d2e7b4b1796..53544254f5f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java index c7d4ce204a4..d535bfaf94f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java index 321fed62b63..0dd62e607e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java index e259eabc5a2..ffb737e89ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java index 1003460a966..d2ab6b0c11c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java index 3d8890b3185..ff7375ba0e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java index 65e375d0b13..78a9c8c630e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java index 9d7aa7b30b4..776f3975799 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java index a5a75830be8..e1a53e3b26a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java index d635402584d..18446eb8a89 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java index 226da02f4e0..82831e76796 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java index 8b76cfc3ef8..990ebd9232c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java index 3622738237c..cc77b43841c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java index 0eb876cdb90..e14469d2603 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java index 38b09faf55c..b6fbe7c01d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java index f90c9c2103d..35d3af9beff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java index b9ef457cf2b..7a5b02cbe41 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java index 9e755ba7f6a..29e5f8ca7a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index 3feec8bd7e4..7b6cebd71a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java index 626404e2b3e..8c17482d43d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java index 4817e47c929..705c0c91225 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java index 5b144711656..caa6b340534 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java index 9881aab0741..ae9bf17825a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java index 867260ee033..58241c3e033 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java index 45a86e43df2..e06c54f55ae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java index cb0d5800995..0a83fc79413 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java index 409770f7a3b..e0c267230a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java index 5a2391fc78e..295bac0c684 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java index cac916617e5..99456d0d2f7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index 735469e1ce9..d2be1702498 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java index 6fdf964bcbe..9e2368ddfd6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java index 0df808d3e9b..247af3aaa0e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java index 62661cd99b5..836b73ab6b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java index 8f4b781b850..5543234072c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java index 88251bb9e18..e7500ce359e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java index ef0a2afe4df..c5a357ba09d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java index 2c2485f18d5..357ef3e9414 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java index 7ac4b0578f3..6d6a864ad7f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java index 9f299a1d4d3..b4ffad22e03 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java index effb8396792..00437d885fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java index bf5541799e4..06ed47d2b19 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 5e826fad36e..6bdeeb7eb50 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java index e71bd769c38..d123d62a555 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java index 4bb42a0b4c6..688d6c15756 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java index 6aa603ea243..b05bb7536c2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java index 97d0fed59c5..5a055956b3b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java index 10429a442a6..8377e73b609 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java index 47f7609f7ea..90c3beba624 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java index 78e56acf07d..8f64cb2388f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java index 66361499b92..ad07a9a2e5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java index e5fa6adcbdc..bff49a2a359 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java index 62f8bdd8e66..d365bfebcaa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java index aa60bc989a5..5ff39dba25d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java index b3a81b752fa..f4795d58598 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java index 6fd3108b947..752ada3a174 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java index 48c19510f91..b5df4634f19 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java index 4eb6d31417d..119253d190d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java index 66849e6d82e..981389545a7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java index 4c05d07939e..ae784f112cd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java index 0949d81cc58..05df6aa83da 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java index 11d7c3a0235..ed7d7331ded 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java index 201212a40e3..05731571403 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java index 40bb89fb9fb..8916e4eebda 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java index 95183c6fec4..85117b98e2a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java index 81ec4950cf1..10ccb19d507 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java index b3c5712ea57..3d0ccf616a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java index 0c41875a1f1..a888849b919 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java index 74eaa2a2d28..7f71b446785 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java index 9a827b48809..7483451f09e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java index b9ada46c989..7904ed1d50e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java index c4401f7b04c..a739ca44aa5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java index d2c60ed1bb7..9a96f64808e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java index 5be68d0f425..10f50199a6e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java index 638d593be06..4a6532aac74 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java index f4c0fbe36a9..1b5accc5e12 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java index 07579901e57..7cb08ff6412 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java index 175edf60725..21731fd2528 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java index 9f2614ec855..82ffca4531e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java index 776bb900ca4..95bb4e94e51 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java index 9d84157445b..51e3315111d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java index 63a42431e8c..f44891e1dbd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java index a42485f2c68..1591129271b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java index c79e2e5605a..8e2efa4b1c3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java index 44ee1eee516..8e97a797fb0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java index 20721a5dcce..12a6882ec27 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java index cc90a42d722..86800f523a5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java index aa33c46cee1..f60dc4caa92 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java index 1429ebae21d..70682c80e1b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java index d8609a69354..277f2ab2a17 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java index 2eac5fd1e51..cc5fc179125 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java index 81cc4416441..76fd6968938 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 47c7f34cb6b..a5659ac4cdc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index a17e31847c7..2a444936207 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java index 62189923708..29be15c329f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java index 07853174bcf..b5383e51261 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java index d74951f16bd..c472aed0c70 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java index a19f6a6b842..22d5eff9d42 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java index b2aca8779d6..27298972aad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java index 35549294e05..13a17ce0d20 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java index b491d8e934c..96898574b0c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java index 2d5d3c22054..b9756dd6769 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java index da0198090d9..25ea00e934e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java index 62ab56ee0af..7ea280a1294 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java index de2ee711759..8d36f50ed91 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java index 01988ca3645..4dcf748f2a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java index d31fbb3e4bd..c73ee483385 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java index f5fa9d9d021..26a50825a01 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java index 2c38e5311f3..1bfae007369 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java index 47a49278d4c..654e7773960 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java index ddc2e30800f..3d811744c73 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java index ec67ef788e0..acc188d7e0a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java index 900ce3865b2..17a67f765e0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java index 3d3e8c43a8f..0e1248ccfb1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java index de058e33412..4ce1a77f55a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java index d46860d69fe..bf57dc69af6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java index 3ed54b58ec2..5d86f4b365f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java index e2f46a656ed..3ce715d5ee1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java index 17a38447e33..b783b50c1bc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java index 9a90ffcedb1..0a00e8cf490 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java index 589f2b6f93c..4f21cccaba3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java index 0b3e1d8d186..1ddc6f55a9e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java index d38477eeffc..11d240543fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java index 333b79e1f7d..e4a4664fc65 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java index 960a1a3f4fe..8d75f8bed7e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java index e2a8107bdce..ef7203304c2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java index 4eb28cace36..a9fb13ae451 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java index ad9965eba66..7b880107aac 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java index 28c05663628..643dfd6bea7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java index 30c67bea8b0..389c3d1f503 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java index 846ebbe6727..919b16501c0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java index f33e71aca04..22d6b760ebe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java index 26400cf56f8..d19ff3f6acf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java index 93caa850286..b2fb755f3d2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java index ff74d38753b..4c7b028ace1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java index 956c709240c..d1ca8416670 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java index 01edd4f729b..e5c32c7ea97 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java index 012eaa23af6..fa3b12432be 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java index fd0ea0488fa..db26c69bffb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 97287d3b8da..5c2edb7e55b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java index 2347836356d..8e722c6c36d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java index f3cbea4526f..bc59cb98a4e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java index 1b17385a6fe..cc3c8707815 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java index 0af689b3658..60dc835db00 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java index 8add53ef789..c236d8f0236 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java index 6d187e07e6f..75bffe05642 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java index d70df4aa532..d1d9b690967 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java index bdd5cf4c338..20ad1121acc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java index c5c7afbc926..defd71ba23f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java index a3899d63362..cebec5f9182 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java index f4d32699d80..d345003af77 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java index 08347f2a3bd..cffeb655235 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java index 1b03f26986d..9b4bdc58472 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java index 3138a7aee7b..89f12421c5c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java index 47fedab354a..c5f82b5ec61 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java index 8e13158e4da..b1dced0ea3f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java index b355bdf3980..8e9f186abbc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java index 6184ee3fe96..e415ad405d1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java index 2942d8962cb..04d9077b9dc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java index b50faf3190b..01af898263a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java index d77a4a5acfe..f98ad309a26 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java index bb835a29708..95bc5f63135 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java index f052c7aba01..69713617c33 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java index fb8d6a72c26..fa45619aae2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java index 59db1159a1c..f7b3b2910ce 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java index b9543f8f374..4078c6bd8ba 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java index 9fa32365ef2..968d088ad12 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java index 4fc7b0009ae..5dac8f51502 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java index 24aa5dffdf6..b00c2c513e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java index cf12684d91d..3d141cfbcbd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java index f2132e224f3..efe6981af42 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java index f2170d68ae0..06a2846b8b2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java index 536adf74101..c02eda43ece 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 59affb0d359..353c823612a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java index d58e9d2f0a1..804f9c0b66d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java index d394e9932cc..dff2d4f769a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java index 7732a23009f..a9c83d5316e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 13b83f992a0..893f558e7b9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java index 2bfc926cd52..5d53697876b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java index 92464a98b9f..b7d8484c08b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java index 87ffebde551..581aad5e26a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java index a5e7607fb4e..9d8942816e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java index 5929e80a69c..55659bc6057 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java index 6b0e0338cd2..a31c590031c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java index 72fd271cf98..748826a77cf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java index 9a310296c29..b4f61ba0925 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java index a366b892be9..73a7018fa03 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java index 38ce53f86b4..c0a5e9e7aeb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java index d6abc240734..7f931f159e0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java index 9bb1facecf5..67aae2a0224 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java index b01d5846813..ec9fe8a3bb0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java index 76e193486cd..96ee1415b91 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java index 0a2c1471c5b..bebab9dd4d7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java index ae683c3b5f6..082bbc358c1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java index ee97b519583..600efb5ad23 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java index 9cc03aea53b..94b16cd4a01 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java index f801cd6bb9c..93d7f7cf155 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java index 8b18a808eff..f7845704109 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java index a472cf5eaa1..bb386f4c5ee 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java index fb669054aba..de47a3fc16d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java index 32db291314a..751023eccda 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java index 23813647ad9..cd7de3c68d5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java index 04f637bd62e..44b4af35293 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java index cc43ab7ab18..692a9784a63 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java index a9537cd5a27..b1575566981 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java index 51a0a71102b..83c088a1926 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java index 371912b36c6..afe70e8e526 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java index 5a5caf1801c..9f942545ac5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java index 72352cd4404..f64bbdcefbd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java index 9748f7975a7..3e4f5578e35 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java index 86dc114c122..6c3b952a73b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java index d498c9871f1..16a6c6e2047 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java index 85f9882968b..761a8bbf3bb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java index 7cf015cb631..d8bdeb2480f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java index e31c50e37eb..20515a0c4e2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java index cdc4467d400..299231d7987 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java index f5ddcd211e5..55e2786862c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java index 67ea24ec636..c9b4a084b4e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java index 4d991af6ec8..0d577472d8c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java index 14cebd0b11d..8ff86bf1f25 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java index 2f0b3ac6221..f5a8d1c6151 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java index ab15fd49064..9188319ec95 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java index ea776a86179..e7c24fd7b9a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java index b7deb243111..a97906a67e7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java index 21124d02df2..229ee0c698d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java index 40e6e7161f3..b553e9c6332 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java index 20281c27a31..9500c2b7977 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java index add6cdfde5e..68122baf275 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java index 5c89e17c46a..a229f9cebd7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java index c40ecf1335b..0693f650638 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java index 103b99712d7..802a57b140c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java index eb7cc7cd476..190ec801545 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java index 3897578c143..5cc18454d52 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java index 1461d25ea2a..a7247f05f6a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java index ffd79b6d468..fe132ed2f58 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java index bba505c39e6..6f64dc50a3f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java index 4a4b56e468d..747bf7b8243 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java index 178b4e1dfad..c36838fee18 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java index c37de8b12a6..3be7e52bc83 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 0756b85a23e..ce3f8be5db7 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java index 8716cd6558d..a88cdcff6b0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java index c17174562a1..80cc76b6110 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java index 82f45c9068c..634ee0a731f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java index 46d48599bd5..8f6b86178ea 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java index 479a255d921..617e91e0408 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java index 331f21d55b4..56eeead3d87 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java index ab74ec4da3d..3fecb5c4c35 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java index 678a74d220b..397e2c5705f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java index 5f4195d1b32..a8e0c065178 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java index 2cfa91bea5d..ae31c68300f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java index 8ae284efa02..4c2d9f5cf8e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java index e13b6bf905a..a034ce6c4af 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java index 5a53fa49d7c..54e1edb8e53 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java index a88773060a3..25196d5a402 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java index 4b66678de9a..6dbabf8d58c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java index b1314e1db74..991046308fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java index 62f90bcc943..60d460032e2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java index 3f0549f9439..88dea8cc172 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java index 4c4696aec14..dbbac77d2a2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java index 30aa491c1b0..24c298b245b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java index 5a3173a7f26..5c14ca22284 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java index 768f8f61b2b..13604aa5a6b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java index 9756bba78b6..fd3026a5802 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index 7f055f3a20c..2e6f04ce363 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java index 2e5be8e8dbe..8c12ffb3496 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java index 3f6664d20b7..ae2c64937fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java index b1ae194b7f3..3f39123c291 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java index f1d70479a97..f394b08f55b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java index 32c9e026f62..a883237c6c2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java index 5afbf02c936..452aaaeffb9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java index 66969c9db22..c9705bc4b4b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java index e6090bde704..c4ad181a211 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java index 78acc9ffac9..e9d16d8724c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java index 10321f4719c..851dd471ee0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java index 8e407ca161e..7c2faf8f71f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java index 2189ca791d1..6f5169ec0a9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java index ff59abefa30..99e3d3040be 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index ccebed2abca..7466b9a9c3b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java index 87a0c914813..867131115ac 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java index 008203f974d..544ff034310 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java index 94b7258a48f..39cad35f16b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java index 59c96fc8949..c3b47788891 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java index e04342dbaa2..9d4c02bde52 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java index a2906680d25..758fe576b6f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java index 2267d4b0586..45490f9d654 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java index 16f6d7898ac..7ea8423e9c8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java index c93bb997684..b0af654828c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java index 7e4e30bd7ec..508caa5bce4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java index 0652d6bf8fd..53889897000 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java index cb082fc7c7e..12caccacff4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java index ef2880eb1ab..da0da79268a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java index 80746a21b75..ba405e9804d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java index d806ef39844..6ca826ff843 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java index ac3e2af9570..aae599e33a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java index be719c67687..eace9708d02 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java index c232cb68139..dff134193a5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java index 9da9d603d5d..bb8456d2bca 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java index 353fe47eb99..30de1d0d099 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java index 8d7b81f1052..8ab17dd1c6e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java index 2c2639b9e3d..6c9ff4c8fd0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java index 7dcf7325d3d..42101bcf05e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java index f77dcdaacc3..2f9342ff53d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java index 31d63042002..3c2eb9a41aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java index 2ddf9227221..f7428ddecdc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java index 555f66bf121..e8e0f9ef596 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java index 727bf2aabc4..0ab17962c00 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java index c634e150ffc..60ffa65f10b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java index cdf5b248018..b5f6c92cc04 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java index fc3ac6d256c..8d267472c2f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java index 33476ccac07..0a447d60b5c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java index 1a751452813..c73e812baa4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java index 4bf2a9163a9..404bbd7b48c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java index 3196983883b..acdcc737773 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java index 0c7c50032c1..8194c9cc324 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java index a4ea696db49..97c849857c0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java index 35c31eaf10d..f4379dc0dbf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java index 62929b76a86..2832c2d8c13 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java index 6e261f90144..0894114c60b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java index 7d2c7b688c3..674f04d4e59 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java index 282a337f091..a74ee69dc3a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java index a97aa7d3a47..3bd6d855d87 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java index 922739c58e4..ed4a9d02b54 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java index da011c6279a..205ed9a837c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java index b19f8e6c918..7ee19c149fb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java index 015f231fcda..df57277a099 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java index 39bfcf28939..94aa3f13b0f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java index 2fbf9a9eaa7..12d9509a642 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java index 98c0d02a558..d5a1c0c10e6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java index 0c5918b15fc..51178e30325 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index ae16dec0920..76bf6182105 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java index ce0059d062a..dce5c977097 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java index 8d7571b71a1..505838b082c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java index fe80a902f46..c500fd88498 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java index a0f5159bf33..ac174845684 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 7f56a02380e953720014d220262e1ba197729da3 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 19 Jan 2023 16:44:23 +0400 Subject: [PATCH 095/595] Spring boot 3.0.1 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 18bac881e3f..12d0ff0d152 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "6.6" id("me.qoomon.git-versioning") version "6.3.7" id("com.github.ben-manes.versions") version "0.44.0" - id("org.springframework.boot") version "3.0.0" + id("org.springframework.boot") version "3.0.1" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" From efc25b6ba0b27cb1d363100abac92a6ec3c388f7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 19 Jan 2023 22:10:34 +0400 Subject: [PATCH 096/595] Fix compile error --- .../configuration/LanguageServerConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 3d2abebaf86..cd3e83465ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -32,6 +32,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.annotation.PostConstruct; import lombok.AccessLevel; import lombok.AllArgsConstructor; From 876e20547c8bea423ee221fddbb8e3638bf7535d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 21 Jan 2023 16:20:18 +0300 Subject: [PATCH 097/595] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/UseSystemInformation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/UseSystemInformation.md b/docs/diagnostics/UseSystemInformation.md index ae280ef3a48..6ac12c9567b 100644 --- a/docs/diagnostics/UseSystemInformation.md +++ b/docs/diagnostics/UseSystemInformation.md @@ -3,7 +3,7 @@ ## Описание диагностики -Объект `СистемнаяИнформация` предоставляет данные о компьютере и конфигурации в 1С, которая может быть использована в злонамерянных целях. +Объект `СистемнаяИнформация` предоставляет данные о компьютере и конфигурации в 1С, которая может быть использована в злонамеренных целях. ## Примеры From 63b39017ee3b915ddd119805303c57688b43b866 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 09:01:07 +0000 Subject: [PATCH 098/595] build(deps): bump io.freefair.javadoc-utf-8 from 6.6 to 6.6.1 Bumps [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) from 6.6 to 6.6.1. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/6.6...6.6.1) --- updated-dependencies: - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 557ed3d666b..4eba14c3a67 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { id("org.sonarqube") version "3.5.0.2730" id("io.freefair.lombok") version "6.6.1" id("io.freefair.javadoc-links") version "6.6" - id("io.freefair.javadoc-utf-8") version "6.6" + id("io.freefair.javadoc-utf-8") version "6.6.1" id("io.freefair.aspectj.post-compile-weaving") version "6.6" id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.3.7" From dc35c01df5dc96f12a68c9e01dda9a8bebd9b3cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 09:01:08 +0000 Subject: [PATCH 099/595] build(deps): bump me.qoomon.git-versioning from 6.3.7 to 6.4.0 Bumps me.qoomon.git-versioning from 6.3.7 to 6.4.0. --- updated-dependencies: - dependency-name: me.qoomon.git-versioning dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 557ed3d666b..a1688001634 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ plugins { id("io.freefair.javadoc-utf-8") version "6.6" id("io.freefair.aspectj.post-compile-weaving") version "6.6" id("io.freefair.maven-central.validate-poms") version "6.6.1" - id("me.qoomon.git-versioning") version "6.3.7" + id("me.qoomon.git-versioning") version "6.4.0" id("com.github.ben-manes.versions") version "0.44.0" id("org.springframework.boot") version "2.7.5" id("io.spring.dependency-management") version "1.1.0" From 5d4dfb128ecf70d2041f0bba865d2eeb25cc804d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 09:19:17 +0000 Subject: [PATCH 100/595] build(deps): bump io.freefair.javadoc-links from 6.6 to 6.6.1 Bumps [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) from 6.6 to 6.6.1. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/6.6...6.6.1) --- updated-dependencies: - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6104c32ddf2..52783225890 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "3.5.0.2730" id("io.freefair.lombok") version "6.6.1" - id("io.freefair.javadoc-links") version "6.6" + id("io.freefair.javadoc-links") version "6.6.1" id("io.freefair.javadoc-utf-8") version "6.6.1" id("io.freefair.aspectj.post-compile-weaving") version "6.6" id("io.freefair.maven-central.validate-poms") version "6.6.1" From c18c827364d341a7c3c4ed7981842d0d5ded290d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 09:19:36 +0000 Subject: [PATCH 101/595] build(deps): bump io.freefair.aspectj.post-compile-weaving Bumps [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) from 6.6 to 6.6.1. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/6.6...6.6.1) --- updated-dependencies: - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 52783225890..dbcc38bd9b0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { id("io.freefair.lombok") version "6.6.1" id("io.freefair.javadoc-links") version "6.6.1" id("io.freefair.javadoc-utf-8") version "6.6.1" - id("io.freefair.aspectj.post-compile-weaving") version "6.6" + id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.0" id("com.github.ben-manes.versions") version "0.44.0" From 3c4fa15e47efb49c5721bdeaa426f67f28f5796f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 09:01:06 +0000 Subject: [PATCH 102/595] build(deps): bump JetBrains/qodana-action from 2022.3.0 to 2022.3.2 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2022.3.0 to 2022.3.2. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2022.3.0...v2022.3.2) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 91fbc4391c0..b30e13f77bc 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2022.3.0 + uses: JetBrains/qodana-action@v2022.3.2 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From 202d9f9c7e3b26e76a05b0af21149c0be31ff776 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 09:01:22 +0000 Subject: [PATCH 103/595] build(deps): bump sentry-bom from 6.9.2 to 6.13.0 Bumps [sentry-bom](https://github.com/getsentry/sentry-java) from 6.9.2 to 6.13.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.9.2...6.13.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index dbcc38bd9b0..cbfc5cdeab2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,7 +55,7 @@ val languageToolVersion = "5.6" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.9.2") + mavenBom("io.sentry:sentry-bom:6.13.0") } } From ab0ec5f3a17fa8d782f26e28eef89ceae1ae0c6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 09:01:43 +0000 Subject: [PATCH 104/595] build(deps): bump picocli-spring-boot-starter from 4.7.0 to 4.7.1 Bumps [picocli-spring-boot-starter](https://github.com/remkop/picocli) from 4.7.0 to 4.7.1. - [Release notes](https://github.com/remkop/picocli/releases) - [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md) - [Commits](https://github.com/remkop/picocli/compare/v4.7.0...v4.7.1) --- updated-dependencies: - dependency-name: info.picocli:picocli-spring-boot-starter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cbfc5cdeab2..16ad3502a84 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -66,7 +66,7 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") - api("info.picocli:picocli-spring-boot-starter:4.7.0") + api("info.picocli:picocli-spring-boot-starter:4.7.1") // lsp4j core api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.19.0") From aa11d171f0d58c15a9c9f7eef24ea040603a8d3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 09:02:38 +0000 Subject: [PATCH 105/595] build(deps): bump com.github.ben-manes.versions from 0.44.0 to 0.45.0 Bumps com.github.ben-manes.versions from 0.44.0 to 0.45.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 16ad3502a84..01071269b35 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.0" - id("com.github.ben-manes.versions") version "0.44.0" + id("com.github.ben-manes.versions") version "0.45.0" id("org.springframework.boot") version "2.7.5" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" From 60526de16feedd2a69c166d81f53365c0f63f481 Mon Sep 17 00:00:00 2001 From: "codesee-maps[bot]" <86324825+codesee-maps[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 06:38:05 +0000 Subject: [PATCH 106/595] Install the CodeSee workflow. Learn more at https://docs.codesee.io --- .github/workflows/codesee-arch-diagram.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/codesee-arch-diagram.yml diff --git a/.github/workflows/codesee-arch-diagram.yml b/.github/workflows/codesee-arch-diagram.yml new file mode 100644 index 00000000000..9a3aa1cdf7d --- /dev/null +++ b/.github/workflows/codesee-arch-diagram.yml @@ -0,0 +1,22 @@ +# This workflow was added by CodeSee. Learn more at https://codesee.io/ +# This is v2.0 of this workflow file +on: + push: + branches: + - develop + pull_request_target: + types: [opened, synchronize, reopened] + +name: CodeSee + +permissions: read-all + +jobs: + codesee: + runs-on: ubuntu-latest + continue-on-error: true + name: Analyze the repo with CodeSee + steps: + - uses: Codesee-io/codesee-action@v2 + with: + codesee-token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} From b58097f65ed97818a37e7205389de6d60206383e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Feb 2023 09:01:59 +0000 Subject: [PATCH 107/595] build(deps): bump io.sentry:sentry-bom from 6.13.0 to 6.13.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.13.0 to 6.13.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.13.0...6.13.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 01071269b35..13686fe66fe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,7 +55,7 @@ val languageToolVersion = "5.6" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.13.0") + mavenBom("io.sentry:sentry-bom:6.13.1") } } From 344cdfc6a293774524f0f8ea6060b55d76881135 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Feb 2023 09:01:00 +0000 Subject: [PATCH 108/595] build(deps): bump JetBrains/qodana-action from 2022.3.2 to 2022.3.3 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2022.3.2 to 2022.3.3. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2022.3.2...v2022.3.3) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index b30e13f77bc..06d3a37134e 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2022.3.2 + uses: JetBrains/qodana-action@v2022.3.3 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From b4eeb7eecb017b894d61d0b90ef3a8eaee4b753f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 09:56:56 +0000 Subject: [PATCH 109/595] build(deps): bump JetBrains/qodana-action from 2022.3.3 to 2022.3.4 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2022.3.3 to 2022.3.4. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2022.3.3...v2022.3.4) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 06d3a37134e..7a72077ff3c 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2022.3.3 + uses: JetBrains/qodana-action@v2022.3.4 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From cde6f98c842fd2622cb68512089625bf70f42555 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 14 Mar 2023 19:19:21 +0300 Subject: [PATCH 110/595] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DenyIncompleteValues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/DenyIncompleteValues.md b/docs/diagnostics/DenyIncompleteValues.md index c42b8c392b0..bd69b8cc1fe 100644 --- a/docs/diagnostics/DenyIncompleteValues.md +++ b/docs/diagnostics/DenyIncompleteValues.md @@ -3,7 +3,7 @@ ## Описание диагностики -Довольно часто при проектировании структуры метаданных соблюдается правило - измерения регистра всегда должны быть заполнены конкретными значениями и не должны быть не заполнены. +Довольно часто при проектировании структуры метаданных соблюдается правило - измерения регистра всегда должны быть заполнены конкретными значениями и не должны быть пустыми. Проверку на заполненность измерений удобно выполнять с помощью простых встроенных средств платформы, а именно, флага "Запрет незаполненных значений" для измерения регистра. В этом случае платформа самостоятельно будет проверять заполненность измерений и не нужно дополнительно контролировать заполнение измерения ни при программной обработке регистров, ни при интерактивной обработке. Фактически записи с незаполненным измерением не имеют смысла в информационной базе, каким бы образом они в нее ни попали: в результате интерактивного ввода или в результате выполнения программного кода. From 46b3e084cf426505440ee4ee888e3453bfb4f78e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 14 Mar 2023 19:37:52 +0300 Subject: [PATCH 111/595] =?UTF-8?q?=D0=93=D0=BE=D0=B4=20=D0=B2=20=D1=88?= =?UTF-8?q?=D0=B0=D0=BF=D0=BA=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DenyIncompleteValuesDiagnostic.java | 2 +- .../languageserver/utils/MdoReferences.java | 46 +------------------ .../DenyIncompleteValuesDiagnosticTest.java | 2 +- 3 files changed, 3 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index d70bba05a45..35c25ddc57f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java index 9a8bc0b1fed..0c33713dc83 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java @@ -1,45 +1 @@ -/* - * This file is a part of BSL Language Server. - * - * Copyright (c) 2018-2022 - * Alexey Sosnoviy , Nikita Fedkin and contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - * - * BSL Language Server is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * BSL Language Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BSL Language Server. - */ -package com.github._1c_syntax.bsl.languageserver.utils; - -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.mdo.MD; -import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; -import lombok.experimental.UtilityClass; - -@UtilityClass -public class MdoReferences { - - public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { - final var mdoReference = mdo.getMdoReference(); - if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { - return mdoReference.getMdoRef(); - } - return mdoReference.getMdoRefRu(); - } - - public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { - final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); - return names[0].concat(".").concat(names[1]); - } - -} +/* * This file is a part of BSL Language Server. * * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later * * BSL Language Server is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * BSL Language Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import lombok.experimental.UtilityClass; @UtilityClass public class MdoReferences { public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { final var mdoReference = mdo.getMdoReference(); if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { return mdoReference.getMdoRef(); } return mdoReference.getMdoRefRu(); } public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); return names[0].concat(".").concat(names[1]); } } \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index 51c33e13b8d..dd2ca68aec6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 2c4b193ffeca52b99a29f0a32cfa3c34bd3d0d3e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 15 Mar 2023 21:26:45 +0300 Subject: [PATCH 112/595] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/SetPrivilegedMode.md | 56 ++++++++++++++ docs/en/diagnostics/SetPrivilegedMode.md | 16 ++++ .../SetPrivilegedModeDiagnostic.java | 76 +++++++++++++++++++ .../SetPrivilegedModeDiagnostic_en.properties | 2 + .../SetPrivilegedModeDiagnostic_ru.properties | 2 + .../SetPrivilegedModeDiagnosticTest.java | 25 ++++++ .../SetPrivilegedModeDiagnostic.bsl | 8 ++ 7 files changed, 185 insertions(+) create mode 100644 docs/diagnostics/SetPrivilegedMode.md create mode 100644 docs/en/diagnostics/SetPrivilegedMode.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/SetPrivilegedModeDiagnostic.bsl diff --git a/docs/diagnostics/SetPrivilegedMode.md b/docs/diagnostics/SetPrivilegedMode.md new file mode 100644 index 00000000000..c12eac3349b --- /dev/null +++ b/docs/diagnostics/SetPrivilegedMode.md @@ -0,0 +1,56 @@ +# (SetPrivilegedMode) + + +## Описание диагностики + +Текущее правило находит код установки привилегированного режима. +Для внешнего кода, например, кода из внешних отчетов\обработок, это действие может быть небезопасным. + +По найденным замечаниям необходимо выполнить ручной аудит кода на предмет его правильности и безопасности. + +Правило находит вызовы метода `УстановитьПривилегированныйРежим` + вызов `УстановитьПривилегированныйРежим(Ложь)` игнорируется + +Потенциально опасны любые экспортные процедуры и функции, которые выполняют на сервере какие-либо действия с предварительной безусловной установкой привилегированного режима, так как это отключает проверку прав доступа текущего пользователя. Особого внимания требуют экспортные процедуры и функции клиентского прикладного программного интерфейса сервера 1С:Предприятия. + +Например, неправильно: +```bsl +Процедура ИзменитьИлиУдалитьДанные(...) Экспорт + +УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа +// Изменяем данные в привилегированном режиме +... +КонецПроцедуры +``` +Правильно: +```bsl +Процедура ИзменитьИлиУдалитьДанные(...) Экспорт + +// Изменяем данные +// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение) +... + +КонецПроцедуры +``` +Исключение составляют случаи, когда действие, выполняемое процедурой, должно быть разрешено (или возвращаемое значение функции должно быть доступно) абсолютно всем категориям пользователей. + +## Примеры + +```bsl + УстановитьПривилегированныйРежим(Истина); // есть замечание + + Значение = Истина; + УстановитьПривилегированныйРежим(Значение); // есть замечание + + УстановитьПривилегированныйРежим(Ложь); // нет замечания +``` +## Источники + + +* Источник: [Стандарт: Использование привилегированного режима](https://its.1c.ru/db/v8std/content/485/hdoc) +* Источник: [Стандарт: Безопасность прикладного программного интерфейса сервера](https://its.1c.ru/db/v8std#content:678:hdoc) +* Источник: [Стандарт: Ограничение на выполнение «внешнего» кода](https://its.1c.ru/db/v8std/content/669/hdoc) diff --git a/docs/en/diagnostics/SetPrivilegedMode.md b/docs/en/diagnostics/SetPrivilegedMode.md new file mode 100644 index 00000000000..f4438f04e4e --- /dev/null +++ b/docs/en/diagnostics/SetPrivilegedMode.md @@ -0,0 +1,16 @@ +# (SetPrivilegedMode) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java new file mode 100644 index 00000000000..5107320a096 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java @@ -0,0 +1,76 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; + +import java.util.Optional; +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.SECURITY_HOTSPOT, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 1, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL +) + +public class SetPrivilegedModeDiagnostic extends AbstractFindMethodDiagnostic { + private static final Pattern messagePattern = CaseInsensitivePattern.compile( + "УстановитьПривилегированныйРежим|SetPrivilegedMode"); + + public SetPrivilegedModeDiagnostic() { + super(messagePattern); + } + + @Override + protected boolean checkGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { + final var result = super.checkGlobalMethodCall(ctx); + if (result && (isSetPrivilegedModeWithFalse(ctx))) { + return false; + } + return result; + } + + private static boolean isSetPrivilegedModeWithFalse(BSLParser.GlobalMethodCallContext ctx) { + return Optional.of(ctx) + .map(BSLParser.GlobalMethodCallContext::doCall) + .map(BSLParser.DoCallContext::callParamList) + .map(BSLParser.CallParamListContext::callParam) + .filter(callParamContexts -> callParamContexts.size() == 1) + .map(callParamContexts -> callParamContexts.get(0)) + .map(BSLParser.CallParamContext::expression) + .map(BSLParser.ExpressionContext::member) + .map(memberContexts -> memberContexts.get(0)) + .map(BSLParser.MemberContext::constValue) + .filter(constValueContext -> constValueContext.FALSE() != null) + .isPresent(); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_en.properties new file mode 100644 index 00000000000..c6232bd990a --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the privileged mode setting +diagnosticName=Using privileged mode diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_ru.properties new file mode 100644 index 00000000000..490d1e1c754 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте установку привилегированного режима +diagnosticName=Использование привилегированного режима diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java new file mode 100644 index 00000000000..f3e1314c552 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java @@ -0,0 +1,25 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class SetPrivilegedModeDiagnosticTest extends AbstractDiagnosticTest { + SetPrivilegedModeDiagnosticTest() { + super(SetPrivilegedModeDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(2, 4, 36) + .hasRange(4, 4, 36) + .hasSize(2); + } +} diff --git a/src/test/resources/diagnostics/SetPrivilegedModeDiagnostic.bsl b/src/test/resources/diagnostics/SetPrivilegedModeDiagnostic.bsl new file mode 100644 index 00000000000..a10678f92c7 --- /dev/null +++ b/src/test/resources/diagnostics/SetPrivilegedModeDiagnostic.bsl @@ -0,0 +1,8 @@ +&НаСервере +Процедура Метод() + УстановитьПривилегированныйРежим(Истина); // есть замечание + Значение = Истина; + УстановитьПривилегированныйРежим(Значение); // есть замечание + + УстановитьПривилегированныйРежим(Ложь); // нет замечания +КонецПроцедуры From a28cb206b158468df18b3fa188b1e7e717724ca9 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 15 Mar 2023 21:35:10 +0300 Subject: [PATCH 113/595] precommit --- docs/diagnostics/SetPrivilegedMode.md | 2 +- docs/en/diagnostics/SetPrivilegedMode.md | 2 +- .../configuration/parameters-schema.json | 10 +++++++++ .../SetPrivilegedModeDiagnosticTest.java | 21 +++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/docs/diagnostics/SetPrivilegedMode.md b/docs/diagnostics/SetPrivilegedMode.md index c12eac3349b..c576d091c26 100644 --- a/docs/diagnostics/SetPrivilegedMode.md +++ b/docs/diagnostics/SetPrivilegedMode.md @@ -1,4 +1,4 @@ -# (SetPrivilegedMode) +# Использование привилегированного режима (SetPrivilegedMode) ## Описание диагностики diff --git a/docs/en/diagnostics/SetPrivilegedMode.md b/docs/en/diagnostics/SetPrivilegedMode.md index f4438f04e4e..fac6e959984 100644 --- a/docs/en/diagnostics/SetPrivilegedMode.md +++ b/docs/en/diagnostics/SetPrivilegedMode.md @@ -1,4 +1,4 @@ -# (SetPrivilegedMode) +# Using privileged mode (SetPrivilegedMode) ## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..2652d6eed1e 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1664,6 +1664,16 @@ }, "$id": "#/definitions/SetPermissionsForNewObjects" }, + "SetPrivilegedMode": { + "description": "Using privileged mode", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Using privileged mode", + "$id": "#/definitions/SetPrivilegedMode" + }, "SeveralCompilerDirectives": { "description": "Erroneous indication of several compilation directives", "default": true, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java index f3e1314c552..b98005b192d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import org.eclipse.lsp4j.Diagnostic; From 3bcf69f067bd1c1a2c5a941bd89dc602baad14cb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 16 Mar 2023 11:31:39 +0300 Subject: [PATCH 114/595] =?UTF-8?q?=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B5=20=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/SetPrivilegedMode.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/diagnostics/SetPrivilegedMode.md b/docs/diagnostics/SetPrivilegedMode.md index c576d091c26..6733c4e1f68 100644 --- a/docs/diagnostics/SetPrivilegedMode.md +++ b/docs/diagnostics/SetPrivilegedMode.md @@ -34,6 +34,19 @@ ``` Исключение составляют случаи, когда действие, выполняемое процедурой, должно быть разрешено (или возвращаемое значение функции должно быть доступно) абсолютно всем категориям пользователей. +Если все-таки необходимо использовать привилегированный режим внутри метода, следует использовать проверку прав доступа вручную, следует использовать метод `ВыполнитьПроверкуПравДоступа`. + +Пример предварительной проверки перед выполнением действий в привилегированном режиме: +```bsl +Процедура ИзменитьИлиУдалитьДанные(...) Экспорт + +ВыполнитьПроверкуПравДоступа(...); // Если у пользователя недостаточно прав, то будет вызвано исключение +УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа + +// Изменяем данные в привилегированном режиме +... +КонецПроцедуры +``` ## Примеры ```bsl From 2fe80ff0d5d299237800e586c82269dfd4521437 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 22 Mar 2023 19:23:00 +0300 Subject: [PATCH 115/595] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B8=D0=BC=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit замечания по ревью --- .../languageserver/utils/MdoReferences.java | 46 ++++++++++++++++++- ...nyIncompleteValuesDiagnostic_en.properties | 2 +- ...nyIncompleteValuesDiagnostic_ru.properties | 2 +- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java index 0c33713dc83..a232aee2ff9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java @@ -1 +1,45 @@ -/* * This file is a part of BSL Language Server. * * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later * * BSL Language Server is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * BSL Language Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import lombok.experimental.UtilityClass; @UtilityClass public class MdoReferences { public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { final var mdoReference = mdo.getMdoReference(); if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { return mdoReference.getMdoRef(); } return mdoReference.getMdoRefRu(); } public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); return names[0].concat(".").concat(names[1]); } } \ No newline at end of file +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.utils; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class MdoReferences { + + public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { + final var mdoReference = mdo.getMdoReference(); + if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { + return mdoReference.getMdoRef(); + } + return mdoReference.getMdoRefRu(); + } + + public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { + final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); + return names[0].concat(".").concat(names[1]); + } + +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties index 1b1e3b773cc..d46277fecff 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_en.properties @@ -1,2 +1,2 @@ diagnosticMessage=The "Deny incomplete values" flag is not specified for the "%s" dimension of the "%s" metadata -diagnosticName=Deny incomplete values +diagnosticName=Deny incomplete values for dimensions diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties index d3e061083e1..41d143257cd 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic_ru.properties @@ -1,2 +1,2 @@ diagnosticMessage=Не указан флаг "Запрет незаполненных значений" у измерения "%s" метаданного "%s" -diagnosticName=Запрет незаполненных значений +diagnosticName=Запрет незаполненных значений у измерений регистров From 66b07cedbb39919dc6eb2a4b95d7ab87d8fa0287 Mon Sep 17 00:00:00 2001 From: Viktor Gukov Date: Thu, 23 Mar 2023 16:43:47 +0300 Subject: [PATCH 116/595] feat: disabled failing build on javadoc errors --- build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle.kts b/build.gradle.kts index 13686fe66fe..12dec5fdcae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -220,6 +220,7 @@ tasks.generateDiagnosticDocs { } tasks.javadoc { + isFailOnError = false options { this as StandardJavadocDocletOptions links( From 71e3e2f5504ebe3595845c95efc3d19b2bbfd679 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Mar 2023 15:00:19 +0300 Subject: [PATCH 117/595] =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20FP=20=D0=BF=D1=80=D0=B8=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=B0=20?= =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=D0=9E?= =?UTF-8?q?=D1=88=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 3c714b9d90cfb46bf022edf38930f9929854d9b0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 07:41:09 +0000 Subject: [PATCH 118/595] Translate docs/contributing/StyleGuide.md in en 100% translated for the source file 'docs/contributing/StyleGuide.md' on the 'en' language. --- docs/en/contributing/StyleGuide.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/en/contributing/StyleGuide.md b/docs/en/contributing/StyleGuide.md index 1049966f03a..43ec4c4143b 100644 --- a/docs/en/contributing/StyleGuide.md +++ b/docs/en/contributing/StyleGuide.md @@ -4,10 +4,29 @@ This document contains general guidelines for writing code in the BSL Language S Try to stick to them and the code review process will be simple. -## General recommendations +## Null values If a method can legally return `null`, it is recommended that you return `Optional` instead of explicitly returning `null`. Exceptions (eg. high frequency or performance functions) are negotiated separately. +The description of the `package-info.java` package must indicate that the NonNull API is used by default in the package. +To do this, the annotation `@DefaultAnnotation(NonNull.class)` is added above the package name + +Example: +```java +// ...license... +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; +``` + +To explicitly indicate that a method can accept or return `null`, use the annotation `@edu.umd.cs.findbugs.annotations.Nullable`. + +This avoids using the `@edu.umd.cs.findbugs.annotations.NonNull` annotation. + +The `null` control annotations from the `javax.annotations` or `jetbrains.annotations` packages are not allowed. + ## Formatting 1. All code in the modules should be automatically formatted. @@ -56,6 +75,6 @@ To simplify the creation of a logger instance, it is recommended to use the `@lo 1. Connecting new libraries to the implementation scope should be done carefully, with control over the increase in the size of the resulting jar file. If possible, "unnecessary" and unused sub-dependencies should be excluded through `exclude`. 1. Explicit linking of the `com.google.guava`, `Google Collections` library or other parts of the Guava family of libraries is prohibited. **If absolutely necessary**, it is permissible to copy the implementation from `Guava` inside the BSL Language Server, subject to the terms of the Guava license. For everything else, there is Apache Commons. 1. Import of `*.google.*` classes, as well as other parts of Guava libraries, is prohibited. With no exceptions. - +1. The `jsr305` package and its annotations should not be used in code. See section "Null values". > In the process... From c30065459258a8bbfcfb97ef9acb0735b0621c57 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 07:55:50 +0000 Subject: [PATCH 119/595] Translate docs/features/ConfigurationFile.md in en 100% translated for the source file 'docs/features/ConfigurationFile.md' on the 'en' language. --- docs/en/features/ConfigurationFile.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/en/features/ConfigurationFile.md b/docs/en/features/ConfigurationFile.md index 04d4bba57b6..4c59bba4aab 100644 --- a/docs/en/features/ConfigurationFile.md +++ b/docs/en/features/ConfigurationFile.md @@ -16,16 +16,21 @@ If there is no configuration file, an attempt will be made to find the ".bsl-lan |   ⤷   `cyclomaticComplexity`|`Boolean` or `JSON-Object`|Enables displaying the value of the [cyclomatic complexity](../diagnostics/CyclomaticComplexity.md) of the method over its definition. The default is `true`. Lens options: `complexityThreshold` - lens response threshold. The default is - `-1`.| |`diagnostics`|`JSON-Object`|Contains diagnostic settings| |⤷   `computeTrigger`|`String`|Event that will trigger the code analysis procedure to diagnose comments. Possible values:
* `onType` -when editing a file (online) ***on large files can significantly slow down editing ***
* `onSave` - when saving a file (*default*)
`never` - analysis will not be performed| -|⤷   `ordinaryAppSupport`|`Boolean>`|Ordinary client support. Diagnostics will require taking into account the features of a ordinary application. Values:
* `true` - the configuration uses ordinary application *(default)*
* `false` - ignore ordinary application warnings| +|⤷   `ordinaryAppSupport`|`Boolean`|Ordinary client support. Diagnostics will require taking into account the features of a ordinary application. Values:
* `true` - the configuration uses ordinary application *(default)*
* `false` - ignore ordinary application warnings| |⤷   `skipSupport`|`String`|This parameter sets **1C configuration** file skipping mode *(for example files are not analyzed for issues)* which are "on support" from vendor configuration. Possible values:
* `withSupport` - skip all modules set "on support" *(all "locks" types)*
* `withSupportLocked` - skip modules set "on support" with prohibited modification *("yellow closed lock")*
* `never` - skip no modules as support mode is not analyzed *(set by default)*| |⤷   `mode`|`String`|Setting for controlling the diagnostic settings accounting mode. Possible options:
* `OFF` - All diagnostics are considered to be turned off, regardless of their settings.
* `ON` - All diagnostics enabled by default are considered enabled, the rest - depending on personal settings
* `EXCEPT` - All diagnostics other than those specified are considered enabled.
* `ONLY` - Only the specified diagnostics are considered enabled.
* `ALL` - All diagnostics are considered enabled| |⤷   `parameters`|`JSON-Object`|Parameter is a collection of diagnostics parameters. Collection items are json-objects with the following structure:
* *object key* - string, is diagnostic key
* *object value* - if is boolean, then interpreted as diagnostic off-switch (`false`) or on-switch with default parameters (`true`), if is type `json-object`, collection of diagnostic parameters.

Key, if set to ON by default and all allowed parameters and examples are given on the diagnostic page.| +|⤷   `subsystemsFilter`|`JSON-Object`|Filter by configuration subsystems| +|⤷   `analyzeOnStart`|`Boolean`|Starting the analysis of the entire project at server startup. If enabled, after the context is built on the client, information about diagnostics in all project files will be sent.| +|   ⤷   `include`|`Array` `String`|List of names of subsystems for which objects the analysis is performed, including child subsystems| +|   ⤷   `exclude`|`Array` `String`|List of names of subsystems excluded from analysis, including child subsystems| |`documentLink`|`JSON-Object`|Contains documentation link settings| |⤷   `showDiagnosticDescription`|`Boolean`|Show additional links to diagnostics documentation. By default, the parameter is off (*set to `false`*)| |`useDevSite`|`Boolean`|When you turn on the settings, the resulting documentation links will lead to the develop version of the site. By default, the parameter is off (*set to `false`*)| |`siteRoot`|`String`|The path to the root of the site with the documentation. By default, the parameter value is `"https://1c-syntax.github.io/bsl-language-server"` | |`traceLog`|`String`|To log all requests *(incoming and outgoing)* between **BSL Language Server** and **Language Client** from used editor/IDE, this parameter sets log file path. The path can set either absolute or relative *(from project root)*, by default the value is not set.

**WARNING**

* When starting **BSL Language Server** overwrites this file
* Speed of interaction between client and server **DRAMATICALLY REDUCED**| |`configurationRoot`|`String`|This parameter is intended to indicate the root directory the 1C configuration files are located in the project directory. It can be useful if there are several configuration directories in the same project directory or when the structure of the project directory is so complex. By default, the parameter is empty and `BSL Language Server` determines the location of the configuration root directory independently| +|`sendErrors`|`String`|Mode for sending error messages to BSL Language Server developers. More [Monitoring](Monitoring.md).Possible values:
* `ask` - ask permission on every error *(set by default)*.
* `send` - always send error messages.
* `never` - never send error messages.| You can use the following JSON schema to make it easier to compile and edit a configuration file: @@ -41,6 +46,7 @@ Setting example: * Changes the diagnostic setting for [LineLength - Line Length limit](../diagnostics/LineLength.md), set the limit for the length of a string to 140 characters; * Disable [MethodSize - Method size restriction diagnostic](../diagnostics/MethodSize.md). * Enables the calculation of diagnostics in continuous mode (`computeTrigger = onType`) +* Diagnostics are calculated only for the objects of the "StandardSubsystems" subsystem, with the exception of "ReportVariants" and "VersioningObjects" ```json { @@ -53,6 +59,10 @@ Setting example: "maxLineLength": 140 }, "MethodSize": false + }, + "subsystemsFilter": { + "include": ["StandardSubsystems"], + "exclude": ["ReportVariants", "VersioningObjects"] } } } From 865d903e0d7574f15deff775ee75cebd49c76aeb Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 08:12:31 +0000 Subject: [PATCH 120/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/IncorrectLineBreak.md' on the 'en' language. --- docs/en/diagnostics/IncorrectLineBreak.md | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/en/diagnostics/IncorrectLineBreak.md b/docs/en/diagnostics/IncorrectLineBreak.md index f564fff9a29..337b698595a 100644 --- a/docs/en/diagnostics/IncorrectLineBreak.md +++ b/docs/en/diagnostics/IncorrectLineBreak.md @@ -18,6 +18,15 @@ Complex logical conditions in If ... ElseIf ... EndIf should be carried as follo * logical operators AND, OR are placed at the beginning of a line, and not at the end of the previous line; * all conditions are preceded by the standard first indent, or they are aligned at the start of work without taking into account the logical operator (it is recommended to use spaces to align expressions relative to the first line). +**Examples of configuring exclusions:** + +- If your design standard requires a closing brace and statement separator ";" were written *after* the line containing the last parameter, then you need to change the `listOfIncorrectFirstSymbol` parameter + - instead of the substring `|\);` (at the end of the setting) you need to write the substring `|\)\s*;\s*\S+` + - final version `\)|;|,\s*\S+|\)s*;\s*\S+` + - code example is listed in the examples section + +Without the specified setting, the rule will issue notes on the closing bracket and the operator separator ";", located on a separate line + ## Examples @@ -45,6 +54,25 @@ AmountDocument = AmountWithoutDiscount + AmountAutomaticDiscount; ``` +An example of a possible arrangement of parameters and a closing bracket with the operator separator ";" + +```bsl +Names = New ValueList; +Names.Add(Name, + Synonym); +``` + +An example of a possible location of the closing bracket with the operator separator ";" on a separate line: +- without changing the `listOfIncorrectFirstSymbol` parameter (see above), the diagnostics will generate a issue for such expression wrapping. + +```bsl +Names = New ValueList; +Names.Add( + Name, + Synonym +); +``` + ## Sources From e72d2aad6d2c8e43374432233b8ef06e2214ba61 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 08:15:25 +0000 Subject: [PATCH 121/595] Translate docs/features/index.md in en 100% translated for the source file 'docs/features/index.md' on the 'en' language. --- docs/en/features/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/features/index.md b/docs/en/features/index.md index 5a4591b3ae1..8111df669e6 100644 --- a/docs/en/features/index.md +++ b/docs/en/features/index.md @@ -4,3 +4,4 @@ Additional features BSL Language Server * [Configuration](ConfigurationFile.md) * [Diagnostic ignorance](DiagnosticIgnorance.md) +* [Monitoring](Monitoring.md) From cb962b3213b31f5bcd40c270eeee5e3cbc587584 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 08:17:58 +0000 Subject: [PATCH 122/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/PublicMethodsDescription.md' on the 'en' language. --- docs/en/diagnostics/PublicMethodsDescription.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/PublicMethodsDescription.md b/docs/en/diagnostics/PublicMethodsDescription.md index 2e6b9637d50..cfc30d605cd 100644 --- a/docs/en/diagnostics/PublicMethodsDescription.md +++ b/docs/en/diagnostics/PublicMethodsDescription.md @@ -2,7 +2,7 @@ ## Description -All public methods located inside regions must have a description. +All export methods in the `Public` region must have a description. ## Sources * [Standard: "Procedure and function defenition". Paragraph 2 (RU)](https://its.1c.ru/db/v8std#content:453:hdoc) From 3773ef957e5a44c6b2a784e371fb6157c5c8336e Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 08:23:50 +0000 Subject: [PATCH 123/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/UseSystemInformation.md' on the 'en' language. --- docs/en/diagnostics/UseSystemInformation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/UseSystemInformation.md b/docs/en/diagnostics/UseSystemInformation.md index 68856e6dc52..df386588668 100644 --- a/docs/en/diagnostics/UseSystemInformation.md +++ b/docs/en/diagnostics/UseSystemInformation.md @@ -3,7 +3,7 @@ ## Description -The `SystemInformation` object provides data about the computer and configuration in 1C, which can be used for malicious purposes. +`SystemInformation` provides data about the computer and configuration in 1C, which can be used for malicious purposes. ## Examples From 2dd0c8b55543bdad0ff2b7b65e447ba8955083bf Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 08:29:28 +0000 Subject: [PATCH 124/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/MissingCommonModuleMethod.md' on the 'en' language. --- docs/en/diagnostics/MissingCommonModuleMethod.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/en/diagnostics/MissingCommonModuleMethod.md b/docs/en/diagnostics/MissingCommonModuleMethod.md index 306771c1e60..ee61d21f3a9 100644 --- a/docs/en/diagnostics/MissingCommonModuleMethod.md +++ b/docs/en/diagnostics/MissingCommonModuleMethod.md @@ -3,7 +3,14 @@ ## Description +Diagnostics detects erroneous calls to methods of common modules. +Detects the following errors +- method does not exist in the specified common module +- method is in the common module, but it is not exported +- if a common module has no source code, then all calls to its methods are marked as erroneous +Excluded +- the variable name is the same as the common module name ## Examples From a52a97a57d5963d870f5d52a531f4ab13070138f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 16:47:10 +0000 Subject: [PATCH 125/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/ScheduledJobHandler.md' on the 'en' language. --- docs/en/diagnostics/ScheduledJobHandler.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/en/diagnostics/ScheduledJobHandler.md b/docs/en/diagnostics/ScheduledJobHandler.md index e3ef7135868..002e40b5061 100644 --- a/docs/en/diagnostics/ScheduledJobHandler.md +++ b/docs/en/diagnostics/ScheduledJobHandler.md @@ -3,6 +3,19 @@ ## Description +Certain requirements are imposed on the methods of scheduled job handlers. +Any export procedure or function of a non-global common server module can be used as a scheduled job method. If the scheduled job method is a function, then its return value is ignored. + +If the scheduled job is predefined, then its handler should not have parameters. +Otherwise, the parameters of such a scheduled job can be any values ​​that are allowed to be sent to the server. The parameters of a scheduled job must exactly match the parameters of the procedure or function it calls. + +Diagnostics checks the following signs of the correctness of the scheduled job handler method: +- there is a common module and a shared module method specified as a handler +- common module is server +- the method is export +- the method has no parameters if the scheduled job is predefined +- method body is not empty +- there are no other scheduled jobs that refer to the same handler method ## Examples @@ -11,6 +24,8 @@ +- [Set of articles "Scheduled job" - standard 1C (RU)](https://its.1c.ru/db/v8std#browse:13:-1:1:6) +- [Article "Scheduled job" from the developer's guide 1C 8.3 (RU)](https://its.1c.ru/db/v8322doc#bookmark:dev:TI000000794) From e90f6bfc9c7575103f4bb298a4db8a71bb0424a2 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 16:57:23 +0000 Subject: [PATCH 126/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/SetPrivilegedMode.md' on the 'en' language. --- docs/en/diagnostics/SetPrivilegedMode.md | 56 +++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/docs/en/diagnostics/SetPrivilegedMode.md b/docs/en/diagnostics/SetPrivilegedMode.md index fac6e959984..7477af6fa95 100644 --- a/docs/en/diagnostics/SetPrivilegedMode.md +++ b/docs/en/diagnostics/SetPrivilegedMode.md @@ -3,14 +3,66 @@ ## Description +Diagnostic finds Privileged mode setup code. +For external code, such as code from external reports/data processors, this action may not be safe. +The found sections of the code must be analyzed, a manual audit of the code must be performed for its correctness and safety. + +Правило находит вызовы метода The diagnostic finds calls to the `SetPrivilegedMode` method +call to `SetPrivilegedMode(False)` is ignored + +Any export procedures and functions that perform any actions on the server with the privileged mode set unconditionally beforehand are potentially dangerous, as this disables checking the access rights of the current user. The export procedures and functions of the client API of the 1C:Enterprise server require special attention. + +For example, wrong: +```bsl +Procedure ChangeData(...) Export + +SetPrivilegedMode(True); // Disable permission check +// Change data in privileged mode +... +EndProcedure +``` +Correct: +```bsl +Procedure ChangeData(...) Export + +// Changing data +// (at the same time, if the user does not have enough rights to perform an operation on the data, an exception will be raised) +... +EndProcedure +``` +The exception is when the action performed by the procedure must be allowed (or the return value of the function must be available) to absolutely all categories of users. + +If you still need to use privileged mode within a method, you must use manual access control using the `VerifyAccessRights` method. + +An example of pre-checking before performing actions in privileged mode: +```bsl +Procedure ChangeData(...) Export + +VerifyAccessRights(...); // If the user has insufficient rights, an exception will be thrown +SetPrivilegedMode(True); // Disable permission check + +// Change data in privileged mode +... +EndProcedure +``` ## Examples +```bsl + SetPrivilegedMode(True); // error + + Value = True; + SetPrivilegedMode(Value); // error + SetPrivilegedMode(False); // no error +``` ## Sources +* Standard: [Using Privileged Mode (RU)](https://its.1c.ru/db/v8std/content/485/hdoc) +* Standard: [Server API Security (RU)](https://its.1c.ru/db/v8std#content:678:hdoc) +* Standard: [Restriction on the execution of "external" code (RU)](https://its.1c.ru/db/v8std/content/669/hdoc) From 644692aed5c6c1b37a9297ed077094936350fe7a Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:10:09 +0000 Subject: [PATCH 127/595] Translate docs/features/Monitoring.md in en 100% translated for the source file 'docs/features/Monitoring.md' on the 'en' language. --- docs/en/features/Monitoring.md | 280 +++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 docs/en/features/Monitoring.md diff --git a/docs/en/features/Monitoring.md b/docs/en/features/Monitoring.md new file mode 100644 index 00000000000..2bae2d04372 --- /dev/null +++ b/docs/en/features/Monitoring.md @@ -0,0 +1,280 @@ +# Monitoring and reporting errors + +BSL Language Server contains a mechanism for sending error data to Sentry. + +The public Sentry.io is used as the Sentry server at https://sentry.io/organizations/1c-syntax/projects/bsl-language-server + +Unfortunately, the peculiarities of configuring access to Sentry.io limit the ability to view data +unauthorized users. + +## Scheme + +In the [configuration file](ConfigurationFile.md) of the BSL Language Server, you can configure the mode for sending error messages. +The send mode can take one of three values: + +* ask (default); +* send always; +* never send. + +If the configuration file is missing a setting or has a value of "ask", when an error occurs +the connected language client (used by the IDE) is sent a question about further actions with an error +with the following answer options: + +* send this error but ask again; +* don't send this error but ask again. +* send this error and don't ask again; +* don't send this error and don't ask again; + +You can completely refuse to answer (for example, by clicking on the cross next to the notification with the question). +Lack of response is perceived as "don't send this error, but ask again". + +The error message does not contain user or workstation identification information, +except for the generated session UUID to bind errors that occur within one +launching BSL Language Server. + +> Attention! + +If you enable debug logging (by setting `logback` or using environment variables), the contents of the logs (the last 100 entries) will be attached to the event that is sent. + +Some messages sent between Language Client and BSL Language Server contain source code snippets +or the entire text of the file. +These fragments can also be attached to the sent message. + +Sending message example: + +??? event.json + + ```json + { + "event_id": "746e2e82f4c1499abcdd935bc4c26644", + "project": 5790531, + "release": "ae081de9d3c3496ddac1d176259365191966b0cd", + "dist": null, + "platform": "java", + "message": "Internal error: java.lang.RuntimeException: psss", + "datetime": "2022-07-14T11:07:57.875000Z", + "tags": [ + [ + "environment", + "production" + ], + [ + "level", + "error" + ], + [ + "logger", + "org.eclipse.lsp4j.jsonrpc.RemoteEndpoint" + ], + [ + "runtime", + "AdoptOpenJDK 15.0.2" + ], + [ + "runtime.name", + "AdoptOpenJDK" + ], + [ + "release", + "ae081de9d3c3496ddac1d176259365191966b0cd" + ], + [ + "user", + "id:49516eb9-2a0d-4a15-bd96-978b68d8d0df" + ], + [ + "server.version", + "feature-sentry-ae081de-DIRTY" + ] + ], + "_metrics": { + "bytes.ingested.event": 3289, + "bytes.stored.event": 9875 + }, + "contexts": { + "runtime": { + "name": "AdoptOpenJDK", + "version": "15.0.2", + "type": "runtime" + } + }, + "culprit": "java.util.concurrent.CompletableFuture in encodeThrowable", + "environment": "production", + "exception": { + "values": [ + { + "type": "RuntimeException", + "value": "psss", + "module": "java.lang", + "stacktrace": { + "frames": [ + { + "function": "run", + "module": "java.util.concurrent.ForkJoinWorkerThread", + "in_app": false + }, + { + "function": "runWorker", + "module": "java.util.concurrent.ForkJoinPool", + "in_app": false + }, + { + "function": "scan", + "module": "java.util.concurrent.ForkJoinPool", + "in_app": false + }, + { + "function": "topLevelExec", + "module": "java.util.concurrent.ForkJoinPool$WorkQueue", + "in_app": false + }, + { + "function": "doExec", + "module": "java.util.concurrent.ForkJoinTask", + "in_app": false + }, + { + "function": "exec", + "module": "java.util.concurrent.CompletableFuture$AsyncSupply", + "in_app": false + }, + { + "function": "run", + "module": "java.util.concurrent.CompletableFuture$AsyncSupply", + "in_app": false + }, + { + "function": "lambda$prepareCallHierarchy$8", + "module": "com.github._1c_syntax.bsl.languageserver.BSLTextDocumentService", + "filename": "BSLTextDocumentService.java", + "abs_path": "BSLTextDocumentService.java", + "lineno": 234, + "in_app": true + }, + { + "function": "prepareCallHierarchy", + "module": "com.github._1c_syntax.bsl.languageserver.providers.CallHierarchyProvider", + "filename": "CallHierarchyProvider.java", + "abs_path": "CallHierarchyProvider.java", + "lineno": 62, + "in_app": true + } + ] + }, + "thread_id": 24 + }, + { + "type": "CompletionException", + "value": "java.lang.RuntimeException: psss", + "module": "java.util.concurrent", + "stacktrace": { + "frames": [ + { + "function": "run", + "module": "java.util.concurrent.ForkJoinWorkerThread", + "in_app": false + }, + { + "function": "runWorker", + "module": "java.util.concurrent.ForkJoinPool", + "in_app": false + }, + { + "function": "scan", + "module": "java.util.concurrent.ForkJoinPool", + "in_app": false + }, + { + "function": "topLevelExec", + "module": "java.util.concurrent.ForkJoinPool$WorkQueue", + "in_app": false + }, + { + "function": "doExec", + "module": "java.util.concurrent.ForkJoinTask", + "in_app": false + }, + { + "function": "exec", + "module": "java.util.concurrent.CompletableFuture$AsyncSupply", + "in_app": false + }, + { + "function": "run", + "module": "java.util.concurrent.CompletableFuture$AsyncSupply", + "in_app": false + }, + { + "function": "completeThrowable", + "module": "java.util.concurrent.CompletableFuture", + "in_app": false + }, + { + "function": "encodeThrowable", + "module": "java.util.concurrent.CompletableFuture", + "in_app": false + } + ] + }, + "thread_id": 24 + } + ] + }, + "extra": { + "thread_name": "ForkJoinPool.commonPool-worker-19" + }, + "fingerprint": [ + "{{ default }}" + ], + "grouping_config": { + "enhancements": "eJybzDRxY3J-bm5-npWRgaGlroGxrpHxBABcYgcZ", + "id": "newstyle:2019-10-29" + }, + "hashes": [ + "4a63b2a190b48dc2bbafb225c5140009", + "cfeccf65e86c6129d81e7fd1df568ce3" + ], + "ingest_path": [ + { + "version": "22.6.0", + "public_key": "XE7QiyuNlja9PZ7I9qJlwQotzecWrUIN91BAO7Q5R38" + } + ], + "key_id": "1646438", + "level": "error", + "logentry": { + "formatted": "Internal error: java.lang.RuntimeException: psss" + }, + "logger": "org.eclipse.lsp4j.jsonrpc.RemoteEndpoint", + "metadata": { + "display_title_with_tree_label": false, + "function": "encodeThrowable", + "type": "CompletionException", + "value": "java.lang.RuntimeException: psss" + }, + "nodestore_insert": 1657796884.036383, + "received": 1657796882.652077, + "sdk": { + "name": "sentry.java.spring-boot", + "version": "6.2.1", + "packages": [ + { + "name": "maven:io.sentry:sentry", + "version": "6.2.1" + }, + { + "name": "maven:io.sentry:sentry-spring-boot-starter", + "version": "6.2.1" + } + ] + }, + "timestamp": 1657796877.875, + "title": "CompletionException: java.lang.RuntimeException: psss", + "type": "error", + "user": { + "id": "49516eb9-2a0d-4a15-bd96-978b68d8d0df" + }, + "version": "7", + "location": null + } + ``` \ No newline at end of file From a9436842b93e3638bc61c85cd425552dc015d4d1 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:25:10 +0000 Subject: [PATCH 128/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/MissedRequiredParameter.md' on the 'en' language. --- .../en/diagnostics/MissedRequiredParameter.md | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/docs/en/diagnostics/MissedRequiredParameter.md b/docs/en/diagnostics/MissedRequiredParameter.md index 75653101c70..1c260e27cd0 100644 --- a/docs/en/diagnostics/MissedRequiredParameter.md +++ b/docs/en/diagnostics/MissedRequiredParameter.md @@ -2,15 +2,32 @@ ## Description - +Required parameters must not be omitted when calling methods, otherwise the value `Undefined` will be passed to the parameter, which the method often cannot process. +If the value `Undefined` is valid, then you need to +- explicitly pass a value +- or make the parameter optional with a default value of `Undefined`. ## Examples - + +For example + +```bsl +Procedure ChangeFormFieldColor(Form, FiledName, Color) +``` + +Incorrect: + +```bsl +ChangeFormFieldColor(,"Result", StyleColors.ArthursShirtColor); // missing first parameter Form +ChangeFormFieldColor(,,); // missing all required parameters +``` + +Correct: + +```bsl +ChangeFormFieldColor(ThisObject, "Result", Color); // all required parameters are specified +``` ## Sources - - +[Parameters of procedures and functions (RU)](https://its.1c.ru/db/v8std#content:640:hdoc) From 4e8d901ff770a50b8366ae2906de9e17f90230c9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:41:33 +0000 Subject: [PATCH 129/595] Apply translations in en 100% translated for the source file 'docs/diagnostics/RewriteMethodParameter.md' on the 'en' language. --- docs/en/diagnostics/RewriteMethodParameter.md | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/docs/en/diagnostics/RewriteMethodParameter.md b/docs/en/diagnostics/RewriteMethodParameter.md index 248d552de25..27128fc7cc9 100644 --- a/docs/en/diagnostics/RewriteMethodParameter.md +++ b/docs/en/diagnostics/RewriteMethodParameter.md @@ -3,14 +3,42 @@ ## Description +It is wrong to write methods in which their arguments are overwritten immediately on entry. + +It is necessary to correct this deficiency by removing the parameters, converting them to local variables. ## Examples +Suspicious code +```bsl +Procedure Configor(Val ConnectionString, Val User = "", Val Pass = "") Export + ConnectionString = "/F""" + DataBaseDir + """"; // Error +... +EndProcedure +``` + +Сorrected: +```bsl +Procedure Configor(Val DataBaseDir, Val User = "", Val Pass = "") Export +ConnectionString = "/F""" + DataBaseDir + """"; // No error +... +EndProcedure +``` +or +```bsl +Procedure Configor(Val DataBaseDir, Val User = "", Val Pass = "") Export + If Not EmpyString(DataBaseDir) Then +NewConnectionString = "/F""" + DataBaseDir + """"; +Else +NewConnectionString = ConnectionString; // Hmm, where is this from? +EndIf; + +... +EndProcedure +``` ## Sources +* [PVS-Studio V763. Parameter is always rewritten in function body before being used](https://pvs-studio.com/ru/docs/warnings/v6023) From a2625cfafdd52fb6d468f7046d4a7e81fc3e393b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:04:29 +0000 Subject: [PATCH 130/595] Translate docs/index.md in en 100% translated for the source file 'docs/index.md' on the 'en' language. --- docs/en/index.md | 131 +++++++++++++++++++++++++++++++---------------- 1 file changed, 88 insertions(+), 43 deletions(-) diff --git a/docs/en/index.md b/docs/en/index.md index bddae9cae38..73556bf12de 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -18,6 +18,7 @@ * [Contributing guidelines](contributing/index.md) * Capabilities * Run from command line +* Run in websocket mode * Run in analyzer mode * Run in formatter mode * Configuration file @@ -32,7 +33,7 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) -## Capabilities +## Features * File formatting * Selected region formatting @@ -46,10 +47,10 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) * Expand selection * Display color representation and convert between `Color` and `WebColors` * Diagnostics -* Quick fixes for several diagnostics +* Quick fixes and code actions for several diagnostics * Run diagnostics engine from command line * Run formatter engine from command line -* Rename symbol +* Renaming Symbols ## Supported protocol operations @@ -75,42 +76,42 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) | [willSaveWaitUntil](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_willSaveWaitUntil) | no | | | ??? textDocument -| Operation | Supported | Comment | Configurable? | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | -| [publishDiagnostics](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_publishDiagnostics) | yes | tagSupport = true
versionSupport = true
[список диагностик](./diagnostics/index.md) | yes | -| [completion](https://github.com/1c-syntax/bsl-language-server/blob/develop/docs/diagnostics/index.md) | no | resolveProvider = false | | -| [completionItem/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#completionItem_resolve) | no | | | -| [hover](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_hover) | yes | contentFormat = MarkupContent | | -| [signatureHelp](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_signatureHelp) | no | | | -| [declaration](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_declaration) | no | not applicable in 1C:Enterprise | | -| [definition](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_definition) | yes | linkSupport = true | | -| [typeDefinition](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_typeDefinition) | no | | | -| [implementation](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_implementation) | no | not applicable in 1C:Enterprise | | -| [references](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references) | yes | | | -| [documentHighlight](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentHighlight) | no | | | -| [documentSymbol](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentSymbol) | yes | hierarchicalDocumentSymbolSupport = true | | -| [codeAction](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction) | yes | codeActionKinds = ? (see [#1433](https://github.com/1c-syntax/bsl-language-server/issues/1433))
isPreferredSupport = true | yes | -| [codeAction/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeAction_resolve) | no | | | -| [codeLens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeLens) | yes | resolveProvider = false | да | -| [codeLens/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_resolve) | no | | | -| [codeLens/refresh](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_refresh) | no | | | -| [documentLink](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentLink) | yes | Displaying hyperlinks to diagnostics documentation.
tooltipSupport = true
resolveProvider = false | yes | -| [documentLink/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#documentLink_resolve) | no | | | -| [documentColor](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentColor) | yes | | | -| [colorPresentation](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_colorPresentation) | yes | | | -| [formatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_formatting) | yes | | | -| [rangeFormatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_rangeFormatting) | yes | | | -| [onTypeFormatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_onTypeFormatting) | no | | | -| [rename](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_rename) | yes | | | -| [prepareRename](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareRename) | yes | | | -| [foldingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_foldingRange) | yes | | | -| [selectionRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_selectionRange) | yes | | | -| [prepareCallHierarchy](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareCallHierarchy) | yes | | | -| [callHierarchy/incomingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_incomingCalls) | yes | | | -| [callHierarchy/outgoingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_outgoingCalls) | yes | | | -| [semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | no | | | -| [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | no | | | -| [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | no | | | + | Operation | Supported | Comment | Configurable? | + | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | + | [publishDiagnostics](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_publishDiagnostics) | yes | tagSupport = true
versionSupport = true
[diagnostics](./diagnostics/index.md) | yes | + | [completion](https://github.com/1c-syntax/bsl-language-server/blob/develop/docs/diagnostics/index.md) | no | resolveProvider = false | | + | [completionItem/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#completionItem_resolve) | no | | | + | [hover](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_hover) | yes | contentFormat = MarkupContent | | + | [signatureHelp](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_signatureHelp) | no | | | + | [declaration](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_declaration) | no | not applicable in 1C:Enterprise | | + | [definition](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_definition) | yes | linkSupport = true | | + | [typeDefinition](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_typeDefinition) | no | | | + | [implementation](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_implementation) | no | not applicable in 1C:Enterprise | | + | [references](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references) | yes | | | + | [documentHighlight](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentHighlight) | no | | | + | [documentSymbol](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentSymbol) | yes | hierarchicalDocumentSymbolSupport = true | | + | [codeAction](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction) | yes | codeActionKinds = ? (see [#1433](https://github.com/1c-syntax/bsl-language-server/issues/1433))
isPreferredSupport = true | yes | + | [codeAction/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeAction_resolve) | no | | | + | [codeLens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeLens) | yes | resolveProvider = false | yes | + | [codeLens/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_resolve) | yes | | | + | [codeLens/refresh](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_refresh) | yes | | | + | [documentLink](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentLink) | yes | Displaying hyperlinks to diagnostics documentation.
tooltipSupport = true
resolveProvider = false | yes | + | [documentLink/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#documentLink_resolve) | no | | | + | [documentColor](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentColor) | yes | | | + | [colorPresentation](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_colorPresentation) | yes | | | + | [formatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_formatting) | yes | | | + | [rangeFormatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_rangeFormatting) | yes | | | + | [onTypeFormatting](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_onTypeFormatting) | no | | | + | [rename](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_rename) | yes | | | + | [prepareRename](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareRename) | yes | | | + | [foldingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_foldingRange) | yes | | | + | [selectionRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_selectionRange) | yes | | | + | [prepareCallHierarchy](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareCallHierarchy) | yes | | | + | [callHierarchy/incomingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_incomingCalls) | yes | | | + | [callHierarchy/outgoingCalls](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_outgoingCalls) | yes | | | + | [semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | no | | | + | [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | no | | | + | [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | no | | | @@ -127,16 +128,60 @@ Usage: bsl-language-server [-h] [-c=] [COMMAND [ARGS]] Path to language server configuration file -h, --help Show this help message and exit Commands: - analyze, -a, --analyze Run analysis and get diagnostic info - format, -f, --format Format files in source directory - version, -v, --version Print version - lsp, --lsp LSP server mode (default) + analyze, -a, --analyze Run analysis and get diagnostic info + format, -f, --format Format files in source directory + version, -v, --version Print version + lsp, --lsp LSP server mode (default) + websocket, -w, --websocket Websocket server mode ``` Starting BSL Language Server in standard mode will run the Language Server communicating via [LSP]([language server protocol](https://microsoft.github.io/language-server-protocol/)). stdin and stdout are used for communication. By default diagnostics texts are displayed in Russian. To switch the diagnostics text language you need to set parameter `language` in configuration file or raise an event `workspace/didChangeConfiguration`: +```json +{ + "language": "en" +} +``` + + + +## Run in websocket mode + +By default, interaction with the server goes through standard input / output streams. +But you can run BSL Language Server with a built-in web server and interact with it via websocket. + +To do this, start the BSL Language Server with the `--websocket` or `-w` option: + +```sh +Usage: bsl-language-server websocket [-h] [--app.websocket.lsp-path=] + [-c=] [--server.port=] +Websocket server mode + --app.websocket.lsp-path= + Path to LSP endpoint. Default is /lsp + -c, --configuration= Path to language server configuration file + -h, --help Show this help message and exit + --server.port= Port to listen. Default is 8025 +``` + +Once started, BSL Language Server will be available at `ws://localhost:8025/lsp`. + +To redefine the port to the LSP server, you must use the `--server.port` option and the port number. +To redefine the path to the LSP server, you must use the `--app.websocket.lsp-path` option and a path starting with `/`. + +An example of running BSL Language Server in websocket mode with port 8080: + +```sh +java -jar bsl-language-server.jar --websocket --server.port=8080 +``` + +> For large projects, it is recommended to specify the -Xmx parameter, which is responsible for the RAM limit for the java process. The amount of allocated memory depends on the size of the analyzed codebase. + +```sh +java -Xmx4g -jar bsl-language-server.jar ... other parameters +``` + ## Run in analyzer mode From 7e843a5ae448b2ab970f18092078ecb0592635eb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Mar 2023 12:36:44 +0300 Subject: [PATCH 131/595] 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 132/595] 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 133/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=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, From 6106f5b9e609abe798a96cd14fc47b00973bd118 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Mar 2023 14:57:12 +0300 Subject: [PATCH 134/595] javadoc --- .../bsl/languageserver/utils/MdoReferences.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java index a232aee2ff9..f9efdf859c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java @@ -26,9 +26,19 @@ import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import lombok.experimental.UtilityClass; +/** + * Класс с методами-утилитами для MdoReference. + */ @UtilityClass public class MdoReferences { + /** + * Получить mdoRef в языке конфигурации + * + * @param documentContext the document context + * @param mdo the mdo + * @return the locale mdoRef + */ public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { final var mdoReference = mdo.getMdoReference(); if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { @@ -37,6 +47,13 @@ public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { return mdoReference.getMdoRefRu(); } + /** + * Получить имя родителя метаданного в языке конфигурации. + * + * @param documentContext the document context + * @param mdo the mdo + * @return the locale owner mdo name + */ public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); return names[0].concat(".").concat(names[1]); From faef8aa6ae3e7661e3c77e26b0cdc129d0c483fb Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 12:42:42 +0300 Subject: [PATCH 135/595] =?UTF-8?q?=D0=9D=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20javadoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/CommandArguments.java | 17 +++++++++ .../commands/CommandSupplier.java | 36 ++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java index 28fd3417df4..4e66dff0579 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java @@ -29,9 +29,26 @@ import static com.fasterxml.jackson.annotation.JsonTypeInfo.As.EXISTING_PROPERTY; import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME; +/** + * Интерфейс DTO для хранения промежуточных данных команд между созданием команды и ее выполнением. + */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = NAME, include = EXISTING_PROPERTY, property = "id", visible = true) public interface CommandArguments { + /** + * URI документа, с которым связана команда. + * + * @return URI документа, с которым связана команда. + */ URI getUri(); + + /** + * Идентификатор команды. + *

+ * Должен совпадать с {@link CommandSupplier#getId()} сапплаера, + * создающего команду. + * + * @return Идентификатор команды. + */ String getId(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 72d434c36b6..5b692c95fcb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -26,8 +26,25 @@ import java.beans.Introspector; import java.util.Optional; +/** + * Базовый интерфейс для наполнения {@link com.github._1c_syntax.bsl.languageserver.providers.CommandProvider} + * данными о доступных в документе командах. + *

+ * Конкретный сапплаер может расширить состав данных, передаваемых в аргументах команды, доопределив дата-класс, + * наследующий {@link CommandArguments}, и указав его тип в качестве типа-параметра класса. + * + * @param Конкретный тип для аргументов команды. + */ + public interface CommandSupplier { + /** + * Идентификатор сапплаера. + *

+ * Идентификатор в аргументах команды должен совпадать с данным идентификатором. + * + * @return Идентификатор сапплаера. + */ default String getId() { String simpleName = getClass().getSimpleName(); if (simpleName.endsWith("CommandSupplier")) { @@ -42,10 +59,27 @@ default Command createCommand(String title) { return new Command(title, getId()); } + /** + * Получить класс для аргументов команды. + * + * @return Конкретный класс для аргументов команды. + */ Class getCommandArgumentsClass(); + /** + * Выполнить серверную команду. + * + * @param arguments Аргументы команды. + * + * @return Результат выполнения команды. + */ Optional execute(T arguments); - + + /** + * Флаг, показывающий необходимость обновить линзы после выполнения команды. + * + * @return Флаг, показывающий необходимость обновить линзы после выполнения команды. + */ default boolean refreshCodeLensesAfterExecuteCommand() { return false; } From b9e3f17c9ae7bf67946340f311b186f31ba0ea74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 09:56:59 +0000 Subject: [PATCH 136/595] build(deps): bump peaceiris/actions-gh-pages from 3.9.2 to 3.9.3 Bumps [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) from 3.9.2 to 3.9.3. - [Release notes](https://github.com/peaceiris/actions-gh-pages/releases) - [Changelog](https://github.com/peaceiris/actions-gh-pages/blob/main/CHANGELOG.md) - [Commits](https://github.com/peaceiris/actions-gh-pages/compare/v3.9.2...v3.9.3) --- updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/gh-pages.yml | 2 +- .github/workflows/qodana.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index f1a20b5d016..50423a636b0 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -145,7 +145,7 @@ jobs: cp -R temp/site/. public/dev/en - name: Deploy - uses: peaceiris/actions-gh-pages@v3.9.2 + uses: peaceiris/actions-gh-pages@v3.9.3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_branch: gh-pages diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 7a72077ff3c..e7c8f9cae9d 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -28,7 +28,7 @@ jobs: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json - name: Deploy to GitHub Pages if: github.event_name == 'push' - uses: peaceiris/actions-gh-pages@v3.9.2 + uses: peaceiris/actions-gh-pages@v3.9.3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ runner.temp }}/qodana/results/report From c39d5c68013964175f6ef63f124f72642509bf00 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 13:10:24 +0300 Subject: [PATCH 137/595] License --- .../TransferringParametersBetweenClientAndServerDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 873dcacc4b2..a891f1804f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 1ce5232d4f32042f8e0f964bace968c84702b9c2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 14:13:24 +0300 Subject: [PATCH 138/595] License --- ...nsferringParametersBetweenClientAndServerDiagnosticTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java index 7b54753f556..7bbab1e4d24 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 09edf252e800e30a135b4187fe382fb54ddb33ef Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 15:49:21 +0300 Subject: [PATCH 139/595] =?UTF-8?q?=D0=95=D1=89=D0=B5=20javadoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/CommandsConfiguration.java | 10 +++++-- .../commands/infrastructure/package-info.java | 30 +++++++++++++++++++ .../languageserver/commands/package-info.java | 30 +++++++++++++++++++ .../providers/CommandProvider.java | 5 ++++ 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java index b011bfb24ff..a3c85772a78 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java @@ -38,12 +38,18 @@ @Configuration public class CommandsConfiguration { + /** + * Получить список сапплаеров команд в разрезе их идентификаторов. + * + * @param commandSuppliers Плоский список сапплаеров. + * @return Список сапплаеров линз в разрезе их идентификаторов. + */ @Bean @SuppressWarnings("unchecked") public Map> commandSuppliersById( - Collection> codeLensSuppliers + Collection> commandSuppliers ) { - return codeLensSuppliers.stream() + return commandSuppliers.stream() .map(commandSupplier -> (CommandSupplier) commandSupplier) .collect(Collectors.toMap(CommandSupplier::getId, Function.identity())); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java new file mode 100644 index 00000000000..fc7a54028c1 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Spring-специфичные классы для настройки внутренней инфраструктуры + * пакета {@link com.github._1c_syntax.bsl.languageserver.commands}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.commands.infrastructure; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java new file mode 100644 index 00000000000..748bdbca505 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Пакет предназначен для реализации команд, + * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.CommandProvider}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.commands; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index f31dc83dc20..c60c20d120c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -33,6 +33,11 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; +/** + * Провайдер, обрабатывающий запросы {@code workspace/executeCommans}. + * + * @see Execute a command specification. + */ @Component @RequiredArgsConstructor public class CommandProvider { From 237acce04a28cbba51bc7b120533997e4e3ef4e9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 15:54:07 +0300 Subject: [PATCH 140/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20javadoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/CommandSupplier.java | 6 +++++ .../commands/DefaultCommandArguments.java | 3 +++ .../databind/ObjectMapperConfiguration.java | 6 ++--- .../providers/CommandProvider.java | 25 +++++++++++++++++-- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 5b692c95fcb..7fe17737afa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -55,6 +55,12 @@ default String getId() { return simpleName; } + /** + * Создать DTO команды. + * + * @param title Заголовок команды. + * @return Команда с заполненными заголовком и идентификатором команды. + */ default Command createCommand(String title) { return new Command(title, getId()); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java index 4857f939a28..2b0fc89b5e5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java @@ -28,6 +28,9 @@ import java.net.URI; +/** + * DTO для хранения промежуточных данных команд между созданием команды и ее выполнением. + */ @Value @NonFinal public class DefaultCommandArguments implements CommandArguments { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java index ab35bef99d0..3e40bc52c03 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java @@ -32,7 +32,7 @@ import org.springframework.context.annotation.Configuration; import java.util.ArrayList; -import java.util.List; +import java.util.Collection; import java.util.stream.Collectors; @Configuration @@ -40,8 +40,8 @@ public class ObjectMapperConfiguration { @Bean public ObjectMapper objectMapper( - List> codeLensResolvers, - List> commandSuppliers + Collection> codeLensResolvers, + Collection> commandSuppliers ) { var namedTypes = new ArrayList(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index c60c20d120c..f40dd66e248 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -46,6 +46,13 @@ public class CommandProvider { private final ObjectMapper objectMapper; private final CodeLensProvider codeLensProvider; + /** + * Выполнить серверную команду. + * + * @param arguments Аргументы команды. + * + * @return Результат выполнения команды. + */ public Object executeCommand(CommandArguments arguments) { var commandId = arguments.getId(); @@ -67,13 +74,27 @@ public Object executeCommand(CommandArguments arguments) { return result; } + /** + * Список идентификаторов известных серверных команд. + * + * @return Список идентификаторов известных серверных команд. + */ public List getCommandIds() { return List.copyOf(commandSuppliersById.keySet()); } + /** + * Извлечь аргументы команды из параметров входящего запроса. + * + * @param executeCommandParams Параметры запроса workspace/executeCommand. + * @return Аргументы команды. + * + * @throws RuntimeException Выбрасывает исключение, если параметры входящего запроса не содержат + * данных для вычисления аргументов команды. + */ @SneakyThrows - public CommandArguments extractArguments(ExecuteCommandParams codeLens) { - var rawArguments = codeLens.getArguments(); + public CommandArguments extractArguments(ExecuteCommandParams executeCommandParams) { + var rawArguments = executeCommandParams.getArguments(); if (rawArguments.isEmpty()) { throw new RuntimeException("Command arguments is empty"); From 93629e2ae75ad83155b4f20d5cfc356b27a6b19e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 16:55:34 +0300 Subject: [PATCH 141/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/CommandProviderTest.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java new file mode 100644 index 00000000000..106054ab458 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -0,0 +1,83 @@ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; +import com.github._1c_syntax.bsl.languageserver.commands.DefaultCommandArguments; +import org.eclipse.lsp4j.ExecuteCommandParams; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +import java.net.URI; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class CommandProviderTest { + + @Autowired + private CommandProvider commandProvider; + + @Test + void commandsIdsContainsTestCommand() { + // given + // TestCommandSupplier test component. + + // when + var commandIds = commandProvider.getCommandIds(); + + // then + assertThat(commandIds).contains("test"); + } + + @Test + void executeCommandArgumentsExtractedCorrectly() { + // given + var rawCommandArguments = "{ \"id\": \"test\", \"uri\": \"someUri\"}"; + var params = new ExecuteCommandParams("Some command", List.of(rawCommandArguments)); + + // when + var commandArguments = commandProvider.extractArguments(params); + + // then + assertThat(commandArguments) + .isOfAnyClassIn(DefaultCommandArguments.class) + ; + } + + @Test + void commandExecutesCorrectly() { + // given + var commandArguments = new DefaultCommandArguments(URI.create("fake:///fake-uri"), "test"); + + // when + var result = commandProvider.executeCommand(commandArguments); + + // then + assertThat(result) + .isEqualTo(1); + } + + @TestConfiguration + static class Configuration { + @Bean + CommandSupplier commandSupplier() { + return new TestCommandSupplier(); + } + } + + static class TestCommandSupplier implements CommandSupplier { + @Override + public Class getCommandArgumentsClass() { + return DefaultCommandArguments.class; + } + + @Override + public Optional execute(DefaultCommandArguments arguments) { + return Optional.of(1); + } + } +} \ No newline at end of file From a1dc3567d0969802b4fdac49a203861a4c058602 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 31 Mar 2023 17:15:50 +0300 Subject: [PATCH 142/595] Update CommandProviderTest.java --- .../providers/CommandProviderTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java index 106054ab458..cb8fe47d11f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -1,3 +1,24 @@ +/* +  * This file is a part of BSL Language Server. +  * +  * Copyright (c) 2018-2023 +  * Alexey Sosnoviy , Nikita Fedkin  and contributors +  * +  * SPDX-License-Identifier: LGPL-3.0-or-later +  * +  * BSL Language Server is free software; you can redistribute it and/or +  * modify it under the terms of the GNU Lesser General Public +  * License as published by the Free Software Foundation; either +  * version 3.0 of the License, or (at your option) any later version. +  * +  * BSL Language Server is distributed in the hope that it will be useful, +  * but WITHOUT ANY WARRANTY; without even the implied warranty of +  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  * Lesser General Public License for more details. +  * +  * You should have received a copy of the GNU Lesser General Public +  * License along with BSL Language Server. +  */ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; From 491d4861fe4b37c9395c7f27296bd23017d6506a Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Fri, 31 Mar 2023 18:26:23 +0300 Subject: [PATCH 143/595] Fix formatting --- .../providers/CommandProviderTest.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java index cb8fe47d11f..6d61f0cdf78 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -1,24 +1,24 @@ /* -  * This file is a part of BSL Language Server. -  * -  * Copyright (c) 2018-2023 -  * Alexey Sosnoviy , Nikita Fedkin  and contributors -  * -  * SPDX-License-Identifier: LGPL-3.0-or-later -  * -  * BSL Language Server is free software; you can redistribute it and/or -  * modify it under the terms of the GNU Lesser General Public -  * License as published by the Free Software Foundation; either -  * version 3.0 of the License, or (at your option) any later version. -  * -  * BSL Language Server is distributed in the hope that it will be useful, -  * but WITHOUT ANY WARRANTY; without even the implied warranty of -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -  * Lesser General Public License for more details. -  * -  * You should have received a copy of the GNU Lesser General Public -  * License along with BSL Language Server. -  */ + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin  and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; From feae5606f0de15762dac910e8a0af6815bfbba38 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 31 Mar 2023 19:56:49 +0300 Subject: [PATCH 144/595] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=8F=D1=8E=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=BE=20=D0=B8=D0=BC=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit по замечанию в ПР --- .../_1c_syntax/bsl/languageserver/utils/MdoReferences.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java index f9efdf859c3..40b4bd45608 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java @@ -56,6 +56,9 @@ public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { */ public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); + if (names.length <= 1){ + return ""; + } return names[0].concat(".").concat(names[1]); } From 9cabad8f004a4811e3670d19985054741350bd99 Mon Sep 17 00:00:00 2001 From: olegtymko Date: Sat, 1 Apr 2023 10:46:54 +0700 Subject: [PATCH 145/595] =?UTF-8?q?fix(core):=20=D0=BF=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=BA=20=D0=BB=D0=B8=D1=86=D0=B5=D0=BD=D0=B7=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/CommandProviderTest.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java index 6d61f0cdf78..57529f1cdd6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -1,24 +1,24 @@ -/* - * This file is a part of BSL Language Server. - * - * Copyright (c) 2018-2023 - * Alexey Sosnoviy , Nikita Fedkin  and contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - * - * BSL Language Server is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * BSL Language Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BSL Language Server. - */ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; From 98cd85064daea476d0b36e11b8b85d645cdb4a9e Mon Sep 17 00:00:00 2001 From: olegtymko Date: Sat, 1 Apr 2023 12:21:53 +0700 Subject: [PATCH 146/595] =?UTF-8?q?fix(build):=20=D0=A1=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=20j20,=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=20=D1=81=D0=BA?= =?UTF-8?q?=D1=80=D0=B8=D0=BF=D1=82=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20jpackage=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/scripts/build-jpackage.py | 73 +++++++++++++++++++++++++++++++ .github/workflows/gradle.yml | 2 +- .github/workflows/release.yml | 62 ++++---------------------- 3 files changed, 83 insertions(+), 54 deletions(-) create mode 100644 .github/scripts/build-jpackage.py diff --git a/.github/scripts/build-jpackage.py b/.github/scripts/build-jpackage.py new file mode 100644 index 00000000000..4c437e61bad --- /dev/null +++ b/.github/scripts/build-jpackage.py @@ -0,0 +1,73 @@ +import ntpath +import os +import platform +import re +import shutil +import sys + + +def build_image(base_dir, image_prefix, executable_file): + path_to_jar = get_bsl_ls_jar(base_dir) + if path_to_jar is None: + exit() + + cmd_args = [ + 'jpackage', + '--name', 'bsl-language-server', + '--input', 'build/libs', + '--main-jar', path_to_jar] + + if is_windows(): + cmd_args.append('--win-console') + + cmd_args.append('--type') + cmd_args.append('app-image') + cmd_args.append('--java-options') + cmd_args.append('-Xmx2g') + + cmd = ' '.join(cmd_args) + os.system(cmd) + + shutil.make_archive( + "bsl-language-server_" + image_prefix, + 'zip', + './', + executable_file) + + +def is_windows(): + return platform.system() == 'Windows' + + +def get_base_dir(): + if is_windows(): + base_dir = os.getcwd() + "\\build\\libs" + else: + base_dir = os.getcwd() + "/build/libs" + return base_dir + + +def get_bsl_ls_jar(dir_name): + pattern = r"bsl.+\.jar" + names = os.listdir(dir_name) + for name in names: + fullname = os.path.join(dir_name, name) + if os.path.isfile(fullname) and re.search(pattern, fullname) and fullname.find('exec.jar') != -1: + return ntpath.basename(fullname) + + return None + + +if __name__ == "__main__": + # directory with build project + arg_base_dir = get_base_dir() + + # image prefix: `win`, `nic` or `mac` + arg_image_prefix = sys.argv[1] + + # executable file: `bsl-language-server` or `bsl-language-server.app` + arg_executable_file = sys.argv[2] + + build_image(base_dir=get_base_dir(), + image_prefix=sys.argv[1], + executable_file=sys.argv[2]) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d791c53625b..980ea7678b1 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - java_version: ['11', '17'] + java_version: ['11', '17', '20'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5eb2030f5d1..9e6e4fd2816 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,80 +28,36 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v3 + uses: actions/checkout@v3 + - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: 17 + java-version: 20 distribution: 'temurin' + - name: Build bootJar with Gradle run: ./gradlew check bootJar - - name: Build jpackage app-image - run: | - import os - import platform - import re - import ntpath - import shutil - - pattern = r"bsl.+\.jar" - thisPlatform = platform.system(); - isWindows = False - if thisPlatform == 'Windows': - isWindows = True - - if isWindows: - dirName = os.getcwd() + "\\build\\libs" - else: - dirName = os.getcwd() + "/build/libs" - - def start(): - fullname = get_bslls_jar(dirName) - if (fullname == None): - exit - - cmdArgs = ['jpackage'] - cmdArgs.append('--name') - cmdArgs.append('bsl-language-server') - cmdArgs.append('--input') - cmdArgs.append('build/libs') - cmdArgs.append('--main-jar') - cmdArgs.append(fullname) - if isWindows: - cmdArgs.append('--win-console') - cmdArgs.append('--type') - cmdArgs.append('app-image') - cmdArgs.append('--java-options') - cmdArgs.append('-Xmx2g') - cmd = ' '.join(cmdArgs) - os.system(cmd) - - shutil.make_archive("bsl-language-server_" + "${{ matrix.prefix }}", 'zip', './',"${{ matrix.app-image }}") + - name: Build jpackage application image + run: python .github/scripts/build-jpackage.py ${{ matrix.prefix }} ${{ matrix.app-image }} - def get_bslls_jar(dir): - names = os.listdir(dir) - for name in names: - fullname = os.path.join(dir, name) - if os.path.isfile(fullname) and re.search(pattern, fullname) and fullname.find('exec.jar') != -1: - return ntpath.basename(fullname) - return None - - start() - shell: python - name: Upload artifact uses: actions/upload-artifact@v3 with: name: bsl-language-server_${{ matrix.prefix }}.zip path: ./${{ matrix.app-image }} + - name: Upload assets to release uses: AButler/upload-release-assets@v2.0 with: files: './bsl-language-server_${{ matrix.prefix }}.zip' repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build with Gradle if: matrix.prefix == 'nix' run: ./gradlew build + - name: Upload jar to release if: matrix.prefix == 'nix' uses: AButler/upload-release-assets@v2.0 From ab1e87c4ec2ffc5c3167635e89613b17c5d83d22 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 21:43:33 +0300 Subject: [PATCH 147/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/codelenses/CodeLensSupplier.java | 6 ++++-- .../bsl/languageserver/commands/CommandSupplier.java | 8 +++++--- .../bsl/languageserver/providers/CommandProvider.java | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java index dbba0daa334..12366d5af64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java @@ -46,6 +46,8 @@ */ public interface CodeLensSupplier { + String CODE_LENS_SUPPLIER_SUFFIX = "CodeLensSupplier"; + /** * Идентификатор сапплаера. Если линза содержит поле {@link CodeLens#getData()}, * идентификатор в данных линзы должен совпадать с данным идентификатором. @@ -54,8 +56,8 @@ public interface CodeLensSupplier { */ default String getId() { String simpleName = getClass().getSimpleName(); - if (simpleName.endsWith("CodeLensSupplier")) { - simpleName = simpleName.substring(0, simpleName.length() - "CodeLensSupplier".length()); + if (simpleName.endsWith(CODE_LENS_SUPPLIER_SUFFIX)) { + simpleName = simpleName.substring(0, simpleName.length() - CODE_LENS_SUPPLIER_SUFFIX.length()); simpleName = Introspector.decapitalize(simpleName); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 7fe17737afa..97c0091149c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -38,6 +38,8 @@ public interface CommandSupplier { + String COMMAND_SUPPLIER_SUFFIX = "CommandSupplier"; + /** * Идентификатор сапплаера. *

@@ -47,8 +49,8 @@ public interface CommandSupplier { */ default String getId() { String simpleName = getClass().getSimpleName(); - if (simpleName.endsWith("CommandSupplier")) { - simpleName = simpleName.substring(0, simpleName.length() - "CommandSupplier".length()); + if (simpleName.endsWith(COMMAND_SUPPLIER_SUFFIX)) { + simpleName = simpleName.substring(0, simpleName.length() - COMMAND_SUPPLIER_SUFFIX.length()); simpleName = Introspector.decapitalize(simpleName); } @@ -86,7 +88,7 @@ default Command createCommand(String title) { * * @return Флаг, показывающий необходимость обновить линзы после выполнения команды. */ - default boolean refreshCodeLensesAfterExecuteCommand() { + default boolean needRefreshCodeLensesAfterExecuteCommand() { return false; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index f40dd66e248..a864ec9d4ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -66,7 +66,7 @@ public Object executeCommand(CommandArguments arguments) { .orElse(null); CompletableFuture.runAsync(() -> { - if (commandSupplier.refreshCodeLensesAfterExecuteCommand()) { + if (commandSupplier.needRefreshCodeLensesAfterExecuteCommand()) { codeLensProvider.refreshCodeLenses(); } }); From 986ab2c8a153512a589798bc767664b7132d366e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 21:57:40 +0300 Subject: [PATCH 148/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D0=BD=D1=8D=D0=B9=D0=BC=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractToggleComplexityInlayHintsCommandSupplier.java | 2 +- .../bsl/languageserver/commands/CommandSupplier.java | 7 ++++++- .../bsl/languageserver/providers/CommandProvider.java | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java index 36887b3c2f6..5b99f5fe66b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -50,7 +50,7 @@ public Optional execute(ToggleComplexityInlayHintsCommandArguments argum } @Override - public boolean refreshInlayHintsAfterExecuteCommand() { + public boolean needRefreshInlayHintsAfterExecuteCommand() { return true; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 4763d7d4433..ec1632afeb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -83,7 +83,12 @@ default Command createCommand(String title) { */ Optional execute(T arguments); - default boolean refreshInlayHintsAfterExecuteCommand() { + /** + * Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + * + * @return Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + */ + default boolean needRefreshInlayHintsAfterExecuteCommand() { return false; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index c8496cc2f4c..95d692c6cb5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -68,7 +68,7 @@ public Object executeCommand(CommandArguments arguments) { .orElse(null); CompletableFuture.runAsync(() -> { - if (commandSupplier.refreshInlayHintsAfterExecuteCommand()) { + if (commandSupplier.needRefreshInlayHintsAfterExecuteCommand()) { inlayHintProvider.refreshInlayHints(); } if (commandSupplier.needRefreshCodeLensesAfterExecuteCommand()) { From 7d209fef53b1cef4001d499ff105928dfe854748 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:04:40 +0300 Subject: [PATCH 149/595] inlayHints api --- .../bsl/languageserver/BSLLanguageServer.java | 9 ++ .../BSLTextDocumentService.java | 14 +++ .../commands/CommandSupplier.java | 9 ++ .../inlayhints/InlayHintSupplier.java | 33 ++++++ .../providers/CommandProvider.java | 5 + .../providers/InlayHintProvider.java | 68 +++++++++++ .../providers/InlayHintProviderTest.java | 66 +++++++++++ src/test/resources/providers/inlayHints.bsl | 106 ++++++++++++++++++ 8 files changed, 310 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java create mode 100644 src/test/resources/providers/inlayHints.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index d6567b1ad3a..b265faba0b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -46,6 +46,7 @@ import org.eclipse.lsp4j.HoverOptions; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; +import org.eclipse.lsp4j.InlayHintRegistrationOptions; import org.eclipse.lsp4j.ReferenceOptions; import org.eclipse.lsp4j.RenameCapabilities; import org.eclipse.lsp4j.RenameOptions; @@ -111,6 +112,7 @@ public CompletableFuture initialize(InitializeParams params) { capabilities.setSelectionRangeProvider(getSelectionRangeProvider()); capabilities.setColorProvider(getColorProvider()); capabilities.setRenameProvider(getRenameProvider(params)); + capabilities.setInlayHintProvider(getInlayHintProvider()); capabilities.setExecuteCommandProvider(getExecuteCommandProvider()); var result = new InitializeResult(capabilities, serverInfo); @@ -312,6 +314,13 @@ private static Boolean getRenamePrepareSupport(InitializeParams params) { .orElse(false); } + private static InlayHintRegistrationOptions getInlayHintProvider() { + var inlayHintOptions = new InlayHintRegistrationOptions(); + inlayHintOptions.setResolveProvider(Boolean.FALSE); + inlayHintOptions.setWorkDoneProgress(Boolean.FALSE); + return inlayHintOptions; + } + private ExecuteCommandOptions getExecuteCommandProvider() { var executeCommandOptions = new ExecuteCommandOptions(); executeCommandOptions.setCommands(commandProvider.getCommandIds()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 458930f9435..dad9ec9b4ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -39,6 +39,7 @@ import com.github._1c_syntax.bsl.languageserver.providers.FoldingRangeProvider; import com.github._1c_syntax.bsl.languageserver.providers.FormatProvider; import com.github._1c_syntax.bsl.languageserver.providers.HoverProvider; +import com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider; import com.github._1c_syntax.bsl.languageserver.providers.ReferencesProvider; import com.github._1c_syntax.bsl.languageserver.providers.RenameProvider; import com.github._1c_syntax.bsl.languageserver.providers.SelectionRangeProvider; @@ -74,6 +75,8 @@ import org.eclipse.lsp4j.FoldingRangeRequestParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.LocationLink; import org.eclipse.lsp4j.PrepareRenameDefaultBehavior; @@ -118,6 +121,7 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final SelectionRangeProvider selectionRangeProvider; private final ColorProvider colorProvider; private final RenameProvider renameProvider; + private final InlayHintProvider inlayHintProvider; @Override public CompletableFuture hover(HoverParams params) { @@ -304,6 +308,16 @@ public CompletableFuture> colorPresentation(ColorPresent return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params)); } + @Override + public CompletableFuture> inlayHint(InlayHintParams params) { + var documentContext = context.getDocument(params.getTextDocument().getUri()); + if (documentContext == null) { + return CompletableFuture.completedFuture(Collections.emptyList()); + } + + return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params)); + } + @Override public void didOpen(DidOpenTextDocumentParams params) { var textDocumentItem = params.getTextDocument(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 97c0091149c..ec1632afeb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -83,6 +83,15 @@ default Command createCommand(String title) { */ Optional execute(T arguments); + /** + * Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + * + * @return Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + */ + default boolean needRefreshInlayHintsAfterExecuteCommand() { + return false; + } + /** * Флаг, показывающий необходимость обновить линзы после выполнения команды. * diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java new file mode 100644 index 00000000000..ced342f21eb --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -0,0 +1,33 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; + +import java.util.List; + +public interface InlayHintSupplier { + + List getInlayHints(DocumentContext documentContext, InlayHintParams params); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index a864ec9d4ee..c2e3efc1991 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -44,7 +44,9 @@ public class CommandProvider { private final Map> commandSuppliersById; private final ObjectMapper objectMapper; + private final CodeLensProvider codeLensProvider; + private final InlayHintProvider inlayHintProvider; /** * Выполнить серверную команду. @@ -66,6 +68,9 @@ public Object executeCommand(CommandArguments arguments) { .orElse(null); CompletableFuture.runAsync(() -> { + if (commandSupplier.needRefreshInlayHintsAfterExecuteCommand()) { + inlayHintProvider.refreshInlayHints(); + } if (commandSupplier.needRefreshCodeLensesAfterExecuteCommand()) { codeLensProvider.refreshCodeLenses(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java new file mode 100644 index 00000000000..d30283dc91d --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -0,0 +1,68 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; +import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.ClientCapabilities; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.InlayHintWorkspaceCapabilities; +import org.eclipse.lsp4j.WorkspaceClientCapabilities; +import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class InlayHintProvider { + + private final Collection suppliers; + + private final ClientCapabilitiesHolder clientCapabilitiesHolder; + private final LanguageClientHolder clientHolder; + + public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { + return suppliers.stream() + .map(supplier -> supplier.getInlayHints(documentContext, params)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + public void refreshInlayHints() { + boolean refreshSupport = clientCapabilitiesHolder.getCapabilities() + .map(ClientCapabilities::getWorkspace) + .map(WorkspaceClientCapabilities::getInlayHint) + .map(InlayHintWorkspaceCapabilities::getRefreshSupport) + .orElse(Boolean.FALSE); + + if (refreshSupport) { + clientHolder.execIfConnected(LanguageClient::refreshInlayHints); + } + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java new file mode 100644 index 00000000000..98a9862a8be --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -0,0 +1,66 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class InlayHintProviderTest { + + @Autowired + private InlayHintProvider provider; + + private DocumentContext documentContext; + + @BeforeEach + void init() { + String filePath = "./src/test/resources/providers/inlayHints.bsl"; + documentContext = TestUtils.getDocumentContextFromFile(filePath); + } + + @Test + void getInlayHint() { + + // given + var params = new InlayHintParams(); + params.setTextDocument(new TextDocumentIdentifier(documentContext.getUri().toString())); + params.setRange(Ranges.create(documentContext.getAst())); + + // when + var inlayHints = provider.getInlayHint(documentContext, params); + + // then + assertThat(inlayHints).hasSizeGreaterThan(0); + } +} \ No newline at end of file diff --git a/src/test/resources/providers/inlayHints.bsl b/src/test/resources/providers/inlayHints.bsl new file mode 100644 index 00000000000..c72278111a2 --- /dev/null +++ b/src/test/resources/providers/inlayHints.bsl @@ -0,0 +1,106 @@ + +&AtClient +Procedure Player1HealthPlus1(Command) + ChangeHealth(Player1, Health1, 1); +EndProcedure + +&AtClient +Procedure Player1HealthPlus5(Command) + ChangeHealth(Player1, Health1, 5); +EndProcedure + +&AtClient +Procedure Player1HealthMinus1(Command) + ChangeHealth(Player1, Health1, -1); +EndProcedure + +&AtClient +Procedure Player1HealthMinus5(Command) + ChangeHealth(Player1, Health1, -5); +EndProcedure + +&AtClient +Procedure Player2HealthPlus1(Command) + ChangeHealth(Player2, Health2, 1); +EndProcedure + +&AtClient +Procedure Player2HealthPlus5(Command) + ChangeHealth(Player2, Health2, 5); +EndProcedure + +&AtClient +Procedure Player2HealthMinus1(Command) + ChangeHealth(Player2, Health2, -1); +EndProcedure + +&AtClient +Procedure Player2HealthMinus5(Command) + ChangeHealth(Player2, Health2, -5); +EndProcedure + +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + NewGameAtServer(True); +EndProcedure + +&AtClient +Procedure NewGame(Command) + NewGameAtServer(); +EndProcedure + +&AtServer +Procedure NewGameAtServer(FirstTime = False) + + Health1 = 20; + Health2 = 20; + + If FirstTime Then + Player1 = Catalogs.Players.Player1; + Player2 = Catalogs.Players.Player2; + + Deck1 = Catalogs.Decks.DefaultDeck; + Deck2 = Catalogs.Decks.DefaultDeck; + EndIf; + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = False; + ThisObject.ChildItems.Buttons.Enabled = True; + +EndProcedure + +&AtClient +Procedure ChangeHealth(Player, PlayersHealth, Amount) + + PlayersHealth = PlayersHealth + Amount; + + If PlayersHealth <= 0 Then + + // TODO: rewrite + PlayerWon = ?(Player = Player1, Player2, Player1); + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = True; + ThisObject.ChildItems.PlayerWon.Title = String(PlayerWon) + " won!"; + ThisObject.ChildItems.Buttons.Enabled = False; + + SaveGameStat(PlayerWon); + + EndIf; + +EndProcedure + +&AtServer +Procedure SaveGameStat(PlayerWon) + + NewRecord = InformationRegisters.GameStats.CreateRecordManager(); + NewRecord.Date = CurrentDate(); + NewRecord.Player1 = Player1; + NewRecord.Player2 = Player2; + NewRecord.Deck1 = Deck1; + NewRecord.Deck2 = Deck2; + NewRecord.Won = PlayerWon; + + NewRecord.Write(); + +EndProcedure From 6372e30f07b72a8ac0cdbfab938ba5f56e40fd0d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:16:27 +0300 Subject: [PATCH 150/595] javadoc --- .../inlayhints/InlayHintSupplier.java | 11 +++++++++++ .../providers/CodeLensProvider.java | 3 +++ .../providers/InlayHintProvider.java | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index ced342f21eb..8196a8fd650 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -27,7 +27,18 @@ import java.util.List; +/** + * Базовый интерфейс для наполнения {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + * данными о доступных в документе inlay hints. + */ public interface InlayHintSupplier { + /** + * Получить inlay hints, доступные в документе. + * + * @param documentContext Контекст документа, для которого надо рассчитать inlay hints. + * @param params Параметры запроса. + * @return Список inlay hints в документе. + */ List getInlayHints(DocumentContext documentContext, InlayHintParams params); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index d34cceb5cb4..96ef5789d49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -141,6 +141,9 @@ public CodeLensData extractData(CodeLens codeLens) { return objectMapper.readValue(rawCodeLensData.toString(), CodeLensData.class); } + /** + * Отправить запрос на обновление линз кода. + */ public void refreshCodeLenses() { boolean clientSupportsRefreshCodeLenses = clientCapabilitiesHolder.getCapabilities() .map(ClientCapabilities::getWorkspace) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index d30283dc91d..6ed93f09fca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -38,6 +38,12 @@ import java.util.List; import java.util.stream.Collectors; +/** + * Провайдер, обрабатывающий запросы {@code textDocument/inlayHint} и {@code inlayHint/resolve}. + * + * @see Inlay hint request. + * @see Inlay hint resolve request + */ @Component @RequiredArgsConstructor public class InlayHintProvider { @@ -47,6 +53,13 @@ public class InlayHintProvider { private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final LanguageClientHolder clientHolder; + /** + * Получить список inlay hints в документе. + * + * @param documentContext Документ, для которого запрашиваются inlay hints. + * @param params Параметры запроса. + * @return Список inlay hints в документе + */ public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { return suppliers.stream() .map(supplier -> supplier.getInlayHints(documentContext, params)) @@ -54,6 +67,9 @@ public List getInlayHint(DocumentContext documentContext, InlayHintPa .collect(Collectors.toList()); } + /** + * Отправить запрос на обновление inlay hints. + */ public void refreshInlayHints() { boolean refreshSupport = clientCapabilitiesHolder.getCapabilities() .map(ClientCapabilities::getWorkspace) From 3fcefc1892a081765162a7dbba6bcb19e618f4d6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:30:37 +0300 Subject: [PATCH 151/595] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20inlay=20hints,=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20inlayhint/refresh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageServerConfiguration.java | 7 +- .../inlayhints/InlayHintsOptions.java | 50 +++++++++++ .../inlayhints/package-info.java | 29 +++++++ .../inlayhints/InlayHintSupplier.java | 18 ++++ .../InlayHintsConfiguration.java | 87 +++++++++++++++++++ .../infrastructure/package-info.java | 30 +++++++ .../inlayhints/package-info.java | 30 +++++++ .../providers/InlayHintProvider.java | 30 ++++++- 8 files changed, 277 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 9c363681db5..57acef98816 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -30,6 +30,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.DiagnosticsOptions; import com.github._1c_syntax.bsl.languageserver.configuration.documentlink.DocumentLinkOptions; import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; +import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintsOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AccessLevel; @@ -90,6 +91,10 @@ public class LanguageServerConfiguration { @Setter(value = AccessLevel.NONE) private DocumentLinkOptions documentLinkOptions = new DocumentLinkOptions(); + @JsonProperty("inlayHint") + @Setter(value = AccessLevel.NONE) + private InlayHintsOptions inlayHintsOptions = new InlayHintsOptions(); + @JsonProperty("formatting") @Setter(value = AccessLevel.NONE) private FormattingOptions formattingOptions = new FormattingOptions(); @@ -217,7 +222,7 @@ private void loadConfigurationFile(File configurationFile) { private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); - PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); + PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); PropertyUtils.copyProperties(this.formattingOptions, configuration.formattingOptions); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java new file mode 100644 index 00000000000..8cdfc26b965 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java @@ -0,0 +1,50 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.configuration.inlayhints; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.github._1c_syntax.bsl.languageserver.configuration.databind.ParametersDeserializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.lsp4j.jsonrpc.messages.Either; + +import java.util.HashMap; +import java.util.Map; + +/** + * Корневой класс для настройки {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + */ +@Data +@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class InlayHintsOptions { + + /** + * Параметры сапплаеров inlay hints. + */ + @JsonDeserialize(using = ParametersDeserializer.class) + private Map>> parameters = new HashMap<>(); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java new file mode 100644 index 00000000000..038ac7ca0cb --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java @@ -0,0 +1,29 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Пакет содержит настройки {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.configuration.inlayhints; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index 8196a8fd650..7433be30fcd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -25,6 +25,7 @@ import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintParams; +import java.beans.Introspector; import java.util.List; /** @@ -33,6 +34,23 @@ */ public interface InlayHintSupplier { + String INLAY_HINT_SUPPLIER = "InlayHintSupplier"; + + /** + * Идентификатор сапплаера. + * + * @return Идентификатор сапплаера. + */ + default String getId() { + String simpleName = getClass().getSimpleName(); + if (simpleName.endsWith(INLAY_HINT_SUPPLIER)) { + simpleName = simpleName.substring(0, simpleName.length() - INLAY_HINT_SUPPLIER.length()); + simpleName = Introspector.decapitalize(simpleName); + } + + return simpleName; + } + /** * Получить inlay hints, доступные в документе. * diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java new file mode 100644 index 00000000000..0169461807e --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -0,0 +1,87 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints.infrastructure; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; + +/** + * Spring-конфигурация для определения бинов + * пакета {@link com.github._1c_syntax.bsl.languageserver.inlayhints}. + */ +@Configuration +public class InlayHintsConfiguration { + + /** + * Получить список сапплаеров inlay hints в разрезе их идентификаторов. + * + * @param inlayHintSuppliers Плоский список сапплаеров. + * @return Список сапплаеров inlay hints в разрезе их идентификаторов. + */ + @Bean + public Map inlayHintSuppliersById( + Collection inlayHintSuppliers + ) { + return inlayHintSuppliers.stream() + .collect(Collectors.toMap(InlayHintSupplier::getId, Function.identity())); + } + + /** + * Получить список активированных в данный момент сапплаеров inlay hints. + * + * @param configuration Конфигурация сервера. + * @param inlayHintSuppliersById Список сапплаеров inlay hints в разрезе из идентификаторов. + * @return Список активированных в данный момент сапплаеров inlay hints. + */ + @Bean + @Scope(SCOPE_PROTOTYPE) + public List enabledInlayHintSuppliers( + LanguageServerConfiguration configuration, + @Qualifier("inlayHintSuppliersById") Map inlayHintSuppliersById + ) { + var parameters = configuration.getInlayHintsOptions().getParameters(); + return inlayHintSuppliersById.values().stream() + .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) + .collect(Collectors.toList()); + } + + private static boolean supplierIsEnabled( + String supplierId, + Map>> parameters + ) { + var supplierConfig = parameters.getOrDefault(supplierId, Either.forLeft(true)); + return supplierConfig.isRight() || supplierConfig.getLeft(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java new file mode 100644 index 00000000000..cc7b3a31dd7 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Spring-специфичные классы для настройки внутренней инфраструктуры + * пакета {@link com.github._1c_syntax.bsl.languageserver.inlayhints}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.inlayhints.infrastructure; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java new file mode 100644 index 00000000000..1ad5dcd5c05 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Пакет предназначен для реализации inlay hints, + * предоставляемых {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index 6ed93f09fca..a53533b80f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -23,6 +23,7 @@ import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import lombok.RequiredArgsConstructor; @@ -32,8 +33,11 @@ import org.eclipse.lsp4j.InlayHintWorkspaceCapabilities; import org.eclipse.lsp4j.WorkspaceClientCapabilities; import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -48,11 +52,17 @@ @RequiredArgsConstructor public class InlayHintProvider { - private final Collection suppliers; - + private final ObjectProvider> enabledInlayHintSuppliersProvider; private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final LanguageClientHolder clientHolder; + private List enabledInlayHintSuppliers; + + @PostConstruct + protected void init() { + enabledInlayHintSuppliers = enabledInlayHintSuppliersProvider.getObject(); + } + /** * Получить список inlay hints в документе. * @@ -61,12 +71,26 @@ public class InlayHintProvider { * @return Список inlay hints в документе */ public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { - return suppliers.stream() + return enabledInlayHintSuppliers.stream() .map(supplier -> supplier.getInlayHints(documentContext, params)) .flatMap(Collection::stream) .collect(Collectors.toList()); } + /** + * Обработчик события {@link LanguageServerConfigurationChangedEvent}. + *

+ * В случае поддержки запроса подключенным клиентом инициирует запрос {@code workspace/inlayHint/refresh}. + * + * @param event Событие + */ + @EventListener + public void handleEvent(LanguageServerConfigurationChangedEvent event) { + enabledInlayHintSuppliers = enabledInlayHintSuppliersProvider.getObject(); + + refreshInlayHints(); + } + /** * Отправить запрос на обновление inlay hints. */ From 6a02106dc4423aa74f5b4bdefe0f9f5718536ee0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:41:33 +0300 Subject: [PATCH 152/595] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D1=83=D1=8E=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=83=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/InlayHintProviderTest.java | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index 98a9862a8be..e50d1b9717f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -22,20 +22,26 @@ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest -@CleanupContextBeforeClassAndAfterEachTestMethod class InlayHintProviderTest { @Autowired @@ -61,6 +67,31 @@ void getInlayHint() { var inlayHints = provider.getInlayHint(documentContext, params); // then - assertThat(inlayHints).hasSizeGreaterThan(0); + assertThat(inlayHints) + .contains(getTestHint()); + } + + private static InlayHint getTestHint() { + return new InlayHint(new Position(0, 0), Either.forLeft("test hint")); } + + @TestConfiguration + static class Configuration { + @Bean + InlayHintSupplier inlayHintSupplier() { + return new InlayHintSupplier() { + @Override + public String getId() { + return "test"; + } + + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var inlayHint = getTestHint(); + return List.of(inlayHint); + } + }; + } + } + } \ No newline at end of file From c2a7df44efdcfff6d2997bb866cbea6adc4e4338 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:51:08 +0300 Subject: [PATCH 153/595] =?UTF-8?q?=D0=9B=D0=B8=D1=86=D0=B5=D0=BD=D0=B7?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/inlayhints/InlayHintSupplier.java | 2 +- .../bsl/languageserver/providers/InlayHintProvider.java | 2 +- .../bsl/languageserver/providers/InlayHintProviderTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index 7433be30fcd..8895dbea30c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index a53533b80f5..f929ab8431c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index e50d1b9717f..d41ba95142b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 193634e703daac33a7cfd3a7e2e88a65bd687611 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 2 Apr 2023 12:04:18 +0300 Subject: [PATCH 154/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B9=20=D0=B7=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=B1=D0=B8=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InlayHintsConfiguration.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index 0169461807e..3f3ff1ec429 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -24,7 +24,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @@ -32,7 +31,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.function.Function; import java.util.stream.Collectors; import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; @@ -44,35 +42,21 @@ @Configuration public class InlayHintsConfiguration { - /** - * Получить список сапплаеров inlay hints в разрезе их идентификаторов. - * - * @param inlayHintSuppliers Плоский список сапплаеров. - * @return Список сапплаеров inlay hints в разрезе их идентификаторов. - */ - @Bean - public Map inlayHintSuppliersById( - Collection inlayHintSuppliers - ) { - return inlayHintSuppliers.stream() - .collect(Collectors.toMap(InlayHintSupplier::getId, Function.identity())); - } - /** * Получить список активированных в данный момент сапплаеров inlay hints. * - * @param configuration Конфигурация сервера. - * @param inlayHintSuppliersById Список сапплаеров inlay hints в разрезе из идентификаторов. + * @param configuration Конфигурация сервера. + * @param inlayHintSuppliers Список сапплаеров inlay hints в разрезе из идентификаторов. * @return Список активированных в данный момент сапплаеров inlay hints. */ @Bean @Scope(SCOPE_PROTOTYPE) public List enabledInlayHintSuppliers( LanguageServerConfiguration configuration, - @Qualifier("inlayHintSuppliersById") Map inlayHintSuppliersById + Collection inlayHintSuppliers ) { var parameters = configuration.getInlayHintsOptions().getParameters(); - return inlayHintSuppliersById.values().stream() + return inlayHintSuppliers.stream() .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) .collect(Collectors.toList()); } From 8ca179cd63d1140b39b96b94920451682cdea2d9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 2 Apr 2023 15:34:37 +0300 Subject: [PATCH 155/595] Update LanguageServerConfiguration.java --- .../configuration/LanguageServerConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 57acef98816..d460dc5d3ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -223,6 +223,7 @@ private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); + PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); PropertyUtils.copyProperties(this.formattingOptions, configuration.formattingOptions); From f08a15e583ea94f0a71c1b15c68d90a8fb646331 Mon Sep 17 00:00:00 2001 From: Aleksandr Ponkratov Date: Tue, 4 Apr 2023 11:12:38 +0300 Subject: [PATCH 156/595] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B8=D0=B0?= =?UTF-8?q?=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DeprecatedCurrentDate.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/diagnostics/DeprecatedCurrentDate.md b/docs/diagnostics/DeprecatedCurrentDate.md index b2f13115ff8..32a548fe1a4 100644 --- a/docs/diagnostics/DeprecatedCurrentDate.md +++ b/docs/diagnostics/DeprecatedCurrentDate.md @@ -3,15 +3,36 @@ ## Описание диагностики -Функция "ТекущаяДата" является устаревшей. Рекомендуется использовать функцию "ТекущаяДатаСеанса". +Конфигурации должны быть рассчитаны на работу в условиях, когда часовой пояс на серверном компьютере не совпадает с реальным часовым поясом пользователей информационной базы. Например, с сервером, расположенным в Москве, работают сотрудники компании из Владивостока, и при этом все операции в системе должны выполняться по местному времени (Владивостока). + +Такой сценарий работы часто востребован в клиент-серверных информационных базах и в прикладных решениях в модели сервиса (SaaS). + +Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса. + +В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться. + +При использовании Библиотеки стандартных подсистем рекомендуется использовать функцию ДатаСеанса общего модуля ОбщегоНазначенияКлиент. ## Примеры + +### На клиенте Неправильно: ```bsl ДатаОперации = ТекущаяДата(); ``` +Правильно: + +```bsl +ДатаОперации = ОбщегоНазначенияКлиент.ДатаСеанса(); +``` + +### На сервере + +```bsl +ДатаОперации = ТекущаяДата(); +``` Правильно: From 66532e0c508f4775400baf70439cff2ec26c0175 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 6 Apr 2023 22:38:25 +0300 Subject: [PATCH 157/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=81=D0=B0=D0=BF=D0=BF=D0=BB=D0=B0=D0=B5=D1=80?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D1=8F=D1=82=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4-=D0=BA?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D1=80=D0=B5=D0=B4=D0=B6=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/InlayHintProviderTest.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index d41ba95142b..72d06dd4d50 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -79,18 +79,15 @@ private static InlayHint getTestHint() { static class Configuration { @Bean InlayHintSupplier inlayHintSupplier() { - return new InlayHintSupplier() { - @Override - public String getId() { - return "test"; - } + return new TestInlayHintSupplier(); + } + } - @Override - public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { - var inlayHint = getTestHint(); - return List.of(inlayHint); - } - }; + static class TestInlayHintSupplier implements InlayHintSupplier { + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var inlayHint = getTestHint(); + return List.of(inlayHint); } } From 5030e73b21f36c10b0a0fb7a7a0a7f7f884fa04c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 10 Apr 2023 12:53:39 +0200 Subject: [PATCH 158/595] Spring boot bump --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 12dec5fdcae..7d7ff3d1192 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.0" id("com.github.ben-manes.versions") version "0.45.0" - id("org.springframework.boot") version "2.7.5" + id("org.springframework.boot") version "2.7.10" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" From 37a7c6ce5b5803507011ddd9d143c893a6023df2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:15:18 +0200 Subject: [PATCH 159/595] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=B0=20=D1=81=20=D0=BE=D0=BF=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D1=81=D1=85=D0=B5=D0=BC=D0=B0=20?= =?UTF-8?q?json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageServerConfiguration.java | 6 +++--- ...intsOptions.java => InlayHintOptions.java} | 2 +- .../InlayHintsConfiguration.java | 2 +- .../languageserver/configuration/schema.json | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/{InlayHintsOptions.java => InlayHintOptions.java} (98%) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index d460dc5d3ef..b72618f2600 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -30,7 +30,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.DiagnosticsOptions; import com.github._1c_syntax.bsl.languageserver.configuration.documentlink.DocumentLinkOptions; import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; -import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintsOptions; +import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AccessLevel; @@ -93,7 +93,7 @@ public class LanguageServerConfiguration { @JsonProperty("inlayHint") @Setter(value = AccessLevel.NONE) - private InlayHintsOptions inlayHintsOptions = new InlayHintsOptions(); + private InlayHintOptions inlayHintOptions = new InlayHintOptions(); @JsonProperty("formatting") @Setter(value = AccessLevel.NONE) @@ -222,7 +222,7 @@ private void loadConfigurationFile(File configurationFile) { private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); - PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); + PropertyUtils.copyProperties(this.inlayHintOptions, configuration.inlayHintOptions); PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java similarity index 98% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java index 8cdfc26b965..d102a695947 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java @@ -40,7 +40,7 @@ @AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) -public class InlayHintsOptions { +public class InlayHintOptions { /** * Параметры сапплаеров inlay hints. diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index 3f3ff1ec429..181d6b04aea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -55,7 +55,7 @@ public List enabledInlayHintSuppliers( LanguageServerConfiguration configuration, Collection inlayHintSuppliers ) { - var parameters = configuration.getInlayHintsOptions().getParameters(); + var parameters = configuration.getInlayHintOptions().getParameters(); return inlayHintSuppliers.stream() .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) .collect(Collectors.toList()); diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 662d4024cad..52650badf1f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -516,6 +516,15 @@ "$id": "#/definitions/codeLensParameters/cyclomaticComplexity" } } + }, + "inlayHintParameters": { + "$id": "#/definitions/inlayHintParameters", + "type": "object", + "title": "Inlay hints parameters configuration.\nKey-value object, where key is a inlay hint ID, and value is boolean or object with concrete inlay hint configuration.", + "default": null, + "additionalProperties": { + "$ref": "#/definitions/parameter" + } } }, "properties": { @@ -726,6 +735,16 @@ } } }, + "inlayHint": { + "$id": "#/properties/inlayHint", + "type": "object", + "title": "Inlay hint configuration.", + "properties": { + "parameters": { + "$ref": "#/definitions/inlayHintParameters" + } + } + }, "useDevSite": { "$id": "#/properties/useDevSite", "type": "boolean", From 13340e161290f6fd836dccbbd6b3945193908475 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:18:42 +0200 Subject: [PATCH 160/595] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=88=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/features/ConfigurationFile.md | 50 ++++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/docs/features/ConfigurationFile.md b/docs/features/ConfigurationFile.md index f7cb3ba6d6c..819117e2235 100644 --- a/docs/features/ConfigurationFile.md +++ b/docs/features/ConfigurationFile.md @@ -7,30 +7,32 @@ BSL Language Server предоставляет возможность измен ## Описание настроек -|Наименование|Тип|Описание| -|:--|:-:|:--| -|`language`|`Строка`|Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка| -|`codeLens`|`JSON-Объект`|Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. Свойства объекта| -|⤷   `parameters`|`JSON-Объект`|Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы.| -|   ⤷   `cognitiveComplexity`|`Булево` или `JSON-Объект`|Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`.| -|   ⤷   `cyclomaticComplexity`|`Булево` или `JSON-Объект`|Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`.| -|`diagnostics`|`JSON-Объект`|Содержит настройки диагностик| -|⤷   `computeTrigger`|`Строка`|С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет| -|⤷   `ordinaryAppSupport`|`Булево`|Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента| -|⤷   `skipSupport`|`Строка`|Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)*| -|⤷   `mode`|`Строка`|Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными| -|⤷   `parameters`|`JSON-Объект`|Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики.| -|⤷   `subsystemsFilter`|`JSON-Объект`|Фильтр по подсистемам конфигурации| -|⤷   `analyzeOnStart`|`Булево`|Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта.| -|   ⤷   `include`|`Массив` `Строка`|Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы| -|   ⤷   `exclude`|`Массив` `Строка`|Список имен подсистем исключенных из анализа, включая подчиненные подсистемы| -|`documentLink`|`JSON-Объект`|Содержит настройки ссылок на документацию| -|⤷   `showDiagnosticDescription`|`Булево`|Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*)| -|`useDevSite`|`Булево`|При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*)| -|`siteRoot`|`Строка`|Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | -|`traceLog`|`Строка`|Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ**| -|`configurationRoot`|`Строка`|Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации| -|`sendErrors`|`Строка`|Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках.| +| Наименование |Тип| Описание | +|:------------------------------------------------------------|:-:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `language` |`Строка`| Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | +| `codeLens` |`JSON-Объект`| Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | +| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | +|    ⤷   `cognitiveComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +|    ⤷   `cyclomaticComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +| `diagnostics` |`JSON-Объект`| Содержит настройки диагностик | +| ⤷   `computeTrigger` |`Строка`| С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | +| ⤷   `ordinaryAppSupport` |`Булево`| Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | +| ⤷   `skipSupport` |`Строка`| Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | +| ⤷   `mode` |`Строка`| Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | +| ⤷   `parameters` |`JSON-Объект`| Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | +| ⤷   `subsystemsFilter` |`JSON-Объект`| Фильтр по подсистемам конфигурации | +| ⤷   `analyzeOnStart` |`Булево`| Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | +|    ⤷   `include` |`Массив` `Строка`| Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | +|    ⤷   `exclude` |`Массив` `Строка`| Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | +| `documentLink` |`JSON-Объект`| Содержит настройки ссылок на документацию | +| ⤷   `showDiagnosticDescription` |`Булево`| Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | +| `inlayHint` |`JSON-Объект`| Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | +| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | +| `useDevSite` |`Булево`| При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | +| `siteRoot` |`Строка`| Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | +| `traceLog` |`Строка`| Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | +| `configurationRoot` |`Строка`| Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | +| `sendErrors` |`Строка`| Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | Для облегчения составления и редактирования конфигурационного файла можно использовать следующую JSON-схему: From af8e0b10accdd3b3f6aab0e63dfe550b3b3d3c3f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:22:52 +0200 Subject: [PATCH 161/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D1=8B=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/index.md b/docs/index.md index a6e0216b65b..c476360630e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -112,6 +112,9 @@ | [semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | no | | | | [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | no | | | | [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | no | | | + | [inlayHint](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_inlayHint) | yes | resolveProvider = false | да | + | [inlayHint/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHint_resolve) | no | | | + | [inlayHint/refresh](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlayHint_refresh) | yes | | | From 1bdf636224477724519b4ed4ead2fa8c9313d3e2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 14 Apr 2023 12:24:19 +0200 Subject: [PATCH 162/595] =?UTF-8?q?=D0=98=D0=BD=D0=BB=D1=8D=D0=B9=20=D1=85?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D1=8B=20=D0=BF=D0=BE=20=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8F=D0=BC=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F-=D0=B2=D1=8B=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tractMethodComplexityCodeLensSupplier.java | 11 ++- .../CognitiveComplexityCodeLensSupplier.java | 8 +- .../CyclomaticComplexityCodeLensSupplier.java | 8 +- ...leComplexityInlayHintsCommandSupplier.java | 76 +++++++++++++++++ ...veComplexityInlayHintsCommandSupplier.java | 36 +++++++++ ...icComplexityInlayHintsCommandSupplier.java | 36 +++++++++ .../AbstractComplexityInlayHintSupplier.java | 81 +++++++++++++++++++ .../CognitiveComplexityInlayHintSupplier.java | 45 +++++++++++ ...CyclomaticComplexityInlayHintSupplier.java | 45 +++++++++++ 9 files changed, 340 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index 5d82425b396..94057b451b2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.AbstractToggleComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -30,7 +31,6 @@ import lombok.ToString; import lombok.Value; import org.eclipse.lsp4j.CodeLens; -import org.eclipse.lsp4j.Command; import org.eclipse.lsp4j.jsonrpc.messages.Either; import java.beans.ConstructorProperties; @@ -52,6 +52,7 @@ public abstract class AbstractMethodComplexityCodeLensSupplier private static final int DEFAULT_COMPLEXITY_THRESHOLD = -1; protected final LanguageServerConfiguration configuration; + private final AbstractToggleComplexityInlayHintsCommandSupplier commandSupplier; @Override public List getCodeLenses(DocumentContext documentContext) { @@ -70,7 +71,13 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Co documentContext.getSymbolTree().getMethodSymbol(methodName).ifPresent((MethodSymbol methodSymbol) -> { int complexity = methodsComplexity.get(methodSymbol); var title = Resources.getResourceString(configuration.getLanguage(), getClass(), TITLE_KEY, complexity); - var command = new Command(title, ""); + var command = commandSupplier.createCommand(title); + // todo: refactor + var arguments = new AbstractToggleComplexityInlayHintsCommandSupplier.ToggleComplexityInlayHintsCommandArguments( + commandSupplier.getId(), + data + ); + command.setArguments(List.of(arguments)); unresolved.setCommand(command); }); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java index 16aac7bb9a9..ab13f820e4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.ToggleCognitiveComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -34,8 +35,11 @@ @Component public class CognitiveComplexityCodeLensSupplier extends AbstractMethodComplexityCodeLensSupplier { - public CognitiveComplexityCodeLensSupplier(LanguageServerConfiguration configuration) { - super(configuration); + public CognitiveComplexityCodeLensSupplier( + LanguageServerConfiguration configuration, + ToggleCognitiveComplexityInlayHintsCommandSupplier commandSupplier + ) { + super(configuration, commandSupplier); } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java index 52d8045da4f..bdfbc4553a6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.commands.ToggleCyclomaticComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -34,8 +35,11 @@ @Component public class CyclomaticComplexityCodeLensSupplier extends AbstractMethodComplexityCodeLensSupplier { - public CyclomaticComplexityCodeLensSupplier(LanguageServerConfiguration configuration) { - super(configuration); + public CyclomaticComplexityCodeLensSupplier( + LanguageServerConfiguration configuration, + ToggleCyclomaticComplexityInlayHintsCommandSupplier commandSupplier + ) { + super(configuration, commandSupplier); } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..071cb3dbcb4 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,76 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier; +import com.github._1c_syntax.bsl.languageserver.inlayhints.AbstractComplexityInlayHintSupplier; +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; +import lombok.ToString; +import lombok.Value; + +import java.beans.ConstructorProperties; +import java.net.URI; +import java.util.Optional; + +@RequiredArgsConstructor +public abstract class AbstractToggleComplexityInlayHintsCommandSupplier + implements CommandSupplier +{ + private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; + + @Override + public Class getCommandArgumentsClass() { + return ToggleComplexityInlayHintsCommandArguments.class; + } + + @Override + public Optional execute(ToggleComplexityInlayHintsCommandArguments arguments) { + complexityInlayHintSupplier.toggleHints(arguments.getUri(), arguments.getMethodName()); + return Optional.empty(); + } + + @Override + public boolean needRefreshInlayHintsAfterExecuteCommand() { + return true; + } + + @Value + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + public static class ToggleComplexityInlayHintsCommandArguments extends DefaultCommandArguments { + /** + * Имя метода. + */ + String methodName; + + @ConstructorProperties({"uri", "id", "methodName"}) + public ToggleComplexityInlayHintsCommandArguments(URI uri, String id, String methodName) { + super(uri, id); + this.methodName = methodName; + } + + public ToggleComplexityInlayHintsCommandArguments(String id, AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData data) { + this(data.getUri(), id, data.getMethodName()); + } + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..b759f3ba7b1 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,36 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; +import org.springframework.stereotype.Component; + +@Component +public class ToggleCognitiveComplexityInlayHintsCommandSupplier + extends AbstractToggleComplexityInlayHintsCommandSupplier { + + public ToggleCognitiveComplexityInlayHintsCommandSupplier( + CognitiveComplexityInlayHintSupplier complexityInlayHintSupplier + ) { + super(complexityInlayHintSupplier); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java new file mode 100644 index 00000000000..238339c5253 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -0,0 +1,36 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.inlayhints.CyclomaticComplexityInlayHintSupplier; +import org.springframework.stereotype.Component; + +@Component +public class ToggleCyclomaticComplexityInlayHintsCommandSupplier + extends AbstractToggleComplexityInlayHintsCommandSupplier { + + public ToggleCyclomaticComplexityInlayHintsCommandSupplier( + CyclomaticComplexityInlayHintSupplier complexityInlayHintSupplier + ) { + super(complexityInlayHintSupplier); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..487e24713d9 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -0,0 +1,81 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; + +import java.net.URI; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public abstract class AbstractComplexityInlayHintSupplier implements InlayHintSupplier { + private final Map> enabledMethods = new HashMap<>(); + + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var enabledMethodsInFile = enabledMethods.getOrDefault(documentContext.getUri(), Collections.emptySet()); + var cognitiveComplexityLocations = getComplexityLocations(documentContext); + + return documentContext.getSymbolTree().getMethodsByName().entrySet().stream() + .filter(entry -> enabledMethodsInFile.contains(entry.getKey())) + .map(Map.Entry::getValue) + .map(methodSymbol -> cognitiveComplexityLocations.getOrDefault(methodSymbol, Collections.emptyList()).stream() + .map(AbstractComplexityInlayHintSupplier::toInlayHint) + .collect(Collectors.toList())) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + protected abstract Map> getComplexityLocations( + DocumentContext documentContext + ); + + private static InlayHint toInlayHint(ComplexitySecondaryLocation complexitySecondaryLocation) { + var inlayHint = new InlayHint(); + inlayHint.setPosition(complexitySecondaryLocation.getRange().getStart()); + inlayHint.setPaddingRight(Boolean.TRUE); + inlayHint.setKind(InlayHintKind.Parameter); + inlayHint.setLabel(complexitySecondaryLocation.getMessage()); + return inlayHint; + } + + public void toggleHints(URI uri, String methodName) { + var methodsInFile = enabledMethods.computeIfAbsent(uri, uri1 -> new HashSet<>()); + if (methodsInFile.contains(methodName)) { + methodsInFile.remove(methodName); + } else { + methodsInFile.add(methodName); + } + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..67073136c38 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -0,0 +1,45 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class CognitiveComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + + @Override + protected Map> getComplexityLocations( + DocumentContext documentContext + ) { + return documentContext + .getCognitiveComplexityData() + .getMethodsComplexitySecondaryLocations(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java new file mode 100644 index 00000000000..0c02b599380 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -0,0 +1,45 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.computer.ComplexitySecondaryLocation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class CyclomaticComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + + @Override + protected Map> getComplexityLocations( + DocumentContext documentContext + ) { + return documentContext + .getCyclomaticComplexityData() + .getMethodsComplexitySecondaryLocations(); + } +} From 817e028d9b93f08ad991c4e6b02177acbffea156 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 14 Apr 2023 12:29:27 +0200 Subject: [PATCH 163/595] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=82=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MethodSymbolMarkupContentBuilder.java | 219 +++++++++--------- 1 file changed, 109 insertions(+), 110 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index 45bd9521391..da940f2a04d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -62,113 +62,6 @@ public class MethodSymbolMarkupContentBuilder implements MarkupContentBuilder typeDescriptions) { - return typeDescriptions.stream() - .map(TypeDescription::getName) - .flatMap(parameterType -> Stream.of(parameterType.split(","))) - .map(String::trim) - .collect(Collectors.joining(" | ")); - } - - public static String parameterToString(ParameterDescription parameter, int level) { - var result = new StringJoiner(" \n"); // два пробела - Map typesMap = typesToMap(parameter.getTypes(), level); - var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; - - if (typesMap.size() == 1) { - result.add(String.format(parameterTemplate, - parameter.getName(), - typesMapToString(typesMap, 0))); - } else { - result.add(String.format(parameterTemplate, parameter.getName(), "")); - result.add(typesMapToString(typesMap, level + 1)); - } - return result.toString(); - } - - public static String parameterToString(ParameterDefinition parameterDefinition) { - int level = 0; - if (parameterDefinition.getDescription().isPresent()) { - return parameterToString(parameterDefinition.getDescription().get(), level); - } - - return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); - } - - private static Map typesToMap(List parameterTypes, int level) { - Map types = new HashMap<>(); - - parameterTypes.forEach((TypeDescription type) -> { - var typeDescription = typeToString(type, level); - String typeName; - if (type.isHyperlink()) { - typeName = String.format("[%s](%s)", type.getName(), type.getLink()); - } else { - typeName = String.format("`%s`", type.getName()); - } - - types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); - }); - return types; - } - - private static String typesMapToString(Map types, int level) { - var result = new StringJoiner(" \n"); // два пробела - var indent = "  ".repeat(level); - types.forEach((String key, String value) -> { - if (key.isBlank()) { - result.add(value); - } else { - result.add(String.format("%s%s %s", indent, value, key)); - } - }); - return result.toString(); - } - - private static String typeToString(TypeDescription type, int level) { - var result = new StringJoiner(" \n"); // два пробела - var description = type.getDescription().replace("\n", "
" + "  ".repeat(level + 1)); - - if (!description.isBlank()) { - description = "- " + description; - } - if (!type.getParameters().isEmpty()) { - description += ":"; - } - - result.add(description); - type.getParameters().forEach((ParameterDescription parameter) -> - result.add(parameterToString(parameter, level + 1))); - return result.toString(); - } - @Override public MarkupContent getContent(MethodSymbol symbol) { var markupBuilder = new StringJoiner("\n"); @@ -219,11 +112,24 @@ public SymbolKind getSymbolKind() { return SymbolKind.Method; } + private static void addSectionIfNotEmpty(StringJoiner markupBuilder, String newContent) { + if (!newContent.isEmpty()) { + markupBuilder.add(newContent); + markupBuilder.add(""); + markupBuilder.add("---"); + } + } + + private static String getPurposeSection(MethodSymbol methodSymbol) { + return methodSymbol.getDescription() + .map(MethodDescription::getPurposeDescription) + .orElse(""); + } + private String getParametersSection(MethodSymbol methodSymbol) { var result = new StringJoiner(" \n"); // два пробела - methodSymbol.getParameters().forEach((ParameterDefinition parameterDefinition) -> { - result.add(parameterToString(parameterDefinition)); - } + methodSymbol.getParameters().forEach(parameterDefinition -> + result.add(parameterToString(parameterDefinition)) ); var parameters = result.toString(); @@ -283,6 +189,19 @@ private String getSectionWithCodeFences(List codeBlocks, String resource return codeFences; } + private static String getLocation(MethodSymbol symbol) { + var documentContext = symbol.getOwner(); + var startPosition = symbol.getSelectionRange().getStart(); + String mdoRef = MdoRefBuilder.getMdoRef(documentContext); + + return String.format( + "[%s](%s#%d)", + mdoRef, + documentContext.getUri(), + startPosition.getLine() + 1 + ); + } + private String getSignature(MethodSymbol methodSymbol) { String signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; @@ -342,7 +261,87 @@ private String getSignature(MethodSymbol methodSymbol) { ); } + private static String getTypes(List typeDescriptions) { + return typeDescriptions.stream() + .map(TypeDescription::getName) + .flatMap(parameterType -> Stream.of(parameterType.split(","))) + .map(String::trim) + .collect(Collectors.joining(" | ")); + } + private String getResourceString(String key) { return Resources.getResourceString(configuration.getLanguage(), getClass(), key); } + + public static String parameterToString(ParameterDescription parameter, int level) { + var result = new StringJoiner(" \n"); // два пробела + Map typesMap = typesToMap(parameter.getTypes(), level); + var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; + + if (typesMap.size() == 1) { + result.add(String.format(parameterTemplate, + parameter.getName(), + typesMapToString(typesMap, 0))); + } else { + result.add(String.format(parameterTemplate, parameter.getName(), "")); + result.add(typesMapToString(typesMap, level + 1)); + } + return result.toString(); + } + + public static String parameterToString(ParameterDefinition parameterDefinition) { + int level = 0; + if (parameterDefinition.getDescription().isPresent()) { + return parameterToString(parameterDefinition.getDescription().get(), level); + } + + return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); + } + + private static Map typesToMap(List parameterTypes, int level) { + Map types = new HashMap<>(); + + parameterTypes.forEach((TypeDescription type) -> { + var typeDescription = typeToString(type, level); + String typeName; + if (type.isHyperlink()) { + typeName = String.format("[%s](%s)", type.getName(), type.getLink()); + } else { + typeName = String.format("`%s`", type.getName()); + } + + types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); + }); + return types; + } + + private static String typesMapToString(Map types, int level) { + var result = new StringJoiner(" \n"); // два пробела + var indent = "  ".repeat(level); + types.forEach((String key, String value) -> { + if (key.isBlank()) { + result.add(value); + } else { + result.add(String.format("%s%s %s", indent, value, key)); + } + }); + return result.toString(); + } + + private static String typeToString(TypeDescription type, int level) { + var result = new StringJoiner(" \n"); // два пробела + var description = type.getDescription().replace("\n", "
" + "  ".repeat(level + 1)); + + if (!description.isBlank()) { + description = "- " + description; + } + if (!type.getParameters().isEmpty()) { + description += ":"; + } + + result.add(description); + type.getParameters().forEach((ParameterDescription parameter) -> + result.add(parameterToString(parameter, level + 1))); + return result.toString(); + } } From f4b97d77bc3ee56e18c53ba84de754569f596fde Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Mon, 17 Apr 2023 10:22:46 +0300 Subject: [PATCH 164/595] #3040 unusedParams npe fix --- .../diagnostics/UnusedParametersDiagnostic.java | 15 +++++++++++---- .../diagnostics/UnusedParametersDiagnostic.bsl | 6 +++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index ef83cb1fd57..08d5b3d7a90 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -30,6 +30,7 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.tree.TerminalNode; import java.util.List; import java.util.Locale; @@ -62,9 +63,16 @@ public ParseTree visitSubCodeBlock(BSLParser.SubCodeBlockContext ctx) { return ctx; } - List paramsNames = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) + List params = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) .stream() - .map(node -> ((BSLParser.ParamContext) node).IDENTIFIER().getText().toLowerCase(Locale.getDefault())) + .map(node -> ((BSLParser.ParamContext) node)) + .map(BSLParser.ParamContext::IDENTIFIER) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + List paramsNames = params + .stream() + .map(ind -> ind.getText().toLowerCase(Locale.getDefault())) .collect(Collectors.toList()); Trees.findAllTokenNodes(ctx, BSLParser.IDENTIFIER) @@ -74,9 +82,8 @@ public ParseTree visitSubCodeBlock(BSLParser.SubCodeBlockContext ctx) { paramsNames.remove((node.getText().toLowerCase(Locale.getDefault()))) ); - Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) + params .stream() - .map(param -> ((BSLParser.ParamContext) param).IDENTIFIER()) .filter(param -> paramsNames.contains(param.getText().toLowerCase(Locale.getDefault()))) .forEach(param -> diagnosticStorage.addDiagnostic(param, info.getMessage(param.getText())) diff --git a/src/test/resources/diagnostics/UnusedParametersDiagnostic.bsl b/src/test/resources/diagnostics/UnusedParametersDiagnostic.bsl index 953702ac01c..eb0edc26d15 100644 --- a/src/test/resources/diagnostics/UnusedParametersDiagnostic.bsl +++ b/src/test/resources/diagnostics/UnusedParametersDiagnostic.bsl @@ -24,4 +24,8 @@ Объект.Поле = 1; Объект2.Поле.Метод(2); Чтото[Объект3]; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Процедура нпе( , знач "") + Объект.Поле = 1; +КонецПроцедуры From 8af25b1791da49c4a1f8487ba3bb16eb996466ab Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Mon, 17 Apr 2023 14:08:32 +0300 Subject: [PATCH 165/595] cast --- .../languageserver/diagnostics/UnusedParametersDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index 08d5b3d7a90..18c8a51ecaf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -65,7 +65,7 @@ public ParseTree visitSubCodeBlock(BSLParser.SubCodeBlockContext ctx) { List params = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) .stream() - .map(node -> ((BSLParser.ParamContext) node)) + .map(BSLParser.ParamContext.class::cast) .map(BSLParser.ParamContext::IDENTIFIER) .filter(Objects::nonNull) .collect(Collectors.toList()); From 96b5949462aacf4be242e0b97e80347b9c048943 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 21 Apr 2023 22:17:34 +0200 Subject: [PATCH 166/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tractMethodComplexityCodeLensSupplier.java | 11 ++-- .../commands/CommandSupplier.java | 5 +- ...veComplexityInlayHintsCommandSupplier.java | 1 + ...icComplexityInlayHintsCommandSupplier.java | 1 + ...leComplexityInlayHintsCommandSupplier.java | 30 ++--------- ...eComplexityInlayHintsCommandArguments.java | 54 +++++++++++++++++++ 6 files changed, 68 insertions(+), 34 deletions(-) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/{ => complexity}/AbstractToggleComplexityInlayHintsCommandSupplier.java (61%) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index 94057b451b2..a71cf923df7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -21,7 +21,8 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; -import com.github._1c_syntax.bsl.languageserver.commands.AbstractToggleComplexityInlayHintsCommandSupplier; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.AbstractToggleComplexityInlayHintsCommandSupplier; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -70,14 +71,14 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Co var methodsComplexity = getMethodsComplexity(documentContext); documentContext.getSymbolTree().getMethodSymbol(methodName).ifPresent((MethodSymbol methodSymbol) -> { int complexity = methodsComplexity.get(methodSymbol); + var title = Resources.getResourceString(configuration.getLanguage(), getClass(), TITLE_KEY, complexity); - var command = commandSupplier.createCommand(title); - // todo: refactor - var arguments = new AbstractToggleComplexityInlayHintsCommandSupplier.ToggleComplexityInlayHintsCommandArguments( + var arguments = new ToggleComplexityInlayHintsCommandArguments( commandSupplier.getId(), data ); - command.setArguments(List.of(arguments)); + + var command = commandSupplier.createCommand(title, arguments); unresolved.setCommand(command); }); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index ec1632afeb4..d42a727ccba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -24,6 +24,7 @@ import org.eclipse.lsp4j.Command; import java.beans.Introspector; +import java.util.List; import java.util.Optional; /** @@ -63,8 +64,8 @@ default String getId() { * @param title Заголовок команды. * @return Команда с заполненными заголовком и идентификатором команды. */ - default Command createCommand(String title) { - return new Command(title, getId()); + default Command createCommand(String title, T arguments) { + return new Command(title, getId(), List.of(arguments)); } /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java index b759f3ba7b1..856f0830115 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.commands; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.AbstractToggleComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java index 238339c5253..c34a700c5ae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.commands; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.AbstractToggleComplexityInlayHintsCommandSupplier; import com.github._1c_syntax.bsl.languageserver.inlayhints.CyclomaticComplexityInlayHintSupplier; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java similarity index 61% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index 071cb3dbcb4..e9c40b16071 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -19,22 +19,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with BSL Language Server. */ -package com.github._1c_syntax.bsl.languageserver.commands; +package com.github._1c_syntax.bsl.languageserver.commands.complexity; -import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier; +import com.github._1c_syntax.bsl.languageserver.commands.CommandSupplier; import com.github._1c_syntax.bsl.languageserver.inlayhints.AbstractComplexityInlayHintSupplier; -import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; -import lombok.ToString; -import lombok.Value; -import java.beans.ConstructorProperties; -import java.net.URI; import java.util.Optional; @RequiredArgsConstructor public abstract class AbstractToggleComplexityInlayHintsCommandSupplier - implements CommandSupplier + implements CommandSupplier { private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; @@ -54,23 +49,4 @@ public boolean needRefreshInlayHintsAfterExecuteCommand() { return true; } - @Value - @EqualsAndHashCode(callSuper = true) - @ToString(callSuper = true) - public static class ToggleComplexityInlayHintsCommandArguments extends DefaultCommandArguments { - /** - * Имя метода. - */ - String methodName; - - @ConstructorProperties({"uri", "id", "methodName"}) - public ToggleComplexityInlayHintsCommandArguments(URI uri, String id, String methodName) { - super(uri, id); - this.methodName = methodName; - } - - public ToggleComplexityInlayHintsCommandArguments(String id, AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData data) { - this(data.getUri(), id, data.getMethodName()); - } - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java new file mode 100644 index 00000000000..666e95231a6 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java @@ -0,0 +1,54 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.commands.complexity; + +import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier; +import com.github._1c_syntax.bsl.languageserver.commands.DefaultCommandArguments; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; + +import java.beans.ConstructorProperties; +import java.net.URI; + +@Value +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ToggleComplexityInlayHintsCommandArguments extends DefaultCommandArguments { + /** + * Имя метода. + */ + String methodName; + + @ConstructorProperties({"uri", "id", "methodName"}) + public ToggleComplexityInlayHintsCommandArguments(URI uri, String id, String methodName) { + super(uri, id); + this.methodName = methodName; + } + + public ToggleComplexityInlayHintsCommandArguments( + String id, + AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData data + ) { + this(data.getUri(), id, data.getMethodName()); + } +} From 62f7b0aa0216492c099ee78a9a0276e175e68e7f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 21 Apr 2023 22:23:16 +0200 Subject: [PATCH 167/595] =?UTF-8?q?Json-schema=20+=20=D0=B4=D0=BE=D0=BA?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/features/ConfigurationFile.md | 54 ++++++++++--------- .../languageserver/configuration/schema.json | 20 +++++++ 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/docs/features/ConfigurationFile.md b/docs/features/ConfigurationFile.md index 819117e2235..bbb6b9c1723 100644 --- a/docs/features/ConfigurationFile.md +++ b/docs/features/ConfigurationFile.md @@ -7,32 +7,34 @@ BSL Language Server предоставляет возможность измен ## Описание настроек -| Наименование |Тип| Описание | -|:------------------------------------------------------------|:-:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `language` |`Строка`| Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | -| `codeLens` |`JSON-Объект`| Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | -| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | -|    ⤷   `cognitiveComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | -|    ⤷   `cyclomaticComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | -| `diagnostics` |`JSON-Объект`| Содержит настройки диагностик | -| ⤷   `computeTrigger` |`Строка`| С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | -| ⤷   `ordinaryAppSupport` |`Булево`| Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | -| ⤷   `skipSupport` |`Строка`| Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | -| ⤷   `mode` |`Строка`| Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | -| ⤷   `parameters` |`JSON-Объект`| Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | -| ⤷   `subsystemsFilter` |`JSON-Объект`| Фильтр по подсистемам конфигурации | -| ⤷   `analyzeOnStart` |`Булево`| Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | -|    ⤷   `include` |`Массив` `Строка`| Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | -|    ⤷   `exclude` |`Массив` `Строка`| Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | -| `documentLink` |`JSON-Объект`| Содержит настройки ссылок на документацию | -| ⤷   `showDiagnosticDescription` |`Булево`| Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | -| `inlayHint` |`JSON-Объект`| Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | -| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | -| `useDevSite` |`Булево`| При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | -| `siteRoot` |`Строка`| Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | -| `traceLog` |`Строка`| Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | -| `configurationRoot` |`Строка`| Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | -| `sendErrors` |`Строка`| Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | +| Наименование | Тип | Описание | +|:------------------------------------------------------------|:--------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `language` | `Строка` | Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | +| `codeLens` | `JSON-Объект` | Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | +| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | +|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +| `diagnostics` | `JSON-Объект` | Содержит настройки диагностик | +| ⤷   `computeTrigger` | `Строка` | С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | +| ⤷   `ordinaryAppSupport` | `Булево` | Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | +| ⤷   `skipSupport` | `Строка` | Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | +| ⤷   `mode` | `Строка` | Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | +| ⤷   `parameters` | `JSON-Объект` | Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | +| ⤷   `subsystemsFilter` | `JSON-Объект` | Фильтр по подсистемам конфигурации | +| ⤷   `analyzeOnStart` | `Булево` | Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | +|    ⤷   `include` | `Массив` `Строка` | Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | +|    ⤷   `exclude` | `Массив` `Строка` | Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | +| `documentLink` | `JSON-Объект` | Содержит настройки ссылок на документацию | +| ⤷   `showDiagnosticDescription` | `Булево` | Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | +| `inlayHint` | `JSON-Объект` | Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | +| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | +|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | +|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | +| `useDevSite` | `Булево` | При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | +| `siteRoot` | `Строка` | Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | +| `traceLog` | `Строка` | Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | +| `configurationRoot` | `Строка` | Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | +| `sendErrors` | `Строка` | Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | Для облегчения составления и редактирования конфигурационного файла можно использовать следующую JSON-схему: diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 52650badf1f..5dcdc2c9a0b 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -524,6 +524,26 @@ "default": null, "additionalProperties": { "$ref": "#/definitions/parameter" + }, + "properties": { + "cognitiveComplexity": { + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Show cognitive complexity score inlay hints.", + "$id": "#/definitions/inlayHintParameters/cognitiveComplexity" + }, + "cyclomaticComplexity": { + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Show cyclomatic complexity score inlay hints.", + "$id": "#/definitions/inlayHintParameters/cyclomaticComplexity" + } } } }, From ec29d75b80b4f2043c9ecb0b98db7316701f85db Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 21 Apr 2023 23:35:28 +0300 Subject: [PATCH 168/595] Apply suggestions from code review --- .../AbstractToggleComplexityInlayHintsCommandSupplier.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index e9c40b16071..2731b11df89 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -29,8 +29,8 @@ @RequiredArgsConstructor public abstract class AbstractToggleComplexityInlayHintsCommandSupplier - implements CommandSupplier -{ + implements CommandSupplier { + private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; @Override From 93a1ea481ef9f36ae5822e351f243d8e7d3c2013 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 09:57:12 +0000 Subject: [PATCH 169/595] build(deps): bump JetBrains/qodana-action from 2022.3.4 to 2023.1.0 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2022.3.4 to 2023.1.0. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2022.3.4...v2023.1.0) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index e7c8f9cae9d..779c1ea4929 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2022.3.4 + uses: JetBrains/qodana-action@v2023.1.0 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From 893cbad02ec6380023a510223fdc9fb7ef4ebbd4 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 24 Apr 2023 22:43:57 +0200 Subject: [PATCH 170/595] Update qodana.yaml --- qodana.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qodana.yaml b/qodana.yaml index 2e36017fbd0..37e0b159b71 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,5 +1,5 @@ version: "1.0" -linter: jetbrains/qodana-jvm-community:2022.3 +linter: jetbrains/qodana-jvm-community:2023.1 profile: name: qodana.starter include: From 797df1da04998ce9b166573d0640ce23adc5aff4 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 27 Apr 2023 19:15:16 +0200 Subject: [PATCH 171/595] =?UTF-8?q?=D0=9E=D0=BF=D1=86=D0=B8=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BD=D1=83=D0=B4=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rceDefinedMethodCallInlayHintSupplier.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 0458a5171c0..5f279aafcc3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.inlayhints; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; @@ -40,6 +41,7 @@ import org.eclipse.lsp4j.MarkupKind; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.SymbolKind; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -51,7 +53,11 @@ @RequiredArgsConstructor public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSupplier { + private static final boolean DEFAULT_SHOW_ALL_PARAMETERS = true; + private final ReferenceIndex referenceIndex; + protected final LanguageServerConfiguration configuration; + @Override public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { @@ -67,13 +73,13 @@ public List getInlayHints(DocumentContext documentContext, InlayHintP return referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream() .filter(reference -> Ranges.containsPosition(range, reference.getSelectionRange().getStart())) .filter(Reference::isSourceDefinedSymbolReference) - .map(SourceDefinedMethodCallInlayHintSupplier::toInlayHints) + .map(this::toInlayHints) .flatMap(Collection::stream) .collect(Collectors.toList()); } - private static List toInlayHints(Reference reference) { + private List toInlayHints(Reference reference) { var methodSymbol = (MethodSymbol) reference.getSymbol(); var parameters = methodSymbol.getParameters(); @@ -101,7 +107,7 @@ private static List toInlayHints(Reference reference) { var passedValue = callParam.getText(); var defaultValue = parameter.getDefaultValue(); - if (StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { + if (!showAllParameters() && StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { continue; } @@ -139,6 +145,15 @@ private static List toInlayHints(Reference reference) { } + private boolean showAllParameters() { + var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); + if (parameters.isLeft()) { + return DEFAULT_SHOW_ALL_PARAMETERS; + } else { + return (boolean) parameters.getRight().getOrDefault("showAllParameters", DEFAULT_SHOW_ALL_PARAMETERS); + } + } + private static boolean isRightMethod(BSLParserRuleContext doCallParent, Reference reference) { var selectionRange = reference.getSelectionRange(); From 3dcd897bb4a2acb3b0d3473e007872501fba16a0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 27 Apr 2023 19:19:44 +0200 Subject: [PATCH 172/595] =?UTF-8?q?=D0=9E=D0=BF=D1=86=D0=B8=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rceDefinedMethodCallInlayHintSupplier.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 5f279aafcc3..ccb554a5b62 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -53,7 +53,8 @@ @RequiredArgsConstructor public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSupplier { - private static final boolean DEFAULT_SHOW_ALL_PARAMETERS = true; + private static final boolean DEFAULT_SHOW_ALL_PARAMETERS = false; + private static final boolean DEFAULT_DEFAULT_VALUES = true; private final ReferenceIndex referenceIndex; protected final LanguageServerConfiguration configuration; @@ -116,7 +117,11 @@ private List toInlayHints(Reference reference) { var labelBuilder = new StringBuilder(); labelBuilder.append(parameter.getName()); - if (passedValue.isBlank() && !defaultValue.equals(ParameterDefinition.DefaultValue.EMPTY)) { + + if (showDefaultValues() + && passedValue.isBlank() + && !defaultValue.equals(ParameterDefinition.DefaultValue.EMPTY) + ) { labelBuilder.append(" ("); labelBuilder.append(defaultValue.getValue()); labelBuilder.append(")"); @@ -154,6 +159,16 @@ private boolean showAllParameters() { } } + private boolean showDefaultValues() { + var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); + if (parameters.isLeft()) { + return DEFAULT_DEFAULT_VALUES; + } else { + return (boolean) parameters.getRight().getOrDefault("showDefaultValues", DEFAULT_DEFAULT_VALUES); + } + } + + private static boolean isRightMethod(BSLParserRuleContext doCallParent, Reference reference) { var selectionRange = reference.getSelectionRange(); From d92a356d018e0dee3ec6d0d0580808640d1a504d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 28 Apr 2023 20:12:23 +0200 Subject: [PATCH 173/595] License --- .../AbstractToggleComplexityInlayHintsCommandSupplier.java | 2 +- .../ToggleCognitiveComplexityInlayHintsCommandSupplier.java | 2 +- .../ToggleCyclomaticComplexityInlayHintsCommandSupplier.java | 2 +- .../inlayhints/AbstractComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CognitiveComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CyclomaticComplexityInlayHintSupplier.java | 2 +- .../inlayhints/SourceDefinedMethodCallInlayHintSupplier.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java index 5b99f5fe66b..071cb3dbcb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java index 51efcdc843f..b759f3ba7b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java index 8fbb90bd20a..238339c5253 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java index f531bb77aca..487e24713d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java index 30bd1ceaf20..67073136c38 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java index 256b71c8acf..0c02b599380 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index ccb554a5b62..6e81b5254f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From b0fffdecbf50991160e9979c74c70f09153e1730 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 28 Apr 2023 20:14:01 +0200 Subject: [PATCH 174/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B3=D0=B8=D1=82=D0=B8=D0=B3=D0=BD?= =?UTF-8?q?=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 33ff50fa4de..b78c6f44eca 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,7 @@ gen/ .idea/sonarlint-state.xml .idea/sonarlint.xml .idea/checkstyle-idea.xml +.idea/jpa-buddy.xml *.bak *.orig From 0fd1dff8658cdcb39bdcbe71323ee03fe96ce4ed Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 12:33:40 +0200 Subject: [PATCH 175/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B2=D1=8F=D0=B7=D1=8C=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=20=D0=B8=20=D0=BA=D0=BE=D0=B4=D0=BB=D0=B8=D0=BD?= =?UTF-8?q?=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ognitiveComplexityCodeLensSupplierTest.java | 18 +++++++++++++----- ...clomaticComplexityCodeLensSupplierTest.java | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java index 9a96f64808e..5c9c6ab94f4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.codelenses; import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; @@ -75,11 +76,18 @@ void testGetCodeLens() { assertThat(codeLenses) .hasSize(2) - .anyMatch(codeLens -> codeLens.getRange().equals(firstMethod.getSubNameRange())) - .anyMatch(codeLens -> codeLens.getCommand().getTitle().contains(String.valueOf(complexityFirstMethod))) - .anyMatch(codeLens -> codeLens.getRange().equals(secondMethod.getSubNameRange())) - .anyMatch(codeLens -> codeLens.getCommand().getTitle().contains(String.valueOf(complexitySecondMethod))) - ; + .anySatisfy(codeLens -> { + assertThat(codeLens.getRange()).isEqualTo(firstMethod.getSubNameRange()); + assertThat(codeLens.getCommand().getTitle()).contains(String.valueOf(complexityFirstMethod)); + assertThat(codeLens.getCommand().getCommand()).isEqualTo("toggleCognitiveComplexityInlayHints"); + assertThat(((ToggleComplexityInlayHintsCommandArguments) codeLens.getCommand().getArguments().get(0)).getMethodName()).isEqualTo(firstMethod.getName()); + }) + .anySatisfy(codeLens -> { + assertThat(codeLens.getRange()).isEqualTo(secondMethod.getSubNameRange()); + assertThat(codeLens.getCommand().getTitle()).contains(String.valueOf(complexitySecondMethod)); + assertThat(codeLens.getCommand().getCommand()).isEqualTo("toggleCognitiveComplexityInlayHints"); + assertThat(((ToggleComplexityInlayHintsCommandArguments) codeLens.getCommand().getArguments().get(0)).getMethodName()).isEqualTo(secondMethod.getName()); + }); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java index 10f50199a6e..b972498a354 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.codelenses; import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData; +import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; @@ -75,11 +76,18 @@ void testGetCodeLens() { assertThat(codeLenses) .hasSize(2) - .anyMatch(codeLens -> codeLens.getRange().equals(firstMethod.getSubNameRange())) - .anyMatch(codeLens -> codeLens.getCommand().getTitle().contains(String.valueOf(complexityFirstMethod))) - .anyMatch(codeLens -> codeLens.getRange().equals(secondMethod.getSubNameRange())) - .anyMatch(codeLens -> codeLens.getCommand().getTitle().contains(String.valueOf(complexitySecondMethod))) - ; + .anySatisfy(codeLens -> { + assertThat(codeLens.getRange()).isEqualTo(firstMethod.getSubNameRange()); + assertThat(codeLens.getCommand().getTitle()).contains(String.valueOf(complexityFirstMethod)); + assertThat(codeLens.getCommand().getCommand()).isEqualTo("toggleCyclomaticComplexityInlayHints"); + assertThat(((ToggleComplexityInlayHintsCommandArguments) codeLens.getCommand().getArguments().get(0)).getMethodName()).isEqualTo(firstMethod.getName()); + }) + .anySatisfy(codeLens -> { + assertThat(codeLens.getRange()).isEqualTo(secondMethod.getSubNameRange()); + assertThat(codeLens.getCommand().getTitle()).contains(String.valueOf(complexitySecondMethod)); + assertThat(codeLens.getCommand().getCommand()).isEqualTo("toggleCyclomaticComplexityInlayHints"); + assertThat(((ToggleComplexityInlayHintsCommandArguments) codeLens.getCommand().getArguments().get(0)).getMethodName()).isEqualTo(secondMethod.getName()); + }); } From eda5a6385a75985d67c0cab34f0d81547d0d9339 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 12:47:42 +0200 Subject: [PATCH 176/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B,=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B8=D0=BD=D0=BB=D1=8D=D0=B9=20=D1=85=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mplexityInlayHintsCommandSupplierTest.java | 54 +++++++++++++++++++ ...mplexityInlayHintsCommandSupplierTest.java | 54 +++++++++++++++++++ ...iveComplexityInlayHintsCommandSupplier.bsl | 8 +++ ...ticComplexityInlayHintsCommandSupplier.bsl | 8 +++ 4 files changed, 124 insertions(+) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java create mode 100644 src/test/resources/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.bsl create mode 100644 src/test/resources/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.bsl diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java new file mode 100644 index 00000000000..5f4a1c9cd52 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java @@ -0,0 +1,54 @@ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class ToggleCognitiveComplexityInlayHintsCommandSupplierTest { + private final static String FILE_PATH = "./src/test/resources/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.bsl"; + + @MockBean + private CognitiveComplexityInlayHintSupplier complexityInlayHintSupplier; + + @Autowired + private ToggleCognitiveComplexityInlayHintsCommandSupplier supplier; + + @Test + void testExecute() { + + // given + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + + var methodName = firstMethod.getName(); + + var arguments = new ToggleComplexityInlayHintsCommandArguments( + documentContext.getUri(), + supplier.getId(), + methodName + ); + + // when + Optional result = supplier.execute(arguments); + + // then + assertThat(result).isEmpty(); + verify(complexityInlayHintSupplier, times(1)).toggleHints(documentContext.getUri(), methodName); + + } + +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java new file mode 100644 index 00000000000..55423ff19a5 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java @@ -0,0 +1,54 @@ +package com.github._1c_syntax.bsl.languageserver.commands; + +import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.inlayhints.CyclomaticComplexityInlayHintSupplier; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class ToggleCyclomaticComplexityInlayHintsCommandSupplierTest { + private final static String FILE_PATH = "./src/test/resources/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.bsl"; + + @MockBean + private CyclomaticComplexityInlayHintSupplier complexityInlayHintSupplier; + + @Autowired + private ToggleCyclomaticComplexityInlayHintsCommandSupplier supplier; + + @Test + void testExecute() { + + // given + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + + var methodName = firstMethod.getName(); + + var arguments = new ToggleComplexityInlayHintsCommandArguments( + documentContext.getUri(), + supplier.getId(), + methodName + ); + + // when + Optional result = supplier.execute(arguments); + + // then + assertThat(result).isEmpty(); + verify(complexityInlayHintSupplier, times(1)).toggleHints(documentContext.getUri(), methodName); + + } + +} diff --git a/src/test/resources/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.bsl b/src/test/resources/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.bsl new file mode 100644 index 00000000000..584106879e1 --- /dev/null +++ b/src/test/resources/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.bsl @@ -0,0 +1,8 @@ +Процедура ИмяПроцедуры() + Если Истина Тогда + А = 0; + КонецЕсли; +КонецПроцедуры + +Процедура ИмяПроцедуры2() +КонецПроцедуры diff --git a/src/test/resources/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.bsl b/src/test/resources/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.bsl new file mode 100644 index 00000000000..584106879e1 --- /dev/null +++ b/src/test/resources/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.bsl @@ -0,0 +1,8 @@ +Процедура ИмяПроцедуры() + Если Истина Тогда + А = 0; + КонецЕсли; +КонецПроцедуры + +Процедура ИмяПроцедуры2() +КонецПроцедуры From d281d9bdfde0ba30da86700932ff7e596bb2839a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:04:37 +0200 Subject: [PATCH 177/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B8=D0=BD=D0=BB=D1=8D=D0=B9=20=D1=85=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nitiveComplexityInlayHintSupplierTest.java | 63 ++++++++++++++++ ...omaticComplexityInlayHintSupplierTest.java | 71 +++++++++++++++++++ .../bsl/languageserver/util/TestUtils.java | 6 ++ .../CognitiveComplexityInlayHintSupplier.bsl | 8 +++ .../CyclomaticComplexityInlayHintSupplier.bsl | 8 +++ 5 files changed, 156 insertions(+) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java create mode 100644 src/test/resources/inlayhints/CognitiveComplexityInlayHintSupplier.bsl create mode 100644 src/test/resources/inlayhints/CyclomaticComplexityInlayHintSupplier.bsl diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java new file mode 100644 index 00000000000..ff74a0e987c --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java @@ -0,0 +1,63 @@ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class CognitiveComplexityInlayHintSupplierTest { + + private final static String FILE_PATH = "./src/test/resources/inlayhints/CognitiveComplexityInlayHintSupplier.bsl"; + + @Autowired + private CognitiveComplexityInlayHintSupplier supplier; + + @Test + void testGetInlayHints() { + + // given + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + var methodName = firstMethod.getName(); + + var textDocumentIdentifier = TestUtils.getTextDocumentIdentifier(documentContext.getUri()); + var range = Ranges.create(); + var params = new InlayHintParams(textDocumentIdentifier, range); + + // when + List inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints).isEmpty(); + + // when + supplier.toggleHints(documentContext.getUri(), methodName); + inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints) + .hasSize(1) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("+1")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(1, 4)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + }); + } + +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java new file mode 100644 index 00000000000..e4584248686 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java @@ -0,0 +1,71 @@ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class CyclomaticComplexityInlayHintSupplierTest { + + private final static String FILE_PATH = "./src/test/resources/inlayhints/CyclomaticComplexityInlayHintSupplier.bsl"; + + @Autowired + private CyclomaticComplexityInlayHintSupplier supplier; + + @Test + void testGetInlayHints() { + + // given + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + var methodName = firstMethod.getName(); + + var textDocumentIdentifier = TestUtils.getTextDocumentIdentifier(documentContext.getUri()); + var range = Ranges.create(); + var params = new InlayHintParams(textDocumentIdentifier, range); + + // when + List inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints).isEmpty(); + + // when + supplier.toggleHints(documentContext.getUri(), methodName); + inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints) + .hasSize(2) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("+1")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(1, 4)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + }) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("+1")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(0, 10)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + }) + ; + } + +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java index c73e812baa4..f5472365863 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java @@ -27,6 +27,7 @@ import edu.umd.cs.findbugs.annotations.Nullable; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; +import org.eclipse.lsp4j.TextDocumentIdentifier; import java.io.File; import java.net.URI; @@ -71,4 +72,9 @@ public static DocumentContext getDocumentContext(URI uri, String fileContent, Se context.rebuildDocument(documentContext, fileContent, 0); return documentContext; } + + public static TextDocumentIdentifier getTextDocumentIdentifier(URI uri) { + return new TextDocumentIdentifier(uri.toString()); + } + } diff --git a/src/test/resources/inlayhints/CognitiveComplexityInlayHintSupplier.bsl b/src/test/resources/inlayhints/CognitiveComplexityInlayHintSupplier.bsl new file mode 100644 index 00000000000..584106879e1 --- /dev/null +++ b/src/test/resources/inlayhints/CognitiveComplexityInlayHintSupplier.bsl @@ -0,0 +1,8 @@ +Процедура ИмяПроцедуры() + Если Истина Тогда + А = 0; + КонецЕсли; +КонецПроцедуры + +Процедура ИмяПроцедуры2() +КонецПроцедуры diff --git a/src/test/resources/inlayhints/CyclomaticComplexityInlayHintSupplier.bsl b/src/test/resources/inlayhints/CyclomaticComplexityInlayHintSupplier.bsl new file mode 100644 index 00000000000..584106879e1 --- /dev/null +++ b/src/test/resources/inlayhints/CyclomaticComplexityInlayHintSupplier.bsl @@ -0,0 +1,8 @@ +Процедура ИмяПроцедуры() + Если Истина Тогда + А = 0; + КонецЕсли; +КонецПроцедуры + +Процедура ИмяПроцедуры2() +КонецПроцедуры From 570f394622a55becdc81ed6eed8b9aa292b09543 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:05:10 +0200 Subject: [PATCH 178/595] License --- ...mplexityInlayHintsCommandSupplierTest.java | 21 +++++++++++++++++++ ...mplexityInlayHintsCommandSupplierTest.java | 21 +++++++++++++++++++ ...nitiveComplexityInlayHintSupplierTest.java | 21 +++++++++++++++++++ ...omaticComplexityInlayHintSupplierTest.java | 21 +++++++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java index 5f4a1c9cd52..865ed9d3444 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.commands; import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java index 55423ff19a5..563addeca9d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.commands; import com.github._1c_syntax.bsl.languageserver.commands.complexity.ToggleComplexityInlayHintsCommandArguments; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java index ff74a0e987c..07461f8c334 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.inlayhints; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java index e4584248686..41d9159582b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.inlayhints; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; From beb868114cde2ede629426b38e275f6425e10847 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:07:38 +0200 Subject: [PATCH 179/595] =?UTF-8?q?=D0=A2=D1=83=D0=B4=D1=83=D1=85=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/BSLTextDocumentServiceTest.java | 1 + .../bsl/languageserver/providers/FormatProviderTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java index 05df6aa83da..df50c97734c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java @@ -176,6 +176,7 @@ private TextDocumentItem getTextDocumentItem() throws IOException { } private TextDocumentIdentifier getTextDocumentIdentifier() { + // TODO: Переделать на TestUtils.getTextDocumentIdentifier(); File file = getTestFile(); String uri = file.toURI().toString(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index 7466b9a9c3b..e4f38efe959 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -300,6 +300,7 @@ private TextDocumentItem getTextDocumentItem() throws IOException { } private TextDocumentIdentifier getTextDocumentIdentifier() { + // TODO: Переделать на TestUtils.getTextDocumentIdentifier(); File file = getTestFile(); String uri = file.toURI().toString(); From 89692463aaf106ef3c27a21244dcc4bc6e71ef80 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:10:07 +0200 Subject: [PATCH 180/595] javadoc --- .../_1c_syntax/bsl/languageserver/commands/CommandSupplier.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index d42a727ccba..7a604f3b6b2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -62,6 +62,7 @@ default String getId() { * Создать DTO команды. * * @param title Заголовок команды. + * @param arguments Аргументы команды. * @return Команда с заполненными заголовком и идентификатором команды. */ default Command createCommand(String title, T arguments) { From 4920ce92d8795d603db6adbf83e7fb537659f730 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:19:18 +0200 Subject: [PATCH 181/595] javadoc --- ...veComplexityInlayHintsCommandSupplier.java | 3 ++ ...icComplexityInlayHintsCommandSupplier.java | 3 ++ ...leComplexityInlayHintsCommandSupplier.java | 16 ++++++- ...eComplexityInlayHintsCommandArguments.java | 3 ++ .../AbstractComplexityInlayHintSupplier.java | 44 ++++++++++++++----- .../CognitiveComplexityInlayHintSupplier.java | 6 +++ ...CyclomaticComplexityInlayHintSupplier.java | 6 +++ 7 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java index 856f0830115..8d32a87f321 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -25,6 +25,9 @@ import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; import org.springframework.stereotype.Component; +/** + * Поставщик команды переключения подсказок когнитивной сложности. + */ @Component public class ToggleCognitiveComplexityInlayHintsCommandSupplier extends AbstractToggleComplexityInlayHintsCommandSupplier { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java index c34a700c5ae..343b1989b06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -25,6 +25,9 @@ import com.github._1c_syntax.bsl.languageserver.inlayhints.CyclomaticComplexityInlayHintSupplier; import org.springframework.stereotype.Component; +/** + * Поставщик команды переключения подсказок цикломатической сложности. + */ @Component public class ToggleCyclomaticComplexityInlayHintsCommandSupplier extends AbstractToggleComplexityInlayHintsCommandSupplier { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index 2731b11df89..685550191fc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -27,23 +27,37 @@ import java.util.Optional; +/** + * Базовый класс для поставщиков команды переключения подсказок сложности. + */ @RequiredArgsConstructor public abstract class AbstractToggleComplexityInlayHintsCommandSupplier implements CommandSupplier { private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; + /** + * Получение класса аргументов команды. + * + * @return Класс аргументов команды. + */ @Override public Class getCommandArgumentsClass() { return ToggleComplexityInlayHintsCommandArguments.class; } - @Override + /** + * @inheritDoc + */ + @Override public Optional execute(ToggleComplexityInlayHintsCommandArguments arguments) { complexityInlayHintSupplier.toggleHints(arguments.getUri(), arguments.getMethodName()); return Optional.empty(); } + /** + * @inheritDoc + */ @Override public boolean needRefreshInlayHintsAfterExecuteCommand() { return true; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java index 666e95231a6..bd899446aa2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java @@ -30,6 +30,9 @@ import java.beans.ConstructorProperties; import java.net.URI; +/** + * Аргументы команды для переключения отображения сложности метода во всплывающих подсказках. + */ @Value @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java index 487e24713d9..67a39418da9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -38,9 +38,21 @@ import java.util.Set; import java.util.stream.Collectors; +/** + * Абстрактный поставщик подсказок о сложности методов. + *

+ * По умолчанию подсказки отключены. Для включения нужно вызвать метод {@link #toggleHints(URI, String)}. + */ public abstract class AbstractComplexityInlayHintSupplier implements InlayHintSupplier { + private final Map> enabledMethods = new HashMap<>(); + /** + * Получение подсказок о местах увеличения сложности метода. + *

+ * + * @inheritDoc + */ @Override public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { var enabledMethodsInFile = enabledMethods.getOrDefault(documentContext.getUri(), Collections.emptySet()); @@ -56,10 +68,31 @@ public List getInlayHints(DocumentContext documentContext, InlayHintP .collect(Collectors.toList()); } + /** + * Переключить показ подсказок сложности для метода. + * + * @param uri URI документа. + * @param methodName Имя метода. + */ + public void toggleHints(URI uri, String methodName) { + var methodsInFile = enabledMethods.computeIfAbsent(uri, uri1 -> new HashSet<>()); + if (methodsInFile.contains(methodName)) { + methodsInFile.remove(methodName); + } else { + methodsInFile.add(methodName); + } + } + + /** + * Получение мест увеличения сложности метода. Нужно переопределить в наследниках. + * + * @param documentContext Контекст документа. + * @return Места увеличения сложности метода. + */ protected abstract Map> getComplexityLocations( DocumentContext documentContext ); - + private static InlayHint toInlayHint(ComplexitySecondaryLocation complexitySecondaryLocation) { var inlayHint = new InlayHint(); inlayHint.setPosition(complexitySecondaryLocation.getRange().getStart()); @@ -69,13 +102,4 @@ private static InlayHint toInlayHint(ComplexitySecondaryLocation complexitySecon return inlayHint; } - public void toggleHints(URI uri, String methodName) { - var methodsInFile = enabledMethods.computeIfAbsent(uri, uri1 -> new HashSet<>()); - if (methodsInFile.contains(methodName)) { - methodsInFile.remove(methodName); - } else { - methodsInFile.add(methodName); - } - } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java index 67073136c38..c159eac5c54 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -30,10 +30,16 @@ import java.util.List; import java.util.Map; +/** + * Поставщик подсказок о когнитивной сложности методов. + */ @Component @RequiredArgsConstructor public class CognitiveComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + /** + * @inheritDoc + */ @Override protected Map> getComplexityLocations( DocumentContext documentContext diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java index 0c02b599380..2c262743951 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -30,10 +30,16 @@ import java.util.List; import java.util.Map; +/** + * Поставщик подсказок о цикломатической сложности методов. + */ @Component @RequiredArgsConstructor public class CyclomaticComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { + /** + * @inheritDoc + */ @Override protected Map> getComplexityLocations( DocumentContext documentContext From 0c011af6b4d53f9018a6aab6cb95edd00cc872c7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 13:23:02 +0200 Subject: [PATCH 182/595] package-info.java --- .../commands/complexity/package-info.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java new file mode 100644 index 00000000000..c910dca8805 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java @@ -0,0 +1,29 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Служебные классы команд, связанные с показом сложности методов. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.commands.complexity; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; From 95f135fe9b808445d93059bbeaca257fb687eb66 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 14:00:25 +0200 Subject: [PATCH 183/595] cleanup --- ...leComplexityInlayHintsCommandSupplier.java | 76 ------------------- .../providers/CommandProvider.java | 1 - 2 files changed, 77 deletions(-) delete mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java deleted file mode 100644 index 071cb3dbcb4..00000000000 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is a part of BSL Language Server. - * - * Copyright (c) 2018-2023 - * Alexey Sosnoviy , Nikita Fedkin and contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - * - * BSL Language Server is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * BSL Language Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BSL Language Server. - */ -package com.github._1c_syntax.bsl.languageserver.commands; - -import com.github._1c_syntax.bsl.languageserver.codelenses.AbstractMethodComplexityCodeLensSupplier; -import com.github._1c_syntax.bsl.languageserver.inlayhints.AbstractComplexityInlayHintSupplier; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; -import lombok.ToString; -import lombok.Value; - -import java.beans.ConstructorProperties; -import java.net.URI; -import java.util.Optional; - -@RequiredArgsConstructor -public abstract class AbstractToggleComplexityInlayHintsCommandSupplier - implements CommandSupplier -{ - private final AbstractComplexityInlayHintSupplier complexityInlayHintSupplier; - - @Override - public Class getCommandArgumentsClass() { - return ToggleComplexityInlayHintsCommandArguments.class; - } - - @Override - public Optional execute(ToggleComplexityInlayHintsCommandArguments arguments) { - complexityInlayHintSupplier.toggleHints(arguments.getUri(), arguments.getMethodName()); - return Optional.empty(); - } - - @Override - public boolean needRefreshInlayHintsAfterExecuteCommand() { - return true; - } - - @Value - @EqualsAndHashCode(callSuper = true) - @ToString(callSuper = true) - public static class ToggleComplexityInlayHintsCommandArguments extends DefaultCommandArguments { - /** - * Имя метода. - */ - String methodName; - - @ConstructorProperties({"uri", "id", "methodName"}) - public ToggleComplexityInlayHintsCommandArguments(URI uri, String id, String methodName) { - super(uri, id); - this.methodName = methodName; - } - - public ToggleComplexityInlayHintsCommandArguments(String id, AbstractMethodComplexityCodeLensSupplier.ComplexityCodeLensData data) { - this(data.getUri(), id, data.getMethodName()); - } - } -} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index 95d692c6cb5..c2e3efc1991 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -74,7 +74,6 @@ public Object executeCommand(CommandArguments arguments) { if (commandSupplier.needRefreshCodeLensesAfterExecuteCommand()) { codeLensProvider.refreshCodeLenses(); } - }); return result; From 91a9b297bf738e692afb3547f38fc572e7daa7b7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 13 May 2023 14:10:08 +0200 Subject: [PATCH 184/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rceDefinedMethodCallInlayHintSupplier.java | 74 ++++++++++++------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 6e81b5254f8..c98e0559899 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -49,10 +49,14 @@ import java.util.List; import java.util.stream.Collectors; +/** + * Поставщик подсказок о параметрах вызываемого метода. + */ @Component @RequiredArgsConstructor public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSupplier { + // todo: DEFAULT_SHOW_PARAMETERS_WITH_SAME_NAME private static final boolean DEFAULT_SHOW_ALL_PARAMETERS = false; private static final boolean DEFAULT_DEFAULT_VALUES = true; @@ -106,7 +110,6 @@ private List toInlayHints(Reference reference) { var callParam = callParams.get(i); var passedValue = callParam.getText(); - var defaultValue = parameter.getDefaultValue(); if (!showAllParameters() && StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { continue; @@ -115,30 +118,9 @@ private List toInlayHints(Reference reference) { var inlayHint = new InlayHint(); inlayHint.setKind(InlayHintKind.Parameter); - var labelBuilder = new StringBuilder(); - labelBuilder.append(parameter.getName()); - - if (showDefaultValues() - && passedValue.isBlank() - && !defaultValue.equals(ParameterDefinition.DefaultValue.EMPTY) - ) { - labelBuilder.append(" ("); - labelBuilder.append(defaultValue.getValue()); - labelBuilder.append(")"); - } else { - labelBuilder.append(":"); - inlayHint.setPaddingRight(Boolean.TRUE); - } - - inlayHint.setLabel(labelBuilder.toString()); - - var position = new Position(callParam.getStart().getLine() - 1, callParam.getStart().getCharPositionInLine()); - inlayHint.setPosition(position); - - // todo: refactor - var markdown = MethodSymbolMarkupContentBuilder.parameterToString(parameter); - var tooltip = new MarkupContent(MarkupKind.MARKDOWN, markdown); - inlayHint.setTooltip(tooltip); + setLabelAndPadding(inlayHint, parameter, passedValue); + setPosition(inlayHint, callParam); + setTooltip(inlayHint, parameter); hints.add(inlayHint); } @@ -150,6 +132,45 @@ private List toInlayHints(Reference reference) { } + private void setLabelAndPadding( + InlayHint inlayHint, + ParameterDefinition parameter, + String passedValue + ) { + + var defaultValue = parameter.getDefaultValue(); + + var labelBuilder = new StringBuilder(); + labelBuilder.append(parameter.getName()); + + if (showDefaultValues() + && passedValue.isBlank() + && !defaultValue.equals(ParameterDefinition.DefaultValue.EMPTY) + ) { + labelBuilder.append(" ("); + labelBuilder.append(defaultValue.getValue()); + labelBuilder.append(")"); + } else { + labelBuilder.append(":"); + inlayHint.setPaddingRight(Boolean.TRUE); + } + + inlayHint.setLabel(labelBuilder.toString()); + } + + private static void setPosition(InlayHint inlayHint, BSLParser.CallParamContext callParam) { + var position = new Position(callParam.getStart().getLine() - 1, callParam.getStart().getCharPositionInLine()); + inlayHint.setPosition(position); + } + + private static void setTooltip(InlayHint inlayHint, ParameterDefinition parameter) { + // todo: refactor + var markdown = MethodSymbolMarkupContentBuilder.parameterToString(parameter); + var tooltip = new MarkupContent(MarkupKind.MARKDOWN, markdown); + inlayHint.setTooltip(tooltip); + } + + private boolean showAllParameters() { var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); if (parameters.isLeft()) { @@ -178,7 +199,8 @@ private static boolean isRightMethod(BSLParserRuleContext doCallParent, Referenc } else if (doCallParent instanceof BSLParser.GlobalMethodCallContext) { var globalMethodCallContext = (BSLParser.GlobalMethodCallContext) doCallParent; return selectionRange.equals(Ranges.create(globalMethodCallContext.methodName())); + } else { + return false; } - return false; } } From a9e67ecaf985ae682706e62b34bfbba89f032ff6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 08:23:01 +0200 Subject: [PATCH 185/595] Create check-package.yml --- .github/workflows/check-package.yml | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/check-package.yml diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml new file mode 100644 index 00000000000..5fd8af36f9d --- /dev/null +++ b/.github/workflows/check-package.yml @@ -0,0 +1,50 @@ +name: Make image + +on: + push: + branches: + - develop + - feature/check-package + + +jobs: + build: + strategy: + fail-fast: true + matrix: + os: [windows-latest, ubuntu-latest, macOS-latest] + include: + - os: windows-latest + displayName: Windows + prefix: win + app-image: bsl-language-server + - os: ubuntu-latest + displayName: Linux + prefix: nix + app-image: bsl-language-server + - os: macOS-latest + displayName: MacOS + prefix: mac + app-image: bsl-language-server.app + runs-on: ${{ matrix.os }} + name: (${{ matrix.displayName }}) create image app version + + steps: + - name: Checkout source + uses: actions/checkout@v3 + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: 20 + distribution: 'temurin' + + - name: Build bootJar with Gradle + run: ./gradlew check bootJar + + - name: Build jpackage application image + run: python .github/scripts/build-jpackage.py ${{ matrix.prefix }} ${{ matrix.app-image }} + + + + From 182b936008d3b64ca33910c3e6aadcb1034bd812 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 08:24:26 +0200 Subject: [PATCH 186/595] Update check-package.yml --- .github/workflows/check-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index 5fd8af36f9d..2d0b8d60c7d 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -1,4 +1,4 @@ -name: Make image +name: Check making image on: push: From f682459ffa79a839a9511f9022b3317534850746 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 09:20:05 +0200 Subject: [PATCH 187/595] Update check-package.yml --- .github/workflows/check-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index 2d0b8d60c7d..b7850fa9785 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -40,7 +40,7 @@ jobs: distribution: 'temurin' - name: Build bootJar with Gradle - run: ./gradlew check bootJar + run: ./gradlew check build - name: Build jpackage application image run: python .github/scripts/build-jpackage.py ${{ matrix.prefix }} ${{ matrix.app-image }} From 25c5a5317ba82c2be201f34f16fc67ab56b3023d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 09:25:16 +0200 Subject: [PATCH 188/595] =?UTF-8?q?=D0=9D=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=BC=D0=B1=D0=BE=D0=BA=D0=B0=20=D1=81=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=BE=D0=B9=20jdk20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 7d7ff3d1192..390783639bd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,6 +29,7 @@ repositories { mavenLocal() mavenCentral() maven(url = "https://jitpack.io") + maven(url = "https://projectlombok.org/edge-releases") } group = "io.github.1c-syntax" @@ -132,6 +133,10 @@ dependencies { testImplementation("org.awaitility", "awaitility", "4.2.0") } +lombok { + version = "edge-SNAPSHOT" +} + java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 From 167ebc67466f087ed91a83923df7958b2a4ca03f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 09:27:20 +0200 Subject: [PATCH 189/595] Update build.gradle.kts --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 390783639bd..ec25417802f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -134,7 +134,7 @@ dependencies { } lombok { - version = "edge-SNAPSHOT" + version.set("edge-SNAPSHOT") } java { From ed7b6431bc5132a7a3d21ef29ffde28a053e55e8 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 14 May 2023 09:38:51 +0200 Subject: [PATCH 190/595] =?UTF-8?q?Jacoco=20=D1=81=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=BE=D0=B9=20jdk20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ec25417802f..c6785e5da9c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -137,6 +137,10 @@ lombok { version.set("edge-SNAPSHOT") } +jacoco { + toolVersion = "0.8.10" +} + java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 From b6389c30ee59daffd7458442b1af7ee74eea549a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 15 May 2023 15:43:50 +0000 Subject: [PATCH 191/595] Pending changes exported from your codespace --- .devcontainer/devcontainer.json | 1 + .gitignore | 1 + .vscode/settings.json | 4 +++ build.gradle.kts | 24 +++++++-------- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 28 ++++++++++++------ gradlew.bat | 15 ++++++---- .../bsl/languageserver/BSLLSPLauncher.java | 2 +- .../languageserver/aop/MeasuresAspect.java | 2 -- .../cli/LanguageServerStartCommand.java | 2 -- .../languageserver/cli/VersionCommand.java | 2 -- .../languageserver/cli/WebsocketCommand.java | 2 -- .../LanguageServerLauncherConfiguration.java | 2 -- .../metadata/DiagnosticParameter.java | 2 +- .../metadata/DiagnosticParameterInfo.java | 4 +-- .../providers/DiagnosticProvider.java | 2 -- .../AnalyzeProjectOnStartTest.java | 2 +- .../providers/FormatProviderTest.java | 11 ------- 19 files changed, 53 insertions(+), 56 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .vscode/settings.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..76edfa61db8 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1 @@ +{"image":"mcr.microsoft.com/devcontainers/universal:2"} \ No newline at end of file diff --git a/.gitignore b/.gitignore index b78c6f44eca..317b6dd3d8d 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ fabric.properties *.ps1 target/ build/ +bin/ # Scala compiler user settings .idea/hydra.xml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..d53ecaf3d72 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.compile.nullAnalysis.mode": "automatic", + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index c6785e5da9c..4f5afda596d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,21 +8,21 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "3.5.0.2730" + id("org.sonarqube") version "4.0.0.2929" id("io.freefair.lombok") version "6.6.1" id("io.freefair.javadoc-links") version "6.6.1" id("io.freefair.javadoc-utf-8") version "6.6.1" id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" id("io.freefair.maven-central.validate-poms") version "6.6.1" - id("me.qoomon.git-versioning") version "6.4.0" - id("com.github.ben-manes.versions") version "0.45.0" - id("org.springframework.boot") version "2.7.10" + id("me.qoomon.git-versioning") version "6.4.2" + id("com.github.ben-manes.versions") version "0.46.0" + id("org.springframework.boot") version "2.7.11" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" id("io.codearte.nexus-staging") version "0.30.0" - id("me.champeau.jmh") version "0.6.8" + id("me.champeau.jmh") version "0.7.1" } repositories { @@ -52,11 +52,11 @@ gitVersioning.apply { val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "5.6" +val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.13.1") + mavenBom("io.sentry:sentry-bom:6.18.1") } } @@ -67,11 +67,11 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") - api("info.picocli:picocli-spring-boot-starter:4.7.1") + api("info.picocli:picocli-spring-boot-starter:4.7.3") // lsp4j core - api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.19.0") - api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.19.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.20.1") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.20.1") // 1c-syntax api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { @@ -93,7 +93,7 @@ dependencies { implementation("org.languagetool", "language-ru", languageToolVersion) // AOP - implementation("org.aspectj", "aspectjrt", "1.9.9.1") + implementation("org.aspectj", "aspectjrt", "1.9.19") // commons utils implementation("commons-io", "commons-io", "2.11.0") @@ -109,7 +109,7 @@ dependencies { implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml") // graphs - implementation("org.jgrapht", "jgrapht-core", "1.5.1") + implementation("org.jgrapht", "jgrapht-core", "1.5.2") // SARIF serialization implementation("com.contrastsecurity", "java-sarif", "2.0") diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 36900 zcmaI7V{m3&)UKP3ZQHh;j&0kvlMbHPwrx94Y}@X*V>{_2yT4s~SDp9Nsq=5uTw|_Z z*SyDA;~q0%0W54Etby(aY}o0VClxFRhyhkI3lkf_7jK2&%Ygpl=wU>3Rs~ZgXSj(C z9wu-Y1}5%m9g+euEqOU4N$)b6f%GhAiAKT7S{5tUZQ+O8qA*vXC@1j8=Hd@~>p~x- z&X>HDXCKd|8s~KfK;O~X@9)nS-#H{9?;Af5&gdstgNg%}?GllZ=%ag+j&895S#>oj zCkO*T+1@d%!}B4Af42&#LFvJYS1eKc>zxiny{a-5%Ej$3?^j5S_5)6c_G+!8pxufC zd9P-(56q5kbw)>3XQ7K853PQh24-~p}L;HQuyEO+s)M^Gk)Y#4fr1I*ySS6Z>g^ z3j2|yAwKXw?b#D4wNzK4zxeH;LuAJJct5s&k>(Qc2tH}2R3kpSJ)aaz!4*)5Vepww zWc0`u&~Lj*^{+V~D(lFTr?Eemqm3a{8wwF}l_dQsAQURmW$Bm$^?R10r)Xd_(HUYG zN)trq(ix@qb6alE>CCw@_H0*-r?5@|Fbx<6itm$^Qt~aj+h+Vd7l?ycraz%`lP%aB ziO6K|F?9|uUnx$T5aqKdAs74ED7SPSfzocG)~*66q;Yb=gB{=6k{ub6ho3Y`=;SnB z;W96mM@c5#(3(N~i_;u05{yUL8-BBVd|Z@8@(TO#gk&+1Ek#oDaZ?RNw{yG|z+^vm zz_8?GT|RX|oO;EH*3wMsfQTe(p6)G9a)6&yM+tYvZwg;#pZsdueT#%;G9gwXq%a(| zl*TBJYLyjOBS4he@nGA-CofFCVpGz!${(Qa{d?g*Yt zftsoLCHu-*AoZMC;gVx%qEKPVg@Ca2X(0LIQMr5^-B;1b)$5s^R@wa}C&FS9hr_0< zR(PnkT$}=;M;g}bw|7HERCSm?{<0JLnk{!U8*bbod@i#tj?Jr}|IcqMfaed&D?MHW zQQ>7BEPK-|c&@kx4femtLMpewFrq`MVIB%4e_8@IyFi9-$z0o48vnBWlh@E7Lz`C& z{~7u$g;@syjzMCZR|Nm+Jx^T!cp)q9$P*jxSQZ3le#HSIj=wN~)myB;srp0eMln_T z6?=}jUvU5_s4rEcO3k}*z#DQrR;TOvZGc03OR0)P5RI8M<#*B)8fYxxxX(I`Dks;X z_q5?sAs zMlaiDTP-1_XRMwL(q5h(W2yvr9HmtlnR);!9>U%TyViU)t#_5B#W0DnP!P#s!my-T zqbgQRIf%MWo*YUK2vXE8RIy;gJ8p^LU$c6POWt88``5^mIqohk~I!a zv-T{zI?eSLajm^r3>inooK|w$a_2H9J=;|sziKGRQ&FC5CWUF*#N6?n4rD-}S>Eg!tFkOpE7otS)$s3hyim=Ldy&-I$%Yra=M3xIOG{Jc zr8d_wbB301%Zy*8ILfeRiGfeQUIh2N3|41xAR|uvQ%?AIGUkdX*Ymgh z54d1)Igp9~)o7-h8AAH#6DzJ}UPh+srx=B^tGe~_(uwPoOov8sptn}$Rx@&$Ox^8H z!MND`vATA1%mR>+iCrV=b!*TSrj2TDv?Fnmj$=uw{JX1c$tt@zIC9gt)3Inpb+Q~= zh0Y@1o@R7|g+n0^b;v#5cc24{OYlnusF0tun^X?qHRYl#m%6UY?tK9vA zvtPnt7tgpi=qBIQ{v=D|p=4@{^E7)c3MLDCNMKPYec~o)VJ6zmZRE?UqXgYj7O~uG z^YQwQfQr>T!u&NaBfm|PW%g%cDoE8%t<-Ma$wIkMS{3sTS+aWpx=g7(+XtaLt9nqB zrLi<%uH29tuKZ6?`Ka5N0@G{F134GZ+6+RnA|Y+wCs~N*%N4CxyoB6?*{>AMy4w}` z@CMj>CaC}<;Y&#-a6~6AB=v2>)b=&t&D7SK6Vc4p+Tfg{AO(<+v?R1IsPA~@FvGJw z*d@a@6bydfT8{(k2N*D`FO@sUHbUIw4kQ(jrMPa2Mjc&~AK*xoe*c+VfsGx$cnzHQb4bSL2wJvVg>oYR*?s}CgoHMPLwA`Km%5LJm4a&OZ3QL*-+4G0t%;_ zS|DOILXL@I?hGl*3JvMq)Uq;%_B{$ipS*Qkn~F!-P^6Afg;Qf!n-zi$tpUjh9TEgk z$Em>`JJ(>S;8ZLM+$-RWUzFrR!@<;W=Y3ASjLR1`U zRnQ{ZU%JK?(2oo+c(5g;5Ez&I&5{C8{!I?aB34uFL`IQg#2z;=$Si?P0|qnfM1VdS zb6@5YL(+>w;EPEyeuX)yIA~VlFjk5^LQ^)aZ$<1LmDozK0cxH1z>q2*h5eR(*B8Pj6nS=K`)S3FLEV-S*4c;F0<9nRRu$YqiDCFaTc zU2LxT3wJJWeBb8}%B59!#)-W}_%?lSsy~vH3%oytE`j-^9*~SvMr-z3q=A7uy$?X& zf*Ky)z&7X0jy`YDtCs@NJw0+j_3CeDw_I25HR6CPV2t!asKPJV^R_r+u&LUxP)wtR zmFA-~HswLN)Ts=7{YPysG?DY))3+-L*En93o=+v+Kjw;_cUsONDZ!zzk{1O05Wm+3 z*2;}O&??lNOe-V{mDB}Gn<0_7H$ZCa5dWoq#}QCT(~h%=J=n@;@VXR52l^?vcj%GP zh7{kjosPu`1x+iQVU?(TJ^?xlT@AS>a?&FMQRTyRO?(2jczyS@T%&!d8mzxqO0r&;UjTNkbB)J1%*iB$McM0+stU%2(C}f0}_{G?dWaCGjmX7PnOq1 zdRr-MGfS#yqMH&mW5BiJE3#|^%`(niIKQ_BQ7xk`QFp50^I!yunb~0m24`10O=`w3 zc#^=Ae(B8CPKMDwLljERn*+I@7u8~-_2TPH`L# z=1~{&_1Fg{r>4*vu5rRTtDZ3}td&uZ)(p*OD4xfn01zzS+v3c_N~GkBgN$cm$Y%H} z1sPjxf=IxdrC~^)&Pvq1^e`~xXM2! zYU)LU02y$#S?v+CQ~GP{$|nR0d%`>hOlNwPU0Rr{E9ss;_>+ymGd10ASM{eJn+1RF zT}SD!JV-q&r|%0BQcGcRzR&sW)3v$3{tIN=O!JC~9!o8rOP6q=LW3BvlF$48 ziauC6R(9yToYA82viRfL#)tA@_TW;@)DcknleX^H4y+0kpRm zT&&(g50ZC+K(O0ZX6thiJEA8asDxF-J$*PytBYttTHI&)rXY!*0gdA9%@i#Sme5TY z(K6#6E@I~B?eoIu!{?l}dgxBz!rLS{3Q4PhpCSpxt4z#Yux6?y7~I=Yc?6P%bOq~j zI*D}tM^VMu{h6(>+IP|F8QYN`u{ziSK)DC*4*L>I4LoUwdEX_n{knkLwS`D-NRr>0 z&g8^|y3R$61{TgSK6)9&JZFhtApbp$KzF13WaC(QKwAZ|peA@Aol`&*>8RK(2|0%R zyo9nL{gtv}osWeNwLf@YG!wb9H2WRcYhg_DT60dzQGW(y7h7|4U*<;c*4N*sE2sdR zZRP^g;h(t0JLIuv)VNY6gZ)yUD)2d)p?eFznY8$~EZMYTiu%DF*7UeVQPV}h zF*|ls`|a+{u;cd>D@%~dRZBn~-Ac+m&Vg>P=3VY8+$<7Zi7p<~Nq zR^M^jl=zI!T`8H(gK0H945KY=N1J#Up`sWvfY$>1SGEfqEyKIokPVbexYnI`OXJF$ zkMS3dBE8RnB1dK)tJbNSu5Y&$IYBy38luzK-TGMpQcEojhte7Xff-zI50I2qM(i2F2)9DdagoKYlK zz%x8sxFf>5@1bI$-n*}N>o3o#^zP{$d7pf& zf*4SNbn9QDXDCVn;wo6|E0$(wBv*pgxHCA(S3lXJ4HMQW)rU}U7?F zxI}V}W~d>wx97Ozh+^glLBo{*j$o`=hK;idHhi4CG!_fG89V-Ew-^^hhMOWUdu-2< zd(t0O>8BgZ1N<2Xi1G3>r1@d)nBD*K3PsmP{s{&G;tmG_!k=7FNuKO+fCm`SxKP>B zK>mtj;Etn5J%mKvT;yE_zl8vk?q3f9hwea!Dt8yLUCgFO*BnS=YuY}-c!&0jb}J)D zV(s~BTYfVyXK<9y&hpVuS= zc!!wNsFjPgspRhCIw6}w^RvLX#?KnhpM(hB`U3x zg*!~MI$JfAFWhsN7xRdV^%0aygs+rZ;dpWzncKOTAa`0Xq7m(z zS_LwFYW$1KXsfgpFzlw7r#2KOQn(%ww?YQ$bT(GWx*gx2Bsny3J z!6UUPr8>TIGiK`%2m`PSS3Pd36m#OIl#SN?$h?mU25XXidM(*ZGBAelMO)H+;9Uw= z8`vjt5)+09c$b2FAWm3{jId9*ui3~Ihbw`9e-2;@?!T%Dqin&WFbQJt4_m@V=j9P* zbXi|lvH3x49-&)RB5c* zheg*i@5p((w*%DOB8-%Yv2P#-IHB%v>`Y&_9BR4)7ngJze2&>4c~NOkQnJ)jt+X$L z9`^6#2vV*K89hV$gu10|zu~;nKfa?ohox&sMS7NyTlMJCQAe^h{9nZwpoX?uy5xO? zW@PBU$b1{UOpv~AtZ#<+*z+(g?Fjwseh8lsxs5iozi*#gI!;qXBt)G~j z9v5n^MQKOT?2!Dj8;SOO0>6f3orwHJiOFK6`b<|b^4}5n{l-VQ?SoksHS=yv3$O(l zK4aL#0Zq4{g#z$jo$*dAJfuB~zb-n^5(3@{JHT~GGc;Ky(^y99NCxW2rZg%U^gIg; zJ%kBn@NxZn`e|BO6V4* z39i>kJU<7SyAHVHI%uKdcv|~U@W=4e@t=p!S?jnBEq^yQ2E14shzIlXKC?om(H84vN=o^2NtMBm7J~D=rmbm*NWjSVJeDEz-N5UmBk5`GjywWp zZ6s1IpXkUutr~lnCT>!2PPR9DIkuVbt|MCCR|#D(rD%~B zubEU^cc78hxs+x%Vg6$X@16i4ob@ek?PQijQzieZfi>E5NEg`76N6^2(v~ar1-yk2 z{{lAO$SjM{aof;NApyxnbEZnRO}8?!fT!U_<`21g+Y&qC_&99r6|*kDkDETgh-Blb z?9T7UIB}thISUzkw0O~5y~+>wtL{7Fc;gSldH8639yf31)qi4|Wq~g>_I0dfs^OGe z!K&|A^L|jeya>y7<>8(f3SXza9%^rl#3_31Neefn#Uk7*_^}IkM)e_&Fg~Ughu3}B zG0}?Kod{eb?94;$6dD4YV>n9mC5+Hy8M_h+bQmvUNvJ>0P#9a~pPDU9l#NrDP39Z> z7R3hA*IMVAod6Yl=s=BNyrblFv9ahxsA&Gst+0`2T@WSesGH1hRhw z#t7Smp){oxPiCm!XedMT9Xls`K+YKLV>+PC>98;G(5Lw*eBS5`f9B8Y2br|#y@jcz z`ddmVevy*mwN3@%YsE|Fsj!mu|5S)>5)wx;dbtMZ6Z1juCz$0kMS5-C{B5qnD{7ViiFNTv<&?w+5J7 zOvuImg^_o-ySHEQGAp-85!m8;Kjq_i-SzRFWcdAdj|VdIswTnUkggogN4`x{jEyG? zQ*_r9na<4wW8fySLr;PuoDVKKN@|y=99HWqBR+2kiH1prFkUgL{}*5_>twEG!W=|` z!(x}*NZ|P}Bf#p=-xK3y2>!x$6v(pYq)(6dQWk)$ZWSp%-^30dq``oVSfEWcTXE)1aMtpTQ;FW3e5ffMASm16(q#bJ}PAM2+l8m-{ z*nkDPH}ha-U3r{s>8XetSzpDN&nlc>|Er_gOMq?H8gtx5_)=$=rKn8D)UFKeitTF< zrA6>w`_sOEN&t!qEx|Pjw>cpv6y3zP58py3u%=88_f1w?Dh6qHi_=ps1{zKT3c+AJ z-CHtS&YwELV7i&XOXFt+doDFc=HdO@cjpeR_V#?~+=e|BdnS5C#8DCu@>*3!I9V9< zW8$!NLpp)$6Dt$s16B6U0ukr;dz~cWFIBq~D_Il@v4E@wH%Sf#P50K?&Z#GHc^JwQ5QyPaJatDTEbA97~OHLu)q6tU>srf)aJKx!w!`g-`+$hp=yl`47e};Vme|`Otn|zcuTh4TQZ6IKVT7?o{08_qzzuC#0N+` zUL{|(2B|=83J;W>uqDA61!wZ8=lN%B^2FGwkZO!2?1c;bDLELF1bQ^Y?Y+7uH}!W` z^`^=K4S@v^Hf0N&e`kde(pQ;BIt`1ze5~`Nn*fETHo^-|6KuqPj||YZ}sKX zV?ZxRbyMRcdpZnDH1-C5U5;4JguMyzlQm)=l~l=@z2)laaTx@kKq5APotoUE)xH#J z6)(ramD2fUHPdL793*l5S06`4Z3{&?tnR3xfYKS3B*A9}jW9$!H?R6_%7X{4+i!*D z*)40tp!3LCaUi_0jXN?z7Y6AEkZ^eIVyo1w;KO5iZg~7 zHCM5Jk&G}NQwK`~bXb=f#j!xIJJ#ETt7@1qhw9lR(hEuxbrv?Ct!{87z|%xN)YC*i zx*N?__cB*&7kQ_BKkH|g0C{L*XHjv2;aHF<^+m0ch@q*5qw}L{NLOF~Wij{R7GRxv zl5Ne^rT$D06;D(gWfiTsBRtZy(NY}48_YzA+&O?{^mT^%=g%f;Ze*H{?}d8=k;bAO*Q1?nvfP#$3|aI1lz{jcLWDIa9v7R}*UUhVLB> z?TDq)NCcJE9S%g0rVmhrf>=Nw6kt8m!lpu=;6aU-%{(-cj)pA`DiK5kE7&tX-cAxk zV7ZG}Y!Ot|OEx!qA%%(cHP{?eqT&8(26rmJ5#`!FG&0ynY|*(Kz?poEylYbT zipX*&ApQikP2)eD@Cw5>GKY=XH&1uQkIwKs&xAMXwn91ntk9#gnYz6e93PIWrmt>FDJ!k43qNZXPf6WzmzXnJHc=iBBr{8^QV3P3jBjzp1TS;KxA;CN~^( z+=W87)Xjkhvi+QF4Lx^aaWOqm(0Y9CO0GFZR8z&yMefP`|0m~2!!3xZ8Lm2Rvv@2r^&{YhR@ zw^UuX9c)b@B%u83iCNC~IC#%5yDEAF)=sG2Ixi3%m!~JwM$*P5x2h-9J*IpQSa~@J zrrr`+ovQAga*z#m7tsT{r|u?Zhxkhp{;cu*=@#(3`WZu}iQhp)>uS`C#CQB#V0r*V zTe2;aKaHbKz)(xpB<;4XJks+e6S0l-xv_|GDdg@Di2SHte&&#+NZ(2^BxzTs#s&{h zT+P^yaLR3Ngh&SYr_pGSlo1CA2wot^gmLX*Kry~2|D>4C=?)BOyuKoq!#CwNE>=xz z@B8_S`HEpn&6xHL%`uv=rD%h>RB_zhRU&TJz}mn5F1e&^ASo;(3ppRY={cnp``a?A zC0wiV5$%pZ!_*FuGrqYzT=2e770vS1j+=c~|zjkE7i4Y4E(NTKXd-je8>=6q<+#B7yc*NLp6Yi7`s>jG~xBpI-ljN3WLT@-~ z1>TEAk)dHU%i@jw-oY^D2AAb|%)}JjA7Bt{nKOF_Hp_!A9$XYm%X^ ztmK?aV&I-7@30n?X3rXfNuWHp0#VN~t=DRNoaeHi)w&{-K@k@5vgoq(MtF*-_fe2= zYChH0%?FP}6|_HapKK0kzEY{&1ar1-#X(o*HA;tY509Qp>zLBfP;v#}!^mV5J)dZ^ z>BgG%+gA^6~) zZIvs|p~pM!mkV)(Wj^@{;btztU>>X7r>wpDwmCLZ-ovAvPh4@D&-`&>!9aQ4ozB$& zp5iU5W6N}(oJL1>m258VY_?OHJtQ4roUQ9xnhBhaxRO?2T*pfCJ;?Y5nAyb%ZmWeQdtfRjFHZ{sZX3=>dcPZA7K6U&rrSMJ3 z23`Lst@rcgM;A*bOBZ7^yX5>5bBMmNiu{;nn9^8K@J#x?!{n@TH!x&BoMx1Y zpdS!C^i-FX$r+VWfUDF)D_ay~adG-ZLIz0`K#)}p3kzvR0rp=Om7M8tl78YAV0KgX{bGW4+cEG<+t|p2oXOxm#xNQfN z8f%1y6(O6G{7C}RnVfKJuiXZaj0W?HdU$68{-jOybhcswAmTI)jig>@#_t4FFbU=& z)3D3#bDeYZ26=;Z?rb?le{I}drsj^85p*AB*D=t(sbAMU^rLueRZ8e8j2qQV1~Fi> z8hYmusOb@gaqj3$`75=b|ETY1Q+Fq*KH$RLu8u@?^hVwkzBUu&NT}LcfTObO{CffG zsFXYPCekhefLbLr_#$o*i+-Y*PU)i`#x}$R}_=G*KKA8Od zg?&d1E5yBkIi!?6gDJR}d@@sZwG!db9)PIXWr=&{#YBo-o^KfC-w7L=Y$2_q5tA_s zd_)K$q}9eV8#$HB4v)xO`cRrV5M0lbBS^BQ?N_Uyj}uJ$8D))4`RzrAKn8@Bl20*K zK?_9(EL!7Tu@<%jia$Ut+x-QJbj1FEus=kWHhxabUvLKbdZYo9sf_2ZyUzTtQ`H9634fzfh{>IZs*n7#nJFjd~cRk}k{P;z%|sOnYp)rqs0 zMntK7EEh?ZW;Dj{ezME8Ko#w`;YZB7WQfu8Cl3?Ixic3l%&`v9SfHWm2pdd-N*w#6 z>pThQ1uF0rDpJ1vzbcK8Z)NAyf7p9L{2y_q0+dc+(u%0J1ZfqPj;s8HrXflA*Q%+? zSWY;#r_OEyUMB4@+!+QYb20UJ1&W~+YkpIj`Znt-)9V}-KKM^_-T2*HO#8n*e~|@< z*PKcjON29GAwVEB^Quix92bUpcgU|UHxv~9a~In6`L>OeU`GfbThFhw;fLI}TJzeF z0G!n|WK%ep~kHJws&s(en>DFZ0)ld zbX&L4=&DqT55oSDXVOUIOCNtJ?&o_+z|RdgGV~cu#bIU7P1)FXPox?Pt^Wzf#Uyju zHJ-wt;Q{pYCwybEi&h!8>!GxjB3=MYmJsd7{?h#Zb#sZQCgbR3-)Ak*c5Jng=kai# z@B_>mOjhgPQ7~?18moe?$->ieFbaQeT=5~Jd?z*=lLj*#XEpObnQ3^>$2tY5G-}a@ zEmSX?WSoC1&Qmzkw_{vO&V@N_n)R`16?m2h8z&f4!ZL=IT1Aj1)01Uq2tWZO5y$=s zaORP;**KR8NS$#Cee%5<5+F>(+o;+NQrr(r-VaWFBjbZZN76SSb_b1o zc^0aIX`Kg^LWGJ>O)L_3w-hi3`3e%|1sEYkdcfy++pC_P2+`cQV&+tAkLXej;;z$0P<*&mKBafg$S*@#Iivr!)FZxfykAAa& zl+J;luT&!5ym{m^r_*pS9j1jMnop!C&aB@CGMetbC}E6!cJ5#tE)p{Eerq_dc}p;( zrX=B=qAHr%w2o-7rgx<`E+s|9@rhVcgE~DvjDj#@ST0A8q{kD=UCuJ&zxFA}DVC+G za|Tc}KzT+i3WcdDzc_ZvU9+aGyS#D$I1Z}`a7V_(Oe4LSTyu*)ut(@ewfH*g6qn0b z5B!c7#hijdWXoSr@(n%%p}4>se!uezwv4nqN+dY#Aawu%=d-Rn+zkJ-QcHv4x~>H$ z;nl83-22HjF)2QMpNEM1ozq$th2#KRj5s^@lA)tHO0f36Asv{XHuEFwPv8h3aVTxQ z%oEW6IvV#QJ0B;vgw^Hp1Px?Mz2A(2dQ^;}4MsY<8eV>fzO;Af@2_ABvNCN&Vi@_$ zRA;E+5L+M~+U^kL3Cv6VGRI-YP4;A4S&FiV_IwHwRVdRsZgQhV)RgM4Ma^G}ULm!> z8q`CgL(VPvlGhnd4Y_Q(w#EU{=fE(mCcuyXqOz6x9k}xk63wR%n2?k=jbfx8KC{_QVW? z2ys94)HvxzFg3~`E+&TzC@%OAsX|h=**G(r1*OP#MUZ>t$ZBnnJ56m_n+*g-@o>wMN)L+r|C7%OU{k&i7w!T&(lEg>(Lm5?YI)Z zMu*56HN&c15ADmoxo6=V1AoJDxTx;8r_dWba= z34d+4zF0+J$*d`EgH=4aGD~iWMN?r-nPLgUypU3y7jqF-rKVVCMolJ?vXnQCHq3E? zygp@tR;A8@wwqP-$|X$GqUu>re>O?GO0#leqeF|PxrbFUnRX?&+9UTQ^-bmx!a%#? zHr;DWVKXE_Vk>kZU zv>7s5$dTD>2U*zg;YNegvp*xjy`Rq?-EF}S83Bmx;bgi)&qtF#*)1e44g-Oe6BOHb zLCMn`&=S1x^%&^OkftmS_H!DNy0tXtDm$oL#m`o9$?ic5tK&QaR`dqD8&VydP=hmO z4eNH1Vl)1SSv86{1;1>GZ7eRkgcGt^oM^b@+S81dqf)DFG?wjas_XRIoXwxA)TbD$ z&;YM#{~CaV6{j&!q8Q4}E87~4tjOhR`yD|jD7xz-`qG4CixswD1SJ!dNNr(YceB(S zdTBg-bN&brgS8l(!5vd%3#(D9Rs}p}8tkD#7%)3&P(x)5m)j6WJgmsD;%%#t?U^$$ zt}rR)lG=wjUkB3_m9)G?t6Pgk^z+!P)&Q}&ZX<4NL*j8pdJ{Kbnpl=Rg^*{}#rC$9 zgeHxM@YlVRDsc-hGD6kMZ~@(KO!AY7e3CkQJJ^eBC4qsB&hMFE~sc=K_u%p7dodffBw1U*#b6=_ylpuw)MUa&2g24IPnQkKD+p8Kjt| zBrA0e{WbCdZ9sUUwkn@$zfRSJdC;+_fgm}R!nrJph!|;r$;y6jNTv>VK%(mFIc71& zbYEKGXaibyqWmY@Tk{fC;#Flu0igd4Olz3+NBQp<*MZDTvWGBG8rigCLOH%o>>M6OIYwohsAYg2z8B&M~f7N=iLOPie+-I#!D&YrLJ#*|r zk`%QWr}mFM^d&^%W6EKt!Jense)RQoMqrAg_=q!e_ky9mt-vXrEWn`?scHMlBa@%fis_I33 zTO#Cq>!AB*P3)GH3GO0kE#&p6ALzGH1785t(r5xFj0@C83E@@HBtSSGZ|q#57SXzC zBcVYI{w#qZOiY|a25^Fdny!G``ENdD%DlS3Zk}KXPO%lG*^rJ-*YoTz0!5gcbUBIU zcxsp)g(jX$tR0mbI%5n51@)hFEWCS&4h~-C>z+e9XP2#9L=w6n0&{JJOi_tKFjBOmkydTxF?{=r~Z0SZ zQ!+?)lb|XW*a39dgeKjifBjqg6C6^fO>>mhlO5^a!?k@%Fm%OcR)0o}*qm6=$;a85F~$*LPd>M4+h=KK^p< zUTLr~iZCJ`#!sTSSP?A25d9$@jEe9}IiHO>I(cU!JV|?&>({{a8~_Oyc02#bw!fyZ z@HrqJOcWp<_mvL~UYdVG%AR6M@$eurF>ywq!qkU^T{D$%{9=rQK{Mr0e$Ev<4Z5_S zNnwMk`o5QFbqF(j*?kTXXP`Tk>0tE2420%Wbv=sgM}= zFD&odG<``_Nk$!;UUlNa@pUE;@K9l8cg(6Zp^76 zHSY4thE?HEz;V#!D}=e137fguh3sSu$@cn(U(I~bzJ+UcXJ=Q1O00`zY_m-#grEj4 zEGB@jzU304JM9hH$ewewKoi}a*G)7>aprL9L{@#&E63^!f5;GKKdIcz3u zIX?;8Hm+myU<%}TY{&)aehJtE{bUL5REqCLEv$}$XOuvB|LmWM={@UM30}Tc@D;(g zGwu3b=?d;_K`#|5(k3D+azz2#*`b*#(L%u7Pt3A#1qc<-_e7jCTL6jjvyRPZR?)zb zWgFrXi*Z})op{VWcX)K(M?p| z^}a9&&u8|iSNZT&G=-;Z1>0&GKleLMJk=huD4Vlz{zHe^OpLbVZE?7JHGRxRVhX@R zX#DjtFQ~S{-S678C8X4#M?IY@6Nj@YeQh)P53f_5{5@XcsQhQG$hZ}!=|IIsPG@-~ z_{~ws>hNg`<7R&15+VS9kG-XsFaWQ-qAIYaR{NtS)$_Kp8Ny;9bOV?yFjO|C|BAb1>)p63 z4?AKjs4JeWs^@~NgVY^gp5av^K1B~{YF7jfwz3uM!~O04tZ#R7eB-b!IWW%tVX4NF zZl~8XZhad1Tj?)(6C#PG6UgWf`0A^X+pq%_o&XegitvOnypX9A-jKwgoqIsk`7vDH zPz9}L=G;#3Lf5f!K3`t}l&J?TXKzH~Uzk?{5_k9H9xWw9crd@!v&1VY zsOuRn#7S^4j73)ETazCqI7bwNo$t{cZ&ry=x*Xgs76A|6USJp|n$Y_yB zDC2KGY3x!h=P8)>V7&ntYvVVK`hxw4Z_sN~Bp#BR6^2R37pGT z1Dj`(PM$x)t^Bc$%_kZgDbs?_&wIue+uUzpy}>uET;=1A)F*)A>Ata~GY4hAc!A?U z?{U63R0JMe536-g^k(*$`+N?+OJ(#XPk0Vrn^Rty$T*_`6p2GBZiWkJ{>w7+4g|H2 z4M328#NL_h?{$DR4^iA=7M|n{ahQctX<$tp*M$UZN+xz_oI{cx8*`dJ7 zuF=LPSVu%73wwaH{>HwHrblU4zy99llp3ScT+Mw7rR)7PJ^rA!wpR1f3=q)%h-?9K zK52(MxZVT~sZMJ~do{4JL-m{KI{J9x5!DKd$(}V4$Q5i);pa(WYKq|3lh&(wpC>*+ zMJlvE1NX)k5PT%eqpH=J7er0}#EOfJJqW;C+V(XcP_4kkIdOF!3{~9L+ z48Ix^+H}>9X`82&#cyS?k1$qbwT4ZbD>dvelVc$YL!v08DPS3-|GFX_@L!9d*r0D=CD`8m24nd4 zMFjft2!0|nj%z%!`PTgn`g{CLS1g*#*(w8|sFV~Bqc{^=k(H{#0Ah@*tQgwCd0N@ON!OYy9LF`#s=)zI0>F&P85;TXwk#VAWS+GnLle5w zSz<>g3hqrf#qGfiyY=*_G1~|k*h-g(AA+NbC~N@AVhf6A6qXmVY2Temx2|X$S0UFw z%*D3^qpS5e`ZtH#e-p_hv3bYtz!vUA56&MBhN4*snI=g8YNZ{TYX{~dPZ=Z_gk$3Z?0ZR{D-aliB#|SEnR`T;N3$!}02ZQ(F`K#y94FLke@r>i04JrfBacpWL!tC&p$j#%e~c zG0Oa(wM# zM(Mn!CQ&`w@usAmfZg29h)&o{r_NeX64w5N5WxG6q(-s6n3+LYQoV!fQdogT)Mf~f zrQ*(MSoLcIu2Zpl1bcHm-1-=no;nuG(Rr?&=9Dia+wfu8KmGNY@a~FBD`eM%#b5IC zn=aI`v<7i^08qgeb@EmZ1l73Fe^)VHH>vwnl#LfZYM}d!X*vZ=X-Kmm)|p~g8rR~7 zTHpjqRDXxKte4N;M7->5uZ?~X`;`Oeoq;87kGDaWGMa(5g9dgC3{EpOF1o}w3Ms0+ z270RrL{cUBU0=kwNClDNSwY!Lm!3n$dY&svjk#S0d>tPZn?&G%Bdtl_HV)BD3T&C$JTZ)yChEr+){ zP!q~(%s;6J22$ep1;aq;vT%}A@4H_e%j*18G#k|8R4HfuOLp~*H8ydsM!zd^J6-{I z0L19#cSH6Ztna?VS=NwT9B)9MqJAc(Hd_EwUk?-sA$*+!uqnSkia#g=*o}g> z+r%Me7rkks(=8I_1ku94GwiBA%18pKMzhP#Af0}Seaw|!n{!*P9TQbotzCQLm5EQN z>{zN@{lSM;n`U!Q*p-J1;p{VH`75=x^d=n#jJ1K1%%tgPj|GD0Xz zq9fV3Ma?HtM@!DivcDoBi|RXcCu&(8=pz_F%Qq#Kd@NT0|MtB&yqr?e&x3@7k^qX=q=oz=wvkChK5$_^jhq9 zhI+$s(bJ#2(25kdPfP>T<$A@3xOU9Xu;*O>W zPlGz<+y;?kBjzc;6Cx`rv_6DV)$7dgS>VSX3u8DBYT4@c~$tokVRZKT>AAJcn zM`3)eO!3jw64$ia2bI*ky%;JvZAew%gfzr@2z=cx-FW{@F2|Z2yJ)(40FvA_tyb$4 zHp-iN;@m7h0Wd7=&Re6T*H*wT&g*@8FgUyIHK5&0SUQ1)UCLemXi3}48~TLSgCCyk zrp@aYZmn?H^Jl<7jH)47mR8%{zw5cawx$r(oP>dTGqsxPPP=R8-^vbHS!I{bImH+d8&wJ9%Q;wmq?JKe27wwv&l7u{E(hv31^a>U`O|>aMzfL3gd{Uh8TtBa3!a zM{Iu}AI>-WSaizNSJ-FtewydP57^1>j^mNBnaaxoQn&p9y9&-_w4i7^xOT?7NKl?lKxm79T1T;#zGve! z^z&y}PFN96@n!`suxGzHHb%{=V`PLBTAb6YsDu-M5z|b*X1U-HtKvIeCp^%4PTA_v zr^@B{_qoGaW6!xov5Prol9ez6kdqH&(Vd~>o$?gruojX(F}osv#OuA9XCm{BA{HQ6 z7I#HXLktMs2!{a#?(wMAlBNdNxg}5ft0q4}Erg)PFo+~m7-_8kEk4%&n`n!qprR3_ zRKcyO67pN^HTAedB<#V{RM6J$?2A+0nwfZkx z)#H~>#TqYNMDy~b^!AI9>aavY_!YH!u%px+~ zAR_r);-C5#UfvaZNPmjHSuC39+iWbb>#uq)ntooMYNm#v%L5gx`qHNM^>O%V(&=$_ z)SkW9)C`tI#lQ5oYR4|5rnABn0GHiGa>kIEA)V)lr~lGU5$|u7S!kwV34&t z#Znst?`+H+{F>XL5Ihe`v2bcY2LZjt7?Bt^Q*1(5Xcp&jtGCX0X8@7GN*e>1pKz{? zTsY$-TL0JWaic5zP>F zBpD0yg8$LFD8iM^) zk-SPvJ|)^m$UbXDe<1>130Xcxq=9HeXVixa5li>o3bOiCmS8->t{1==s+|s)1#Fxf z`>r33c=P^?sE%sIN{nLrVKP2=8#A#L4aVF0&5hX+277!PfIi#w^-B=A(-v7xyZMmjc^*yX$#oLqK zZ9ANck>T6&l`fxVTgmj2FMyTGi}%N@9p_{)5@W~|eKY+}O(1Eb@~8MeO%U*3OJV&~O!Y|BfsbcWre3Qam04<^Ox8b7rmU*W?BC?5tQ&Maqv&(zE=o#*zFyM3A~aLQx(BIxtIGzX$s zVzx&kS;C&nIUnJf=0g?za@(IQ$b3sWi-$AZ35<7zDuzQDl|s$cdI)pS9|?_@L&YG= zTz1|NMy|(^-ZMSEMkmyA*Ec=8U#qiWonuyZ>vO5Uib@8!;^$YYmuBR+aS?1{mN|pv zw-8JT%`sus&h{q!ics^;33&wOgzyRooPenPBHseN0(uMGO0M=K4B# zfGQ7bWrup@w+0D8zuXDVG3`|9WQUIU2=lfs0}uW&$pO=+x%3;BTP?egh9}g!y|nxQ zF7c19A0dClYKuSr+0{^h;p=f9Z}r~jC}s(xg1yzB|3z2;`K_IX0kqq}KEYNiMmwrL zR11gCd%Misw-RpfU}^|g2}g%6#Etdt0G?#sN0(*BU)z~$KoK{Kq`9iHM72 zx#?+K`4Y8`;N;NJ+f!qAkK#UXrFMqzBWj;wJTv=9yxWXYj<=2W?S}YbPJurHi zQ($FF9S}jGm#Ch5G_{9=G&4K1rES6e)EtmgOi_(}8r`}~fLVtU&2@>eeNlYH>3oCK z-!_xrX%uzAB(J7fGqJ$WVfFlaX$_^-S(u6ywL|Ek8l5*sT z8D9aA(LyK~&|Ms@$?%C~OSUB8zJuyoz!y2nEHMk4VjBmJdxc06{ee>417r_Zx8M_f zQv&2&0cujOd<5@MSTY9gXQR_E^F$=~C=15`95Ht{YHmdLk$@3n#NUOMK$};s*lX~Z zj-hg?05PqDKaXM*=@C*FUgq$9FSP4gH_)(EMoJ6Vkgs{7exk&Q6_1EM;VrM=HLvKN zx7hNZad6+T$rH*0HD{xnW|(A;fL<{)@*L+A~DI2+a&j9;VV7>2~< zOwYgnm%NW?RDa+8Z;c&Dn}UQ!4V=-1_4~gI?EYyNM=CB-ToUF;W;(fN7&0R;6*M#$ zvq5<4o!#$u zL;H83)18fEmc^I%kG9Y0u2a8LzSGT&l-IvE1-?m<>GyN@RiOc=MG0pwK%(g}7UrlR z%-M&;96}o7L1r8apQ&v zS?_M`X_R4kkwW!jor7h&G=I3cyLo=WiDB0_Gi1V3Z<9=>`A-w>Q89bJ>Y)nS-T|=~ z@1h8-J2K?H;h0g6ESyOVVEyg9o<40j9gBKQkt9MJkx!1&%PpEAT{s(tVflR)k?!o2 z0mU~aI_52$;dv3)8$;S9zy4g!NYM&dv+h1r*xa)+IiI?ql;2upk;*aEok5LD%PUqS zz8;1l^|}F5xF(Ao%CIC$YgCZ|0wJ6yU9ZfstHAOwKs1ms4V(xMc;b-etG-ivj|D2A zWYxMR_SLI#Y)|w~S9~nxto669sc=HX zbX$_ZzOwkuE=C*zP%=)t7J$QsNW$t3`nShXVT*uu$f8k+iyTDp@_c=Lp{vaFBc^0&k4p3rk*Y7Zi_uzwrjSgca zMtjp&+ZrhxKyKW{K)&dq@Gfe!?G-`-PBLfo;s&_z5DRcM(+!N~fXTq|3O~PQbs=qA-pTg2l^u+d z%ds=eY1sNyehE&1F?Kp*1nt?h_p`OIU`aFI@{{AP0W(he39BQ}N&Fxr(_Nn9C@|Fv zF2CjVJpZj*KW06pkPfYefvVkXhPmEzhB0ZpvW78P+6b`(DXmx4XD$i@yG6uVoa7U_hH3k2Py`({xw)s6nAe(f(@W-J| zz@YAV6gVhtFUM>qy-n`}{EY%a%Z!g{Uc4KbHQ4Cysq(A?;rg&6Xew@Z;N+ZaVY|*= zY%CB8ewT@Az-G0c2It&IF33z$Exgk%iGnm9(StB(7KF?4q@06F#2&%w!1|s-vJ<$R z#XzNy)JYP=0BaD~u#sigQN$gNdTInmz#5sK4BSByfA_#G&)Zj<2A?Bk3$T_QnC;|2 z<0|qNBOdcGWX_efUbjcIbf9DLA2^E&r#fq>Gu)@g=vUoWqV-D~(xUfMfaCeY?ig%5 zNlo{2#2{?+Ykm2};*J1&Ep^Bz&WB;0YXN=I6)&JUITYUOUDcL5p;6b?izK++B7%r5 z9mr&h^fGbKR>>e`KebYXfs9w~PV?6xQw%lJOA*R&83!gvx2_G^Zzl1NjQ*&uWXlIJ zA5d%t%)`R6RVN`l7|hlJO0zti;vgD9yyKBh-oiXL(LgU}D{!LToK9roJSM_z=}gA@ zV0mkG5=+m9kztd>9U`MRFOYqw_R@@-88|~TY&n;wx0Y%6<;}H~Vhw9l)<<3|O$g znOS~HbBeb++hP5w^R9fzH*%%;O@OyRJ2HQ!`5r6TvCxLMt;lTth4BYout)}a_|rR1 zP|nlJjcdDbp~VeGki#sSoP(U~1 zzvfGSEi^1h$ayZla(pu`eFFiu-MqSdt8cz0qRmg++c}@ChaW9!{X)T1I}H&3h$C+b&J+B z&WGhay#y)vpbmts^9+1um2a^f=rUg9gc(vaIvdu9{ z=g~Ari+YZ*_9#%du+x0Tj|uG&ivk6<0W0(z->5&_@J!xrKJh+-N7(ay9KI1^9DKq1 z-`Q>5RXJWR>^gJg=ceSH1FhP&;-(b&yx3;%21tElpT5B-^B5lRW1stx=Lw@yl4K-H zH_&#(_w~Tx6OXfPTcCLo9$$?1c^Nx?=R`f{P#LiJu7|AN{H=1s9vgkea6`f*yNy6m zELFO8tlEHRx_O|Rftnf+yTTazHib2IaSS}hRg2p_EFj}MmiDQ$RqH#OP&*!>JX=+E zhHHTXEmdmJGX}fFret#wSWMoxwfs%78tQ;lJ+%#EPSxrJ1@y5{w3>3s`&VRTmheQ7 zm(`N@=UL#bJ3J63M84cI!+dq8*0Pa~cm)*vOH>96OZZ8rI+@#sxvX%J;j#2UyoI-P zoHw?w+>h2y0-i8E=E{R&#ky4YXy`dpzp?LN@i=(bZ>Ps)txu1NjX9j_ZqK;J7FkwVRy|k|*99~?Y z`*dy80oA`CJ_$tFQGtxLJfj|?%k{~!rK(wP%(jJ&e^AP#2mSmhEOc8GXcC^~u~)IG z&bB&9qn$v@0V@7Z+WqyCihnp!(NDz!v+(tZ6+efxni(EuvIZgq!%Q;IG-q zqF8&i9!)wS_%M!tY{yK|t}-+MVeB2X)^xwo4U+^n6ZT(3n^9s0^N~ZpVA-p-|=@^inh<~GA#G0Fb6cqg`G}K)*o{T5?_kIK6JI}m$v_ol&8oO4P_zX{TbEI^ zP4gy_X(a!@XOe=(Mp}U0!7ra+gbWnl2qGN(SI*+{5}&-NnMCpgbIjJJMM#>k=g30^ zDbJL&s-oi`3YUeZ9y-BZu65hbFPz;5@(6>;XEhacr$vW+pjdI#rGBriL|0cF)|$5S?ZhrZRY7Vy{kdqRI7&X0dtGtm6}Z)oRm-4;l8Ds`lB z1{;=7P~qZ2_n6wIDqX_QLr64UbcGnv7W5MkBQOQpPgUnUuZmy*Y1;{C(bD+H71WwI zFxkY4N6=#*ys|B0K*aJKZ-tf_Feu|x0wGE^{ za6HB=IjXDV7hj^UMqY@8D*!&A%+%g?A)#u;s#rUkuh7i!inq{PbR#Dr|8ZT+Wh(ZI z1r+upwLB#jrdiBGjm$~v%G;|eT(?4SqN&z(RF;+MW+&TN%T|}sR;8Dh>e|RrS`1xo z;obvgl5Z|wz0;94M2z-Y2WT6-(${?#QL}TPndp;hQjRZh6!1&D`+%7IvJc29LIBMq zvwi(+IZ(P1qKSTq#x08<=kru=S9oc!%gVY%A{T9{D%p8jSYCIzFy$TV^U4-RLFD+w zn77r`QwzNhX2Pbr7lOF`qlaW1HJk_R3Xg`iqZN?BZle86?}o%OyRW zEc|gt<9{tSk0Td&`c-N?)$%jzYaJhoOAjaF;6Z6r1}Rm!15{WMTw!4o5~)Fo-HoU_ z-&ujRx$TNix^SgDySgxKt>YCrB`EyID}h2#B6*Zab@La310Ghd_ma8AO#8-ulwSnj zZ<5BIUzZE;5*FP#&vkvaG!H~2tU$Jkd%gFw`T!S{2mp9?Vh1R?kv;~X`YAwb63>)? znkAD~i^l250{N2CJV<@SZeNTq!pqthV6F>e_QO<+Mykoxd5^JzHJaZeQZ zhJkUxQe7WRdWlz!MRJxF0W`KL@`p~)x5J(z5M;XocV_|rgnnd1%sW+|yq!Q`G&7GP zY07mPEwX@!LGr!_kNsDN#hMPL7#l zlc=pE5aWH28%^Dr5#obbnK@SMPeMr&YC`p^e?y)lV?@3LQVmf_yWw)b$Jl&Of#Rp# z&|KH+IbPYoU^~mj`IAFEK^Z{Gyzpb8*3I%bzXzl%M=>mC%Q2%)jr6JJ(KPB8q85*d zB`H_bk5V~4&VPE&gUAO>5~Zr82#kI9vNGHonE(8&8C(Hj-eU@GWQ@M~+4I^wF?8-BT6Km@x@%lir9`u3T}u<#oKmr!E| z2--yCX0m;Giv$T$>#E8290L1S=M=3CD`(J9s?1X>SX6lZ4GocaWFnHAC)t1T^hkf* zUD3KeM&diP@80N9p%T&fLe$oqvOhhZt`JxBO+^LSf?Q@z_`9Vr$Q6~<0L2-m>O(g4 zOan%-sNta~Xk*}&{@r#)usawmHs1u<1GjQ|b56{BDO&snX)z?_ zAankXRi*W~FHQC%{R2T17EVv=NN_~B7>6qS8-oRfDB^`%jRb@OLn=Vxce}tFY;7n@ zj#*voq%N#N>y$Y|*HtC2U!S=)^IxgQ0-7$v2yiqNXRM zwteC_-%jMY93pATf5JRZt)5Ay&cMar+UEM%P_tH6YH%!8xM83G_bjXj(q~&xt5EB% z3%t+9ys%^4AWWnRiJ*K6xjY*LNS|#O;pS)*K=AB^uJVW_JHF`#iYDK!(>=WUhh6%c zX>sTwaqCCJrW6nIY`0WWbIIb}bAzF+1oH!VTEEkh=Zo6npGn$x%=adz9iX3#tW4ZG zd<(6Uxn#z9!I5&G|DBlUn~4sC6q09u=rux4?hdLGj!_7Cw~W?;w)!zdM>lGL9?iJ}t$XPovsz-)cS-!LHv0ZC zb4AsYLrHn^FyZ^K^RfN==H_K5|Kmms8C*LII4c6rK%~mwn+cs0!Hx`!kJU7zAV@+T zY78x5H8b;aj{WU`xKGLdJJr*0Ydv@5KHQ6gH)}c2!V)JwlsWfdsGezcK zvNM+<{?KLS;}dCbka?fVSkA4*j<+1;zd^mMTl-!=UrG}%Dar#cYGiWKt*OnI2`}s& zKuJNJ^nn0>uh!6qs230jLkzPYLh2_ii7q$|O>AsUP2s0Lrn|+I5<#4D>kLax=_gwF z9%;kCQJZOVwWh{(5l+S2;i@c9Ea^@^d5H*?CXc?hq}byCKRwrA*C%v%mfkhaNtGo( z6ZP->A4&OCCWA#*#FO}#W|pFnPK7yjF|1x3zOLK4rW)-`{Id_xRgaYRE<$eQ5uvhX zwf1^~0@8-xJluw=SU}u}Dw6aJ;q1JO9ug~KY0 zc4j+Rx)`6g89&yl&N%L(+7`jSN#4N90mygg2v-%B)UllG#o_hk%4qb{}DFugg+wjSK#BF}Y6uqK(T} z?kzHTS{^k4!@fD4XcX#W(^8wah zxhMD99Ne&1gVtZZcgbC`hyPk0Duv+(pFsD@Nk!o&HRyRK5G1T7+eQevJC6LPk{?9c zQ-J=nD3qA?mBsZ7LMZK)4N_>F2_tu$3G)*!f%X;15m2(%QTyX5jbibaL(DZZ?^X)6 z6IQe1C)xidS(*m&S%Nxg6*Wvr#c_5a;M1(O#!UP zK|w*!f?nnepYPN2Q*1CL6QwdI+R$^%?Xi@THq}&u@#=_#DZffv#+TLtqCOXu9c<0O zBsjTGdF-y+Z@mK*MKeXymw+sY=m5iC_W;0f&xoJ>Z_(Nj$u*A&fs%=i& zXib;4XQuQ`Jk*=)+;=g|>19uWnY|Fm@!=U93(mB|GesI4Wr=-T+cXbcT)0}e zk9@N7!pP7X;)b3=9w&;zB8_zwDYIgysR+6MlJV2JZgTIABOgT$H7|24>D8+#;3xzh zyKY%iqA_a64CM6~S%7)I77x*&ho@z-+9T$)J3p7ZAAvXTlleQ)85O-Aovu)#(nBFp zlZv+~J@s!EXPC?AV2Qe2x8xWM@qgW+EK=kDvM;^m-$jX%#8X}}_^WbZAFz~n4^?Xl zj%R5)@O^*Xqwo3nF0=1jxhKO#Xm|5ZH%Ot*~o~Quw z_cI`0zS0)qV;eDMqE&yp@f(f!aI}g#JA3@l8p?CR&@Kv6EZIB?Qasr@Gt@Z{w77Nv z-U{;yNYdDIL049ee>V>Tr3Z~994}6y+LfVe( zL~*qRBcjeUeu*d3^?P%t9mHjZr3zcH#b1=(bHZuj@nb&CSkplmQTCO5-ncOKUr7>~ zXO}(#MI0}p_XUBw9Z{>_&I}hoUH;%ATm@}@Ytb5^tGOt&!%kKyT~|z0b_-_?RCARZ zLcxg9h%d{=k%-3K6b}W*odahEdv~P*`guGU=-EBpAXK}9hD!(mCb7CfG)h!eG^FI5 zd=4Io{XOpVr+hC9GHRYg2{EiG9pbO0{pc-`u!{CO2&6VBS#c?uQcF@Ge1pz8z`x7f zHE9T}UBeEQwl^S|gy7HSeu)=DMQEd|gKT=|>Z0d0x2Brl>e0Q*+NDE2Z%mv2r~4?* zs)BH22pO&FW692q$)y8BkuyA5=q{G1BlUhq1an)0@}`oN?EEaV#~%0orHAOc%vR{q z*;tAA6OP9cdMCD$ae+24Qm~2WV^os>Wz#8!J5r1cHjce&Nb+|lF^e;j^Bs&p-JGc~ zKav4|l*k}_e7EyWNLxyMK5|AW7)i^q2!*m2O?(+3 zqby+A^sT-jtH~dn3!P$OMc{Pqj?n#pg7Crsn{p4bJZ}i!``h8~b}(@ZpyEJ+ZW^DyE{7Z#gl4O)5m zjbk$DMFbl+chBv*PFd^V$J6J}hZ+3qBvi5k!tI_S>L$TzcJ^*G+St!ob6TYl)tfN? z;`rk9+C7v-`K&b^3?Dx02XH;WA*noz_@;rr@7b?!{e&;*zzHX(n!PtW~ul z&|=dUNrRvwc>mRXpQk5&-8k|D{su?2jk5!p^G#(vbx?!4tIQ>Il)tb9 znC3VL0&yIpl}_;L7*w91$b^Glb%SBKJYJjTcuN?=rjSt#n#loPeNN^GB|4QV6#|9A z))*lnJ%TH?o7n-B!{luw>GsRBh3~I*pndrHkLfbiN>UjYod}a51nzmD1+I0(7{u`r zlA9>4UXUc)z-!bi7JWd-w@wwKTI>{`9hR1r15}NZ1`EQ*5she490`UZDi{~)hLQAo zF@x+OMp^;QY=JO+x+2Qg;;>mIgf=Xmo^UY0Bv}V83(+id3?Mv1kz18z$0;fV^tm_A z!e*cJtvb-M`dwsOP$-dbF6uU5Yd&C02k~DDA0g?;H9dbopc?PCHW8bAv+1xXzXd!O z=bs!>6tU4sZ00nAP~*Y@frV6L2{yXW)wS2JPr{^!5n9UpOZ(@-%sgtOXPyQVQ0umj z#|bhR`~OAdK?1RqGv8gu00994KtM=RP(+H`^)6R6>^1s-x*RQ7 zWr)DO1*QM_-!NK!6}Zmzcz=fY-cT3weAX9u+-qCImEls)cv({&mB31~sTfkfRfSU9 z@{dXYKVzUjk4~#tJ(Jl*gbJoBq+P2EDx8xF>QB!Xr{_D@l}x+DS2Jw%PYzv#wr4Q$ z<{p>C>mQc{_~j%mrj`i2vup17g&@6~3r-)vgjQ}vy$vX4OsqwR&q%c1yrRY`CLUFV z{F5^#_Qw760bedcYqxO3Ym?KmN#AZdos&wy!>-x!nld4=Lmwf)5eFXEt2N8Iu~QxU zWhsx^S#3sLoZt=#IX=fu>74~JaBEzFwQ*Ew%DaZW;C2b#FMZ6?)-Rqv|FVK@{dUR5 zVYPEq$u{iW#^I@nmdSoGl-=QFN%G%3_toixR}MR>kbQbmWkLJB8S!{&f*kt2D|G?z z<}kD%#qQWOx+6xG&u@#;zXQfCXpHY`nN;(7PYJ1{<4tW*zw)l)3*&h1^^I(YQps}i zB8H=1{BZ7_mKGn)uj;B>p1prd=_Znix70hLVg6M%uEAvS(nMw|Qrw1jI^F()!-C3& zOp?`_DhrI>MoZJNcGqb(x_b=q@-iLhxTW0DzMt#9g0IPfxm;jr$3;gjS=-mVARB6W ztsy^bdmzeWVb4lNyELxF=1qS0?7=q3UL}}s)nKQDQ-|8(A~ke&#g3l#WP`@%Uw22? zB)w&2o_*2U=pf-^*y)C+Da9ck%PAFlPpgQ(dR#wP9%Z2=N0El$$fXrdZs87;i^-C& zXE6y+u3L-}y;k80%=MJv#%fPz%`^BU_3`hd8prA}Lr>|U+Oc7ct3@844p(p8khf!I zrX`B(z)4b&BxATa7wK3*4L_ygb7}WSJpTf~E;UYL?w5|XuB(L1cpyi#hi$6C4#SO` zYEZT>4d2N&MRgWadgfOhb;v4S%whUtMwPiTS75Z!$IWInA)SZHK%ixRWree_0x^?4tck^;}2eX5ll} zQ$3s;24vdFNEq!91S!!HNtcb#`rsV65H_yl+SsCNpV%AB9$hf^FcSg89XBzCduf8r zq7_K2+e^`mYkFJ|=V7htVLEbT;9K?W!9s=@*1EMVC&8$fB4t}SJcmER&6$rwdI6wI zp`@w+t>nlOd_al$CSHl!zWkvr`**OUFZ(yyQs=b=+16^F?cmcLccS|kNnHfpbz}y+ zV#VD(^0}rdw)0xQx65Nxyo*)MydMApuvD4itFO5-(yK$pMmDYQ5qC z>YI+^l$RA5o+1+kGO}l6qs*?<$W6-U5He|J;D}e}!K$EJcbA$rT4U13njeXmUWV04 zE*(&~v=J+wZ#wNB)meIcT;()U9*UkehG0O#b`t2MofG%By7p%!z8goIN;Qw!=U?(Z zXQIu)LM5u$=Q&UtL#ebx@zBKd?u#VPLds9n#p!FWEHr*k{0WtXAA}6?Sr9T{ntB zlb-DYLh__hEgQ+wY$KAZh& zt&aS4yp;Kg{@0JZhqpmXX%=86H-Ppe3S$=9LlRDkaf6p$%&H$n*X1D8<+2f>4syKQ zecCRqs12xWrI8C$2l&dto;YDkFnx%!xah6#`qIaO&!|S16m{T6l1s@JxC~txbpV#| zk}fu78*-_opFd&<)Ghrw*T^F(gm!-i?<-v*^%1X_TP))>kk2?ud zS>ABr25C^WWbW2A_G`(T>sQ0W+8b1yW9omVy?$VpN{_*i_DXgI#L9*`=02#eRg;M=HgS}J9^gh_9dw?cM2yCSonba zrkM9~Z@{}d^CI1%bV}4Oa%$+4biTEe);qYRO3qzE!$ZD~$CWauy#-f%&=%{&U^UX+ z!~hIB60(p$6*T*D_k~Bi{0173X#Ld0fwhJUOPakRaMlQ)3YkVBx# zg5knbl=(sY@Tiu8tx-ohlpN;g$h{F79#p!7C8)Le%inWP^DOB~p4DHV-J z%iRm{p|f<1+6U9e;@N};bY3A^C8fb2H*J%lU4r)6`S8^JoA7txgYiV(VZ=#hE3B;TL6vk(G(qY_W z!POO0YKZ-vI1SC)sYD#G;emLBMVFt4Ej(J~FvIPe{CDkLfm=Y>Pwm66S71Ztj`3Os z@9#@NqkqMB9WAzSs(>z(#CrZ*|UuT27M@1;t zZUYh8EeBojHewBZ)>j|%p+X5BY%J3l!Ume)@n*gy9%`4o$E1H2a8OZo{WZ-OPrsI5 zn;3l+TqmR$*P(Q;JJVe2Df%Se2%sR- zpqj9(xHtFlijQ#C#2pH2HE!G7y`#4H%Xsw=0o=d(?;->v=_AAEo%HI?v2MZNOLFm)M@RZds19xmfL+ z*|#nYtu=Hgcjw7Gy&}%1%S2>>v$8wAJ2R~+M-kNn21-)ocgfmrC-ArQ-Xh%l!S}+Nf=QLbte! zep3kGSahTxx~WCY-IbL{MyGt_qY%(_XX3GeEA)%;x8`3hU0@05AgN7g3Oy?a+V;Hg`*-ss>O+;-AIeMN=up-v9_UVbSd##|#j*F#DP!Td`gd@>xDb?WLvhVQ0Fq+?C?warby;8PufI~? z<-x`!=fDNS#g~QK#b*D~wDcQtN9$2Rye2K@SN^|IM-qJaeDu}~GeHQh)^sx^YSw}V zA^$P=sr-ZbrAzb0sWg?yH1d7Wy7Y0r&gI)2GCJvUs`81g$EIuze3XV*Y#w3&Y`S0VSRR_xr|q6*|QwRQZgI{ z9k@Jpq6J>dJD&D?SWbqg-67GR)r=H~73}CP%VZGiA^$CuoJsX3R?O#lvMJQVc==e} zg8@B@KFY}*)1dk5MQM1<=aMq$eXK5s7R3y`VZ4yjU*=^)`#4Wc#G3axQ-1-lGwk7V)I^lqBYBxsT0Kx2?zkRV8*_ar!tkJt z=|F*IsI*-eOxopCqFj4awt>@kgXY2S9RTy((EO7v<|`_58AtjJm`_I6+hS}M8iGyn z_x{c}*|HIA!gjiYJ7I&`Xc=AMJrz_UQUMCj9}(ZFV$nfn92bZ(o6+ZX!;3inf}!|B zw;Xg|HrIE>_rr^k*9sr|x^slE$-fv|GTpFfHzJBNIzcBecC?-;DJCA5;0Tmo0D zDkKj%y8mPQYnS+kI@VXwb6ni{3zyv0t0eB0oa3$Z$_+zzHe)BYf*-?J`G|k3dd)8> zI|o`Y-!iusuKN?Gv3E`4zo?xD(Dk6R9skkdGOaebO}zw}nI;!jpYJW8BOWZ)3Bj5e zx#CMhIEXnU~ZtFn%w%zMBj{~So6hLKHD34vBImBB6|rr=k_Ov9TDKb zjHv8x?aep|-NHo6bZw~E7&z;lfqdX7)6_9d!3T%O%i+h2Qy8eO#Jzu97y_0DR%Boi zZskbi)tz4_p5?G3RN}xVz)_VC7q~7k757;4Jkcm*1b>l{oR8B5A(n(aqU2MYFPpVB z6h&y5q*B8!@;^PIV@`WkEl>P_59)go7fUVT5s5G*^>im-k*|s-$5wkRp}EQ76+Ugj zIq!eLU!gEOZb?$hz0Nd=-2hv+OEaKb!CToAt`hn51=q`0DETbq)jvAF-4q1sk#2!_$hgUltLx=?;T2fk9Gvi^`h@3j zR&uPc^HEtoq0tCt$W$3NxBs3N*XP!q*QZ75Oa8EYU7qIO+Fg|}YnA-+Zm7E?he&Gn z(AN0GyFR}uX2}`m7h&ZmOt0-I_21pyb+NddB+Stfe7xs*vz#j`{sX^tCE}YRD%^E4 zBDjOl`FAUNnt63d#O!&I>x*cPXld<~b;(78#6_cVXV_SgKgMbR!m}^f z>2Zqo9XrXZ8r%X~!OMUxcEMkb4&r zAnz}M7jly&d4ZP}*|0Wqm5KCVeU^iDA?5RPpo+xYb z6%IN{rz>_6!{12CoCs)<+eX?XBJ8i zR`WZ_Fx(qnx%dyy(NMo?28O; z-Z+y)dMKc{Y(WBe0QS2<<+6vl>x$12LGh3Av;PrYZn-p;M6MM4hQ!pmLfci5##IU6 zs)BR1Xu&DENU7-N0JSwmYN5iL{aO^r^Ip>_oaH0nWGEizG-=y7Cz?v!P{V5jfANQF z4-avR%xP{HbGBg?@5|<0>Rq}g`@701KjGl;*CWuelQ!k)D(`1d(OH4R8inw#Y+>_e zi7c*o;0cv^4iPe|)so#OLYe%rSM2Slj9-JoEFm(^=!Nl%%U^sek|oG`!HP?^E1Y%R z!(|EVWzAaLJB)6RaozREJGc*39Tlm~n943AQZ} zxZ&%U!!a$wR#p0hG)dkF;NeG9AwCww8KmbS#%b09Y%L|}A!8ti-} zaK3ggH3Jg7HK+O&nyt|aYOmF+`N0s&Y~xbzzzLFjnPtxjQ=jm(yg5^D=vb+kTl=j>XHlhNK5n z2XGxTQ^(Nk(5Yn1$99jxX4jp^;DLcclXrG#h1(96y*!pJr@c3V8%vLKyT5*e8bLmb zqJ&d}@gokjki-s!gXDm&7f+qCn^~`8?Lp4)v0p7FqLVNQ2L);`F>Edas{wj!ZeS&4 zuE#B8m(>8`w3r+Svb-mQQB~NHt^DxfwPU!|N8ZgB#iltJ3ce0H%gM>VK4mKuBz_Bw z`qbSnzEXE1a>Ji)l^hx+=IA66VBY|RwJV08LAR64Kqkv&Wei5^?(SV1O^pZTDoz5D zLv?Ec`f|yFK7|7RavcaDE9G$Ql)G9Lhx*&1IwPaHTENXoZV_<#0-#nD_=>dOZFAaF zPo6y6h>h01UT)Rh6VW_|OaJ1JuH~`qiQVBfGvVgQH21epcy)N2(9(ymoY~oca|Kpis{4TTYxkX}3){rPMoy_j)Au0Fk}LiD`tK{%8G41l z!}o9ErvR}jd*hiP#QCVAKQO!%PM&!FmW^cH`A+y2Ea;{A53?yOOMep|!ABg|!UHT_ z%fq>&Z6dvcusl7km06wysty^a|6TcdtUeojF$w}dFcrb-B#B8p z33}B=f#s0%7e1>!8^mRd90+D`6`>IP@2@SiXhW7B0@pbRj%_5l)KC2IOGL#o1Lw%` z7fvSn1I{QN2sz;*lKw^lie-k)(IrSii!6Q;455=K!1zZ@P&yIPJ1(2cUwDi^QHp!O zFmb;D;SZM}wizbTOQ5{F{|KWrE=QUm$s=+IQSXV>>i?`G5s(h;T<=X-5Rh6-5D=RG zUq8?(3Jxg$aaA#nF@F@Ab2boCj5sM!V7g6G%{@t@RZvilVaz$ST433YauhjJ%*P9tfk zK~UTVHD+vRo2UoD@7{c&h}XTZPj7IwU7VpDFF&@M-Y`o?#C>~y!GVH~h+8D0-H9V; zZx8NJ&%0L?;11!CuNVLSY3t16q3RkqJ|?nOV;e?SmN7JzELqA{$U2m*tn(=QzLYGX zX+(N5QC-=xuaPZ-NGODalET;-G+EL-l~Ufk*F0@{-}Cv*=PdVowtLV0W9~io_iN3L z(+iVNTydGm*NiyQ@m23L>`pLAEm6ic7JK4cx`$NQ>LbJ+w~GY#)M-7XJ=CB}PgvbF zD^Bh>sGV?l%+8YiP)aY%Qupb+t9QNieMc<@i@oj9wD<2>^#MyorDx1al}A;YbeWKy5iM_g|DkJ`>%5{()W ztgM<67>~4rMx0%{Y9QGQh0$;`K*ejnhC2xoxOTIr zE>n|L)B8t1+1e-c)dqxim_-+#^r}1M{>Ge|>UBNi*2kJA0;P)PWB*km_{h^o**ou^ zsm$8btMa+AGb)RuvQw2QRW-Ue!jRmkq)wiTSytqmv0H;@Dp=vGF**qW8i#mqK`+t< zWTVK}i!*j(6$o89ZbtQ@_j|any;@#<^i6_QA^=$yjJ3vGv9uPIr&_t@75e1EUjQ{q z!J;nS`B7OlY$&_#Ap9-a5gh|5azpg8Z{^q*B{tYRd zD?aRkDFrotu<`BswHuCcX(V~Se6Nv$?BvD4;eEZ;&?}C1Y>pk()h|Dh%d$046jP&} zd6@mZLFBt<7RcsO^9w*-`Md;0Gj8nl_KV)sYMSp{^4gm__xT$u4PBC6X}|6h@Uj*e z;7B8zl~Y);4YI~wM_YXQa6LPn4vOJg3J>E?Cgp?}vAuNWhjkA^E}B6^A@yk{->SjMlvizuS|jYZcY{TyXS6c6|_`N|D0iu4K=6SU=P*Pu6_!MAp?HR-mCpfA#Z$F(s+k zHk&Fb0-?e=BZ|(6T*s}OJgy91-Ayu2*)6yD5QQY%y3!alN^w0sDmUIeG4_wL8Itb6 z-_o{ne4V%-6VHtzSktA}?K+&S*ZB!nbZE~}$D!lvoE{RsG(~itw0Hzpgm^V>@^yis zc5(4lMLm(Lf_6@geUdzGed3iNB~f+`ql-ZV%lu=Z@@HrdW8B^b`M2@}RI*M-cXuZT z{=H&mHyC>R>j}d(2egu=eDX_XZ<=$~OW%!-ndO0_{GZjTBwHZ6t@(MG%F;`oYxpOQ zSNR2mim^8%U)or^Oe8k&MDw0gtt2<*MBlSLaHKmMEO=fbY|zJDJln(>H*=wp&!hiv z5+SSFgy*l~B)_g_Ma+4|s|HJNc1J2|#VmRo>q=|ozGt!S9D;n`tLp|_;^mWH@K%>} zWu4|xH)Ayley*yIQL%33T+mmE40HHqorHuW$KX>UCLS@#B=-!bIe*OiO^)b>u;A5FUzxo?HC!@vPnv0m4=6-T>(jY$TEZ?c- zaL+ySPYp@I!u__#2rHI?qJ28{e!4q)FC?Rk^!DEtx)OV*m^)P`&{Ifd;94R_z2Aqk z1i=(%ji}?V5m}fVA4O|sAWqiv?_oaOPcDzRyyIF;rWAWnr3r;c4`&*TL*E6-q*%zg zz8qj{XGarHl)dXRsdryOJg}765&TI*w-69!d)`+vth~S;wvWjv5ZH0IJt)S7PW2># zs&Vg5Y6ijIJ9l1Ix>|%)j`s@F-eqO0K)9NWl?`4+9*ih=4!BDW%_WC&hwoL2jnC}G z^vz?U@Ags}Us4)Pm*mc_=JicfdtLLGiMv~6Snu9IO+V1+zNUO4BQnPK%9I!&1_~GZ z>THXu6y+SH?fPia({^+A%g&km=`+n7DK08=gDQL^mDG0orA~FAy*4IDE4Qq(jZmNP z?P365ABnrW&9j3{2c{RS1Ut?!DY~%YoIBF2FplG-(qguP^l0gPlcJVYWl7Hz5v31v z*BoN(^j&rztZjV1__D*^b_Z;J076Jr z!?xlt9mg1D17rC?N#-|P$z87Gql7!K9J6xnI_-s?*3yZB_q* zj}SE3mH1TO+{gHYmBriGr0N_yx!Ce7*BET(El)=y7a1aX4|ndUv)cRc4kF=HLAXL7 zS?!1!AfAv&!UK7xW)|bdU;3$?<WNZas@@+6uTG=e2qc>=e`PYj*jdmEs9{p4>F}mh@nn}D?EB(S+oig zq?=b0d#zNsAV%bc|1pFIn!dEAe1|7Bv_4ghNA3O4FAZwAx1JBPzyi zjK2(1(HMVfA^*#iRe2uHpW{CM^xlVNb4yy5(Jxju3WFBTTWryoaeWNpB~+zEhe zI*4KdF42ZUr8r=)zXV_~X-ItRM<^f)Gl4;}yTPduF<`V~UywX>WIyyn{~(~afJov5 zBPWi**Ezx7iQ{m6E>L1p10Ku;o|?qNH+Di13ZzUPg;(){xg`MjfFJ-mPD#TJ_!(Ir z8aKExxf8q`jo|vxY5}nb$vF6RN)^5YKuI*XahVmwPa~LVpS@bZplKw0NSIMxHZ2Wo zy0qs(ZUT~!P|D`;euM&Igct)#xXJ^@jUj+7_SiotC@vuSOEAEY85w|KjSIE50;xF} zY=Iu{Wk6FiDgeXabW^L18wS(b0tL%}iqvDk7Mr*&K%Nq#l@_WD^QQe4_?C)<=cqts zSjc-z68O{X=ttcGV&MTWXx8{&lcVNYB)nFGQE6jV3}DzCL1V6C`ST1^YeA3-WA?xN zWd0m;*o}mX7qQS~aZZMFFVBWNB0L|x-aJoLDJbr#3@XMXy zU)8!_W0f(6AaU^1yaK$>0VF;X2XU_z;G-^3avya05n$tMA^3(nIP}^bKHv!+qG>T! z!QnwJ@l8R!e**%xtW)Iuo8QxSdA-e*%aGUmg$@26?5EhCIgSa=w+&k0Y|sM(m=5eu zvAyrzLCav5&;R!JvzaZ@dz)tzlwtaP(f0d;#32XxP#_dxLDpdfxK0Rk`|yK-6gKe0 zupqESBkV_~P+UNi2>l6`uuFoy!w6uD`p*`)HsU9&xf2D-QxL!}eGwQ;YztgM_zoX{ zKfdv^UIRN464;i8*Mf{90!9?n9+8GWNQbiWVA==*`ZDA9sa?oqa9RgCQWg0XFHff%59CjAh5zR|&066m+{l``Lbm0wQbicUTBq8bttGcD?h``a_(MU|_#sz`#V)mi$T5NH3^>3e7!r0!_>>r|)?YmKbU>w3vD# z+xXyAnhfx^_WGpw_;OU35_JnyJxJTkechWP|00E6er64vrLE!^^HGR-RtB!-d{KP) zE#nm|yGjW@qX&7w^AM#?_i#V&xDVX)onHQ?0f0}~A%>SJ323qi_ zUW`-V&I%*7n^c=Qw>x~9I^J|gWMN33y3~i?&6N0$Ie8MCEi*wjr_1;druf($Jr;<= z16yD)wdSS&GJ39dF)J&gh>q4ev!sNPP!$wn!qc%a!REZ?DPT14#~;gBqYkPMA67ep z*yw3I_G+zm+dteG-Dzm(J{(y0y4n{QJ^l%NgDga7b&Q1?>_7`p0TwOdTad> zD$c+J)ihS1d%b-R1hNq_ZfQndv$=+CHwdaxP-5bc^V}|R)VV?sQ zG`MpON9^Y5sB&G@uWp8}YHprga>ERzXU9BnKh^Ve94m5f(oQ#Xr}q_owr7v3CY-az z+)VtLTWqS*nAQmYq*{+?7}0yH??dfumg4P|baz-_|G*zVa+qfC&9GJh*E<{0L~!JB zC?O)kPApy>p+iKk6NR|Z$(C9kfy)Ql&w6~(s^>nu&_xXUom17|NQJ zC!W#J`GShp z{)gR21Y#3FrI5xcJFz4~Y=Mo`#nr7e&&QLS!6V0^xW_}UrI5erSoP7xqV8g1sghvh zN-O20s{OXLL^}_k7@xYAN6%4T*3|WEN+;B5BHDZl~&} z^&cC!{>r83p4b2)mRfEWLm}E^u?J%nc?d{&FfdqHu>Up+SYc?xc1hZlzbNqAU0o9M z-<9H-q7yggm|Trc4LY0bHl^f8v1D<1vB{h1U~xP6c3#2b!QWjUck^@MBM!dY(m5WX zb3~Lmo?t$q7wwmQjM2^Q_O$W>O#bt0-o8Qir~EzMzUSqKq9AA&d@2ZOHv9@udx%hf z-A@kH{;21S$B+;d*YzRX2~QxO164DaRw#DAKbOVhkeu4XAhsBFxIA$d+RtTN1e}Dy zx#+CB_7Gn@YtTtE%{MZn^diIEQaRlrXZu#7g8au$c^~LkBW(i4ZT_*&mv7{-hO~uW z44Hw8d}>LR4X<18({b)2_E@eWLrkeXyuYkZ<_bZaDHizEyx;YY`4}K~keO(YJ>td> z@uT)orpYAEP7|Ga@BHk@2nN#|(0yyO7y$WIR0_^|;wn|HjQ1Vbr?{6FZIeh4n_(S$ zTkBJy{rWXRcX|@I=r#ixi#p}4xM39y{W4x#{$lLWwoi|@P{UI!37}Y22a*ZO}b((VF*`8paErO^WCTp%N z<>FN$pHBV+K8IX9p2Is6LJ}3&!_{Kncsy70KWeG#EZUoORe|!(^O}=NJ6_7o(DDOH zW9Ug28!xAm3HH&NtiRisRH{FCw96|_s%;`v`gN_(v~VoDV*I^t8ytiBA>=gx)7(}) z#l({u(KeWVjO}at0n5{~plTc`GD0_w)GhzVT^sy{s_Vj=YfjDjaXQU}RPuvdqJ{e3 z8I^kn%`FmyFMyM&p$|qO&G&Otxe9IgpO5e1ZE7+srpdb?A-_6Zfkr1ZSu&eHYN|AY zN?Uj%RL;~%!Irg)-2wts;VR0l=}%^XN{`mw$X-V^kqOIMPR zw+INRO)}`8{ZJkr@DrAif%1aH-(HSr54jVK%aMrk0PF9En zH%MNT!mPugh>L{*x{ijH)TKet#zMAshp#goVhm!_p0~i|d=b zKX7*^*a-1xuCQu`L9M{HiekBiSQ0yn`J$*EPfRJ5xty~Qm)yRw2Dbcz`oGhg0uX|1lABxTc^AgGQH#C~UWis6c^j@uoY% z5%W9q98fvVAT}DuiIJ>>vg{baVd$R_*It34ZyL{HL7T6j=ZXD zKGVCZcj{bZlHWA0wSDWvXs~uqKy|(%$5&z#$PrDdK2o&w5ts!UVaKN#7Ztt9Z`11g}{ zcd{hS(ApwuI{YHb3KQC~^mFnZ@0!Up62{`MAJ3d9HmhzD@kf^LL)2q)w%}XS*^~qS%%ns#qGIN=NbuLV#TR|pEGSRY(K;zUkUVM%e zd!=*>X#socMI;hG0N&8IDlSeAmvLz`KGE`M(?pj3nCq&ZQ1SginfsILm|eS zH@kIU+X7XJ-5G53@UV6*F_ZZ1hYCDC`*%TSH$F^~9sBIS6jh4C@9r~Uiy^MeGcH4g z?Kv`etoI%EL8;x-skig=DTOOurPqz}J`I$goshX~=SFDnq6`?7Z3u|C3if z-*`tqVlp!`ZkoQHn$!ajh*^DsADebD$yGPh2$f#y#BXWtF865&F`QwbsdD4=7O=$n zT=AhV>SpHUA$I}?!opy)s2EuKlWR(B{ASlW&pm68z_fhD?mXOEG`|*EE z8mqiOCkRh)+dW$P$&~q@%j&Djt3?&!hj6mpwNG&0&BO1N-jNMx9wt3F;sc>59P`X- zMVw!hBqY&r#{O5n=Rzd$eb<>an8LGvr?NvZ^y% z6U#A93?#Ue|GpZ|F98zK1+GjremNb1@6@cz z7V_ywkBWBAo1>I1)h&AV6h5MC_rVk-cUbkht>BYOwEBVkIp>4fUpez)BPtm14(Z#fEq|jjBK#7&zc4OF1<&#B8gHm3f~};t!6o*nbFq z3B@xY|0V_RD$!hrO8|zNzpW823?jnPp~tz8_>(T?O9T2ahz_ zec%rwzyE!9tR9p&hZzsOlF1 z1;Kz9-<+FbPv@}5xU;}3FJtCpVG#x&Lh&khYWz)?k-B@_E&+TC4M`La=?JOu`Rm%N zWamCs)eN`k)X;cwYcN9j3Anl}F&B`^p`!WCf8FIki?6h*HvytD0Nr8Ike3=J;yH0A zV+P5P8*ixF?qoy>YJQ-LAN{~DK=$ur#VVcTvGbd-zd_7Jt+|elsV|mkHc`5t%(NembP<$4=Gb1pKp5sg^O!rh**7qbcT&jeu;haDMQQE7iCS#+w6MCo znvrj`4uwQG2YaQluyN&~X;}bvxNl1qvXbgMzX+CEYX(pFTdGn=f=F(%kpGOi*`XBK zc873Gx75)Ar>HH*zo-dBMAQTdDZ{X3A31^gaSO!Ki^V@NR(plHRkt{Br8OU19Oh(M zbQK+PpsuC;XfnHm&>(36OT8cS)qs~W&NXI_mHZZ}=6c+9WVw(4{T?72(>Ai}A$JRO zDcD>=fBm(wgNJSH+;pO2NE^Jh7-*qv*$nj(^}JQKZX?NOO$Cc)aypmxVd)EDb$DtC zuuS3NuWXpkV!wJ7{5N`H5-;Om9KiD7ZHs1pnT^Na1IdWE?zfaaIK}8Cb~jrrx#q|L zQYtpP=ej12rIGe@j|H?Ok^hxMJ5@eZCnB2lh6o&0>7Sv#b)l=m1?FQfIX=ehys%Cb z%@F|bhsvi3!eMvT2opkg8j^c7Ms@f8eV^lD>Ops2(Eom?{v%#l8q6Aqev&V~B<1G4 zV`{27?tR11a0?|gKMIgy--}ugV_BBujMG~EJX_Pbd;}Au{Ril2Fn3vRV!)?Q6{-w} zbokVSg(mz8Y0>HN%{PEBKf11;PIgPxsBG*_)0jaWfF?p&l|Q;_Y!H^kKLqJTE-+Sd z_)HK{&Ep6ArOptwU!9HRY?&vYr{`*=yu7dJshy+i$z`oj+m$-mW$M8+zpLp<8J9Gb z!Z4lLKY9je{sD@eWgY~`snUNL>_KL6d83>Vj~fv10*XQriS&=ZAR9=l#FF$WBKkGR z`%>T->GNH5Fkb%2&*=*Ji23cy&a(0(APAAx*5Q@K=58Ho=&A$x0bD_+uDOPX-b6Hw zcvZX*9iHZ#&petTj)g8s;>2$OGE{aUaE--kz35JQ(tvw47OidBaeJX%jUj&V_!h-! zXK()YA4(-Ti<@YVyfZi$K1=1|Nvip>%@6NkTIP4gy^%%r$Mytj2z$uI*j($Fzz5~j zLCD6s^fD+nkKCC_TaXA+;c%SN5^owz4i)!xv1EHnZH+p;qht4o)|=}2d8(w5%An$; z!^7V+aiEd0X?E!Vv7oO(3YVT0&P3h?<+2^`lZlrHGxP=TEfMM9W~EKX*T89_9p+QP zi(`^lNA;t{5zE^>t?mi3AgkmdZ|Bfsc!-AyZ)ie((nhyyub||=OOdNL=pJ7SYQ|EG z-Gj@b#{+M0^OcPJbLAYims2u9t!>FA*z~=|4DbNqE1&B*pKq}b&Nf-u91rELq(<4E z!s%s{#9ddly6Oq;_xZ%H=hxmZFbUQ-{ng5tcGlJ0B-G>A^IH@zH=S{RDTJ{JDaW&) z-4CzTTdM7+IalL;(k613=lJR2aUiOo`IgJ!k+bKSt1-wRp0!a_S@?$7L0FMUE$P6c z1Za~xY`p4m{G?v!+TBPriv0eP!PfgnL*3VvEEe^EMffiwqfp##<#UL7Ko9y;V3GA~ z6I3t^s?SIPRXfsIFTTOHE!&lZ$Tj#$W0__-MYcD@Mi}fB>tAq32+sH%G!=4ANaLLL zET>Z1Rx844r6FtCF@yzNC4)x33V)^-;^poN@n4;5>qz6Wk zH1`8L-x!w%1NV|+Kl-MY$%&AOITrdB?mFEsUPT(%SA;$T`Nfbb%-k^>LP3H z@V%U>P^u|el)68Y zHRfPclv6g}53DhQBoxm_l%H|`5&{>5RZI{AyIXAV1*s)OB6zz7$&OAi$H?VN{1su6 zPr@WsK{-K`uNUXf`=|^z-7%g}b@F330#|bnnE9k?7V=0>XBUmaVXfyEO%Y0XTW?^t z?4+G!q<;dmt;?*z*wod9rM4S>iSlL71;;^=s^IR>E)ZYtM`%5OC4q@}^8$a)EdDx9 zQ#EE99N3izLyE{XzoEZT_LePFIFo^G)rUQO+(X&&3Xp*n~#pW5rDe*%X$V{*^!4s3IYyJvIFM!qv zl}{<`8bba7n}-Iuz{K;XL1t^jXk!TcVfb$HktTU5c<5dIF~4|D8vVuH#|83xr%hMs z?g!K-mER8;P9UOiXeuSYAxWn1ATmaNOZlv+q^#M6DMP`;KPsFJ{0yifhkjB36I>vK zgOnXlEh0PBk-^ST=V?>an#`_GY?jC(oM;=p?p^g@zCRNq5UqA|#8SkQ`>7Ah2iv!F1;=MSG_PjzE9Z@Ihk0{-CiM3(Nu|DR6MCsw1By)R$53g5 z#m^3N8fF;Z*7_=Hr-Ay~0=H~>f#@9mXu`@iaSds<-7JE>BOk!&@`3ImsZR_dc8>^O#aza>KF7OPJNFbBpU5oQa=xTw~Kg5qa`qDG5KVr;V zvd%Jb9y*iFOlpZgKfPB*<5G718R?Z1^ZpIAO_{Z2_zdgE^i*AjF25CL9Z}K~{}*1^ zCsqMe0xd+_(M{1ZzNNAeJE`5AH)e;WKn6k9(%|&do@&8Z!h$Rb##hJ^Z*>6ow|j)U zA9#dDd~zs#@&LmBlBTqe3;edj)H--16}R4;Iyf*eCTuV;`u}_=>@=ls_<#@QB-R&9 zL3`C&sat6bd66W447mcE&Il?Q9AyBh2)e{RSX_H5^0m|WE-{tTfk#!UR4h>y4vj0k zQhr)9_?VKn-_6?jkF*1xSLhm(1RfBp}!&W62uV{8+sIp^h(gXNbNw;NmE8IFLE*VeMV&tjeq3Dx7ySe(L!VuACxIEUqWVk3Eo5-ULbj0C!@Z#i2M1Uf$(|=WR$t2vLIm$kD|q+s&H&prb@UFUX*7CDW3j4iT&QwM;?T)`FVr zAoBOGzNR$$P+F!LGOwb9?YEqG^CLJb%N?gSu38#&M_^*#ivy3uri&3KI_G!iE?|}= zbU-;6+JsP#q)4<2uHL0&zxvm##w$;@ZqMZ*KxtT1p9zbdL_nfFr|M8uon)yQto?rO22a!{f)QsCJr5#CP%*YhG?2B^GG|4jGNjDN`v7jb<+0c*G1csqlK zwUNL+{l(bT9D;p}i0(oraA54VH;5(B2om-Y8wR-eC^6Z@F(gN-qRkZ3U1Fg&cts`b z*lC`q4!tO?EU@W}U$|818*Y(Sd=#ro6-?yoh?DZXT!xC%*dkefu`K?Ey@N;2)nZKm zWRszUd2Di8OoaVc*#u1?vse@vjSJGE3?~x_K0B#7+0<(pv?U^_=_NDB!E>vj)oY&K zU<@$YTr|;9pg8fll%FS* z$9!@7sPV^BRX#m>)njt7dzagyjHD$1?aH5uljSyD(qHcS2YT=QyB^FtnBIS z+4=Gab_OLJtsgl24Zgj*K2Hnvj!Ld3CB*EPmtJhnrG}VZ>Quikp*j`I=&fZMh8%)GX+z@gc?v?uzt*1tXSgn`q$APMC@hR2J&L~=;A9-S{ zu^m}+$E(|N8uZjPO2?jtRjc2DxbJn+dFMiif2iY?SD)JZ_Vr=umGD0aP)kBD-rW3f^0sdjmVw3&&0ZM#eGu|RmLzDDl6TbtXzLw3HSusL zciNsdFQ=E1jh=(|Ff00G&nqm4h|wo>&OesTO>4-`+=xM~Wp+0sD0)yT$H7fnvAm^c z2&}ecDki1fAmA4U#rPX;dmRbPj8yuP^N!3aotbk*sipoyd_rVJ1_S7Ch zq&?lb`Bkcx<$~;yrMIzcFJ7*+yMl?S1FE!&1Ng@9Ul3da2lBL64Djim&#&Nm-tZji zv_+KKGHw-=B)HO8-q5+R_OZvifAEdP;oEZMCRqDqYgA>J@Fod?);UE}BX}+@gPgsi z(^y~)7klb_q;e(0T<2%`dNtBv^;I1mQPe(eHyJA7c*0@z1;qm`c9PjNPo~;>D`uv$ z-vGw9#926x=z;YzLIzeGh8EbmX5zZ#5H83^YO|Kan*tk+Gb^Xvt4 z24bnYu-)i5RAdm~MH7(qYQ(1?A@7PN{lXQ7Ph4I;N?Tg^UUG=r^K?M@#wPMJ$<4_m z8I7&m9d=Zux-P?edKB@Pcgus2hW1LpF^+s9dW=XAoOP`aBHxf}FL#{9C0}ZVCoTd@Qscs~AwyA% zj&Wsh+!?kwBXwGNf{ttoeNW{X*X8mqw2FmmwEy6nZHiFf@%~%$Q5Wi56q=A!rZG%3 ztP~-q`HHQ`zjJB<1wmjj4Q z3n`=rbbJFay|Mm%wN5goeOplx!?DTJb8u$?(T9(UiLp7Nlahr)mKR(i=aIE>TwF4S z_^CKHNdLIV@GH`htoY?1wmk7JV*kT=S*t->@Pgz?T{6(wihJ`nBOP1O;@5)r=kEK! z^Sk20=V?jQxB3y`6H^FAr_`PPWP-drOzy;Z0K1%uFa>QSI=qbCqTJUlUb-vlmi*dy zj)4VqQn5pLdV-7x*RLSOZL~07@Zf@DG+fqa*^l02ma0ALgLDlC>QH#=MKxM%-6cIt z@WE*6?;(6XU{ZL|DjaAaRPFyk$krd0w~TsycKg7+8uxi5b#w7y zv!6u5nO68I0n|(mb!Aol_utq$>3N%PCR@u)Z5!V!vlZrJ9=*CSRxK5QljrMW@Ww{TK8JD2=pW2QKzZJL;Ipv&^+&dW*v}{*1 zSUzz-yK%XYM+8n8D!*HqqTM4Lc_-gI;eE7Rm!`_Tsd3LA9k5(^){8_@3QECWKC&h zCr@|mbxH@a?XoFck%y&nlL4g-@8)YcrGgjwG#%lq86u8o*|@sgwzrco{#xoL?kwCI z@w!7&z(9>{i$)%o8Ga@{#l*J}JvqVh4lHv;*LsU6F9{CVB##$(Wxgwd6y#E>Va-_arru~T^%DM0)SC}t=>%lJyH+;qKTSZHpLz?X%Wvr?H)0zy>%QPY(d&NOjBWY* z!SAuVhR-(dr(=O^vNf2cG^gWs?zx2CbWD9?xS(57MrT>>X}N(zZg#v#+wXXMt=Qt9 zHN4_l3L{lm0?}+x+pcM$iofbj5V#jd6W}||@3)SEPS0ppm=N{>keQg`9{PIR zX1NU};MSM|;cb{3)b={V);NP^*yVIJKQcQEp4>zcN3-h5moc59y zDtyQyVE~>TUaiI8I997TTcecMbun!xS8O*~s>BHw-pj>hnZrc+w<%zM5Of1yI8r{e zVteCRr6{dzqb|0o?GavZd34-H#bC=a5kHjC7Am#>CazJJfzyI7G`A{8PJt{x3jN3JZT(?OwH)DNXS<$3g9xJJe}mS&YG!ux)&++&B|Sh zZF711Zn8<8kus5sZs|RthJ7-I>&ECTyT6sIW;xg$lyy@+(I@lrbzH;*JYR>8NWmfpc zndd}Z7MjyZm(}f5ZF+q{wZti%EWL7arC9&9TkrQ>$VDJ)sSZaLQ%kjm2Kly>;%o5!S(7tXZ-*hlmEM zS!2UZ$Ey_eXDc0Z`)sdxqa6BW3i7;kXuosy_fDBd41q|)X`ku#o^>8u8RcdJq8t6a z+TyaUg^0!8G(dH=(|e0p5~V4TKQ*$v((Us0Jo@s#aW{WUaAz|q_IPF1B>Lg^A8DTP zUzrcz@B=z6pQ(POCcVhh`SL;$=nPN%d&j$qErsw*W#m$V(-JZ)Klvj$K+(@oB~JjN z(pb$>LYNYQWT1bcgH#!$+FlKtx;j@pdU|AZ^Y`Ok<}OVN;=c_zaH?7cn;}&N3=KbV zB@9P#Xa3+%?$;r_PwqD%z)YZ4Bfw0e))PcMf&r?TAS=7DF_ii-rk`5N__87}yg?IZJ;Aw%*omusSz3X32H#`< z{>9TsEX~1&Wbq@2qjvGN9)-kCB9|~+t69|%`^3Tvj|s9ZqG`VulKH~8egD3?BOGFB zI15O#3Dm*ORw>xrMSbe3nt^Lu$ucyNhfW|iQkNpu{+PGd3HSv-FW!+|K9?JAXSMl& zGwAL7K80_G90}p*Rx-iN^Y!>qd}>)urBhxWnI0bIp|F@+U+Url-VsRi#h;TwI91FX z=C>{_yyYNqPwc@N|ypzNQ7+oK4-KMcR&hx<(fw^s%CI|+S&gknxmwmJy^$_&m4`vP!{ z`xS}YLS%SA>JT^Ls_>R& z%Kd~Is;s8;H`Pmcx^dD7A4+y5=rP6do0KQ^JJ*5h<7(qjba$4Uz3?3|&htK)?&aue zDLTuLXsR1AQsWVrEd*xi^OF;Way8Jtg7^ylBnvBh76grOvM1xkD>kwZ#h8hjf$9(4 z5JkoLi2(DJ0IMoW@m&~>PopJch55RIh};Q3)QuBoRXRgnAgz$`ymDjs0l4EXRP8~V4a&p%-U<(H-UIN=o?l>H4#tha`*Nd``l?S%`?`+yAIv< zaD+y^u1o!Dbe?OqOh(@J?^e}8x@1(_ie-FTNO9jAbD3+d?!f+8<Idi}L_YObnei1w_ z%6Vp(8SI*>cT2f*=tNw^nod!}pxrxwnN~)jcE?OXi;oCds^ZgBf9M3g66ysV6E3qj zD&)!q&x@J6%QPdZIT(>~gdnbFfBUI0l9M}aMezuf(U4^NDwXwT%>fZl1iepidXMqU z5`Fzvef`wpw~U|W(ec9OY3A8wwci%uec4)x_%AMae~-tQ8o9{?;2_|PSycWDLBh6n zbq?m?%YO;-pX5Kdi8i2CqQ5iqZ|fVsWOr>|I}$|{%&36z zumlqfOq>Y}jP(D3&aWB*fSe35j{<#4?pKybi!3ZUVhDOBwBBDTUs)-uhk1guB}sj( ztj_iIl~_ZEhK$ZqtPDs+$%Zw(u5~A`wXMKaCu1Cay*J_Kc?Ife@u9s*mYw(AAE$-> zng4j7`}vhWpNGvQ+Oz-Rm;W%JoY!4ZNU7Axt%PT zu12AZaBQ105f_GeaxQ8#A|Lj1X!gjnhm)aPmp3u-t`=;=u3xWm1M-~cgBs6(VE>^U za8JJI78*igZ&NCF1~5ndiqeA~Ao@k$s1vxMZJ~^dUEPzlO!*O=QY$5M=SQsL7z5>l zyJlqSCbl_uiT8=V?b1OwBdG~?$+j`b2%r4MA5=W-nmvpV?G0vuUy&NnF{hBpi+GoE zLUD=e_mFE-Gv|=m?vX#dCVh61$dwOmSC@K%wB=StanX3o1~?hQ2u~$~(?kc-8^n}a znCL4Y0&*UIkgF6;e2V@-t9!cLb$#RxisHQa`C=#oFn@|WNO1ig7~28fVv91F90U3i)`7JUGYECJD=%M|GT{tFB=nuk}v)Yc{Fy)-)hPJ zSz^B@r;(q3Ao6h-d6v_`-H_6fqrq*>q-u4v#4zQ$-SSt8M1W_{;iF8clmmI=*;J7= zy|AO!5>Sn?t)KGL-tXL1s(?ZGH~sn0`}B2$;x{UTC+ zt$l}NA}#3lr>v1uHcMNV@!n}(#r|&W1Hc=Z*MBQ6SLka&`PDWatgpa;En7hejv7|h zBf1Pee9*qr4ME@LUT5pUH_d73O}*lU++=t07mmT|S10+cRLaK?&1RxRq4gY-me`70 zARoFXk8A3AeG4SJc_M7od{4Du!NZ{5GUjBa79U*MXd!F^JL;c=^XKhSIfI_>k1{fDe49P5NnAuUZ98$_|~)A3~OZ$+4;WtuH=92N+& z=4k85L+euotP<`#=H@EAlF(`5!D^_f`%#skcLZU;$U1R^h_c2dF=x8)39~_Wa?SSNfH~sIe?@qW#m*(1apk%K zjN@u4BcJIDa-d%M#_kz*J?j6AdET;*1BO}q*Bajfc1cU$22`Up>k<2nTi_t0^@XXb z!ZK z9IYToj^*N!N3dj7)1yP_rh>r}zgV=O@f5}Ukb~aSa#@kjP=4dQJ*jc|g@W(qH0jR= z+koyN#JyYG0?DcJ*@x^GBmlp-A^J{k`b1aYe5@=U5rC9JsmJ|OvrKR0l_P+FUGmGp z2sI4C<9PA@iVsM~RtXs~-viWKR2DoC*fVo@Ly1PW@l43U119 za+rmTrwJCCSVkV?)gML+;5e`nX)al347Q`kMy2{mEU*`j!jFca0MNwTH=<4q5Oevz z=FO-!fh`iF^s)=%;1vsrJu_wQ_OGJD1W~ zN89e%V0ZpSx`eC=U>nRyJ2!ioV(;tx_ z0k81pZJ1R!za3r2<~gcFdhqgCq@53987jvYmy^*_ohLPPD^mxB`6ivpbTrf^M*!BN z=8AoG)KH5Y`u&#{A620XeK%C84$mMxa#?j9QdXth;bu5KkojM1Cm)p0!p}Z#*>Dg4 zEBrzug2zhibn?XtQ*!iWD>rdFB|C?~i1KV8R?Up(eO)(mnT1a0bn;xXplHA8{G(hT zkO;ZFNJas2o8nG^5FxBeg)hJU5 zEU4C>cM8)D;O#HqEf}0$L@0BXeYirCJD!m&7^J|yixs4r8OWm|(0w}p5G2d{e9I`B zU^)8;{0dnRPT$dG|2}Dq%oU`2T6DMQ`2|%rvFcY)s&;A&+%k?P$0fU+p6|E5MhrnkB+8-t^Z@8R=|5C?~e)EG#;i8W+j@g8fF(0~euF=cv=^V^W&#KQG0XSUR+2V`9#FIs=@+d$Q)hv!-E&TO=#7`J6Ht%F(OG+}j$F`W7qLATqzZ7@_2+NT$sK#QX;( zEre^&v(sKXE#Q4BeXBZ-|1i>=hG&LJGNX2NodosFbjTW*#1ub$ofrDG~tPY zgl6;Pc+Ce_nfG(ea%MRB!qBLiaZjJZd71hNw?+|e)*(KZtsAO^mD%ZOGiPJ@Ynlob z>BQ}t=(9y|Vcy3ESJ#|*(C*$7Aab4bVuyYAbM4ReK)$MQBfnRT-c`)PSjF;TD1KH+ z+2P&qkzpp)7))wZ{p|1{dTSH$7yN;8^?v6C#pAQQ*nnF;5=#c(iItG2pp2Xv6h5J? zK}^Hm^fH{{U|4Yf< z;)h-X|1)jsc=#;pY!nyGHc>5^^UiJNoFvpUU}2G+fA zY{^l57)_9>phz1^s?kMORPsMi?Ki%@b$$s@rzl_5`l;?U%TrW8FzHklk#;UIrGIIB ze_h5|rG;P%;nDcK%E^3`*X|O0a*gw|<(I_1 zjZ81K4b{;riuTQeIVA3RX%n;J6*G+NP{(>1U(Pf`GU1F{C0DOH%S(-zJf0BYpA4GvS;qPdnqm+)!s=OYv@ zzG*}X%SwUVQ=mumb?6+EhtO{%W~0l2%mIn#;G$qpI$N5d^`>Q`1Ub%L?Xq{BviBIH zvds%FKJ*tB#fd&CQz4}XPCK83i6oa}FeIyDUvPmyasWyIIJ2(_3O?Z=DyEaP+>NU4 zpI2Y=OQ%m%I~L5Y5j*L@QeP{p55nqkht*P@_W*T zFw_Yik*HK3(=M~v7;f$-1O<0>^4~*2nIth`l4|WGK>L>Ryo$^^3ffPhLdG}Mg-J!( zSkp96hf4K}8~4Qig-0;OJs>0&lpx*?ud2;pYy0<`UYL_2Lc5U~(}Fk6rBV zhA}gqs#G-b&-zUF^jGk=Pr1iQ7l(ZB;Qpwn>hgxxv-vQMt{DBu>Vf%xs9f#7vFpPZ zk_orG27?2h$qU~1FVIJ>N5z#8?LpDsJCT;50LS}X0hv7LnhI>+Kn{l=P~RU>mh`vm zAe2>PWf->pjLFe1@rg9>r;v<~ZR;VgC`4T$3mla5$T<`J4_Dt5omtc^n~rVUwr$(C z)3Kc|wr$(CZL_0}(XpMIbH*L#-v7L>v7hE%HCN4=Rr%~#>ty)Q2i5bTmK>bDHK&&# zE(QIF+dz7(f*1s$>?4r%)>d8T_QJ@HhV4IeYM zOVDU~aP_BtoV2C2hOex@53IlsSTBcJf1hamKX7Mb?EmU|;P-!`tNTfKvO=|A4O>0n z9+SRE3w`st{VUMQ@5J?{FQ|F2RrGGy1$)qY!}oFKvoy%RHn9=leFy#&4ESuo1;S1C!d=IqLgWna1UnCfn3qH zeN$qFRONo5TnwPuRk2hEtJ5Gy3@N}gPJWs~eae1_V53PV0<1zs2KUu#{l$WQ43o)_ zVGSLki!mb0BqKt_U=p8Xz$X9*%eZVtB+p1@2Mp&xazB4*(JpFFDZ##9(!}Vw1cfq4 zlIok`9YWG@i7`%6DVS&RfOz_(^m9JRgPhZII4cAKUPlzS%Oq(MLWBaK#)dTd;SPHt z_9&Ybj6st3`D>8j=c7bTn0)aEYV+@4(kBel^S(h@fJnuoyXgrazY*|)!HEY^_pJ<+oq#-vC;*ov@jjQC3BDw zoOHe^=N&fMR}{4BOgw;xqSd4bFfYJz5{z2{JhnK&sSHAwQhzYrdbAU_6kPdRZSIkP z_ZHfp181Ym{iRxkjN0wSIiCEUGjjq(F-EqygO}=BmSN^hJMzyFeTg;I#akrzQV#Yc zh-B(~pPHVlrj?$9?(e+!I29%Y7(OZ>gAWQ47ZUXeq(U{-{R;p*tj4Tg%Lpu)@H$bz zCN2^y=NwZTIsI_t)&v(-Kdc7#&vm0;?vn`E*7^q@FoYe&cj2maA<#3z|73x_W{#X_ zfM$JFl@ok0XLaP>3``IMV&~HxHXE-%q%V?(yUH>jbYmFb(f7O&2Ecu6zCnrg9)la6X06HGjjM zAcmlx2l-`NmGM`1|C9Vinvegc+>;Eiu#=X&QIfK*V4Dd0IuM~N`6>|Vf2el>h@@)= zti&5^KunUY0*Vmgm_@25>Otp zd%PK7%nIYYWKHD*iQsdXm=Li99`Z#foVIBL0L9C2z;UWI#Ol*3_$tfxBiq#`Y@?Dw zRF_;;EL$7ZbI-{DQIN2ErQbNsJ^t0Xd{VM!3u6C3uEvJhQ_>uOewYFRwL9@-js4)e3o4G$RA5pFE zfC(!%UU}N^EW1AgZzV|<(q^w0Rt9$1^mt@QoT)~i!{ZvD4X)3cUk52yk+HB28!7w+79`(@vPSv<@9kn##{YP9ap zn*p3bB#9GWM5Xfmszx|ALSn-nd+`ZGep8n?_^pBaW=SmW8;t%|eZ#ePKZqfm2P}Rf z!4p`eH_h_EF_YInZSzevJZZ{HxhB+^F~<{^w1|7%Cu`4{$)# z4Z}Ib5^ozONB63POBWFQcH^g|2gTSAaK5$0#Mno>xGJ)9enWkLLFJp4&p(#uEWmV) zfI?m9nIA=2cSIv450a%8x*Fs|lavLgDjL1`C5#|~qd+ahie)Me%KUhx1l z0Ub|8Hl7d5Tn9>3Ap~v~FSbnks0cIx72k+VN)*Ja5t#lvJ{Yz!GP4Dr(DN5_4XD&4 zp&HpZ2%Drb_=ez27Cs@^FJ_eA=HI{mfA(GoNaCX$0qsYnjQd02Q~noupLhe2WV(b1 zcm|-HV14J(y&fKDGK1T|B8~dT+rWZC(iE?!@2`rq*n|_+aLHJ_3$9X?q5MV7Tv&7| zrm@Y8zjB$+NJqE9<|sh<<8s~eZgIHuS3;r0VH&nI0&A?yZr?!?oBJvi>>Lx~&^twDgWhr$a;3{wcX z!JW%H-eY0r#~D1)41k&b@&t1~fT`Zc@O&iG_vH$%tACqg8G>Oh_4Lb~P#A9qlpFH& zP9D}#Ngf~v>8mpaX@P0nJR<5R&)4_yaB99MV zYP%_sDAI$RigzX-O$zZ2(MgR2;7f+)B(uoi+HQp7V=$^H@)}@gzKq!Cs_4rfcI_XJ z|AN7lAF?^&b6hT-zDQ@HHxh}nifN0}(dI5{%WG`L-L@9En9d0-Gqh?oGCxz^PPa

yHlr~Qj z%`kgh<2P>C>fTYE?E#Zh!{+2Qw=75K)1B;8ZJ3zCdDjI$qG`W%*$ojvA?sB=lZvgK zCFeTxA=XpCI{8fHWVEwdoN>)8KI3>wS1$ku!D@vDi!H##`d8bvA;7sf3*MOzNT&#^ z6;g_U-7z1Ji^{Am0x$ju^_X3VOn#pQQ_u;Ery^^ukw>}3FKln<4!Fg-PrZajr)_E1<>}I=v!q+(^ic#+0V+3yx3Z0nrya_ z9ic5(Ikj|7NP?0XaV4ST+E6HsCdv`M=q3j>e)^RmxA|<+tdj)5`<9`iZFSU6^%l5* zuUeaN*&D0)#-8)Fe8S>ey88ImsV>hoi8l7tzto01!b%xWUi?smIhTFWrN(* z72BPsG2KQLsTev>OM7u4F?%B<)XaC6+c>m+gLJt14bLXKdsoBql`8Ch7U`e5&WtBI z{7_XNoZW&^y+%(!etb)eRFCFwWNp11VzQfYOez$uKK4HTM0Tqzw##t8%t{NA6gj9W zKr&BClpUjOKiNRO!TZ#1dGtT= zB`TCkrZO!<(Z~t%LVQWIwqm8~$~fG4edEMFghmK%DbN7NvY2B^SOBG4jSsoeU9}I8 z@8tTrx#)0!Xk0e)MZ`Fi?_`7re_2^HlZb*ubafpShf`3ZQHVytq3Y_Yy!VIl$x_mk z4=1NlMp^cA)$r!Ekfy3uHS+39uf5rJpqII8@)&kPvu8s|XKlfWi*nPacSu_ocf{qc z+xaIq-h_5~osS{9#FPQ&ab=Z9DCd27WKnP7`JEqNIt4Mih~u8SY>LJssztE)gH8&1 zo7?yh*HL<>%aIbkUB;2UVY6-5xHtskHxzkB=KL#I`rI|7FOR8h83?)nmh`T}qu5h% zQWjOGpb_k!((<5@6aw=PODD3#6s27RkYmVFX7bHtkAD_PHnK>4bo@4=f40un2ISaZ zT*dnU7O4-Dn}eO`yK#}wA`O{eMAJn8;TFq&{Vj>EwfS1;EX%&RCIj(z_&GnYOCG*= zwdURH4UVPWsV0Lc#x`s1unv=`3@^@^dnq>ruZX5Nx190n~xHjIs1bmta%p3XQ;HW;dWus-?1PTxQh) zTo&#LVZXaVb-7~QO>QaTsjo9s|JE5c@9J1V{ndcBAc|v8VreFNW38yh^~0^ z0b;Cn#MZ0x-y<`c!rvJ&GLS)L$Mi~j!FC?X^IYlY~!7^!u=K`S0asx?9WJ`VOnME#>b-Xb@JrQG- zr5(}9i1&C=%^H_Ir3HO~9k{JaV}g?f_~p{Avg8mkb53wO!3WfW>>Wz1=%~{p^gcbW zKS!c|wH)MPm1XM06~_X-U>V7%5x}_>GOUo5M0~&DJ&YVY1tkdWOzZo_G^87HWV^JUE$HO3acF-XQ z+MH^-f^k$^xO}KuQ=&*qC}otWrr=C6BX_8~NKU4eX}OjoV4!&HCUn?2Bv4W`bMK@xJVgK%Up<|o zBI0#8S^-@%7*f5za7q*^w2;)zZmZru;SI7)F(0tJL5+UVAZg=|vfGSk$631oW1Ut^ z1_L6E*=(dzpt-5w0=T$QdW{hNfA|H7-D2&%m-u0XU)OVLJ&a5?T|?A!4O2Ucm%5Q9Qea6=O|vm?(voLlGudNwwm}k{+C`LbTmF=T z5rS3bW*+k13AaxniDC5b;o$6Rk=33KK+@qxqhe|?zt%m1$`}STyM7B z21-TZyt3Ga)$UF!(yzp{>Eps~TVLqdG1#n=M6lV0(P~-8o`^^y@=&2rLAn#nVm05f zaY~j-$-G$RtY3~A{LO&9Km@;LC*E5l@FrYm{^ zKJAg#f$PL%jYUBr)Hir5sGn@)={bU`+9f(d)>5!kp?iSJ25sX;KKaYZP$%Zn-;o1N z7;s0u&geOrpsh$p8QBw*A;N~N(pucAB1R7zW}POLuaIgf<@Ep*VCs`>W9Elsw`f%_ zk%{y$3mGxospU5L;HOsQI<7D$T3hZG^lM=`-#YbXg4t(pVt@h&J$w7NE7M+6eqof~ zDc!?A3%@=~jpoWA85f3mg#AW=s7u-qAf1MCP+JNKRdNTIZBe0WyQN97 zUtvi7c!Os|Rv_yPpq#vZ0UJ7`S;RH{d+HAtoL+JM#w^-owJ!-YvHZXmtJIbw4C+Kq z6jyD#gP8qhnPn5UEPPGeQcgj~S$0tFV8ML>^23b4x4n@>@VD!cNUpccQAU3*2Z3j# z+8+KxiX;S7f+bp%6hkBjXf7w@*8mNmaqy2M9u>VIB1Myn7xyq~Y_{O)xyraKctQH0 z?~NBFTNp<88^%1VKj*ZV2x5|XF*`l`Wp3_n_kO?DMgU~)xal9O1Y#BKn#5XLWJwqy z1)@^#BKt4hXk4}1D<|sr1QPp@;zSZ#6}jh1OHJfIO@$7d^_3D|Kpt4=GM)tImtJT> zgU9nNvxw6~6*6xbEY0SloDTm%7QL2yayPX5lwXp9tK%8JqSy63_6^)TkzL%3o} zc-?8@C?-^{(v{JP)I2^IH}&v*o5VO0I(I^@-Yw_!g*V8!%n(y&3r z_V%_g!9~|ZlYbCz%)}y)f8MQhMNp5!Cz%d*w6cwk=1D~2aYQg{F1eC13byfgd#)G< zEZz@&Y;tD3-*U4P0k6T~v7Q*oRCZvF-o`k`=vfVJn$9^3*kGB)?_)c?j}cG{U1-JO zyXb{>^n)efW_trzrdtwxS$Enxp4}g3lKV;0=o9npPXnMaaz zS3vrg8MfvefljB-XdU2Mwob`m%S_oOr_#1o`Mak!=}#fUxQB)as+A^>;-#>>1uZN{ zs+NoDCKaz6?9|~)u+hAZckk&uk&aH%tHgQR@6yW56xoFaxTeH^$+E8^*Y$Fkft7kl z%dYE1_7)v)qKR!c@RmB3o914w-S!^!A(g^QV@ex`XOM%CEv*1&3EvAp-B{wGS)2)) zZ$$I$Eg0S$q@ileW6b@YEtB{t^`TWt3sGTs_fuJzE41v9@Ia&Nz4ozqe)O{aJ72J@ zm*fK$Fftpa;g1*98=yQE+E=em`>XU-lqMPTT)qp*0j_8$RRbnc1owJl4Q#e;ms)|9 z2Xp*v>&$32XHtM3SxouMyghcezJH^W zIFx)fU|kyWBy}VOPVyC6DiNtA^qd5^Gs}Kw_~%XPBTWhcgNxh|b%gvDyoL;<3B$x=6@kASCN-9KVH$I;`3F?2+8j2rri z(6i_VCTT$HUTt}5V)PzJw!QWz46ZM0m3O@K1nQ>PuK2zLXl{|fBZ~(R1Ja~4$>MeT z<1j_9gbRWbmDHv~;6sXqHzuW+f^^@$Dpfi?zl1495W^E9U5P}ohPFMQGYGQcE=ii9 z3@A&KQtA+QYNI!E`@msN(Ts%37irtKZTr zcJTpy2?z06PMxVAXO3&Mf1AB7r-nWAqw+m_f4q$87#k) z6Tfl)mrG?cb(OZ<57m7A<6|wJWQ2y7gn$o`q&}>ndr&jcYTajGI zj0#HtKCeFWyGdRW7oOQvZGo{jZXxQ&+2l}zNDl}h z=t}ue@=MPpb{@pAWEi|wV4WvV&8J?AmmZU5HU=+xOOGY<1pbx} z<^0(d?6zBR10*GO%Q5$>S+2rI2J^wUt>>@A*qFCEfJ}2ls=3dj_0{^nwx!g~K>=6e zWs{OwSijrMBXLn3CI+x|A^tf)mF!mF${J6CzrURVzBimNA_xbU#eUqPinfVmORr4< z6qZjPf-*~ajJ^X|Obn(UuyUH1Vsm!uA0dut0B0@DQ3`%8A15y4G2KhPYWMC2#X~mx z#0Ri6&uda3+5G8*=n$(0bC*;TPqRnRjLVL;@fo}<->3AZjPwc{#0NA_Zn1#gfdT?1 zYq|6&GN6#^?(de2X<@tA7p;Uq8)zO)QmpB(~UT3Tfd@q&lr&dVTkzz z{ZB;lxlo>+|5+^{M*;%k`=7#_J-|(xqrn4IH;dJv)6m0C#KRY}xSB5p;#_rwM@lL= zh&W>KDp&vY+CumaJ$d2q;5_ePNh-Dlwt78Gd*0b{e|{tbeB3{_0cqccM0;(K75#FT zX_pYEVoyd9Juo9-aMVZcK8@~_5@rtk1r-`CwoY3Ftn-o_X;=?TPAiU`s1)V>x|9m| zJ6S&J07}AayiRR`b9IpQZnhN-fq6RsiEljq1icj)=IJRqSmg7GX&|5y}w+=U&V@wtyFqN1aaCU{7LusiK zW&i=rjQYp@D^Cq?RoSYwvC+DTy}G4Xk7Q-hjFWylUpaoSYI z&>g2q$0|K^liVTSFI1oAs$xGjBjXm%7q|ePMrbu>gp%)UAg0r|s+CDBzLFk5Q(N-J zy7~7S2-67y)=BLVdkLG#w}#yF`)(f^m7HvDB6Y)#VkxNe3|dzw?|LURBb2?+>{ack z2_;=D{FZL}kD}qWO>BsH7vGzDnktf}wtz`SQ&OjQ(D5NHRgHc75KAm&m@>C_#k369 zr0x{n{AG(!1*M2SCrh5^SrP`|l8}b9o6smM7z51j{rg1M@xn}BKh;KWa*A1B+f!?H z3c7a4%7HNKS=)-I*1+DuudI|%wbe1=enkeFe#8vA&{BOq zumn1_KyAQDxA3ocHBxwvc8)A^^&jlDpmKVI+AL+4x;H)L8lC;+3Md(XyXumYn#N{f zRc3{GVq1o`3ccr=-B$IOR8!h5bXA+oK-D^3edD(3;{cJnPO2>40T8N<7LCF zs1n%wZE0{DYIlq~YIhW18yfyEAK0}s>7ULesZzTTQ zL)SiCRG&fkZ`3@g7hOR*bzW%rz54zVi**z*?J}*Ir0`=@f3}%&I!M;p;!?2RWown? za3_`3ODncBEjHLMBQVXxSlInzu|fR_mI&{&##0LDGGk*r#K%Sd|{b3l))N z*=_TwbRdE(IpOQ@+~lpdpG>Wq<*VPp65tkF~I&r-rK2T ze5ag!qh}8VOin*$e^_&;jf^U(1-cGfUJ>nUo@*(I?D%_NBytL7_Qh#CBHHeYxJ1VB z!c_X6X~B5aL$4*-Rh{7qPk_Ok`G9bP*m8LM0g;i+WeshTV9FzlOLAt6)EZOVp3~<) znKvafZ+hK#R*e!-9Kpyn9I-%!)W6(=PVs+mfhukREY3zkiSP#aM4|Iwq{zWo? z0G6k3dANxSFaY?z+n~iS%bwiJ$r`A-Gzx)ix%%4&SZv@u zSypcZ;O=uCN7^Hz?5d~&`uX-HqQmp*Wj>;nZee;7{e~QGdHj$8e>EHj?=_Nr8l&!7 zv-Wi(4-Pxp`p?RpP;55My%=Db{8vl<4f3S}05C@QxVym#Eh&uM|jG8R1P&8hDniW$T*;Zu{xc3 zg>KJNcpGE?u=FB~95RgI2PBYuyVW}VO9p%@@hW@M+3%#`GOw@C4$Sy#66>)wuJNE8PNQ{8S^7ddoadRBf)RbmxSCU3#$; zL%W1hV++9DCkw-t9(zPhA#qdLE{AB+OytP@kbEeg1fFoUi?CDh{h!|?5>4znLJBwI zF2uIeHQuqIe=`ZUEPe#{O72X}2-Db2XmcNX2v)s5HwoM_HY^SD?19gsGd7>pZ){Sl@N%ey z2}Uag$*6e%_1qKU1co1Rr^xT%X`y4KyRAVWZ-gAF?1H9+eq0NwKn5z>qFt`&koghB zACn50u5e%Ld)7{b*6o3XKe%uwjsqw2slnM6sCmr&hF=hcU6_=z*TV09kk1oiX23)2 zc8tSRQWR9ecV^LHf4z+YrNByY55fxac${Qg3ntuRv2@{-&X)UuTqL20#s4a*|;( zJ%Z5~fu6ss4Wcblpc3Z1{4f4X6;y`5@~5JQe=7R_b#J?DWQ4_z`|YI3?7EX=#Z+?J zGJgcAdK{?G#Lx-|!NjQTamJEJ+35hoJ)Fqn74wYL?rW-E(G}w+x*@SpU`f=dvNV+C z;U?-rN&~K;!F#M(TeT^)o2KKbxJnGmV0CQMfeZD}3LOqJf6fV}kwuohtvWg~@K51& z-}B>7&8Awrd0-Ll2W|{sZ=pp@S1ObmrOwtZ*{VuCMyufNV3To!IH+|s7oPw*NE!4Z zZxgK+Tu+nm7`@sX2lyi`uAA&5zk|AJrP@RKX`OpAPW4pezFL1Ll6CvS4k`9NMD`tr zfVce%X{4a->Sg`PCYl!0Bi}+RPUUS!v~mm5J%!8!+IRCnLVHkd=L(X>_i zr5n|!=~Ql;r*q?<`1OsIi)Z$ayB#HT){Ow~FoI+rWG1hRdy-MQ9u2Op9jyUPJ0)&TwKk0O zi3M{d;slF`;72|n70KBicfm*nMA$$>SdG%bkV~116mA19PiREGP8fR%Ut058kxjI! z?17|HM&UkIkqcPbb0C*F%aBMXV6gAgQKmAgs(CMg<6$Dblp_Ooc)SZDxs>$#$Rk+v zBnS5w`E@bW=XprvmHYth4Gz&=q8VnWjIkY(j) z5s~e}I`5PxXyKwbRBC<54Yx%SPKhdcE7DU>cI3kJSQ@0)?*%5YaLyVQQl}!lsP+Fv zdZm;7o$mT6(#oGA<@lMF*gIJ;SU4G(+9cVcA^rC|cb5%3>6}vn?0dA_Af}0(D+U=zJF5eN_v=l|T*|8?+ZR8$Ems##)6X*iD%+gdgnlAIF!TchtaXlfs{i_e@McHfOjwmNinCu7t7Z0Gk%BiJKKQgc61+ zZP0d)r*5w{)EgEGe-*QFYV(7njrVG;x&^@L^7#i?L}5OByT5Fv@L$(0@{nrpcHOqJ zriCJn(25bJrkk&YSy}H{u>DKvNw{plOphymr?5TNipNw8X0%#HJ(S2f%&z-jR3q_sNTq1s%7&0Gt$P|xgVrQ~g9SOUti{HV&WvrH5L=c3Rtfw~*+qmFb27ivH= zfbRGyOrx9V%(8thJ~HUIAru0ZVNTWE-Op?T=V+-K(TwOA)5#*jN|Aa8wXINSK$E(I1wHAqAG!Fu~{$uvNxWtKljP z5?62fmwOZwlgnTrJ#-AV#QD~I`~xs#u)XDW@sfNtZe8e&a8`RF_WnqDY=qn6d_Wgk z0G~wHT}Cs912@ym)IT$|yg_Ag7>F;HJ!Am4-%F%0^`ylpiJi2iyuu z8)907bo$J<+}x4CMj;e_f)UN|!7DvbKUFZZ0+amRg9VnP9dh zQ4CL;xtnjE1abNr*g!DP4xfPhn_&Zs4r0E~_~A7FdU=3;go3mTKVXD)V#sp8)kC+W z58UjoMx210{7Nj!U#!YOHWPx;Ew0L%7>go4QLZ?;{6n0^Bjv6Vcq5x0UwDHDFLsxC z%cc{TLv%>AiU`|oGBjKdK8Z`xRJlE*g56y8%ueEz#2f`#TS$KrSp3Kb75foSH&C9X zz<~S_<3Ae}3n9nG~F~j_GCFNUAKv= z)R(&ciL5mJZo$Hcg(^T2Q}0GCC3?;6yr;l%)^qQ(t9hS~_cu~MvAWBHiFg=22AtQ1ul!T8?^=_u=ziBoscx#)IMjB~#4BzI$`c&p8+uK#8UVZD_*3W#jboPlb6h zN7^2BPwblV4VBZPb1dZU9KNJ0D&*hqAj=pRz!Ag+ zNw(C5qA_D)rklIcI_7xQNQG=P+^??H*L`iuCq74zV7ca{6U&+O_iDwMCjti*v~zTjmCt7 z;=T8z7`&v$Su@8#n{c9a2Y=5cUG2S^{;fnX{_9){ScC~36hNO`x@ENzFVmN#?8cyW zQ4>H$qKLXKc2QfyFgm@Pa$`_5v8Wy%ch4!f=Gr!7Msh0VA$5IJ^$b(Y3}*mIBSFLS zjqVmiUd8EQxs~GVjW;PHpi+qCnL!cWfngxTDj3y1f{m?59!JdzAuq^&(QwI|wqh>3 z+;=nwv}=hF#fJrSBffj>@XB0M#Z!&ra5dJ;tXt6@d#)}>*!uWMmwzK<8a@X(v$^bg zy)AQ?GuraWA)()aR^3wDT(#+-Yl~eJ*cj#2w@usd{^`5Kg`3?n66MtNyA1xbzgNpD z6B}re9&YJT*|&2}4Bj-^rw;$tXn2a|?+`=+2%~G5x%%?Ijllz97jWj5B12tgAO~u# z@}H1ajE$hSK}m$yz{>1YoA3#HeZ-#8mTgK9M9y6A3SmP;sXdUF^})!>rr7FIU5hm7 zt)tnLrYZ_a!xO;h%2O!I2=@DFp;VjC40lxxizzsa(#PG{G!Ibh!; zqJv{N`rq0JhZ#+{?H^>e{z+vN_#b3u6xV=C!7+g0u-iIiXo?rF0ER;>;)6i{323sR z`e7me??G??y@`#HvvZD?m7(rP!k2Vr28WkdtJy{)pP|hj$iGyk*7_qAejqFv_SA+1 zglSE$L~;DN@C>9@PT}@Jq*%mQLlocu!!Xdm4pW$b4Y~F~=&&MRx^vHCHv)m9-UxIy~ONLQl-w}Z^G5B}mm}VmcJ(Ck040Km z^ais%LteX4umg2>GT{YD6=L+rW`?M%Q|Qsa2us-{*T9LXK*uJ2WDb&BMPiqT3^`H& zWqrre>nw&Wr$8eg@-|ij#u})JBg<+sB)P2Is`Hq$LVc?c;~%p(U?C+DO8k@6r{8+j z+uDV6uC`Dt=5wQLR_M_!=CjZv`w^vAw#(KMjEmC0WM*0|r>8U5Oid<#x$*=tv6$@2 z1%5jW}YtyNbUY`3>G)EbTas9|0It=4F6QbJar!|EefU&#j#t}r!iZ>jZ= zr{}9Dyap;M>1>qnNnsT&mg5BK6;D`0w@3s=Tw&7bCUkW6e__Fk|EaS5b*~|2a=CKZ zU}(KwZ3h)riMOd9LR?yN@gbJX#f=Fs;m#iHmQfSi1v>f0wCXeJ>1a01iiXDo__uba z$lFe5vl!6}Rv<~)AQ`WtJn8&E8`YXA4Y*of?=i{3(kX)k3#lrk8@PEhq%HR2Ny-(K z2v02Y3F&NYs;F+0i2=1pwZXQrw`v8As$r9ZCp&C|{V3+5Hx8GgacfDRnBO2y*GUvt zo4Z$zM6l->QeMBUHhhW~m&ZW`oFwnFkkmxm;>+>{5oSiS9w}lxl9A5a6fRBRxIWFo zQA3$*%Nn7&n9*E25!->EqZcK)s)=N!S*^EE`=6dkgNI~|=?UwC-9SQHZ_J|BYqE7H z*8g6=7~&qD0HG2NcL1i;$H0P3Wcx;LM@guRi?26LU(rqi&WfNkVplloB-B;0}m<}+~i=cE-p+n|TXh3#Mm%z&Ug}vODE}%L+ zHA%v#J6ch<%NeHE11u3)70N?xHC;7wc(cJmICL%Q%Wk&kfpgt}00>ZeN|ju#3%dku z+)^b2o)VRe3J4wTX%C-2*%>TgOERJ20m}LdTwUhy4zp_67O-K?idqS%ObQV<41`&} zS^wk~t~6n+NkYaCz@;jconW^jbzryrap1P9#dilTMau)|W}!xT+GEJ+LYpJ4{(847 zDDt9Sz$XqgGZo7L{&WPnl!vzI&cv_9Si6?B^RR8$Nou-bA}5p+={YeWk-gu*MnDZQ zmNhQM2fM&fhix(S+^FK{39r{wZ@KIZ(jA3fB)1cF6_3Ts95IW~r_n&-kwqPpz>f@8 zGK=&QX;2s1V>_kj%6T-et~6?o*tUnLMYCvhlvGAL=7H-1CeCfdXwhS^oMM!{KK?dC zhUln`LSA;N*RmYyIQ0;5P)cl3YG67g`E15#9sL%u8@LSJqHe>w!y}`9-vS?LBx;*- z*V63hFOH1CV4ii=n`ZT_4O|M-LWkp}NVdLKoXH8@B6FvRaj9o%+_rHAj??0j-P?%6 z6zQdSHceLsU_|{y%rLW%Qb)pd2LTvO+jJTHiM$W>MS2;YEuHcLIF2AfxAI1EfvrXG z759!a@bmB|!ntvN!M*-$(TxY)AwFl=;Vr~rirwxTj~I>*QICvvnB3Uu zz$*=u8cEZ}iVyOQ&@D(3V@4`2)W#YH9}f%DjnLuoHlT-UX5UskHFnmpRQ56(UJk7t zI{qZ#(uk3#+UWbd9@kEt4<>t$lrEP${Y!0B7RimLI9nz%i6DDUB#H?2;h)1%9*)po z9Exy%c5gLYT?6F6LIf+^i085J(&9as64>!u2yB6&8Ju`B6UF6Bo&wGF_-Ana67(axgbJ{ET9OESa1Ez60$&?0iMij*+#C10&6I)I}3q1;r1d zu9|;A)$%Lm^!lu$UD#FRTYK%NaYuQ$|Dgo_ zfLdnPa?l@SBPjqI8Khh;GnwiLc$fLI2rNys8Yo1V~= zm0iOL`g%uq1{UvSgQfdgX#AftM!tV5X~1X}ETQthDTtc{Nj(2)S@YYeW55Hz8X5Uq zu;aa~;$|fc-n&BX)|^;&kYUIK{9G$2zH~8?!p=Z<-I~UP4--J5;DnA~>moS-o!j=l zw)K`DTYf#CaD!t%AVJ?XZclSMwbJeQZ3qMk?OJ$-H!bwMKH{+IQOc@4jdEq;cEfi$IlJ9ddzYtFQGcWZ83btpIhaB}+pK_;p}IEa8uR zIf`GqJJk^O`TRP@!HZTjzr|r`%s=Asmaw*k(9>~Yb@)JJ-~crGE86mOZ2Y(pn#*4) z=E#@wFU%my&4W?1VOw{tct~L1V7j)wS^s8KL)TG*e_MSy#(`T=KEXj2+P~mYUnhbx zkRDDe4tZj;ewqCwZ>EM-0LIPZJ}R=Ve4rG%kXpY^eLY5!wGX=)5>+Hx4f;Ir$5F@l zK3|HgMUqwIh)bo|zgzBNRGgbPWtXJ9;blHb;zw5HYau^@(tApI?*LlT%15dukY4`j z@q(^VDlL8s2^pU5qw(4mTIrdB?#f02GE`M<&DAI;G2NXg=oN)(z$3&*Px)5Npud0> zz1o1>@6O5vog|IqGF|mg!sA8iFJ(8hwet*OSBc_WWUUns+uRGDuYG>nQu@T&+NNHF zrLaXAq_fq88JjJ48*?)T`MPy`vGB+;3Z;Q3URgtASuvFJdUzT~{>?{7W02MZ;D>xH z4P%leLlhHR7W`3k0B;P;?b>>z!2xl%%;a-DTwW2_*a9_);iO0N1eIl)v5O=X_mQkk z8hNl8ikl=w;bI7V2QbEzT=<0k@R8D&A2`nu*TeW!yXwv`$DxQW6`-H(4y!gv;J}M3 z6vx>qJ(c>2V8rtLXb8bUV6%%6>qi!f%NMP*nk_y9>z&dGSa-p8&kBUNMRbWUVe%7= z<^A0dpR1H;fQib!W)>! z$Wb=={zAnzGh#B~(pK&_x^R%KtOAcavllH4T{C?T>ooObQ7~Vl`qj#cx`@jX zOjAp28XwL>xi61_q`}0V+aMO6_TwY9S$%U1WX_h%p^jg9d${Tm)h(6_kufQ@qt((I zX)2$a5X3({I}mE!6aBuc_Fxp7->?Wy6kX@SST0TkP!VI8-E#j3Y7EfK9aI7S+@m;_ z+pm~0H5h8=j63NLIO$EWD1FG0o1rL}=bE{HS(AZ%pyX50?8JhgqkUvSdAp&dlg};S zTbjdi4OQ9WnpJ$TI$gfW4n5g`-o6DZ#Zzi}M=&AIfZqe#B`lL%j&V}@{7?#esBh~7b9gkx}G zi}TJ2Orz~&E8dvGy>TQM5|)hV(hW}oLRW()lAf>WPZ>w&Ft)5b6QND{-3VSJsPS!4&eILoa8y> zF^rq?+#14qbZA2ADAAf^IW3_{LsA(@Lzd}wiX4wxztrw}ZSCx8dXP{#r@BOmN>tl( zjWJ9zCMIpt1N)mB+Pn9k-}n2Q&-Z)popbN~4c*<4qQA*Qwdpx=`=ar`MyjA)=TPVj(d-n08Z;$`OZaF0^yEZ&JDd+g%Zn=l$&+uh@K{Pw$6<)HL^Gt>_MJCo8fd|H80eCo5~iE+~0ScyWCJ* z!+v&WM_=34an9!x+DU;UjWraLi%E)4b$r$(3B9xtb^*Gg1;hEmqH>TE>f%mBYQN8g`;?eizdzJqapW8M zn0Iws_;WqzB4Jj?b(+qAo&8K$EMY)B#cE(R6LzE-A<+;D6;2>e6ILnQu+*CHdRJ6^ z`4q*gd{CBZ>JZ`lIfyrh3kTe=(gWvToJ1L^3-n+?Av^HRxS#0CfiG z7-h-VX;gjV!M>BQE({xF0p~DMEgD=3B%4UFzQG3S4za+E$VpWfh7UObtr${Ow$6vd z5FPuv)&klHyc#S}u`o*OI)yRX^@W)|+c$+5oxCRj@}&%Hx;+cARurBufTy)> zpjj6Svp-T84nJaaovD+G@cP5(M=RLg&A`+>VFBnNB2X7Tdx}7# z2tS)mLPumYXeYD5)ZHzoPzco)J#8)&kdrqFT4H2N0rHltjfz?*(8{AEq>|au$ns*i zu*V4ed<;$cL17Oaqm+J9EZ3eOE!%qRX=Kd|oIsX)O36u&UOS9Zc0jRAItd%x7ejHc zE%yJk?-VD(Q$z^zAg_Uv=A9zYD8dhy!w&W`Nc7TaWRe$_$&J7vG3j2N+m*|WX=I+P z;H443&rQzTVq{hV{b^UwyX;Ky$gd=C;Ki!BYOfe2KurOgsz}gjwK)k=0@M_6yas`m zFtN`GY;1;#@I~-W9}DpABheC?zFG>hAHbkjF(Bd*L>*Sf>jP*g1+M;bxN7*L*VE~- GTKgBj+ffbx diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 070cb702f09..508322917bd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index c53aefaa5fc..65dcd68d65c 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright 2015-2021 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,10 +32,10 @@ # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions $var, ${var}, ${var:-default}, ${var+SET}, -# ${var#prefix}, ${var%suffix}, and $( cmd ); -# * compound commands having a testable exit status, especially case; -# * various built-in commands including command, set, and ulimit. +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32c4e..93e3f59f135 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 14a3a268349..a2a9e028f2f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -115,7 +115,7 @@ public static void main(String[] args) { } @Override - public void run(String[] args) { + public void run(String... args) { var cmd = new CommandLine(this, picocliFactory); // проверка использования дефолтной команды diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java index 8b7233984fd..d73dc8306b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java @@ -27,7 +27,6 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.BSLDiagnostic; import lombok.NoArgsConstructor; import lombok.Setter; -import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterReturning; @@ -41,7 +40,6 @@ import java.util.Collection; @Aspect -@Slf4j @NoArgsConstructor public class MeasuresAspect { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java index 567f9fa3d9c..52d2d9b8949 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java @@ -23,7 +23,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.jsonrpc.Launcher; import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.LanguageClientAware; @@ -47,7 +46,6 @@ * Выводимая информация: * Данный режим используется для взаимодействия с клиентом по протоколу LSP. */ -@Slf4j @Command( name = "lsp", aliases = {"--lsp"}, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java index fd78b88588c..d17e0baffa1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.cli; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.ServerInfo; import org.springframework.stereotype.Component; import picocli.CommandLine.Command; @@ -34,7 +33,6 @@ * Ключ команды: * -v, (--version) */ -@Slf4j @Command( name = "version", aliases = {"-v", "--version"}, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java index 01cbed36e3d..7d97c8cec7c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java @@ -23,7 +23,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.File; @@ -48,7 +47,6 @@ * Данный режим используется для взаимодействия с клиентом по протоколу LSP через websocket. * */ -@Slf4j @Command( name = "websocket", aliases = {"-w", "--websocket"}, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java index 14e6306148d..d0457ca0831 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java @@ -21,7 +21,6 @@ */ package com.github._1c_syntax.bsl.languageserver.cli.lsp; -import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.jsonrpc.Launcher; import org.eclipse.lsp4j.launch.LSPLauncher; import org.eclipse.lsp4j.services.LanguageClient; @@ -36,7 +35,6 @@ * Конфигурация для создания объектов из lsp4j-слоя. */ @Configuration -@Slf4j public class LanguageServerLauncherConfiguration { @Bean diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java index 6c759c9b993..2e40852fb11 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java @@ -29,7 +29,7 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface DiagnosticParameter { - Class type(); + Class type(); String defaultValue() default ""; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java index 2fe1e669207..5e27e578cdb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java @@ -28,7 +28,7 @@ public final class DiagnosticParameterInfo { - private final Class type; + private final Class type; private final String name; private final String description; private final Object defaultValue; @@ -43,7 +43,7 @@ private DiagnosticParameterInfo(Field field, String description) { } - public Class getType() { + public Class getType() { return type; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java index 79371f49e5f..c16f84abd4b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java @@ -24,7 +24,6 @@ import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.PublishDiagnosticsParams; import org.springframework.stereotype.Component; @@ -33,7 +32,6 @@ import java.util.List; import java.util.function.Supplier; -@Slf4j @Component @RequiredArgsConstructor public final class DiagnosticProvider { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java index 752ada3a174..4c5d1e882b8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java @@ -87,7 +87,7 @@ void runAnalysisIfEnabled() { configuration.getDiagnosticsOptions().setAnalyzeOnStart(true); languageClientHolder.connect(languageClient); - var documentContext = TestUtils.getDocumentContext("A = 0", serverContext); + TestUtils.getDocumentContext("A = 0", serverContext); // when analyzeProjectOnStart.handleEvent(new ServerContextPopulatedEvent(serverContext)); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index e4f38efe959..7b4316d6990 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -276,8 +276,6 @@ void testFormatUnaryMinus() { // then assertThat(textEdits).hasSize(1); - - TextEdit textEdit = textEdits.get(0); assertThat(textEdits.get(0).getNewText()).isEqualTo("Возврат -1 > -2"); } @@ -290,15 +288,6 @@ private File getFormattedTestFile() { return new File("./src/test/resources/providers/format_formatted.bsl"); } - private TextDocumentItem getTextDocumentItem() throws IOException { - File file = getTestFile(); - String uri = file.toURI().toString(); - - String fileContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8); - - return new TextDocumentItem(uri, "bsl", 1, fileContent); - } - private TextDocumentIdentifier getTextDocumentIdentifier() { // TODO: Переделать на TestUtils.getTextDocumentIdentifier(); File file = getTestFile(); From 14e1935f5c528b10eff51c07e09cbecdb1de3f11 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 15 May 2023 17:52:31 +0200 Subject: [PATCH 192/595] =?UTF-8?q?=D0=94=D0=B0=D1=83=D0=BD=D0=B3=D1=80?= =?UTF-8?q?=D0=B5=D0=B9=D0=B4=20language=20tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Guava бл... --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4f5afda596d..22511f22c4e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,7 +52,7 @@ gitVersioning.apply { val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "6.1" +val languageToolVersion = "5.9" dependencyManagement { imports { From b1a7bd083a87095e3b8a773507afd53749d64efe Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 15 May 2023 18:15:05 +0200 Subject: [PATCH 193/595] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82=20=D0=B0?= =?UTF-8?q?=D0=BF=D0=B3=D1=80=D0=B5=D0=B9=D0=B4=D0=B0=20Language=20tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 22511f22c4e..cea9b396bf8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,7 +52,7 @@ gitVersioning.apply { val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "5.9" +val languageToolVersion = "5.6" dependencyManagement { imports { From ba61a9034cf2ec6eef4d6b07a8e6fc54acbb42c5 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 15 May 2023 18:28:04 +0200 Subject: [PATCH 194/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20con?= =?UTF-8?q?straint=20=D0=B4=D0=BB=D1=8F=20guava?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cea9b396bf8..1e51c3bb676 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,7 +52,7 @@ gitVersioning.apply { val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "5.6" +val languageToolVersion = "6.1" dependencyManagement { imports { @@ -118,6 +118,14 @@ dependencies { implementation("io.sentry:sentry-spring-boot-starter") implementation("io.sentry:sentry-logback") + // CONSTRAINTS + implementation("com.google.guava:guava") + constraints { + implementation("com.google.guava:guava:30.1-jre") { + because("new Guava (from LT) breaks the Supplier API") + } + } + // COMPILE compileOnly("com.github.spotbugs:spotbugs-annotations:4.7.3") From ebab3a855b291244531595174f52a7c26a2164dd Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 15 May 2023 18:39:55 +0200 Subject: [PATCH 195/595] Update build.gradle.kts --- build.gradle.kts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1e51c3bb676..44f763485fe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -119,11 +119,10 @@ dependencies { implementation("io.sentry:sentry-logback") // CONSTRAINTS - implementation("com.google.guava:guava") - constraints { - implementation("com.google.guava:guava:30.1-jre") { - because("new Guava (from LT) breaks the Supplier API") - } + implementation("com.google.guava:guava") { + version { + strictly("30.1-jre") + } } // COMPILE From 846a274dee391a3cb82eddabd36150c6d1b94578 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 18 May 2023 20:11:27 +0200 Subject: [PATCH 196/595] Lsp4j 0.21.0 --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 44f763485fe..b8790a2571e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -70,8 +70,8 @@ dependencies { api("info.picocli:picocli-spring-boot-starter:4.7.3") // lsp4j core - api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.20.1") - api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.20.1") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.21.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.21.0") // 1c-syntax api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { From 14d629ffe7511e49f3705609a82e1106aa099bce Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 18 May 2023 20:24:03 +0200 Subject: [PATCH 197/595] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20@SupressWarnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_1c_syntax/bsl/languageserver/BSLWorkspaceService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 67a029d7030..f78659b4214 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -49,7 +49,6 @@ public class BSLWorkspaceService implements WorkspaceService { private final SymbolProvider symbolProvider; @Override - @SuppressWarnings("deprecation") public CompletableFuture,List>> symbol(WorkspaceSymbolParams params) { return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params))); } From e3d2ca9c077d91f6282860b2f5957c0f8668cc9c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 18 May 2023 20:25:00 +0200 Subject: [PATCH 198/595] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20@SupressWarnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_1c_syntax/bsl/languageserver/BSLTextDocumentService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index dad9ec9b4ff..39bb51eae13 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -159,7 +159,6 @@ public CompletableFuture> references(ReferenceParams pa } @Override - @SuppressWarnings("deprecation") public CompletableFuture>> documentSymbol( DocumentSymbolParams params ) { From c3e53fcb2b20e392385c2a6cdc76b4d0b2d52e08 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Sat, 27 May 2023 17:38:30 +0300 Subject: [PATCH 199/595] =?UTF-8?q?=D0=91=D0=B0=D0=BC=D0=BF=D0=BD=D1=83?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D1=81=D0=B5=D1=80=D0=B0.=20=D0=9F=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20#native?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b8790a2571e..93b2b941165 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.21.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { + api("com.github.1c-syntax", "bsl-parser", "6121e8ec3590e0acf6a6f8944fc4b3dd00ef491f") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") From 3eb53b2d754943c81a7cc9e08db33a7ae3aa1220 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 28 May 2023 12:18:42 +0200 Subject: [PATCH 200/595] =?UTF-8?q?=D0=91=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D1=81=D0=B0?= =?UTF-8?q?=D0=BF=D0=BF=D0=BB=D0=B0=D0=B5=D1=80=20=D1=85=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...efinedMethodCallInlayHintSupplierTest.java | 63 +++++++++++ ...urceDefinedMethodCallInlayHintSupplier.bsl | 106 ++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java create mode 100644 src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java new file mode 100644 index 00000000000..d0df3acc6d5 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -0,0 +1,63 @@ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintKind; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class SourceDefinedMethodCallInlayHintSupplierTest { + + private final static String FILE_PATH = "./src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl"; + + @Autowired + private SourceDefinedMethodCallInlayHintSupplier supplier; + + @Test + void testGetInlayHints() { + + // given + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + + var textDocumentIdentifier = TestUtils.getTextDocumentIdentifier(documentContext.getUri()); + var range = firstMethod.getRange(); + var params = new InlayHintParams(textDocumentIdentifier, range); + + // when + List inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints) + .hasSize(2) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("PlayersHealth:")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(3, 23)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + assertThat(inlayHint.getTooltip().getRight().getValue()).isEqualTo("* **PlayersHealth**: "); + }) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("Amount:")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(3, 32)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + assertThat(inlayHint.getTooltip().getRight().getValue()).isEqualTo("* **Amount**: "); + }) + ; + } + + +} \ No newline at end of file diff --git a/src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl b/src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl new file mode 100644 index 00000000000..c72278111a2 --- /dev/null +++ b/src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl @@ -0,0 +1,106 @@ + +&AtClient +Procedure Player1HealthPlus1(Command) + ChangeHealth(Player1, Health1, 1); +EndProcedure + +&AtClient +Procedure Player1HealthPlus5(Command) + ChangeHealth(Player1, Health1, 5); +EndProcedure + +&AtClient +Procedure Player1HealthMinus1(Command) + ChangeHealth(Player1, Health1, -1); +EndProcedure + +&AtClient +Procedure Player1HealthMinus5(Command) + ChangeHealth(Player1, Health1, -5); +EndProcedure + +&AtClient +Procedure Player2HealthPlus1(Command) + ChangeHealth(Player2, Health2, 1); +EndProcedure + +&AtClient +Procedure Player2HealthPlus5(Command) + ChangeHealth(Player2, Health2, 5); +EndProcedure + +&AtClient +Procedure Player2HealthMinus1(Command) + ChangeHealth(Player2, Health2, -1); +EndProcedure + +&AtClient +Procedure Player2HealthMinus5(Command) + ChangeHealth(Player2, Health2, -5); +EndProcedure + +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + NewGameAtServer(True); +EndProcedure + +&AtClient +Procedure NewGame(Command) + NewGameAtServer(); +EndProcedure + +&AtServer +Procedure NewGameAtServer(FirstTime = False) + + Health1 = 20; + Health2 = 20; + + If FirstTime Then + Player1 = Catalogs.Players.Player1; + Player2 = Catalogs.Players.Player2; + + Deck1 = Catalogs.Decks.DefaultDeck; + Deck2 = Catalogs.Decks.DefaultDeck; + EndIf; + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = False; + ThisObject.ChildItems.Buttons.Enabled = True; + +EndProcedure + +&AtClient +Procedure ChangeHealth(Player, PlayersHealth, Amount) + + PlayersHealth = PlayersHealth + Amount; + + If PlayersHealth <= 0 Then + + // TODO: rewrite + PlayerWon = ?(Player = Player1, Player2, Player1); + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = True; + ThisObject.ChildItems.PlayerWon.Title = String(PlayerWon) + " won!"; + ThisObject.ChildItems.Buttons.Enabled = False; + + SaveGameStat(PlayerWon); + + EndIf; + +EndProcedure + +&AtServer +Procedure SaveGameStat(PlayerWon) + + NewRecord = InformationRegisters.GameStats.CreateRecordManager(); + NewRecord.Date = CurrentDate(); + NewRecord.Player1 = Player1; + NewRecord.Player2 = Player2; + NewRecord.Deck1 = Deck1; + NewRecord.Deck2 = Deck2; + NewRecord.Won = PlayerWon; + + NewRecord.Write(); + +EndProcedure From c163a7b2c015aab957c6f9f5ddbdbe018c661c5d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 28 May 2023 12:38:57 +0200 Subject: [PATCH 201/595] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80,=20=D0=BE=D1=81=D1=82=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20todo=20=D0=BF=D0=BE=D0=B4=20=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D1=8E=D1=89=D0=B8=D0=B9=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SourceDefinedMethodCallInlayHintSupplier.java | 14 +++++++++----- ...urceDefinedMethodCallInlayHintSupplierTest.java | 3 +-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index c98e0559899..ee632f7b731 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -56,8 +56,9 @@ @RequiredArgsConstructor public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSupplier { - // todo: DEFAULT_SHOW_PARAMETERS_WITH_SAME_NAME + // TODO: высчитать позицию хинта относительно последнего параметра. private static final boolean DEFAULT_SHOW_ALL_PARAMETERS = false; + private static final boolean DEFAULT_SHOW_PARAMETERS_WITH_THE_SAME_NAME = false; private static final boolean DEFAULT_DEFAULT_VALUES = true; private final ReferenceIndex referenceIndex; @@ -111,7 +112,7 @@ private List toInlayHints(Reference reference) { var passedValue = callParam.getText(); - if (!showAllParameters() && StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { + if (!showParametersWithTheSameName() && StringUtils.containsIgnoreCase(passedValue, parameter.getName())) { continue; } @@ -171,12 +172,15 @@ private static void setTooltip(InlayHint inlayHint, ParameterDefinition paramete } - private boolean showAllParameters() { + private boolean showParametersWithTheSameName() { var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); if (parameters.isLeft()) { - return DEFAULT_SHOW_ALL_PARAMETERS; + return DEFAULT_SHOW_PARAMETERS_WITH_THE_SAME_NAME; } else { - return (boolean) parameters.getRight().getOrDefault("showAllParameters", DEFAULT_SHOW_ALL_PARAMETERS); + return (boolean) parameters.getRight().getOrDefault( + "showParametersWithTheSameName", + DEFAULT_SHOW_PARAMETERS_WITH_THE_SAME_NAME + ); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java index d0df3acc6d5..4d86a204b3d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -24,7 +24,7 @@ class SourceDefinedMethodCallInlayHintSupplierTest { private SourceDefinedMethodCallInlayHintSupplier supplier; @Test - void testGetInlayHints() { + void testDefaultInlayHints() { // given var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); @@ -59,5 +59,4 @@ void testGetInlayHints() { ; } - } \ No newline at end of file From 30b376fa57d4d8658139092cbc7a1c1fa58b42d8 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 28 May 2023 12:46:52 +0200 Subject: [PATCH 202/595] License --- ...efinedMethodCallInlayHintSupplierTest.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java index 4d86a204b3d..f62c122e191 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.inlayhints; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; @@ -59,4 +80,4 @@ void testDefaultInlayHints() { ; } -} \ No newline at end of file +} From 0edf91913c24cfa65e0f527d1cfad4ca6119800f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 29 May 2023 23:21:07 +0200 Subject: [PATCH 203/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B2=D0=BD=D0=B5=D0=B4=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D1=81=D0=B0=D0=BF=D0=BF=D0=BB=D0=B0=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lombok.config | 1 + .../providers/InlayHintProvider.java | 2 + .../providers/InlayHintProviderTest.java | 42 ++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lombok.config b/lombok.config index 0206de4de79..f85d7d35684 100644 --- a/lombok.config +++ b/lombok.config @@ -1,4 +1,5 @@ lombok.anyConstructor.addConstructorProperties=true +lombok.copyableannotations+=org.springframework.beans.factory.annotation.Qualifier lombok.addLombokGeneratedAnnotation=true lombok.log.fieldName=LOGGER lombok.extern.findbugs.addSuppressFBWarnings = true diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index f929ab8431c..14c96421732 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -34,6 +34,7 @@ import org.eclipse.lsp4j.WorkspaceClientCapabilities; import org.eclipse.lsp4j.services.LanguageClient; import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -52,6 +53,7 @@ @RequiredArgsConstructor public class InlayHintProvider { + @Qualifier("enabledInlayHintSuppliers") private final ObjectProvider> enabledInlayHintSuppliersProvider; private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final LanguageClientHolder clientHolder; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index 72d06dd4d50..c951a331408 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -21,8 +21,11 @@ */ package com.github._1c_syntax.bsl.languageserver.providers; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.inlayhints.CognitiveComplexityInlayHintSupplier; import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.InlayHint; @@ -32,7 +35,9 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; @@ -42,10 +47,18 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod class InlayHintProviderTest { @Autowired private InlayHintProvider provider; + @Autowired + private LanguageServerConfiguration configuration; + @Autowired + private CognitiveComplexityInlayHintSupplier supplier; + @Autowired + @Qualifier("enabledInlayHintSuppliers") + private ObjectProvider> enabledInlayHintSuppliersProvider; private DocumentContext documentContext; @@ -68,7 +81,34 @@ void getInlayHint() { // then assertThat(inlayHints) - .contains(getTestHint()); + .isNotEmpty(); + } + + @Test + void testDefaultEnabledSuppliers() { + + // given + // default config + + // when + List suppliers = enabledInlayHintSuppliersProvider.getObject(); + + // then + assertThat(suppliers).contains(supplier); + } + + @Test + void testDisabledSupplierIsNotEnabled() { + + // given + configuration.getInlayHintOptions().getParameters().put(supplier.getId(), Either.forLeft(false)); + + // when + List suppliers = enabledInlayHintSuppliersProvider.getObject(); + + // then + assertThat(suppliers).doesNotContain(supplier); + } private static InlayHint getTestHint() { From 5e7081a5b63bf9c012371d7a917b3ed84a78d4da Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 29 May 2023 23:25:16 +0200 Subject: [PATCH 204/595] Update src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java --- .../bsl/languageserver/providers/InlayHintProviderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index c951a331408..cd2051bcd73 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -81,7 +81,7 @@ void getInlayHint() { // then assertThat(inlayHints) - .isNotEmpty(); + .contains(getTestHint()); } @Test From 27caec16896e567fe6056745995df5631c21230c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 30 May 2023 07:43:41 +0200 Subject: [PATCH 205/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B2=D1=8F=D0=B7=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D1=80=D0=B5=D0=BA=D1=83=D1=80=D1=81=D0=B8=D0=B2=D0=BD=D1=83?= =?UTF-8?q?=D1=8E=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/reporters/ReportersAggregator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java index d535bfaf94f..3a22b3a8084 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java @@ -37,13 +37,13 @@ public class ReportersAggregator { @Autowired - private final List reporters; + private List reporters; @Autowired @Qualifier("filteredReporters") @Lazy // Don't remove @Autowired annotation. It's needed for injecting filteredReporters bean correctly. - private final List filteredReporters; + private List filteredReporters; public void report(AnalysisInfo analysisInfo, Path outputDir) { filteredReporters.forEach(diagnosticReporter -> diagnosticReporter.report(analysisInfo, outputDir)); From e2292243904f60d9694f7433ec2eb6aa7c78c9f3 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 30 May 2023 07:59:18 +0200 Subject: [PATCH 206/595] Fix qf --- .../bsl/languageserver/providers/InlayHintProviderTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index cd2051bcd73..261cb9b8e38 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -107,7 +107,9 @@ void testDisabledSupplierIsNotEnabled() { List suppliers = enabledInlayHintSuppliersProvider.getObject(); // then - assertThat(suppliers).doesNotContain(supplier); + assertThat(suppliers) + .isNotEmpty() + .doesNotContain(supplier); } @@ -131,4 +133,4 @@ public List getInlayHints(DocumentContext documentContext, InlayHintP } } -} \ No newline at end of file +} From 9cb6b3348ac0566c1efff1d77412649173ff4cd4 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Thu, 26 Aug 2021 22:34:17 +0300 Subject: [PATCH 207/595] =?UTF-8?q?=D0=A7=D0=B5=D1=80=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D0=BA=20=D0=BB=D0=B8=D0=BD=D0=B7=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D1=81=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89?= =?UTF-8?q?=D1=8C=D1=8E=201testrunner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 1 + .../RunAllTestsCodeLensSupplier.java | 134 +++++++++++++++ .../codelenses/RunTestCodeLensSupplier.java | 162 ++++++++++++++++++ .../testrunner/TestRunnerAdapter.java | 121 +++++++++++++ .../codelens/CodeLensOptions.java | 4 + .../codelens/TestRunnerAdapterOptions.java | 47 +++++ .../bsl/languageserver/utils/Resources.java | 38 +++- .../RunAllTestsCodeLensSupplier_en.properties | 1 + .../RunAllTestsCodeLensSupplier_ru.properties | 1 + .../RunTestCodeLensSupplier_en.properties | 1 + .../RunTestCodeLensSupplier_ru.properties | 1 + .../languageserver/configuration/schema.json | 43 +++++ .../RunTestCodeLensSupplierTest.java | 93 ++++++++++ .../codelenses/RunTestCodeLensSupplier.bsl | 9 + 14 files changed, 649 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_ru.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java create mode 100644 src/test/resources/codelenses/RunTestCodeLensSupplier.bsl diff --git a/build.gradle.kts b/build.gradle.kts index 93b2b941165..ed4c2bc2056 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -100,6 +100,7 @@ dependencies { implementation("org.apache.commons", "commons-lang3", "3.12.0") implementation("commons-beanutils", "commons-beanutils", "1.9.4") implementation("org.apache.commons", "commons-collections4", "4.4") + implementation("org.apache.commons", "commons-exec", "1.3") // progress bar implementation("me.tongfei", "progressbar", "0.9.5") diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java new file mode 100644 index 00000000000..db535910294 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -0,0 +1,134 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.codelenses.testrunner.TestRunnerAdapter; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.FileType; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.Command; +import org.eclipse.lsp4j.InitializeParams; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.nio.file.Paths; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +@Slf4j +public class RunAllTestsCodeLensSupplier + implements CodeLensSupplier { + + private final TestRunnerAdapter testRunnerAdapter; + private final LanguageServerConfiguration configuration; + private final Resources resources; + + private boolean clientIsSupported; + + /** + * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. + *

+ * Анализирует параметры запроса и подготавливает данные для слежения за родительским процессом. + * + * @param event Событие + */ + @EventListener + public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { + var clientName = Optional.of(event) + .map(LanguageServerInitializeRequestReceivedEvent::getParams) + .map(InitializeParams::getClientInfo) + .map(ClientInfo::getName) + .orElse(""); + clientIsSupported = "Visual Studio Code".equals(clientName); + } + + @Override + public boolean isApplicable(DocumentContext documentContext) { + return documentContext.getFileType() == FileType.OS && clientIsSupported; + } + + @Override + public List getCodeLenses(DocumentContext documentContext) { + + var testNames = testRunnerAdapter.getTestNames(documentContext); + + if (testNames.isEmpty()) { + return Collections.emptyList(); + } + + var symbolTree = documentContext.getSymbolTree(); + var firstMethod = symbolTree.getMethods().get(0); + + return List.of(toCodeLens(firstMethod, documentContext)); + } + + @Override + public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, DefaultCodeLensData data) { + var path = Paths.get(documentContext.getUri()); + + var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); + var executable = options.getExecutableForCurrentOS(); + String runText = executable + " " + options.getRunAllTestsArguments() + "\n"; + runText = String.format(runText, path); + + var command = new Command(); + command.setTitle(resources.getResourceString(getClass(), "runAllTests")); + command.setCommand(getCommandId()); + command.setArguments(List.of(Map.of("text", runText))); + + unresolved.setCommand(command); + + return unresolved; + } + + @Override + public Class getCodeLensDataClass() { + return DefaultCodeLensData.class; + } + + private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { + + var codeLensData = new DefaultCodeLensData(documentContext.getUri(), getId()); + + var codeLens = new CodeLens(method.getSubNameRange()); + codeLens.setData(codeLensData); + + return codeLens; + } + + private static String getCommandId() { + // todo: check if client is VSCode + // todo: try to find other IDEs commandId + return "workbench.action.terminal.sendSequence"; + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java new file mode 100644 index 00000000000..ec1cc314e9c --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -0,0 +1,162 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.codelenses.testrunner.TestRunnerAdapter; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.FileType; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; +import lombok.ToString; +import lombok.Value; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.Command; +import org.eclipse.lsp4j.InitializeParams; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.beans.ConstructorProperties; +import java.net.URI; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +@Slf4j +public class RunTestCodeLensSupplier + implements CodeLensSupplier { + + private final TestRunnerAdapter testRunnerAdapter; + private final LanguageServerConfiguration configuration; + private final Resources resources; + + private boolean clientIsSupported; + + /** + * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. + *

+ * Анализирует параметры запроса и подготавливает данные для слежения за родительским процессом. + * + * @param event Событие + */ + @EventListener + public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { + var clientName = Optional.of(event) + .map(LanguageServerInitializeRequestReceivedEvent::getParams) + .map(InitializeParams::getClientInfo) + .map(ClientInfo::getName) + .orElse(""); + clientIsSupported = "Visual Studio Code".equals(clientName); + } + + @Override + public boolean isApplicable(DocumentContext documentContext) { + return documentContext.getFileType() == FileType.OS && clientIsSupported; + } + + @Override + public List getCodeLenses(DocumentContext documentContext) { + + if (documentContext.getFileType() == FileType.BSL) { + return Collections.emptyList(); + } + + var testNames = testRunnerAdapter.getTestNames(documentContext); + var symbolTree = documentContext.getSymbolTree(); + + return testNames.stream() + .map(symbolTree::getMethodSymbol) + .flatMap(Optional::stream) + .map(methodSymbol -> toCodeLens(methodSymbol, documentContext)) + .collect(Collectors.toList()); + } + + @Override + public Class getCodeLensDataClass() { + return RunTestCodeLensData.class; + } + + @Override + public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, RunTestCodeLensData data) { + + var path = Paths.get(documentContext.getUri()); + var testName = data.getTestName(); + + var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); + var executable = options.getExecutableForCurrentOS(); + String runText = executable + " " + options.getRunTestArguments() + "\n"; + runText = String.format(runText, path, testName); + + var command = new Command(); + command.setTitle(resources.getResourceString(getClass(), "runTest")); + command.setCommand(getCommandId()); + command.setArguments(List.of(Map.of("text", runText))); + + unresolved.setCommand(command); + + return unresolved; + } + + private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { + var testName = method.getName(); + var codeLensData = new RunTestCodeLensData(documentContext.getUri(), getId(), testName); + + var codeLens = new CodeLens(method.getSubNameRange()); + codeLens.setData(codeLensData); + + return codeLens; + } + + private static String getCommandId() { + // todo: try to find other IDEs commandId + return "workbench.action.terminal.sendSequence"; + } + + /** + * DTO для хранения данных линз о сложности методов в документе. + */ + @Value + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + public static class RunTestCodeLensData extends DefaultCodeLensData { + /** + * Имя метода. + */ + String testName; + + @ConstructorProperties({"uri", "id", "testName"}) + public RunTestCodeLensData(URI uri, String id, String testName) { + super(uri, id); + this.testName = testName; + } + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java new file mode 100644 index 00000000000..01dbfcfc611 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -0,0 +1,121 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses.testrunner; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.utils.CaseInsensitivePattern; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.exec.CommandLine; +import org.apache.commons.exec.DefaultExecuteResultHandler; +import org.apache.commons.exec.DefaultExecutor; +import org.apache.commons.exec.ExecuteWatchdog; +import org.apache.commons.exec.PumpStreamHandler; +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.commons.lang3.SystemUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.WeakHashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +@Slf4j +public class TestRunnerAdapter { + + private static final Pattern TEST_NAME_PATTERN = CaseInsensitivePattern.compile("^[^<]*<([^>]+)>.*"); + private static final Pattern NEW_LINE_PATTERN = Pattern.compile("\r?\n"); + private static final Map, List> CACHE = new WeakHashMap<>(); + + private final LanguageServerConfiguration configuration; + + public List getTestNames(DocumentContext documentContext) { + var cacheKey = Pair.of(documentContext, documentContext.getVersion()); + + return CACHE.computeIfAbsent(cacheKey, pair -> computeTestNames(documentContext)); + } + + private List computeTestNames(DocumentContext documentContext) { + var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); + + var executable = SystemUtils.IS_OS_WINDOWS ? options.getExecutableWin() : options.getExecutable(); + var path = Paths.get(documentContext.getUri()).toString(); + var arguments = String.format(options.getGetTestsArguments(), path); + + var getTestsCommand = new CommandLine(executable) + .addArguments(arguments, false); + + var timeout = 10_000L; + var watchdog = new ExecuteWatchdog(timeout); + + var outputStream = new ByteArrayOutputStream(); + var streamHandler = new PumpStreamHandler(outputStream); + + var resultHandler = new DefaultExecuteResultHandler(); + + var executor = new DefaultExecutor(); + executor.setWatchdog(watchdog); + executor.setStreamHandler(streamHandler); + + try { + executor.execute(getTestsCommand, resultHandler); + } catch (IOException e) { + LOGGER.error("Can't execute testrunner getTests command", e); + return Collections.emptyList(); + } + try { + resultHandler.waitFor(); + } catch (InterruptedException e) { + LOGGER.error("Can't wait for testrunner getTests command", e); + Thread.currentThread().interrupt(); + return Collections.emptyList(); + } + + var getTestsRegex = Pattern.compile(options.getGetTestsResultPattern()); + + Charset charset; + if (SystemUtils.IS_OS_WINDOWS) { + charset = Charset.forName("cp866"); + } else { + charset = Charset.defaultCharset(); + } + var output = outputStream.toString(charset); + + return Arrays.stream(NEW_LINE_PATTERN.split(output)) + .map(getTestsRegex::matcher) + .filter(Matcher::matches) + .map(matcher -> matcher.group(1)) + .collect(Collectors.toList()); + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java index 011b10be8f9..718fd213b3f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.github._1c_syntax.bsl.languageserver.configuration.databind.ParametersDeserializer; import lombok.AllArgsConstructor; @@ -47,4 +48,7 @@ public class CodeLensOptions { */ @JsonDeserialize(using = ParametersDeserializer.class) private Map>> parameters = new HashMap<>(); + + @JsonProperty("testRunner") + private TestRunnerAdapterOptions testRunnerAdapterOptions = new TestRunnerAdapterOptions(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java new file mode 100644 index 00000000000..e6f1b9fd953 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -0,0 +1,47 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.configuration.codelens; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.SystemUtils; + +@Data +@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class TestRunnerAdapterOptions { + + private String executable = "1testrunner"; + private String executableWin = "1testrunner.bat"; + private String getTestsArguments = "-show %s"; + private String getTestsResultPattern = "^[^<]*<([^>]+)>.*"; + private String runTestArguments = "-run %s %s"; + private String runAllTestsArguments = "-run %s"; + + public String getExecutableForCurrentOS() { + return SystemUtils.IS_OS_WINDOWS ? executableWin : executable; + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java index e0c267230a0..19ac1d45586 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java @@ -22,8 +22,10 @@ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.languageserver.configuration.Language; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.utils.StringInterner; -import lombok.experimental.UtilityClass; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import java.util.Locale; import java.util.ResourceBundle; @@ -31,10 +33,32 @@ /** * Вспомогательный класс для оптимизированного чтения ресурсов прикладных классов с учетом {@link Language}. */ -@UtilityClass +@Component +@RequiredArgsConstructor public class Resources { - private final StringInterner stringInterner = new StringInterner(); + private static final StringInterner stringInterner = new StringInterner(); + + private final LanguageServerConfiguration configuration; + + /** + * @param clazz Класс, ресурсы которого необходимо прочитать. + * @param key Ключ из {@link ResourceBundle}. + * @return Содержимое ресурса. + */ + public String getResourceString(Class clazz, String key) { + return getResourceString(configuration.getLanguage().getLocale(), clazz, key); + } + + /** + * @param clazz Класс, ресурсы которого необходимо прочитать. + * @param key Ключ из {@link ResourceBundle}. + * @param args Аргументы для форматирования ресурсной строки. + * @return Содержимое ресурса. + */ + public String getResourceString(Class clazz, String key, Object... args) { + return getResourceString(configuration.getLanguage().getLocale(), clazz, key, args); + } /** * @param language Язык получения ресурсной строки. @@ -42,7 +66,7 @@ public class Resources { * @param key Ключ из {@link ResourceBundle}. * @return Содержимое ресурса. */ - public String getResourceString(Language language, Class clazz, String key) { + public static String getResourceString(Language language, Class clazz, String key) { return getResourceString(language.getLocale(), clazz, key); } @@ -52,7 +76,7 @@ public String getResourceString(Language language, Class clazz, String key) { * @param key Ключ из {@link ResourceBundle}. * @return Содержимое ресурса. */ - public String getResourceString(Locale locale, Class clazz, String key) { + public static String getResourceString(Locale locale, Class clazz, String key) { var resourceString = ResourceBundle.getBundle(clazz.getName(), locale, new UTF8Control()).getString(key); return stringInterner.intern(resourceString); } @@ -64,7 +88,7 @@ public String getResourceString(Locale locale, Class clazz, String key) { * @param args Аргументы для форматирования ресурсной строки. * @return Содержимое ресурса. */ - public String getResourceString(Language language, Class clazz, String key, Object... args) { + public static String getResourceString(Language language, Class clazz, String key, Object... args) { return getResourceString(language.getLocale(), clazz, key, args); } @@ -75,7 +99,7 @@ public String getResourceString(Language language, Class clazz, String key, O * @param args Аргументы для форматирования ресурсной строки. * @return Содержимое ресурса. */ - public String getResourceString(Locale locale, Class clazz, String key, Object... args) { + public static String getResourceString(Locale locale, Class clazz, String key, Object... args) { var resourceString = String.format(getResourceString(locale, clazz, key), args); return stringInterner.intern(resourceString); } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_en.properties new file mode 100644 index 00000000000..35fe7122219 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_en.properties @@ -0,0 +1 @@ +runAllTests=⏩ Run all tests \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_ru.properties new file mode 100644 index 00000000000..1c2834656dd --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier_ru.properties @@ -0,0 +1 @@ +runAllTests=⏩ Запустить все тесты \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_en.properties new file mode 100644 index 00000000000..6a7c196effa --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_en.properties @@ -0,0 +1 @@ +runTest=⏵ Run test \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_ru.properties new file mode 100644 index 00000000000..2c5a8243a84 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier_ru.properties @@ -0,0 +1 @@ +runTest=⏵ Запустить тест \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 5dcdc2c9a0b..2194b0d4e23 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -571,6 +571,49 @@ "properties": { "parameters": { "$ref": "#/definitions/codeLensParameters" + }, + "testRunner": { + "$id": "#/properties/codeLens/testRunner", + "type": "object", + "title": "Test runner configuration to use for 'Run test' code lenses.", + "properties": { + "executable": { + "$id": "#/properties/codeLens/testRunner/executable", + "type": "string", + "title": "Path to test runner executable.", + "default": "1testrunner" + }, + "executableWin": { + "$id": "#/properties/codeLens/testRunner/executableWin", + "type": "string", + "title": "Path to test runner executable on Windows systems.", + "default": "1testrunner.bat" + }, + "getTestsArguments": { + "$id": "#/properties/codeLens/testRunner/getTestsArguments", + "type": "string", + "title": "Arguments to pass to test runner executable to get test method names. %s will be replaced with path to current file.", + "default": "-show %s" + }, + "getTestsResultPattern": { + "$id": "#/properties/codeLens/testRunner/resultPattern", + "type": "string", + "title": "Regular expression to parse test runner output for method names.", + "default": "^[^<]*<([^>]+)>.*" + }, + "runTestArguments": { + "$id": "#/properties/codeLens/testRunner/runTestArguments", + "type": "string", + "title": "Arguments to pass to test runner executable to run test method. %s will be replaced with path to current file, %m will be replaced with test method name.", + "default": "-run %s %s" + }, + "runAllTestsArguments": { + "$id": "#/properties/codeLens/testRunner/runAllTestsArguments", + "type": "string", + "title": "Arguments to pass to test runner executable to run all tests in current file. %s will be replaced with path to current file.", + "default": "-run %s" + } + } } } }, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java new file mode 100644 index 00000000000..0ef8feff0c7 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -0,0 +1,93 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.InitializeParams; +import org.eclipse.lsp4j.services.LanguageServer; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationEventPublisher; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +import static org.mockito.Mockito.mock; + + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class RunTestCodeLensSupplierTest { + + @Autowired + private RunTestCodeLensSupplier supplier; + + @Autowired + private ApplicationEventPublisher eventPublisher; + + private DocumentContext documentContext; + + @BeforeEach + void init() { + var filePath = "./src/test/resources/codelenses/RunTestCodeLensSupplier.bsl"; + documentContext = TestUtils.getDocumentContextFromFile(filePath); + } + + @Test + void noLensesIfClientIsNotSupported() { + // given + initializeServer("Unknown client"); + + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isEmpty(); + } + + + + @Test + void test() { + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + } + + private void initializeServer(String clientName) { + var initializeParams = new InitializeParams(); + initializeParams.setClientInfo( + new ClientInfo(clientName, "1.0.0") + ); + + var event = new LanguageServerInitializeRequestReceivedEvent( + mock(LanguageServer.class), + initializeParams + ); + eventPublisher.publishEvent(event); + } +} \ No newline at end of file diff --git a/src/test/resources/codelenses/RunTestCodeLensSupplier.bsl b/src/test/resources/codelenses/RunTestCodeLensSupplier.bsl new file mode 100644 index 00000000000..654be9d9a9f --- /dev/null +++ b/src/test/resources/codelenses/RunTestCodeLensSupplier.bsl @@ -0,0 +1,9 @@ +&Тест +Процедура Тест1() Экспорт + А = 0; +КонецПроцедуры + +&Тест +Процедура Тест2() Экспорт + Б = 0; +КонецПроцедуры From b6550bfcfe03308ae528206b70b10c2b7b448725 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 17 Feb 2023 14:35:56 +0400 Subject: [PATCH 208/595] =?UTF-8?q?=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B3=D1=83=D0=BB=D1=8F=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/codelenses/testrunner/TestRunnerAdapter.java | 2 -- .../configuration/codelens/TestRunnerAdapterOptions.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index 01dbfcfc611..02563dfa934 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -23,7 +23,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.exec.CommandLine; @@ -53,7 +52,6 @@ @Slf4j public class TestRunnerAdapter { - private static final Pattern TEST_NAME_PATTERN = CaseInsensitivePattern.compile("^[^<]*<([^>]+)>.*"); private static final Pattern NEW_LINE_PATTERN = Pattern.compile("\r?\n"); private static final Map, List> CACHE = new WeakHashMap<>(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index e6f1b9fd953..5e881053025 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -37,7 +37,7 @@ public class TestRunnerAdapterOptions { private String executable = "1testrunner"; private String executableWin = "1testrunner.bat"; private String getTestsArguments = "-show %s"; - private String getTestsResultPattern = "^[^<]*<([^>]+)>.*"; + private String getTestsResultPattern = "^[^<]*Имя\\sтеста\\s<([^>]+)>.*"; private String runTestArguments = "-run %s %s"; private String runAllTestsArguments = "-run %s"; From 3da9d572353cb7e3549b02c272cae5defd0e9be3 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 22 Feb 2023 14:08:35 +0400 Subject: [PATCH 209/595] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BD=D0=B0=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codelenses/RunAllTestsCodeLensSupplier.java | 14 +++++++------- .../codelenses/RunTestCodeLensSupplier.java | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index db535910294..77cca7b9005 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -72,6 +72,11 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } + @Override + public String getId() { + return "language-1c-bsl.languageServer.runAllTests"; + } + @Override public boolean isApplicable(DocumentContext documentContext) { return documentContext.getFileType() == FileType.OS && clientIsSupported; @@ -98,12 +103,12 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, De var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); var executable = options.getExecutableForCurrentOS(); - String runText = executable + " " + options.getRunAllTestsArguments() + "\n"; + String runText = executable + " " + options.getRunAllTestsArguments(); runText = String.format(runText, path); var command = new Command(); command.setTitle(resources.getResourceString(getClass(), "runAllTests")); - command.setCommand(getCommandId()); + command.setCommand(getId()); command.setArguments(List.of(Map.of("text", runText))); unresolved.setCommand(command); @@ -126,9 +131,4 @@ private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext return codeLens; } - private static String getCommandId() { - // todo: check if client is VSCode - // todo: try to find other IDEs commandId - return "workbench.action.terminal.sendSequence"; - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index ec1cc314e9c..d1888ccdb4c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -78,6 +78,11 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } + @Override + public String getId() { + return "language-1c-bsl.languageServer.runTest"; + } + @Override public boolean isApplicable(DocumentContext documentContext) { return documentContext.getFileType() == FileType.OS && clientIsSupported; @@ -113,12 +118,12 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Ru var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); var executable = options.getExecutableForCurrentOS(); - String runText = executable + " " + options.getRunTestArguments() + "\n"; + String runText = executable + " " + options.getRunTestArguments(); runText = String.format(runText, path, testName); var command = new Command(); command.setTitle(resources.getResourceString(getClass(), "runTest")); - command.setCommand(getCommandId()); + command.setCommand(getId()); command.setArguments(List.of(Map.of("text", runText))); unresolved.setCommand(command); @@ -136,11 +141,6 @@ private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext return codeLens; } - private static String getCommandId() { - // todo: try to find other IDEs commandId - return "workbench.action.terminal.sendSequence"; - } - /** * DTO для хранения данных линз о сложности методов в документе. */ From d9a70415e07f7da8950732b534c263bfa83a955a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 22 Feb 2023 14:22:07 +0400 Subject: [PATCH 210/595] licences --- .../languageserver/codelenses/RunAllTestsCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/RunTestCodeLensSupplier.java | 2 +- .../languageserver/codelenses/testrunner/TestRunnerAdapter.java | 2 +- .../configuration/codelens/TestRunnerAdapterOptions.java | 2 +- .../languageserver/codelenses/RunTestCodeLensSupplierTest.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 77cca7b9005..b102eabf40b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index d1888ccdb4c..ef3fd029d35 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index 02563dfa934..ac984016a76 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index 5e881053025..aee16cbe7de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index 0ef8feff0c7..e5498ddd8a9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 23e39eabe4e5b5aad595f18343ae8dace48ddce9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 22 Feb 2023 14:47:32 +0400 Subject: [PATCH 211/595] testName -> testId --- .../RunAllTestsCodeLensSupplier.java | 4 ++-- .../codelenses/RunTestCodeLensSupplier.java | 20 +++++++++---------- .../testrunner/TestRunnerAdapter.java | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index b102eabf40b..7c7e6de744e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -85,9 +85,9 @@ public boolean isApplicable(DocumentContext documentContext) { @Override public List getCodeLenses(DocumentContext documentContext) { - var testNames = testRunnerAdapter.getTestNames(documentContext); + var testIds = testRunnerAdapter.getTestIds(documentContext); - if (testNames.isEmpty()) { + if (testIds.isEmpty()) { return Collections.emptyList(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index ef3fd029d35..5c6728a5c48 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -95,10 +95,10 @@ public List getCodeLenses(DocumentContext documentContext) { return Collections.emptyList(); } - var testNames = testRunnerAdapter.getTestNames(documentContext); + var testIds = testRunnerAdapter.getTestIds(documentContext); var symbolTree = documentContext.getSymbolTree(); - return testNames.stream() + return testIds.stream() .map(symbolTree::getMethodSymbol) .flatMap(Optional::stream) .map(methodSymbol -> toCodeLens(methodSymbol, documentContext)) @@ -114,12 +114,12 @@ public Class getCodeLensDataClass() { public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, RunTestCodeLensData data) { var path = Paths.get(documentContext.getUri()); - var testName = data.getTestName(); + var testId = data.getTestId(); var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); var executable = options.getExecutableForCurrentOS(); String runText = executable + " " + options.getRunTestArguments(); - runText = String.format(runText, path, testName); + runText = String.format(runText, path, testId); var command = new Command(); command.setTitle(resources.getResourceString(getClass(), "runTest")); @@ -132,8 +132,8 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Ru } private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { - var testName = method.getName(); - var codeLensData = new RunTestCodeLensData(documentContext.getUri(), getId(), testName); + var testId = method.getName(); + var codeLensData = new RunTestCodeLensData(documentContext.getUri(), getId(), testId); var codeLens = new CodeLens(method.getSubNameRange()); codeLens.setData(codeLensData); @@ -151,12 +151,12 @@ public static class RunTestCodeLensData extends DefaultCodeLensData { /** * Имя метода. */ - String testName; + String testId; - @ConstructorProperties({"uri", "id", "testName"}) - public RunTestCodeLensData(URI uri, String id, String testName) { + @ConstructorProperties({"uri", "id", "testId"}) + public RunTestCodeLensData(URI uri, String id, String testId) { super(uri, id); - this.testName = testName; + this.testId = testId; } } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index ac984016a76..416da20c6a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -57,13 +57,13 @@ public class TestRunnerAdapter { private final LanguageServerConfiguration configuration; - public List getTestNames(DocumentContext documentContext) { + public List getTestIds(DocumentContext documentContext) { var cacheKey = Pair.of(documentContext, documentContext.getVersion()); - return CACHE.computeIfAbsent(cacheKey, pair -> computeTestNames(documentContext)); + return CACHE.computeIfAbsent(cacheKey, pair -> computeTestIds(documentContext)); } - private List computeTestNames(DocumentContext documentContext) { + private List computeTestIds(DocumentContext documentContext) { var options = configuration.getCodeLensOptions().getTestRunnerAdapterOptions(); var executable = SystemUtils.IS_OS_WINDOWS ? options.getExecutableWin() : options.getExecutable(); From 0f78f593aa613382a117aa70b4b80aae16d1a681 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 3 Jun 2023 23:18:59 +0300 Subject: [PATCH 212/595] [FP] RefOveruse (#2825) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refOverUse тест с фп * refOverUse тест с fp * новые методы поиска - findAllTopLevelRuleNodes - доп.метод findAllRuleNodes с коллекцией * исправление FP исключаю вложенные запросы * уточнил комментарии к методу * refOverUse Fn тест * пропускались вложенные запросы * исправил еще небольшое ФП * refOfuse fn test * учитываются поля без псевдонимов таблиц правильно учитываются внешние таблицы * refOverUse fp test * FP полное имя таблицы * refOverUse fp test * ФП обращение к инлайн-таблице * refOveruse fn fp tests * исправил FP убрал табы из тест-файла для правильного подсчета позиции * refOveruse fp * заготовка под проверку метаданных * CleanupContextBeforeClassAndAfterEachTestMethod * Заготовка исправления * убрал ненужные тесты * вернул прохождение тестов TODO на ФП * заготовка анализа таблиц метаданных * форматирование + исправлены замечания * возвращен неверно отправленный код * переименовал метод + исправил имя параметра по замечанию из ПР --------- Co-authored-by: Alexey Sosnoviy --- .../diagnostics/RefOveruseDiagnostic.java | 253 ++++++++++++++---- .../bsl/languageserver/utils/Trees.java | 36 +++ .../diagnostics/RefOveruseDiagnosticTest.java | 51 +++- .../diagnostics/RefOveruseDiagnostic.bsl | 132 ++++++++- 4 files changed, 416 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index a86eef0b26b..47cf776f8da 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -26,18 +26,32 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.bsl.parser.SDBLParser; +import com.github._1c_syntax.bsl.types.ConfigurationSource; +import com.github._1c_syntax.bsl.types.MDOType; +import com.github._1c_syntax.bsl.types.MdoReference; +import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; +import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; +import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import lombok.AllArgsConstructor; +import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; +import org.eclipse.lsp4j.Range; +import javax.annotation.Nullable; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -55,91 +69,204 @@ public class RefOveruseDiagnostic extends AbstractSDBLVisitorDiagnostic { private static final Pattern REF_PATTERN = CaseInsensitivePattern.compile("Ссылка|Reference"); - private static final int BAD_CHILD_COUNT = 3; + private static final int COUNT_OF_TABLE_DOT_REF = 3; + private static final int LAST_INDEX_OF_TABLE_DOT_REF = COUNT_OF_TABLE_DOT_REF - 1; private static final int COUNT_OF_TABLE_DOT_REF_DOT_REF = 5; - private Map dataSourcesWithTabularFlag = Collections.emptyMap(); + private static final Set RULE_COLUMNS = Set.of(SDBLParser.RULE_column, SDBLParser.RULE_query); + private static final Set METADATA_TYPES = Set.of( + SDBLParser.BUSINESS_PROCESS_TYPE, + SDBLParser.CATALOG_TYPE, + SDBLParser.DOCUMENT_TYPE, + SDBLParser.INFORMATION_REGISTER_TYPE, + SDBLParser.CONSTANT_TYPE, + SDBLParser.FILTER_CRITERION_TYPE, + SDBLParser.EXCHANGE_PLAN_TYPE, + SDBLParser.SEQUENCE_TYPE, + SDBLParser.DOCUMENT_JOURNAL_TYPE, + SDBLParser.ENUM_TYPE, + SDBLParser.CHART_OF_CHARACTERISTIC_TYPES_TYPE, + SDBLParser.CHART_OF_ACCOUNTS_TYPE, + SDBLParser.CHART_OF_CALCULATION_TYPES_TYPE, + SDBLParser.ACCUMULATION_REGISTER_TYPE, + SDBLParser.ACCOUNTING_REGISTER_TYPE, + SDBLParser.CALCULATION_REGISTER_TYPE, + SDBLParser.TASK_TYPE, + SDBLParser.EXTERNAL_DATA_SOURCE_TYPE); + private static final Collection EXCLUDED_COLUMNS_ROOT = + Set.of(SDBLParser.RULE_inlineTableField, SDBLParser.RULE_query); + public static final List SPECIAL_LIST_FOR_DATA_SOURCE = List.of(""); + + private Map> dataSourceWithTabularSectionNames = Collections.emptyMap(); + private Map> prevDataSourceWithTabularSectionNames = Collections.emptyMap(); + @Nullable + private Range prevQueryRange; + + @Override + public ParseTree visitQueryPackage(SDBLParser.QueryPackageContext ctx) { + var result = super.visitQueryPackage(ctx); + prevQueryRange = null; + prevDataSourceWithTabularSectionNames = Collections.emptyMap(); + dataSourceWithTabularSectionNames = Collections.emptyMap(); + return result; + } @Override public ParseTree visitQuery(SDBLParser.QueryContext ctx) { checkQuery(ctx).forEach(diagnosticStorage::addDiagnostic); - return ctx; + return super.visitQuery(ctx); } - private Stream checkQuery(SDBLParser.QueryContext ctx) { - var columnsCollection = Trees.findAllRuleNodes(ctx, SDBLParser.RULE_column); + private Stream checkQuery(SDBLParser.QueryContext ctx) { + var columns = Trees.findAllTopLevelDescendantNodes(ctx, RULE_COLUMNS).stream() + .filter(parserRuleContext -> parserRuleContext.getRuleIndex() == SDBLParser.RULE_column) + .filter(parserRuleContext -> Trees.getRootParent((BSLParserRuleContext) parserRuleContext, EXCLUDED_COLUMNS_ROOT) + .getRuleIndex() == SDBLParser.RULE_query) + .map(SDBLParser.ColumnContext.class::cast) + .collect(Collectors.toList()); - if (columnsCollection.isEmpty()) { + if (columns.isEmpty()) { return Stream.empty(); } - dataSourcesWithTabularFlag = dataSourcesWithTabularSection(ctx); - if (dataSourcesWithTabularFlag.isEmpty()) { - return getSimpleOverused(columnsCollection); + dataSourceWithTabularSectionNames = dataSourcesWithTabularSection(ctx); + if (dataSourceWithTabularSectionNames.isEmpty()) { + return getSimpleOverused(columns); } - return getOverused(columnsCollection); + return getOverused(columns); + } + + private Map> dataSourcesWithTabularSection(SDBLParser.QueryContext ctx) { + var newResult = calcDataSourceWithTabularSectionNames(findAllDataSourceWithoutInnerQueries(ctx)); + + var queryRange = Ranges.create(ctx); + + final Map> result; + if (prevQueryRange == null || !Ranges.containsRange(prevQueryRange, queryRange)) { + result = newResult; + prevDataSourceWithTabularSectionNames = result; + prevQueryRange = queryRange; + } else { + result = new HashMap<>(newResult); + result.putAll(prevDataSourceWithTabularSectionNames); + } + return result; } - private static Map dataSourcesWithTabularSection(SDBLParser.QueryContext ctx) { - return findAllDataSourceWithoutInnerQueries(ctx) + private Map> calcDataSourceWithTabularSectionNames( + Stream dataSources) { + + return dataSources + .map(dataSourceContext -> new TabularSectionTable(getTableNameOrAlias(dataSourceContext), + getTabularSectionNames(dataSourceContext))) .collect(Collectors.toMap( - RefOveruseDiagnostic::getTableNameOrAlias, - RefOveruseDiagnostic::isTableWithTabularSection, - (existing, replacement) -> existing, - HashMap::new)); + TabularSectionTable::getTableNameOrAlias, + TabularSectionTable::getTabularSectionNames, + (existing, replacement) -> existing)); } private static Stream findAllDataSourceWithoutInnerQueries( SDBLParser.QueryContext ctx) { - if (ctx.from == null){ + if (ctx.from == null) { return Stream.empty(); } return Stream.concat( ctx.from.dataSource().stream(), ctx.from.dataSource().stream() - .flatMap(dataSourceContext -> dataSourceContext.joinPart().stream()) - .map(SDBLParser.JoinPartContext::dataSource) - .filter(Objects::nonNull) + .flatMap(dataSourceContext -> getInnerDataSource(dataSourceContext).stream()) ); } + private static Collection getInnerDataSource(SDBLParser.DataSourceContext dataSourceContext) { + var result = new ArrayList(); + Optional.ofNullable(dataSourceContext.dataSource()) + .map(RefOveruseDiagnostic::getInnerDataSource) + .ifPresent(result::addAll); + + var joinDataSources = dataSourceContext.joinPart().stream() + .map(SDBLParser.JoinPartContext::dataSource) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + result.addAll(joinDataSources); + + var dataSourcesFromJoins = joinDataSources.stream() + .flatMap(dataSourceContext1 -> getInnerDataSource(dataSourceContext1).stream()) + .collect(Collectors.toList()); + + result.addAll(dataSourcesFromJoins); + return result; + } + private static String getTableNameOrAlias(SDBLParser.DataSourceContext dataSource) { final var value = Optional.of(dataSource); return value .map(SDBLParser.DataSourceContext::alias) - .map(alias -> (ParseTree)alias.name) + .map(alias -> (ParseTree) alias.name) .or(() -> value .map(SDBLParser.DataSourceContext::table) - .map(tableContext -> (ParseTree)tableContext.tableName)) + .map(tableContext -> (ParseTree) tableContext.tableName)) .or(() -> value .map(SDBLParser.DataSourceContext::parameterTable) - .map(tableContext -> (ParseTree)tableContext.parameter())) + .map(tableContext -> (ParseTree) tableContext.parameter())) .map(ParseTree::getText) .orElse(""); + } - private static boolean isTableWithTabularSection(SDBLParser.DataSourceContext dataSourceContext) { + private List getTabularSectionNames(SDBLParser.DataSourceContext dataSourceContext) { final var table = dataSourceContext.table(); if (table == null) { - return dataSourceContext.virtualTable() != null; + return getSpecialListForDataSource(dataSourceContext.virtualTable() != null); + } + final var mdo = dataSourceContext.table().mdo(); + if (mdo == null) { + return getSpecialListForDataSource(table.tableName != null); } - return table.tableName != null || table.objectTableName != null; + if (table.objectTableName != null) { + return SPECIAL_LIST_FOR_DATA_SOURCE; + } + return getTabularSectionNames(mdo); + } + + private static List getSpecialListForDataSource(boolean useSpecialName) { + if (useSpecialName) { + return SPECIAL_LIST_FOR_DATA_SOURCE; + } + return Collections.emptyList(); + } + + private List getTabularSectionNames(SDBLParser.MdoContext mdo) { + final var configuration = documentContext.getServerContext() + .getConfiguration(); + if (configuration.getConfigurationSource() == ConfigurationSource.EMPTY) { + return Collections.emptyList(); + } + return MDOType.fromValue(mdo.type.getText()).stream() + .map(mdoType1 -> MdoReference.create(mdoType1, mdo.tableName.getText())) + .map(mdoReference -> configuration.getChildrenByMdoRef().get(mdoReference)) + .filter(AbstractMDObjectComplex.class::isInstance) + .map(AbstractMDObjectComplex.class::cast) + .flatMap(RefOveruseDiagnostic::getTabularSectionNames) + .collect(Collectors.toList()); + } + + private static Stream getTabularSectionNames(AbstractMDObjectComplex mdObjectComplex) { + return mdObjectComplex.getAttributes().stream() + .filter(TabularSection.class::isInstance) + .map(AbstractMDObjectBase::getName); } - private static Stream getSimpleOverused(Collection columnsCollection) { + private static Stream getSimpleOverused(List columnsCollection) { return columnsCollection.stream() - .filter(columnNode -> columnNode.getChildCount() > BAD_CHILD_COUNT) - .map(column -> column.getChild(column.getChildCount() - 1)) - .filter(lastChild -> REF_PATTERN.matcher(lastChild.getText()).matches()) - .map(BSLParserRuleContext.class::cast); + .filter(columnNode -> columnNode.getChildCount() > COUNT_OF_TABLE_DOT_REF) + .filter(column -> REF_PATTERN.matcher(column.getChild(column.getChildCount() - 1).getText()).matches()); } - private Stream getOverused(Collection columnsCollection) { + private Stream getOverused(List columnsCollection) { return columnsCollection.stream() .map(SDBLParser.ColumnContext.class::cast) - .filter(column -> column.getChildCount() >= BAD_CHILD_COUNT) - .filter(this::isOveruse) - .map(BSLParserRuleContext.class::cast); + .filter(column -> column.getChildCount() >= COUNT_OF_TABLE_DOT_REF) + .filter(this::isOveruse); } private boolean isOveruse(SDBLParser.ColumnContext ctx) { @@ -154,26 +281,50 @@ private boolean isOveruse(SDBLParser.ColumnContext ctx) { // ^ ^ ^ // 0 1 2 - final int childCount = ctx.children.size(); + var children = extractFirstMetadataTypeName(ctx); + var refIndex = findLastRef(children); - // dots are also children of ColumnContext, - // that is why -3 must be an index of penultimate identifier - var penultimateChild = ctx.getChild(childCount - BAD_CHILD_COUNT); - - String penultimateIdentifierName = penultimateChild.getText(); + final int childCount = children.size(); + final var lastIndex = childCount - 1; + if (refIndex == lastIndex) { + var penultimateIdentifierName = children.get(lastIndex - LAST_INDEX_OF_TABLE_DOT_REF).getText(); + return dataSourceWithTabularSectionNames.get(penultimateIdentifierName) == null; + } + if (refIndex < LAST_INDEX_OF_TABLE_DOT_REF) { + return false; + } + if (refIndex > LAST_INDEX_OF_TABLE_DOT_REF) { + return true; + } + var tabName = children.get(0).getText(); + return dataSourceWithTabularSectionNames.getOrDefault(tabName, Collections.emptyList()).isEmpty(); + } - if (REF_PATTERN.matcher(penultimateIdentifierName).matches()) { - if (childCount < COUNT_OF_TABLE_DOT_REF_DOT_REF){ - return true; + private static int findLastRef(List children) { + for (int i = children.size() - 1; i >= 0; i--) { + final var child = children.get(i); + final var childText = child.getText(); + if (REF_PATTERN.matcher(childText).matches()) { + return i; } - var prevChildID = ctx.getChild(childCount - COUNT_OF_TABLE_DOT_REF_DOT_REF).getText(); - return !dataSourcesWithTabularFlag.getOrDefault(prevChildID, false); } - var lastChild = ctx.getChild(childCount - 1); - String lastIdentifierName = lastChild.getText(); - if (REF_PATTERN.matcher(lastIdentifierName).matches()) { - return dataSourcesWithTabularFlag.get(penultimateIdentifierName) == null; + return -1; + } + + private static List extractFirstMetadataTypeName(SDBLParser.ColumnContext ctx) { + final var mdoName = ctx.mdoName; + final var children = ctx.children; + if (mdoName == null || children.size() < COUNT_OF_TABLE_DOT_REF_DOT_REF + || !METADATA_TYPES.contains(mdoName.getStart().getType())) { + return children; } - return false; + return children.subList(1, children.size() - 1); + } + + @Value + @AllArgsConstructor + private static class TabularSectionTable { + String tableNameOrAlias; + List tabularSectionNames; } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index d2be1702498..b9bebdb6bfa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -385,6 +385,42 @@ public static Collection findAllRuleNodes(ParseTree t, Collec return nodes; } + /** + * Получает "первые" дочерние ноды с нужными типами + * ВАЖНО: поиск вглубь найденной ноды с нужными индексами не выполняется + * Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все вложенные найдены не будут + * ВАЖНО: начальная нода не проверяется на условие, т.к. тогда она единственная и вернется в результате + * + * @param root - начальный узел дерева + * @param indexes - коллекция индексов + * @return найденные узлы + */ + public static Collection findAllTopLevelDescendantNodes(ParserRuleContext root, + Collection indexes) { + var result = new ArrayList(); + + root.children.stream() + .map(node -> findAllTopLevelDescendantNodesInner(node, indexes)) + .forEach(result::addAll); + + return result; + } + + private static Collection findAllTopLevelDescendantNodesInner(ParseTree root, + Collection indexes) { + if (root instanceof ParserRuleContext + && indexes.contains(((ParserRuleContext) root).getRuleIndex())) { + return List.of((ParserRuleContext) root); + } + + List result = new ArrayList<>(); + IntStream.range(0, root.getChildCount()) + .mapToObj(i -> findAllTopLevelDescendantNodesInner(root.getChild(i), indexes)) + .forEachOrdered(result::addAll); + + return result; + } + /** * Проверяет наличие дочерней ноды с указанным типом */ diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java index 6c3b952a73b..9747deb6c47 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java @@ -21,6 +21,8 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; @@ -28,13 +30,48 @@ import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +@CleanupContextBeforeClassAndAfterEachTestMethod class RefOveruseDiagnosticTest extends AbstractDiagnosticTest { + private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; + RefOveruseDiagnosticTest() { super(RefOveruseDiagnostic.class); } @Test void test() { + initServerContext(Absolute.path(PATH_TO_METADATA)); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(3, 28, 3, 45) + .hasRange(13, 8, 13, 34) + .hasRange(14, 8, 14, 38) + .hasRange(25, 8, 25, 21) + .hasRange(37, 8, 37, 29) + .hasRange(38, 8, 38, 35) + .hasRange(56, 13, 43) + .hasRange(57, 14, 48) + .hasRange(92, 8, 29) + .hasRange(153, 13, 153, 41) + .hasRange(164, 13, 164, 53) + .hasRange(178, 13, 178, 35) + .hasRange(216, 13, 37) + .hasRange(226, 13, 37) + .hasRange(238, 13, 38) + .hasRange(296, 33, 80) + .hasRange(300, 33, 70) + .hasRange(309, 12, 28) + .hasRange(342, 12, 56) + .hasRange(343, 12, 56) + .hasRange(354, 26, 96) + .hasRange(364, 9, 44) // TODO не должно быть ошибкой + .hasRange(378, 20, 55) // TODO не должно быть ошибкой + .hasSize(23); + } + @Test + void testSingleFile() { List diagnostics = getDiagnostics(); @@ -45,8 +82,8 @@ void test() { .hasRange(25, 8, 25, 21) .hasRange(37, 8, 37, 29) .hasRange(38, 8, 38, 35) - .hasRange(56, 37, 56, 43) - .hasRange(57, 42, 57, 48) + .hasRange(56, 13, 43) + .hasRange(57, 14, 48) .hasRange(92, 8, 29) .hasRange(153, 13, 153, 41) .hasRange(164, 13, 164, 53) @@ -54,6 +91,14 @@ void test() { .hasRange(216, 13, 37) .hasRange(226, 13, 37) .hasRange(238, 13, 38) - .hasSize(15); + .hasRange(296, 33, 80) + .hasRange(300, 33, 70) + .hasRange(309, 12, 28) + .hasRange(342, 12, 56) + .hasRange(343, 12, 56) + .hasRange(354, 26, 96) + .hasRange(364, 9, 44) + .hasRange(378, 20, 55) + .hasSize(23); } } diff --git a/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl b/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl index 0d15fde0ba0..e1d4b64730f 100644 --- a/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl +++ b/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl @@ -98,7 +98,7 @@ Процедура Тест11() Запрос = Новый Запрос; -ТекстЗапроса = + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ТаблицаКонтактнаяИнформация.АдресЭП КАК Адрес, | ТаблицаКонтакт.Ссылка КАК Контакт @@ -242,7 +242,7 @@ Процедура Тест22() ТекстЗапроса = "ВЫБРАТЬ - | УпаковкиНоменклатуры.Ссылка КАК Упаковка + | УпаковкиНоменклатуры.Ссылка КАК Упаковка |ИЗ | ТоварыКОтгрузке КАК ТоварыКОтгрузке | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиНоменклатуры КАК УпаковкиНоменклатуры @@ -250,3 +250,131 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиНоменклатуры КАК УпаковкиНоменклатуры // спец.дубль имени, было падение анализа | ПО Истина"; // не ошибка КонецПроцедуры + +Процедура Тест23() + ТекстЗапроса = + "ВЫБРАТЬ + | СкладскиеЯчейки.Ссылка КАК Ячейка, + | СкладскиеЯчейки.Контейнер КАК Контейнер + |ИЗ + | РегистрСведений.ПериодичностьИнвентаризацииЗон КАК ПериодичностьИнвентаризацииЗон + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеЯчейки КАК СкладскиеЯчейки + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗадачаПересчет КАК ЗадачаПересчет + | ПО СкладскиеЯчейки.Ссылка = ЗадачаПересчет.Ячейка + | ПО ПериодичностьИнвентаризацииЗон.Зона = СкладскиеЯчейки.СкладскаяЗона + |ГДЕ + | ЗадачаПересчет.Ссылка ЕСТЬ NULL"; +КонецПроцедуры + +Процедура Тест24() + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ усОстаткиТоваровОстатки.Контейнер) КАК Контейнер + |ИЗ + | РегистрНакопления.усОстаткиТоваров.Остатки( + | , + | Контейнер В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗадачаПеремещениеТовара.ТекущийКонтейнер КАК ТекущийКонтейнер + | ИЗ + | Документ.ЗадачаПеремещениеТовара КАК ЗадачаПеремещениеТовара + | ГДЕ + | ЗадачаПеремещениеТовара.Ссылка В (&МассивЗадач) // не ошибка + | ) + | ) КАК усОстаткиТоваровОстатки + |"; +КонецПроцедуры + +Процедура Тест25() + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ усОстаткиТоваровОстатки.Контейнер) КАК Контейнер + |ИЗ + | РегистрНакопления.усОстаткиТоваров.Остатки( + | , + | Контейнер В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗадачаПеремещениеТовара.ТекущийКонтейнер.Ссылка КАК ТекущийКонтейнер // ошибка + | ИЗ + | Документ.ЗадачаПеремещениеТовара КАК ЗадачаПеремещениеТовара + | ГДЕ + | ЗадачаПеремещениеТовара.Ссылка.Ссылка В (&МассивЗадач) // ошибка + | ) + | ) КАК усОстаткиТоваровОстатки + |"; +КонецПроцедуры + +Процедура Тест26() + Запрос.Текст = + "ВЫБРАТЬ + | Звеньевой.Ссылка // ошибка, обращение к реквизиту без псевдонима таблицы + |ИЗ + | РегистрСведений.Звеньевые"; +КонецПроцедуры + +Процедура Тест27() + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Справочник.Пользователи.ТекущееПодразделение + |ИЗ + | Справочник.Пользователи + |ГДЕ + | Справочник.Пользователи.Ссылка = &Пользователь"; +КонецПроцедуры + +Процедура Тест28() + Запрос.Текст = + "ВЫБРАТЬ + |ЗаявкаНаХранение.Товары.( + | Номенклатура КАК Номенклатура, + | Ссылка.Склад КАК Склад // не ошибка + |) КАК Товары + |ИЗ + | Документ.ЗаявкаНаХранение КАК ЗаявкаНаХранение + |ГДЕ + | ЗаявкаНаХранение.Ссылка = &ДокументОснование + |"; +КонецПроцедуры + +Процедура Тест29() + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ТекущееПодразделение.Код КАК ТекущееПодразделениеКод, + | Пользователи.Ссылка.ТекущееПодразделение.Код КАК СсылкаТекущееПодразделениеКод, // ошибка + | Пользователи.ТекущееПодразделение.Ссылка.Код КАК ТекущееПодразделениеСсылкаКод // ошибка + |ИЗ + | Справочник.Пользователи КАК Пользователи"; +КонецПроцедуры + +Процедура Тест30() + Запрос.Текст = + "ВЫБРАТЬ + | ПользователиДополнительныеРеквизиты.Ссылка, + | ВЫБОР + | КОГДА ПользователиДополнительныеРеквизиты.Ссылка.ПометкаУдаления // Не ошибка + | ТОГДА ПользователиДополнительныеРеквизиты.Ссылка.ТекущееПодразделение.Ссылка // ошибка + | ИНАЧЕ ПользователиДополнительныеРеквизиты.Ссылка.ТекущееПодразделение // Не ошибка + | КОНЕЦ КАК Поле1 + |ИЗ + | Справочник.Пользователи.ДополнительныеРеквизиты КАК ПользователиДополнительныеРеквизиты"; +КонецПроцедуры + +Процедура Тест31() + Запрос.Текст = + "ВЫБРАТЬ + | Справочник31.ТабличнаяЧасть1.Ссылка // ошибка без метаданных + |ИЗ + | Справочник.Справочник1 КАК Справочник31"; +КонецПроцедуры + +Процедура Тест32() + Запрос.Текст = + "ВЫБРАТЬ + | Справочник32.Ссылка + |ИЗ + | Справочник.Справочник1 КАК Справочник32 + |СГРУППИРОВАТЬ ПО + | Справочник32.Ссылка + |ИМЕЮЩИЕ + | КОЛИЧЕСТВО(Справочник32.ТабличнаяЧасть1.Ссылка) > 0"; // ошибка без метаданных +КонецПроцедуры From b6b8a9a0295ef0af472355e1567ce55292e6ba4a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 9 Jun 2023 23:05:49 +0200 Subject: [PATCH 213/595] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F,=20=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/features/ConfigurationFile.md | 82 +++++++++++-------- ...rceDefinedMethodCallInlayHintSupplier.java | 2 +- .../languageserver/configuration/schema.json | 23 ++++++ 3 files changed, 71 insertions(+), 36 deletions(-) diff --git a/docs/features/ConfigurationFile.md b/docs/features/ConfigurationFile.md index bbb6b9c1723..240c95c4210 100644 --- a/docs/features/ConfigurationFile.md +++ b/docs/features/ConfigurationFile.md @@ -1,40 +1,45 @@ # Конфигурирование BSL Language Server -BSL Language Server предоставляет возможность изменения настроек, заложенных разработчиками, с помощью конфигурационного файла в формате json. -Созданный файл необходимо указать с помощью ключа `--configuration ` *(или кратко `-c`)* при запуске BSL Language Server в качестве консольного приложения либо, если же используется редактор/IDE с плагином-клиентом BSL Language Server, разместить его в соответствии с документацией *(обычно это корень проекта либо рабочей области)*. +BSL Language Server предоставляет возможность изменения настроек, заложенных разработчиками, с помощью конфигурационного +файла в формате json. +Созданный файл необходимо указать с помощью ключа `--configuration ` *(или кратко `-c`)* при запуске BSL Language Server +в качестве консольного приложения либо, если же используется редактор/IDE с плагином-клиентом BSL Language Server, +разместить его в соответствии с документацией *(обычно это корень проекта либо рабочей области)*. -В случае отсутствия конфигурационного файла будет предпринята попытка найти файл ".bsl-language-server.json" в "%HOMEPATH%" +В случае отсутствия конфигурационного файла будет предпринята попытка найти файл ".bsl-language-server.json" в " +%HOMEPATH%" ## Описание настроек -| Наименование | Тип | Описание | -|:------------------------------------------------------------|:--------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `language` | `Строка` | Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | -| `codeLens` | `JSON-Объект` | Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | -| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | -|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | -|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | -| `diagnostics` | `JSON-Объект` | Содержит настройки диагностик | -| ⤷   `computeTrigger` | `Строка` | С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | -| ⤷   `ordinaryAppSupport` | `Булево` | Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | -| ⤷   `skipSupport` | `Строка` | Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | -| ⤷   `mode` | `Строка` | Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | -| ⤷   `parameters` | `JSON-Объект` | Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | -| ⤷   `subsystemsFilter` | `JSON-Объект` | Фильтр по подсистемам конфигурации | -| ⤷   `analyzeOnStart` | `Булево` | Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | -|    ⤷   `include` | `Массив` `Строка` | Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | -|    ⤷   `exclude` | `Массив` `Строка` | Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | -| `documentLink` | `JSON-Объект` | Содержит настройки ссылок на документацию | -| ⤷   `showDiagnosticDescription` | `Булево` | Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | -| `inlayHint` | `JSON-Объект` | Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | -| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | -|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | -|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | -| `useDevSite` | `Булево` | При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | -| `siteRoot` | `Строка` | Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | -| `traceLog` | `Строка` | Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | -| `configurationRoot` | `Строка` | Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | -| `sendErrors` | `Строка` | Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | +| Наименование | Тип | Описание | +|:---------------------------------------------------------------|:--------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `language` | `Строка` | Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | +| `codeLens` | `JSON-Объект` | Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | +| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | +|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +| `diagnostics` | `JSON-Объект` | Содержит настройки диагностик | +| ⤷   `computeTrigger` | `Строка` | С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | +| ⤷   `ordinaryAppSupport` | `Булево` | Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | +| ⤷   `skipSupport` | `Строка` | Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | +| ⤷   `mode` | `Строка` | Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | +| ⤷   `parameters` | `JSON-Объект` | Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | +| ⤷   `subsystemsFilter` | `JSON-Объект` | Фильтр по подсистемам конфигурации | +| ⤷   `analyzeOnStart` | `Булево` | Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | +|    ⤷   `include` | `Массив` `Строка` | Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | +|    ⤷   `exclude` | `Массив` `Строка` | Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | +| `documentLink` | `JSON-Объект` | Содержит настройки ссылок на документацию | +| ⤷   `showDiagnosticDescription` | `Булево` | Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | +| `inlayHint` | `JSON-Объект` | Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | +| ⤷   `parameters` | `JSON-Объект` | Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | +|    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | +|    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | +|    ⤷   `sourceDefinedMethodCall` | `Булево` или `JSON-Объект` | Включает отображение параметров вызываемого метожа конфигурации/библиотеки в виде inlay hints. По умолчанию настройка установлена в `true`. Доступные параметры:
* `showParametersWithTheSameName` - отображать параметры с именами, содержащимися в передаваемом значении. Значение параметра по умолчанию - `false`.
* `showDefaultValues` - отображать значения по умолчанию для непереданных параметров. Значение параметра по умолчанию - `true`. | +| `useDevSite` | `Булево` | При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | +| `siteRoot` | `Строка` | Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | +| `traceLog` | `Строка` | Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | +| `configurationRoot` | `Строка` | Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | +| `sendErrors` | `Строка` | Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | Для облегчения составления и редактирования конфигурационного файла можно использовать следующую JSON-схему: @@ -47,10 +52,12 @@ https://1c-syntax.github.io/bsl-language-server/configuration/schema.json Ниже приведен пример настройки: * Устанавливает язык сообщений диагностик - английский; -* Изменяет настройку диагностики [LineLength - Ограничение на длину строки](../diagnostics/LineLength.md), устанавливая предел длины строки в 140 символов; +* Изменяет настройку диагностики [LineLength - Ограничение на длину строки](../diagnostics/LineLength.md), устанавливая + предел длины строки в 140 символов; * Отключает диагностику [MethodSize - Ограничение на размер метода](../diagnostics/MethodSize.md). * Включает расчет диагностик в непрерывном режиме (`computeTrigger = onType`) -* Диагностики рассчитываются только по объектам подсистемы "СтандартныеПодсистемы" за исключением "ВариантыОтчетов" и "ВерсионированиеОбъектов" +* Диагностики рассчитываются только по объектам подсистемы "СтандартныеПодсистемы" за исключением "ВариантыОтчетов" и " + ВерсионированиеОбъектов" ```json { @@ -65,8 +72,13 @@ https://1c-syntax.github.io/bsl-language-server/configuration/schema.json "MethodSize": false }, "subsystemsFilter": { - "include": ["СтандартныеПодсистемы"], - "exclude": ["ВариантыОтчетов", "ВерсионированиеОбъектов"] + "include": [ + "СтандартныеПодсистемы" + ], + "exclude": [ + "ВариантыОтчетов", + "ВерсионированиеОбъектов" + ] } } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index ee632f7b731..6976c53a796 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -62,7 +62,7 @@ public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSuppli private static final boolean DEFAULT_DEFAULT_VALUES = true; private final ReferenceIndex referenceIndex; - protected final LanguageServerConfiguration configuration; + private final LanguageServerConfiguration configuration; @Override diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 5dcdc2c9a0b..e8a53b7c97a 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -543,6 +543,29 @@ ], "title": "Show cyclomatic complexity score inlay hints.", "$id": "#/definitions/inlayHintParameters/cyclomaticComplexity" + }, + "sourceDefinedMethodCall": { + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Show parameters of called source defined methods.", + "properties": { + "showParametersWithTheSameName": { + "description": "Show hints for parameters with names that are contained in passed value.", + "default": false, + "type": "boolean", + "title": "Show hints for parameters with names that contains passed value." + }, + "showDefaultValues": { + "description": "Show hints with default values for non-passed parameters.", + "default": true, + "type": "boolean", + "title": "Show hints with default values for non-passed parameters." + } + }, + "$id": "#/definitions/inlayHintParameters/sourceDefinedMethodCall" } } } From 6316beef8dc63c9f6657fbb897f746caf7bbdacc Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 9 Jun 2023 23:13:01 +0200 Subject: [PATCH 214/595] License --- .../codeactions/ExtractStructureConstructorSupplier.java | 2 +- .../codeactions/ExtractStructureConstructorSupplierTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 0f3302de711..bee397e8149 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java index c44ac2397e2..750d3fcb453 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 9390f852559870ed1d9097ec9f0127f77eadc9f7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 9 Jun 2023 23:41:17 +0200 Subject: [PATCH 215/595] Javadoc --- .idea/codeStyles/Project.xml | 5 ++- .../RunAllTestsCodeLensSupplier.java | 30 ++++++++++++----- .../codelenses/RunTestCodeLensSupplier.java | 33 ++++++++++++++----- .../testrunner/TestRunnerAdapter.java | 15 +++++++-- .../codelenses/testrunner/package-info.java | 29 ++++++++++++++++ .../codelens/CodeLensOptions.java | 3 ++ .../codelens/TestRunnerAdapterOptions.java | 26 +++++++++++++++ 7 files changed, 120 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index e58ee21b50e..05a3cea0e75 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -31,6 +31,9 @@ + + - + \ No newline at end of file diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 7c7e6de744e..ff5af422ba0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -43,12 +43,17 @@ import java.util.Map; import java.util.Optional; +/** + * Поставщик линзы для запуска всех тестов в текущем файле. + */ @Component @RequiredArgsConstructor @Slf4j public class RunAllTestsCodeLensSupplier implements CodeLensSupplier { + private static final String COMMAND_ID = "language-1c-bsl.languageServer.runAllTests"; + private final TestRunnerAdapter testRunnerAdapter; private final LanguageServerConfiguration configuration; private final Resources resources; @@ -58,7 +63,7 @@ public class RunAllTestsCodeLensSupplier /** * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. *

- * Анализирует параметры запроса и подготавливает данные для слежения за родительским процессом. + * Анализирует тип подключенного клиента и управляет применимостью линзы. * * @param event Событие */ @@ -72,16 +77,17 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } - @Override - public String getId() { - return "language-1c-bsl.languageServer.runAllTests"; - } - + /** + * {@inheritDoc} + */ @Override public boolean isApplicable(DocumentContext documentContext) { return documentContext.getFileType() == FileType.OS && clientIsSupported; } + /** + * {@inheritDoc} + */ @Override public List getCodeLenses(DocumentContext documentContext) { @@ -97,6 +103,9 @@ public List getCodeLenses(DocumentContext documentContext) { return List.of(toCodeLens(firstMethod, documentContext)); } + /** + * {@inheritDoc} + */ @Override public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, DefaultCodeLensData data) { var path = Paths.get(documentContext.getUri()); @@ -108,7 +117,7 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, De var command = new Command(); command.setTitle(resources.getResourceString(getClass(), "runAllTests")); - command.setCommand(getId()); + command.setCommand(COMMAND_ID); command.setArguments(List.of(Map.of("text", runText))); unresolved.setCommand(command); @@ -116,14 +125,17 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, De return unresolved; } + /** + * {@inheritDoc} + */ @Override public Class getCodeLensDataClass() { return DefaultCodeLensData.class; } - private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { + private static CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { - var codeLensData = new DefaultCodeLensData(documentContext.getUri(), getId()); + var codeLensData = new DefaultCodeLensData(documentContext.getUri(), COMMAND_ID); var codeLens = new CodeLens(method.getSubNameRange()); codeLens.setData(codeLensData); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index 5c6728a5c48..ec0fd8f91d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -49,12 +49,17 @@ import java.util.Optional; import java.util.stream.Collectors; +/** + * Поставщик линз для запуска теста по конкретному тестовому методу. + */ @Component @RequiredArgsConstructor @Slf4j public class RunTestCodeLensSupplier implements CodeLensSupplier { + private static final String COMMAND_ID = "language-1c-bsl.languageServer.runTest"; + private final TestRunnerAdapter testRunnerAdapter; private final LanguageServerConfiguration configuration; private final Resources resources; @@ -64,7 +69,7 @@ public class RunTestCodeLensSupplier /** * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. *

- * Анализирует параметры запроса и подготавливает данные для слежения за родительским процессом. + * Анализирует тип подключенного клиента и управляет применимостью линзы. * * @param event Событие */ @@ -78,16 +83,17 @@ public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { clientIsSupported = "Visual Studio Code".equals(clientName); } - @Override - public String getId() { - return "language-1c-bsl.languageServer.runTest"; - } - + /** + * {@inheritDoc} + */ @Override public boolean isApplicable(DocumentContext documentContext) { return documentContext.getFileType() == FileType.OS && clientIsSupported; } + /** + * {@inheritDoc} + */ @Override public List getCodeLenses(DocumentContext documentContext) { @@ -105,11 +111,17 @@ public List getCodeLenses(DocumentContext documentContext) { .collect(Collectors.toList()); } + /** + * {@inheritDoc} + */ @Override public Class getCodeLensDataClass() { return RunTestCodeLensData.class; } + /** + * {@inheritDoc} + */ @Override public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, RunTestCodeLensData data) { @@ -123,7 +135,7 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Ru var command = new Command(); command.setTitle(resources.getResourceString(getClass(), "runTest")); - command.setCommand(getId()); + command.setCommand(COMMAND_ID); command.setArguments(List.of(Map.of("text", runText))); unresolved.setCommand(command); @@ -133,7 +145,7 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Ru private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { var testId = method.getName(); - var codeLensData = new RunTestCodeLensData(documentContext.getUri(), getId(), testId); + var codeLensData = new RunTestCodeLensData(documentContext.getUri(), COMMAND_ID, testId); var codeLens = new CodeLens(method.getSubNameRange()); codeLens.setData(codeLensData); @@ -153,6 +165,11 @@ public static class RunTestCodeLensData extends DefaultCodeLensData { */ String testId; + /** + * @param uri URI документа. + * @param id Идентификатор линзы. + * @param testId Идентификатор теста. + */ @ConstructorProperties({"uri", "id", "testId"}) public RunTestCodeLensData(URI uri, String id, String testId) { super(uri, id); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index 416da20c6a0..513894317e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -47,6 +47,10 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +/** + * Расчетчик списка тестов в документе. + * Физически выполняет команды по получению идентификаторов тестов на основании конфигурации. + */ @Component @RequiredArgsConstructor @Slf4j @@ -57,6 +61,12 @@ public class TestRunnerAdapter { private final LanguageServerConfiguration configuration; + /** + * Получить идентификаторы тестов, содержащихся в файле. + * + * @param documentContext Контекст документа с тестами. + * @return Список идентификаторов тестов. + */ public List getTestIds(DocumentContext documentContext) { var cacheKey = Pair.of(documentContext, documentContext.getVersion()); @@ -70,8 +80,7 @@ private List computeTestIds(DocumentContext documentContext) { var path = Paths.get(documentContext.getUri()).toString(); var arguments = String.format(options.getGetTestsArguments(), path); - var getTestsCommand = new CommandLine(executable) - .addArguments(arguments, false); + var getTestsCommand = new CommandLine(executable).addArguments(arguments, false); var timeout = 10_000L; var watchdog = new ExecuteWatchdog(timeout); @@ -100,7 +109,7 @@ private List computeTestIds(DocumentContext documentContext) { } var getTestsRegex = Pattern.compile(options.getGetTestsResultPattern()); - + Charset charset; if (SystemUtils.IS_OS_WINDOWS) { charset = Charset.forName("cp866"); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java new file mode 100644 index 00000000000..39ce288f548 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java @@ -0,0 +1,29 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Запуск инструментов тестирования. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.codelenses.testrunner; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java index 718fd213b3f..34ef851a01d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java @@ -49,6 +49,9 @@ public class CodeLensOptions { @JsonDeserialize(using = ParametersDeserializer.class) private Map>> parameters = new HashMap<>(); + /** + * Параметры запускателя тестового фреймворка. + */ @JsonProperty("testRunner") private TestRunnerAdapterOptions testRunnerAdapterOptions = new TestRunnerAdapterOptions(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index aee16cbe7de..e0e9c4ee133 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -28,19 +28,45 @@ import lombok.NoArgsConstructor; import org.apache.commons.lang3.SystemUtils; +/** + * Параметры запускателя тестового фреймворка. + */ @Data @AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class TestRunnerAdapterOptions { + /** + * Имя исполняемого файла тестового фреймворка (linux и macOS). + */ private String executable = "1testrunner"; + /** + * Имя исполняемого файла тестового фреймворка (windows). + */ private String executableWin = "1testrunner.bat"; + /** + * Аргументы для получения списка тестов. + */ private String getTestsArguments = "-show %s"; + /** + * Регулярное выражение для получения списка тестов. + */ private String getTestsResultPattern = "^[^<]*Имя\\sтеста\\s<([^>]+)>.*"; + /** + * Аргументы для запуска одного теста. + */ private String runTestArguments = "-run %s %s"; + /** + * Аргументы для запуска всех тестов. + */ private String runAllTestsArguments = "-run %s"; + /** + * Получить имя исполняемого файла тестового фреймворка для текущей ОС. + * + * @return Имя исполняемого файла тестового фреймворка для текущей ОС. + */ public String getExecutableForCurrentOS() { return SystemUtils.IS_OS_WINDOWS ? executableWin : executable; } From 44cd825822090ec528b7defa56ece3f3ba537ec9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 9 Jun 2023 23:55:49 +0200 Subject: [PATCH 216/595] Deps upgrade --- build.gradle.kts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ed4c2bc2056..b6cc4f66ea9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,13 +9,13 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.0.0.2929" - id("io.freefair.lombok") version "6.6.1" - id("io.freefair.javadoc-links") version "6.6.1" - id("io.freefair.javadoc-utf-8") version "6.6.1" - id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" - id("io.freefair.maven-central.validate-poms") version "6.6.1" + id("io.freefair.lombok") version "8.0.1" + id("io.freefair.javadoc-links") version "8.0.1" + id("io.freefair.javadoc-utf-8") version "8.0.1" + id("io.freefair.aspectj.post-compile-weaving") version "8.0.1" + id("io.freefair.maven-central.validate-poms") version "8.0.1" id("me.qoomon.git-versioning") version "6.4.2" - id("com.github.ben-manes.versions") version "0.46.0" + id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "2.7.11" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.18.1") + mavenBom("io.sentry:sentry-bom:6.22.0") } } @@ -67,7 +67,7 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") - api("info.picocli:picocli-spring-boot-starter:4.7.3") + api("info.picocli:picocli-spring-boot-starter:4.7.4") // lsp4j core api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.21.0") @@ -96,7 +96,7 @@ dependencies { implementation("org.aspectj", "aspectjrt", "1.9.19") // commons utils - implementation("commons-io", "commons-io", "2.11.0") + implementation("commons-io", "commons-io", "2.13.0") implementation("org.apache.commons", "commons-lang3", "3.12.0") implementation("commons-beanutils", "commons-beanutils", "1.9.4") implementation("org.apache.commons", "commons-collections4", "4.4") From 35bcef1a89bd5e948090742a165af313169a876c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 10 Jun 2023 01:26:55 +0200 Subject: [PATCH 217/595] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82=20freefa?= =?UTF-8?q?ir=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b6cc4f66ea9..576df8b16b0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,11 +9,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.0.0.2929" - id("io.freefair.lombok") version "8.0.1" - id("io.freefair.javadoc-links") version "8.0.1" - id("io.freefair.javadoc-utf-8") version "8.0.1" - id("io.freefair.aspectj.post-compile-weaving") version "8.0.1" - id("io.freefair.maven-central.validate-poms") version "8.0.1" + id("io.freefair.lombok") version "6.6.1" + id("io.freefair.javadoc-links") version "6.6.1" + id("io.freefair.javadoc-utf-8") version "6.6.1" + id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" + id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "2.7.11" From fdddf6603a7aa0812020ebaae4d40f77e3f7345e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 10 Jun 2023 07:19:30 +0200 Subject: [PATCH 218/595] Deps bump --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 576df8b16b0..7dbf8b60482 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" - id("org.springframework.boot") version "2.7.11" + id("org.springframework.boot") version "2.7.12" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" @@ -122,7 +122,7 @@ dependencies { // CONSTRAINTS implementation("com.google.guava:guava") { version { - strictly("30.1-jre") + strictly("32.0.1-jre") } } From 6ec03371811c8f6686c894f2e57320969d0ab15b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 10 Jun 2023 11:42:47 +0000 Subject: [PATCH 219/595] Translate TransferringParametersBetweenClientAndServer.md in en 100% translated source file: 'TransferringParametersBetweenClientAndServer.md' on 'en'. --- ...ferringParametersBetweenClientAndServer.md | 119 ++++++++++++++++-- 1 file changed, 108 insertions(+), 11 deletions(-) diff --git a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md index b841a6b0bde..a9b255f0ea4 100644 --- a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -1,16 +1,113 @@ # (TransferringParametersBetweenClientAndServer) - -## Description - + +## Diagnostic description + -## Examples - +When transferring control from the client to the server (and vice versa), copies of the parameters are always transferred. -## Sources - - +- When control is returned from the server to the client, a copy of the formal parameter (which was handled in the called procedure or function) is also created for transfer back to the client. + +If a formal parameter is specified with the Val modifier, then the value of the parameter will only be passed when the procedure or function is called and will not be passed back when control returns to the client. + +Possible scenarios: + +- If a structure with nested structures is passed from the client method to the server method without the Val modifier, and the parameter does not change inside the server method, then a copy of this structure with all its attachments will be transferred from the server when control returns. +- In the case of transferring a flat collection that does not change, for example, an array, a copy of this collection will also be returned from the server to the client in vain. + +As a result, the absence of the Val modifier in client-server interaction can lead to performance degradation and unnecessary/unnecessary load both by the client and the server. + +The current rule finds server methods that execute from client methods and throws remarks on parameters without the Val modifier that are not set to a value. + +## Examples + +  +1. An example with passing parameters from the client to the server without "Val" and with "Val" +```bsl +&AtServerNoContext +Procedure TransferParametersToServer(Param1, Val ParamWithVal, Collection, Val CollectionWithVal) + +Param1 = "Changed1"; +ParamWithVal = "Changed2"; +Collection.Insert("Key1", "Changed1"); +CollectionWithVal.Insert("Key2", "Changed2"); + +EndProcedure + +&AtClient +Procedure PassingParameters(Command) + +Param1 = "Initial1"; +ParamWithVal = "Initial2"; +Collection = New Structure("Key1", "Source1"); +CollectionWithVal = New Structure("Key2", "Source2"); + +PassingParametersToServer(Param1, ParamWithVal, Collection, CollectionWithVal); + +Template = "after server %1 = <%2>"; + +Message(StrTemplate(Template, "Param1", Param1)); +Message(StrTemplate(Template, "ParamWithVal", ParamWithVal)); +Message(StrTemplate(Template, "Collection.Key1", Collection.Key1)); +Message(StrTemplate(Template, "CollectionWithVal.Key2", CollectionWithVal.Key2)); + +EndProcedure + +``` +This code, when executed, will show the following result +``` +after server Param1= +after server ParamWithVal= +after server Collection.Key1 =   +after server CollectionWithVal.Key2= +``` +It can be seen that all parameters passed through Value do not change their values after execution, incl. and values within collections. + +2. An example of inaccurate parameter transfer +```bsl +&AtClient +Procedure UserGroupsDragNDropFinish(Response, AdditionalParameters) + +If Response = DialogReturnCode.No Then +Return; +EndIf; + +MessageToUser = MoveUserToNewGroup( +AdditionalOptions.DragNDropOptions, +AdditionalParameters.String, +AdditionalParameters.Move +); + +EndProcedure + +// input parameters ArrayUsers and other parameters do not change +// and therefore there is no point in additionally returning them from the server +&AtServer +Function MoveUserToNewGroup(ArrayUsers, NewGroupOwner, Move) + +If NewGroupOwner = Undefined Then +Return Undefined; +EndIf; + +CurrentGroupOwner = Items.UserGroups.CurrentRow; +MessageToUser = UsersService.MovingUserToNewGroup( +ArrayUsers, CurrentGroupOwner, NewGroupOwner, Move); + +Items.UsersList.Update(); +Items.UserGroups.Refresh(); + +Return MessageToUser; + +EndFunction +``` +## Sources + + + +- [Article on 1C:ITS - Call with transfer of control from client to server](https://its.1c.ru/db/v8318doc#bookmark:dev:TI000000153) From 90b8ed6f16de24ad4dae8fdd9790942bf6e59521 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 10 Jun 2023 11:47:45 +0000 Subject: [PATCH 220/595] Translate DeprecatedCurrentDate.md in en 100% translated source file: 'DeprecatedCurrentDate.md' on 'en'. --- docs/en/diagnostics/DeprecatedCurrentDate.md | 33 ++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/docs/en/diagnostics/DeprecatedCurrentDate.md b/docs/en/diagnostics/DeprecatedCurrentDate.md index c905097b880..62b65410d66 100644 --- a/docs/en/diagnostics/DeprecatedCurrentDate.md +++ b/docs/en/diagnostics/DeprecatedCurrentDate.md @@ -1,26 +1,47 @@ # Using of the deprecated method "CurrentDate" (DeprecatedCurrentDate) - -## Description + +## Diagnostic description +The configurations must be designed to work in conditions where the time zone on the server computer does not match the real time zone of the infobase users. For example, employees of a company from Vladivostok work with a server located in Moscow, and all operations in the system must be performed in local time (Vladivostok). -The "CurrentDate" function has been deprecated. It is recommended to use the "CurrentSessionDate" function. +Such a work scenario is often in demand in client-server infobases and in applied solutions in the service model (SaaS). + +In all server procedures and functions, instead of the CurrentDate function, which returns the server computer's date and time, you should use the CurrentSessionDate function, which converts the server's time to the user's session time zone. + +In client code, using the CurrentDate function is also not allowed. This requirement is due to the fact that the current time calculated in the client and server code must not differ. + +When using the Library of Standard Subsystems, it is recommended to use the DateSession function of the general module GeneralPurposeClient. ## Examples -Incorrect: + +### On the client +Wrong: ```bsl OperationDate = CurrentDate(); ``` +Right: + +```bsl +OperationDate = GeneralPurposeClient.SessionDate(); +``` -Correct: +### On server + +```bsl +OperationDate = CurrentDate(); +``` + +Right: ```bsl OperationDate = CurrentSessionDate(); ``` ## Sources - + + * Reference: [Metadata creation and change. Work in different timezones (RU)](https://its.1c.ru/db/v8std/content/643/hdoc) From 19ad2359a7453ceeada70fadd6b59b8396e7798b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 10 Jun 2023 11:56:31 +0000 Subject: [PATCH 221/595] Translate docs/index.md in en 100% translated source file: 'docs/index.md' on 'en'. --- docs/en/index.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/en/index.md b/docs/en/index.md index 299c9ac3af1..b10ccd21a1e 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -55,15 +55,15 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) ## Supported protocol operations ??? workspace -| Operation | Supported | Comment | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [didChangeWorkspaceFolders](https://microsoft.github.io/language-server-protocol/specification-current#workspace_didChangeWorkspaceFolders) | no | | -| [didChangeConfiguration](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration) | yes | with restrictions, see [#1431](https://github.com/1c-syntax/bsl-language-server/issues/1431) | -| [didChangeWatchedFiles](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles) | no | | -| [symbol](https://microsoft.github.io/language-server-protocol/specification#workspace_symbol) | yes | | -| [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | yes | | -| [applyEdit](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_applyEdit) | no | | -| [willCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_willCreateFiles) | no | | +    | Operation                                                     | Support                                                    | Commentary                                                  | +    | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +    | [didChangeWorkspaceFolders](https://microsoft.github.io/language-server-protocol/specification-current#workspace_didChangeWorkspaceFolders) | no   |                                                              | +    | [didChangeConfiguration](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration) | yes | with restrictions see [#1431](https://github.com/1c-syntax/bsl-language-server/issues/1431) | +    | [didChangeWatchedFiles](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles) | no   |                                                              | +    | [symbol](https://microsoft.github.io/language-server-protocol/specification#workspace_symbol) | yes |                                                              | +    | [executeCommand](https://microsoft.github.io/language-server-protocol/specification#workspace_executeCommand) | yes |                                                              | +    | [applyEdit](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_applyEdit) | no   |                                                              | +    | [willCreateFiles](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_willCreateFiles) |   no  |                                                              | ??? "Text Synchronization" | Opertaion | Supported | Comment | @@ -76,7 +76,7 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) | [willSaveWaitUntil](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_willSaveWaitUntil) | no | | | ??? textDocument - | Operation | Supported | Comment | Configurable? | + | Operation | Support | Commentary | Is configured? | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | | [publishDiagnostics](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_publishDiagnostics) | yes | tagSupport = true
versionSupport = true
[diagnostics](./diagnostics/index.md) | yes | | [completion](https://github.com/1c-syntax/bsl-language-server/blob/develop/docs/diagnostics/index.md) | no | resolveProvider = false | | @@ -90,12 +90,12 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) | [references](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references) | yes | | | | [documentHighlight](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentHighlight) | no | | | | [documentSymbol](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentSymbol) | yes | hierarchicalDocumentSymbolSupport = true | | - | [codeAction](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction) | yes | codeActionKinds = ? (see [#1433](https://github.com/1c-syntax/bsl-language-server/issues/1433))
isPreferredSupport = true | yes | + | [codeAction](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeAction) | yes | codeActionKinds = ? (см. [#1433](https://github.com/1c-syntax/bsl-language-server/issues/1433))
isPreferredSupport = true | yes | | [codeAction/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeAction_resolve) | no | | | | [codeLens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_codeLens) | yes | resolveProvider = false | yes | | [codeLens/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_resolve) | yes | | | | [codeLens/refresh](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#codeLens_refresh) | yes | | | - | [documentLink](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentLink) | yes | Displaying hyperlinks to diagnostics documentation.
tooltipSupport = true
resolveProvider = false | yes | + | [documentLink](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentLink) | yes | Showing hyperlinks to documentation on diagnostics.
tooltipSupport = true
resolveProvider = false | yes | | [documentLink/resolve](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#documentLink_resolve) | no | | | | [documentColor](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentColor) | yes | | | | [colorPresentation](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_colorPresentation) | yes | | | @@ -112,6 +112,9 @@ Perfomance measurement - [SSL 3.1](../bench/index.html) | [semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | no | | | | [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | no | | | | [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | no | | | + | [inlayHint](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_inlayHint) | yes | resolveProvider = false | yes | + | [inlayHint/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHint_resolve) | no | | | + | [inlayHint/refresh](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlayHint_refresh) | yes | | | From 2bb88703079d01d84b3d002ada64a98213e79946 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 10 Jun 2023 11:59:14 +0000 Subject: [PATCH 222/595] Translate docs/features/ConfigurationFile.md in en 100% translated source file: 'docs/features/ConfigurationFile.md' on 'en'. --- docs/en/features/ConfigurationFile.md | 68 ++++++++++++++++----------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/docs/en/features/ConfigurationFile.md b/docs/en/features/ConfigurationFile.md index 4c59bba4aab..ef7c663dba8 100644 --- a/docs/en/features/ConfigurationFile.md +++ b/docs/en/features/ConfigurationFile.md @@ -7,30 +7,35 @@ If there is no configuration file, an attempt will be made to find the ".bsl-lan ## Settings -|Name|Type|Description| -|:--|:-:|:--| -|`language`|`String`|Set the language for displaying diagnosed comments. Supported languages:
* `ru` - for Russian (*default*)
* `en` - for English| -|`codeLens`|`JSON-Object`|Contains the settings for displaying `lens` in advanced code editors/IDEs *(for example, [Visual Studio Code](https://code.visualstudio.com/))*, which displays various information above a block of code. Object properties| -|⤷   `parameters`|`JSON-Object`|Collection of lens settings. Collection items are json-objects with the following structure:
* *object key* - string, is lens key
* *object value* - if is boolean, then interpreted as lens off-switch (`false`) or on-switch with default parameters (`true`), if is type `json-object`, collection of lens parameters.| -|   ⤷   `cognitiveComplexity`|`Boolean` or `JSON-Object`|Enables displaying the value of the [cognitive complexity](../diagnostics/CognitiveComplexity.md) of the method over its definition. The default is ` true `. Lens options: `complexityThreshold` - lens response threshold. The default is - `-1`.| -|   ⤷   `cyclomaticComplexity`|`Boolean` or `JSON-Object`|Enables displaying the value of the [cyclomatic complexity](../diagnostics/CyclomaticComplexity.md) of the method over its definition. The default is `true`. Lens options: `complexityThreshold` - lens response threshold. The default is - `-1`.| -|`diagnostics`|`JSON-Object`|Contains diagnostic settings| -|⤷   `computeTrigger`|`String`|Event that will trigger the code analysis procedure to diagnose comments. Possible values:
* `onType` -when editing a file (online) ***on large files can significantly slow down editing ***
* `onSave` - when saving a file (*default*)
`never` - analysis will not be performed| -|⤷   `ordinaryAppSupport`|`Boolean`|Ordinary client support. Diagnostics will require taking into account the features of a ordinary application. Values:
* `true` - the configuration uses ordinary application *(default)*
* `false` - ignore ordinary application warnings| -|⤷   `skipSupport`|`String`|This parameter sets **1C configuration** file skipping mode *(for example files are not analyzed for issues)* which are "on support" from vendor configuration. Possible values:
* `withSupport` - skip all modules set "on support" *(all "locks" types)*
* `withSupportLocked` - skip modules set "on support" with prohibited modification *("yellow closed lock")*
* `never` - skip no modules as support mode is not analyzed *(set by default)*| -|⤷   `mode`|`String`|Setting for controlling the diagnostic settings accounting mode. Possible options:
* `OFF` - All diagnostics are considered to be turned off, regardless of their settings.
* `ON` - All diagnostics enabled by default are considered enabled, the rest - depending on personal settings
* `EXCEPT` - All diagnostics other than those specified are considered enabled.
* `ONLY` - Only the specified diagnostics are considered enabled.
* `ALL` - All diagnostics are considered enabled| -|⤷   `parameters`|`JSON-Object`|Parameter is a collection of diagnostics parameters. Collection items are json-objects with the following structure:
* *object key* - string, is diagnostic key
* *object value* - if is boolean, then interpreted as diagnostic off-switch (`false`) or on-switch with default parameters (`true`), if is type `json-object`, collection of diagnostic parameters.

Key, if set to ON by default and all allowed parameters and examples are given on the diagnostic page.| -|⤷   `subsystemsFilter`|`JSON-Object`|Filter by configuration subsystems| -|⤷   `analyzeOnStart`|`Boolean`|Starting the analysis of the entire project at server startup. If enabled, after the context is built on the client, information about diagnostics in all project files will be sent.| -|   ⤷   `include`|`Array` `String`|List of names of subsystems for which objects the analysis is performed, including child subsystems| -|   ⤷   `exclude`|`Array` `String`|List of names of subsystems excluded from analysis, including child subsystems| -|`documentLink`|`JSON-Object`|Contains documentation link settings| -|⤷   `showDiagnosticDescription`|`Boolean`|Show additional links to diagnostics documentation. By default, the parameter is off (*set to `false`*)| -|`useDevSite`|`Boolean`|When you turn on the settings, the resulting documentation links will lead to the develop version of the site. By default, the parameter is off (*set to `false`*)| -|`siteRoot`|`String`|The path to the root of the site with the documentation. By default, the parameter value is `"https://1c-syntax.github.io/bsl-language-server"` | -|`traceLog`|`String`|To log all requests *(incoming and outgoing)* between **BSL Language Server** and **Language Client** from used editor/IDE, this parameter sets log file path. The path can set either absolute or relative *(from project root)*, by default the value is not set.

**WARNING**

* When starting **BSL Language Server** overwrites this file
* Speed of interaction between client and server **DRAMATICALLY REDUCED**| -|`configurationRoot`|`String`|This parameter is intended to indicate the root directory the 1C configuration files are located in the project directory. It can be useful if there are several configuration directories in the same project directory or when the structure of the project directory is so complex. By default, the parameter is empty and `BSL Language Server` determines the location of the configuration root directory independently| -|`sendErrors`|`String`|Mode for sending error messages to BSL Language Server developers. More [Monitoring](Monitoring.md).Possible values:
* `ask` - ask permission on every error *(set by default)*.
* `send` - always send error messages.
* `never` - never send error messages.| +| Name | Type | Description | +|:---------------------------------------------------------------|:--------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `language` | `String` | Set the language for displaying diagnosed comments. Supported languages:
* `ru` - for Russian (*default*)
* `en` - for English | +| `codeLens` | `JSON-Object` | Contains settings for displaying `lenses` in advanced code/IDEs *(eg [Visual Studio Code](https://code.visualstudio.com/))*, which displays various information above the code block. | +| ⤷   `parameters` | `JSON-Object` | Collection of lens settings. Collection items are json-objects with the following structure:
* *object key* - string, is lens key
* *object value* - if is boolean, then interpreted as lens off-switch (`false`) or on-switch with default parameters (`true`), if is type `json-object`, collection of lens parameters. | +|    ⤷   `cognitiveComplexity` | `Boolean` or `JSON-Object` | Enables displaying the value of the [cognitive complexity](../diagnostics/CognitiveComplexity.md) of the method over its definition. The default is ` true `. Lens options: `complexityThreshold` - lens response threshold. The default is - `-1`. | +|    ⤷   `cyclomaticComplexity` | `Boolean` or `JSON-Object` | Enables displaying the value of the [cyclomatic complexity](../diagnostics/CyclomaticComplexity.md) of the method over its definition. The default is `true`. Lens options: `complexityThreshold` - lens response threshold. The default is - `-1`. | +| `diagnostics` | `JSON-Object` | Contains diagnostic settings | +| ⤷   `computeTrigger` | `String` | Event that will trigger the code analysis procedure to diagnose comments. Possible values:
* `onType` -when editing a file (online) ***on large files can significantly slow down editing ***
* `onSave` - when saving a file (*default*)
`never` - analysis will not be performed | +| ⤷   `ordinaryAppSupport` | `Boolean` | Ordinary client support. Diagnostics will require taking into account the features of a ordinary application. Values:
* `true` - the configuration uses ordinary application *(default)*
* `false` - ignore ordinary application warnings | +| ⤷   `skipSupport` | `String` | This parameter sets **1C configuration** file skipping mode *(for example files are not analyzed for issues)* which are "on support" from vendor configuration. Possible values:
* `withSupport` - skip all modules set "on support" *(all "locks" types)*
* `withSupportLocked` - skip modules set "on support" with prohibited modification *("yellow closed lock")*
* `never` - skip no modules as support mode is not analyzed *(set by default)* | +| ⤷   `mode` | `String` | Setting for controlling the diagnostic settings accounting mode. Possible options:
* `OFF` - All diagnostics are considered to be turned off, regardless of their settings.
* `ON` - All diagnostics enabled by default are considered enabled, the rest - depending on personal settings
* `EXCEPT` - All diagnostics other than those specified are considered enabled.
* `ONLY` - Only the specified diagnostics are considered enabled.
* `ALL` - All diagnostics are considered enabled | +| ⤷   `parameters` | `JSON-Object` | Parameter is a collection of diagnostics parameters. Collection items are json-objects with the following structure:
* *object key* - string, is diagnostic key
* *object value* - if is boolean, then interpreted as diagnostic off-switch (`false`) or on-switch with default parameters (`true`), if is type `json-object`, collection of diagnostic parameters.

Key, if set to ON by default and all allowed parameters and examples are given on the diagnostic page. | +| ⤷   `subsystemsFilter` | `JSON-Object` | Filter by configuration subsystems | +| ⤷   `analyzeOnStart` | `Boolean` | Starting the analysis of the entire project at server startup. If enabled, after the context is built on the client, information about diagnostics in all project files will be sent. | +|    ⤷   `include` | `Array` `String` | List of names of subsystems for which objects the analysis is performed, including child subsystems | +|    ⤷   `exclude` | `Array` `String` | List of names of subsystems excluded from analysis, including child subsystems | +| `documentLink` | `JSON-Object` | Contains documentation link settings | +| ⤷   `showDiagnosticDescription` | `Boolean` | Show additional links to diagnostics documentation. By default, the parameter is off (*set to `false`*) | +| `inlayHint` | `JSON-Object` | ontains settings for displaying `inlay hints` in advanced code editors/IDEs *(for example [Visual Studio Code](https://code.visualstudio.com/))*, which displays various information directly in the code line. | +| ⤷   `parameters` | `JSON-Object` | A collection of inlay hints settings. The elements of the collection are json objects of the following structure:*
*object key* - a string that is an identifier of inlay hint*
*object value* - can take either a boolean value, and then it is interpreted as disabling inlay hint (`false`) or enabling them with parameters by default (`true`), or a value of type `json-object`, which is a set of inlay hint settings. | +|    ⤷   `cognitiveComplexity` | `Boolean` or `JSON-Object` | Enables displaying the value of the [Cognitive Complexity](../diagnostics/CognitiveComplexity.md) method as inlay hints. By default, the setting is set to `true`. | +|    ⤷   `cyclomaticComplexity` | `Boolean` or `JSON-Object` | Enables displaying the value of the [Cyclomatic Complexity](../diagnostics/CyclomaticComplexity.md) method as inlay hints. By default, the setting is set to `true`. | +|    ⤷   `sourceDefinedMethodCall` | `Boolean` or `JSON-Object` | Enables displaying the parameters of the invoked configuration/library method as inlay hints. By default, the setting is set to `true`. Available parameters:
* `showParametersWithTheSameName` - show parameters with names contained in the passed value. The default parameter value is `false`.
* `showDefaultValues` - show default values for parameters not passed. The default value of the parameter is `true`. | +| `useDevSite` | `Boolean` | When you turn on the settings, the resulting documentation links will lead to the develop version of the site. By default, the parameter is off (*set to `false`*) | +| `siteRoot` | `String` | The path to the root of the site with the documentation. By default, the parameter value is `"https://1c-syntax.github.io/bsl-language-server"` | +| `traceLog` | `String` | To log all requests *(incoming and outgoing)* between **BSL Language Server** and **Language Client** from used editor/IDE, this parameter sets log file path. The path can set either absolute or relative *(from project root)*, by default the value is not set.

**WARNING**

* When starting **BSL Language Server** overwrites this file
* Speed of interaction between client and server **DRAMATICALLY REDUCED** | +| `configurationRoot` | `String` | This parameter is intended to indicate the root directory the 1C configuration files are located in the project directory. It can be useful if there are several configuration directories in the same project directory or when the structure of the project directory is so complex. By default, the parameter is empty and `BSL Language Server` determines the location of the configuration root directory independently | +| `sendErrors` | `String` | Mode for sending error messages to BSL Language Server developers. More [Monitoring](Monitoring.md).Possible values:
* `ask` - ask permission on every error *(set by default)*.
* `send` - always send error messages.
* `never` - never send error messages. | You can use the following JSON schema to make it easier to compile and edit a configuration file: @@ -43,10 +48,12 @@ https://1c-syntax.github.io/bsl-language-server/configuration/schema.json Setting example: * Language of diagnostics messages - English; -* Changes the diagnostic setting for [LineLength - Line Length limit](../diagnostics/LineLength.md), set the limit for the length of a string to 140 characters; +* Changes the diagnostic setting [LineLength - Line length limit](../diagnostics/LineLength.md) by setting + line length limit of 140 characters; * Disable [MethodSize - Method size restriction diagnostic](../diagnostics/MethodSize.md). * Enables the calculation of diagnostics in continuous mode (`computeTrigger = onType`) -* Diagnostics are calculated only for the objects of the "StandardSubsystems" subsystem, with the exception of "ReportVariants" and "VersioningObjects" +* Diagnostics are calculated only for the objects of the "StandardSubsystems" subsystem, with the exception of "ReportVariants" and " + ObjectVersioning" ```json { @@ -61,8 +68,13 @@ Setting example: "MethodSize": false }, "subsystemsFilter": { - "include": ["StandardSubsystems"], - "exclude": ["ReportVariants", "VersioningObjects"] + "include": [ + "StandardSubsystems" + ], + "exclude": [ + "ReportVariants", + "ObjectVersioning" + ] } } } From 6e8449a0ec80502429a574c53ae3e5b3f268c064 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 12 Jun 2023 17:03:35 +0200 Subject: [PATCH 223/595] Use bsl parser from release --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7dbf8b60482..e710eea9911 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.21.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "6121e8ec3590e0acf6a6f8944fc4b3dd00ef491f") { + api("com.github.1c-syntax", "bsl-parser", "0.22.0") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") From 88c7b2c79b75383e0652433aa34cf71f5676f9bc Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 12 Jun 2023 17:05:31 +0200 Subject: [PATCH 224/595] Use utils from release --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e710eea9911..3f12a6c2fcc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,7 @@ dependencies { exclude("org.antlr", "antlr-runtime") exclude("org.glassfish", "javax.json") } - api("com.github.1c-syntax", "utils", "f1694d9c") + api("com.github.1c-syntax", "utils", "0.5.0") api("com.github.1c-syntax", "mdclasses", "0.10.3") api("io.github.1c-syntax", "bsl-common-library", "0.3.0") api("io.github.1c-syntax", "supportconf", "0.1.1") From 2899fa7509534a2f4efe197bca29af5becf0d742 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 12 Jun 2023 17:15:15 +0200 Subject: [PATCH 225/595] Happy new year --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3f12a6c2fcc..983104a1e13 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,7 @@ dependencies { exclude("org.antlr", "antlr-runtime") exclude("org.glassfish", "javax.json") } - api("com.github.1c-syntax", "utils", "0.5.0") + api("com.github.1c-syntax", "utils", "0.5.1") api("com.github.1c-syntax", "mdclasses", "0.10.3") api("io.github.1c-syntax", "bsl-common-library", "0.3.0") api("io.github.1c-syntax", "supportconf", "0.1.1") From 224d63a381e40b8486521f7f33485bb0db98ece5 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Wed, 14 Jun 2023 17:17:19 +1000 Subject: [PATCH 226/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=20=D0=BB=D0=B8=D0=BD=D0=B7=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codelenses/RunAllTestsCodeLensSupplier.java | 4 ++-- .../languageserver/codelenses/RunTestCodeLensSupplier.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index ff5af422ba0..84b77b9c6bd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -133,9 +133,9 @@ public Class getCodeLensDataClass() { return DefaultCodeLensData.class; } - private static CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { + private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { - var codeLensData = new DefaultCodeLensData(documentContext.getUri(), COMMAND_ID); + var codeLensData = new DefaultCodeLensData(documentContext.getUri(), getId()); var codeLens = new CodeLens(method.getSubNameRange()); codeLens.setData(codeLensData); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index ec0fd8f91d6..0960c030f7f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -145,7 +145,7 @@ public CodeLens resolve(DocumentContext documentContext, CodeLens unresolved, Ru private CodeLens toCodeLens(MethodSymbol method, DocumentContext documentContext) { var testId = method.getName(); - var codeLensData = new RunTestCodeLensData(documentContext.getUri(), COMMAND_ID, testId); + var codeLensData = new RunTestCodeLensData(documentContext.getUri(), getId(), testId); var codeLens = new CodeLens(method.getSubNameRange()); codeLens.setData(codeLensData); From a295f87cbb5c262149b2fc94f97fc544fa3a988d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 09:56:59 +0000 Subject: [PATCH 227/595] build(deps): bump JetBrains/qodana-action from 2023.1.0 to 2023.1.4 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2023.1.0 to 2023.1.4. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2023.1.0...v2023.1.4) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 779c1ea4929..8b4df680512 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.1.0 + uses: JetBrains/qodana-action@v2023.1.4 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From 57da572f3cc067a34a707a965e132828520ebe16 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Thu, 15 Jun 2023 16:13:48 +1000 Subject: [PATCH 228/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=20=D0=B8=D0=B7-=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89=D0=B5=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B8=D0=B7=20MissingCommonModuleMethodDiagnostic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/computer/DiagnosticComputer.java | 7 +++++++ .../MissingCommonModuleMethodDiagnostic.java | 15 ++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index b13e8a41357..6a91c3d43ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -47,6 +47,13 @@ public List compute(DocumentContext documentContext) { try { return diagnostic.getDiagnostics(documentContext).stream(); } catch (RuntimeException e) { + /* + TODO: + В случае если подключен ленг клиент, то логирование ошибки в консоль приводит к падению сервера + т.к данный лог идёт в выхлоп не по протоколу. + Требуется обернуть логгер в случае подключенного ленг клиента и слать прокольное событие + которое запишет ошибку в лог. + */ String message = String.format( "Diagnostic computation error.%nFile: %s%nDiagnostic: %s", documentContext.getUri(), diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java index c4822681212..74133a4a1cb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java @@ -80,28 +80,29 @@ protected void check() { private Optional getReferenceToMethodCall(SymbolOccurrence symbolOccurrence) { final var symbol = symbolOccurrence.getSymbol(); final var document = documentContext.getServerContext() - .getDocument(symbol.getMdoRef(), symbol.getModuleType()) - .orElseThrow(); - final var mdObject = document.getMdObject().orElseThrow(); + .getDocument(symbol.getMdoRef(), symbol.getModuleType()); + if (document.isEmpty()) return Optional.empty(); + final var mdObject = document.get().getMdObject(); + if (mdObject.isEmpty()) return Optional.empty(); // т.к. через refIndex.getReferences нельзя получить приватные методы, приходится обходить символы модуля - final var methodSymbol = document + final var methodSymbol = document.get() .getSymbolTree().getMethodSymbol(symbol.getSymbolName()); if (methodSymbol.isEmpty()){ final var location = symbolOccurrence.getLocation(); // Нельзя использовать symbol.getSymbolName(), т.к. имя в нижнем регистре return Optional.of( - new CallData(mdObject.getName(), + new CallData(mdObject.get().getName(), getMethodNameByLocation(documentContext.getAst(), location.getRange()), location.getRange(), false, false)); } // вызовы приватных методов внутри самого модуля пропускаем - if (document.getUri().equals(documentContext.getUri())){ + if (document.get().getUri().equals(documentContext.getUri())){ return Optional.empty(); } return methodSymbol .filter(methodSymbol2 -> !methodSymbol2.isExport()) - .map(methodSymbol1 -> new CallData(mdObject.getName(), + .map(methodSymbol1 -> new CallData(mdObject.get().getName(), methodSymbol1.getName(), symbolOccurrence.getLocation().getRange(), true, true)); } From 5625cc4a8632ee976e37dd48a73a159b62bceece Mon Sep 17 00:00:00 2001 From: sfaqer Date: Thu, 15 Jun 2023 18:01:14 +1000 Subject: [PATCH 229/595] =?UTF-8?q?1.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20SourceDefine?= =?UTF-8?q?dMethodCallInlayHintSupplier=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D1=8C=20=D0=B8=D1=89=D0=B5=D1=82=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B2=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=D1=85=20inlayHint=20=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20CodeLens=201.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20sho?= =?UTF-8?q?wParametersWithTheSameName=20=D0=B4=D0=BB=D1=8F=20SourceDefined?= =?UTF-8?q?MethodCallInlayHintSupplier=203.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20inlayHints?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rceDefinedMethodCallInlayHintSupplier.java | 4 +- .../LanguageServerConfigurationTest.java | 6 ++ ...efinedMethodCallInlayHintSupplierTest.java | 57 +++++++++++++++++++ .../.partial-bsl-language-server.json | 7 +++ 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 6976c53a796..b3bce437605 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -173,7 +173,7 @@ private static void setTooltip(InlayHint inlayHint, ParameterDefinition paramete private boolean showParametersWithTheSameName() { - var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); + var parameters = configuration.getInlayHintOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); if (parameters.isLeft()) { return DEFAULT_SHOW_PARAMETERS_WITH_THE_SAME_NAME; } else { @@ -185,7 +185,7 @@ private boolean showParametersWithTheSameName() { } private boolean showDefaultValues() { - var parameters = configuration.getCodeLensOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); + var parameters = configuration.getInlayHintOptions().getParameters().getOrDefault(getId(), Either.forLeft(true)); if (parameters.isLeft()) { return DEFAULT_DEFAULT_VALUES; } else { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java index 51e3315111d..0dbb67436c4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.DiagnosticsOptions; import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.Mode; import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport; +import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintOptions; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.jsonrpc.messages.Either; @@ -152,6 +153,7 @@ void testPartialInitialization() { // when CodeLensOptions codeLensOptions = configuration.getCodeLensOptions(); DiagnosticsOptions diagnosticsOptions = configuration.getDiagnosticsOptions(); + InlayHintOptions inlayHintOptions = configuration.getInlayHintOptions(); // then assertThat(codeLensOptions.getParameters().get("cognitiveComplexity")).isNull(); @@ -162,6 +164,10 @@ void testPartialInitialization() { assertThat(diagnosticsOptions.getMode()).isEqualTo(Mode.ON); assertThat(diagnosticsOptions.getSkipSupport()).isEqualTo(SkipSupport.NEVER); assertThat(diagnosticsOptions.getParameters()).isEmpty(); + + assertThat(inlayHintOptions.getParameters()) + .containsEntry("sourceDefinedMethodCall", Either.forRight(Map.of("showParametersWithTheSameName", true))); + } } \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java index f62c122e191..d4dcfd89d26 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -21,7 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver.inlayhints; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintKind; @@ -33,10 +35,12 @@ import org.springframework.boot.test.context.SpringBootTest; import java.util.List; +import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod class SourceDefinedMethodCallInlayHintSupplierTest { private final static String FILE_PATH = "./src/test/resources/inlayhints/SourceDefinedMethodCallInlayHintSupplier.bsl"; @@ -44,6 +48,9 @@ class SourceDefinedMethodCallInlayHintSupplierTest { @Autowired private SourceDefinedMethodCallInlayHintSupplier supplier; + @Autowired + private LanguageServerConfiguration configuration; + @Test void testDefaultInlayHints() { @@ -80,4 +87,54 @@ void testDefaultInlayHints() { ; } + @Test + void testInlayHintsShowParametersWithTheSameName() { + + // given + configuration.getInlayHintOptions().getParameters().put( + supplier.getId(), + Either.forRight(Map.of("showParametersWithTheSameName", true)) + ); + + var documentContext = TestUtils.getDocumentContextFromFile(FILE_PATH); + MethodSymbol firstMethod = documentContext.getSymbolTree().getMethods().get(0); + + var textDocumentIdentifier = TestUtils.getTextDocumentIdentifier(documentContext.getUri()); + var range = firstMethod.getRange(); + var params = new InlayHintParams(textDocumentIdentifier, range); + + // when + List inlayHints = supplier.getInlayHints(documentContext, params); + + // then + assertThat(inlayHints) + .hasSize(3) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("Player:")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(3, 14)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + assertThat(inlayHint.getTooltip().getRight().getValue()).isEqualTo("* **Player**: "); + }) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("PlayersHealth:")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(3, 23)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + assertThat(inlayHint.getTooltip().getRight().getValue()).isEqualTo("* **PlayersHealth**: "); + }) + .anySatisfy(inlayHint -> { + assertThat(inlayHint.getLabel()).isEqualTo(Either.forLeft("Amount:")); + assertThat(inlayHint.getKind()).isEqualTo(InlayHintKind.Parameter); + assertThat(inlayHint.getPosition()).isEqualTo(new Position(3, 32)); + assertThat(inlayHint.getPaddingRight()).isTrue(); + assertThat(inlayHint.getPaddingLeft()).isNull(); + assertThat(inlayHint.getTooltip().getRight().getValue()).isEqualTo("* **Amount**: "); + }) + ; + } + + } diff --git a/src/test/resources/.partial-bsl-language-server.json b/src/test/resources/.partial-bsl-language-server.json index f3e3b85a302..070725801a3 100644 --- a/src/test/resources/.partial-bsl-language-server.json +++ b/src/test/resources/.partial-bsl-language-server.json @@ -4,6 +4,13 @@ "cyclomaticComplexity": false } }, + "inlayHint": { + "parameters": { + "sourceDefinedMethodCall": { + "showParametersWithTheSameName": true + } + } + }, "diagnostics": { "mode": "on" } From 704eb1a1af06c5afd45ac48433d0993a74291da8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 17 Jun 2023 12:06:22 +0300 Subject: [PATCH 230/595] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B8=D0=B7=20?= =?UTF-8?q?MdoReferences=20=D0=B2=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D1=83=D1=8E=D1=89=D0=B8=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=20MdoRefBuilder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit и добавил использование стринг интернера --- .../DenyIncompleteValuesDiagnostic.java | 4 +- .../languageserver/utils/MdoRefBuilder.java | 37 ++++++++++- .../languageserver/utils/MdoReferences.java | 65 ------------------- 3 files changed, 38 insertions(+), 68 deletions(-) delete mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index 35c25ddc57f..896bc6fb8f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -26,7 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.utils.MdoReferences; +import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; @@ -61,7 +61,7 @@ public DenyIncompleteValuesDiagnostic() { protected void checkMetadata(AbstractMDObjectBase mdo) { getWrongDimensions((AbstractMDObjectComplex) mdo) .forEach((Dimension dimension) -> { - var ownerMDOName = MdoReferences.getLocaleOwnerMdoName(documentContext, mdo); + var ownerMDOName = MdoRefBuilder.getLocaleOwnerMdoName(documentContext, mdo); addDiagnostic(info.getMessage(dimension.getName(), ownerMDOName)); }); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index 7b6cebd71a0..3121569ce66 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -22,6 +22,8 @@ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; @@ -68,7 +70,7 @@ public String getMdoRef(DocumentContext documentContext, BSLParser.ComplexIdenti public String getMdoRef( DocumentContext documentContext, @Nullable - TerminalNode identifier, + TerminalNode identifier, List modifiers ) { @@ -91,6 +93,39 @@ public String getMdoRef( return stringInterner.intern(mdoRef.get()); } + /** + * Получить mdoRef в языке конфигурации + * + * @param documentContext the document context + * @param mdo the mdo + * @return the locale mdoRef + */ + public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { + final var mdoReference = mdo.getMdoReference(); + final String result; + if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { + result = mdoReference.getMdoRef(); + } else { + result = mdoReference.getMdoRefRu(); + } + return stringInterner.intern(result); + } + + /** + * Получить имя родителя метаданного в языке конфигурации. + * + * @param documentContext the document context + * @param mdo the mdo + * @return the locale owner mdo name + */ + public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { + final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); + if (names.length <= 1) { + return ""; + } + return stringInterner.intern(names[0].concat(".").concat(names[1])); + } + private Optional getCommonModuleMdoRef(DocumentContext documentContext, String commonModuleName) { return documentContext.getServerContext() .getConfiguration() diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java deleted file mode 100644 index 40b4bd45608..00000000000 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoReferences.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is a part of BSL Language Server. - * - * Copyright (c) 2018-2023 - * Alexey Sosnoviy , Nikita Fedkin and contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - * - * BSL Language Server is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * BSL Language Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BSL Language Server. - */ -package com.github._1c_syntax.bsl.languageserver.utils; - -import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.mdo.MD; -import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; -import lombok.experimental.UtilityClass; - -/** - * Класс с методами-утилитами для MdoReference. - */ -@UtilityClass -public class MdoReferences { - - /** - * Получить mdoRef в языке конфигурации - * - * @param documentContext the document context - * @param mdo the mdo - * @return the locale mdoRef - */ - public String getLocaleMdoRef(DocumentContext documentContext, MD mdo) { - final var mdoReference = mdo.getMdoReference(); - if (documentContext.getServerContext().getConfiguration().getScriptVariant() == ScriptVariant.ENGLISH) { - return mdoReference.getMdoRef(); - } - return mdoReference.getMdoRefRu(); - } - - /** - * Получить имя родителя метаданного в языке конфигурации. - * - * @param documentContext the document context - * @param mdo the mdo - * @return the locale owner mdo name - */ - public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { - final var names = getLocaleMdoRef(documentContext, mdo).split("\\."); - if (names.length <= 1){ - return ""; - } - return names[0].concat(".").concat(names[1]); - } - -} From 23f190d5c4927b06811e869e5d200ee736c12dc4 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 17 Jun 2023 12:27:56 +0200 Subject: [PATCH 231/595] Update TransferringParametersBetweenClientAndServer.md --- .../diagnostics/TransferringParametersBetweenClientAndServer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md index fb670801260..dd78c94a9e0 100644 --- a/docs/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -1,4 +1,4 @@ -# (TransferringParametersBetweenClientAndServer) +# Передача параметров между клиентом и сервером (TransferringParametersBetweenClientAndServer) ## Описание диагностики From a140c954c0f868eba7f59fb01d1dfb9dc56614cf Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 17 Jun 2023 12:28:29 +0200 Subject: [PATCH 232/595] Update TransferringParametersBetweenClientAndServer.md --- .../diagnostics/TransferringParametersBetweenClientAndServer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md index a9b255f0ea4..d0045c5c7fa 100644 --- a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -1,4 +1,4 @@ -# (TransferringParametersBetweenClientAndServer) +# Transferring parameters between client and server (TransferringParametersBetweenClientAndServer) ## Diagnostic description From 74a766b2d656b76c385e4f8a6d2aea3c511e4479 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 18 Jun 2023 11:41:31 +0200 Subject: [PATCH 233/595] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4=D0=BB=D0=B8=D0=BD=D0=B7=D1=83=20=D1=81=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RunTestCodeLensSupplierTest.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index e5498ddd8a9..bb3576f1737 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.services.LanguageServer; import org.junit.jupiter.api.BeforeEach; @@ -68,14 +69,33 @@ void noLensesIfClientIsNotSupported() { assertThat(codeLenses).isEmpty(); } + @Test + void testDryRun() { + // given + initializeServer("Visual Studio Code"); + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isNotNull(); + } @Test - void test() { + void testResolve() { + // given + CodeLens codeLens = new CodeLens(); + RunTestCodeLensSupplier.RunTestCodeLensData codeLensData = new RunTestCodeLensSupplier.RunTestCodeLensData( + documentContext.getUri(), + supplier.getId(), + "testName" + ); + // when - var codeLenses = supplier.getCodeLenses(documentContext); + var resolvedCodeLens = supplier.resolve(documentContext, codeLens, codeLensData); // then + assertThat(resolvedCodeLens.getCommand()).isNotNull(); } private void initializeServer(String clientName) { From 55a92440f1fe2b2a413ef9eb3d946eea506fd6ac Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 18 Jun 2023 13:09:45 +0200 Subject: [PATCH 234/595] more tests --- .../RunAllTestsCodeLensSupplierTest.java | 134 ++++++++++++++++++ .../RunTestCodeLensSupplierTest.java | 26 +++- ...ier.bsl => RunAllTestsCodeLensSupplier.os} | 0 .../codelenses/RunTestCodeLensSupplier.os | 9 ++ 4 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java rename src/test/resources/codelenses/{RunTestCodeLensSupplier.bsl => RunAllTestsCodeLensSupplier.os} (100%) create mode 100644 src/test/resources/codelenses/RunTestCodeLensSupplier.os diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java new file mode 100644 index 00000000000..2ba9080ebfa --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java @@ -0,0 +1,134 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.codelenses.testrunner.TestRunnerAdapter; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.InitializeParams; +import org.eclipse.lsp4j.services.LanguageServer; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.context.ApplicationEventPublisher; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class RunAllTestsCodeLensSupplierTest { + + @Autowired + private RunAllTestsCodeLensSupplier supplier; + + @Autowired + private ApplicationEventPublisher eventPublisher; + + @SpyBean + private TestRunnerAdapter testRunnerAdapter; + + private DocumentContext documentContext; + + @BeforeEach + void init() { + var filePath = "./src/test/resources/codelenses/RunAllTestsCodeLensSupplier.os"; + documentContext = TestUtils.getDocumentContextFromFile(filePath); + } + + @Test + void noLensesIfClientIsNotSupported() { + // given + initializeServer("Unknown client"); + + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isEmpty(); + } + + @Test + void testDryRun() { + // given + initializeServer("Visual Studio Code"); + + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isNotNull(); + } + + @Test + void testRunWithMockedTestIds() { + // given + initializeServer("Visual Studio Code"); + + when(testRunnerAdapter.getTestIds(documentContext)) + .thenReturn(List.of("testName")); + + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isNotNull(); + } + + @Test + void testResolve() { + // given + CodeLens codeLens = new CodeLens(); + DefaultCodeLensData codeLensData = new DefaultCodeLensData( + documentContext.getUri(), + supplier.getId() + ); + + // when + var resolvedCodeLens = supplier.resolve(documentContext, codeLens, codeLensData); + + // then + assertThat(resolvedCodeLens.getCommand()).isNotNull(); + } + + private void initializeServer(String clientName) { + var initializeParams = new InitializeParams(); + initializeParams.setClientInfo( + new ClientInfo(clientName, "1.0.0") + ); + + var event = new LanguageServerInitializeRequestReceivedEvent( + mock(LanguageServer.class), + initializeParams + ); + eventPublisher.publishEvent(event); + } +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index bb3576f1737..5fd85954142 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.codelenses; +import com.github._1c_syntax.bsl.languageserver.codelenses.testrunner.TestRunnerAdapter; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; @@ -33,11 +34,14 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationEventPublisher; +import java.util.List; + import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; import static org.mockito.Mockito.mock; - +import static org.mockito.Mockito.when; @SpringBootTest @CleanupContextBeforeClassAndAfterEachTestMethod @@ -49,11 +53,14 @@ class RunTestCodeLensSupplierTest { @Autowired private ApplicationEventPublisher eventPublisher; + @SpyBean + private TestRunnerAdapter testRunnerAdapter; + private DocumentContext documentContext; @BeforeEach void init() { - var filePath = "./src/test/resources/codelenses/RunTestCodeLensSupplier.bsl"; + var filePath = "./src/test/resources/codelenses/RunTestCodeLensSupplier.os"; documentContext = TestUtils.getDocumentContextFromFile(filePath); } @@ -81,6 +88,21 @@ void testDryRun() { assertThat(codeLenses).isNotNull(); } + @Test + void testRunWithMockedTestIds() { + // given + initializeServer("Visual Studio Code"); + + when(testRunnerAdapter.getTestIds(documentContext)) + .thenReturn(List.of("testName")); + + // when + var codeLenses = supplier.getCodeLenses(documentContext); + + // then + assertThat(codeLenses).isNotNull(); + } + @Test void testResolve() { // given diff --git a/src/test/resources/codelenses/RunTestCodeLensSupplier.bsl b/src/test/resources/codelenses/RunAllTestsCodeLensSupplier.os similarity index 100% rename from src/test/resources/codelenses/RunTestCodeLensSupplier.bsl rename to src/test/resources/codelenses/RunAllTestsCodeLensSupplier.os diff --git a/src/test/resources/codelenses/RunTestCodeLensSupplier.os b/src/test/resources/codelenses/RunTestCodeLensSupplier.os new file mode 100644 index 00000000000..654be9d9a9f --- /dev/null +++ b/src/test/resources/codelenses/RunTestCodeLensSupplier.os @@ -0,0 +1,9 @@ +&Тест +Процедура Тест1() Экспорт + А = 0; +КонецПроцедуры + +&Тест +Процедура Тест2() Экспорт + Б = 0; +КонецПроцедуры From 3eeb4f7ed685a86c3068b57168bf923299539d9f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 18 Jun 2023 14:52:29 +0200 Subject: [PATCH 235/595] more tests --- .../AbstractRunTestsCodeLensSupplier.java | 62 +++++++++++++++++++ .../RunAllTestsCodeLensSupplier.java | 29 +-------- .../codelenses/RunTestCodeLensSupplier.java | 29 +-------- 3 files changed, 64 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java new file mode 100644 index 00000000000..0c66055a232 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -0,0 +1,62 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.codelenses; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.FileType; +import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; +import org.eclipse.lsp4j.ClientInfo; +import org.eclipse.lsp4j.InitializeParams; +import org.springframework.context.event.EventListener; + +import java.util.Optional; + +public abstract class AbstractRunTestsCodeLensSupplier + implements CodeLensSupplier { + + private boolean clientIsSupported; + + /** + * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. + *

+ * Анализирует тип подключенного клиента и управляет применимостью линзы. + * + * @param event Событие + */ + @EventListener + public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { + var clientName = Optional.of(event) + .map(LanguageServerInitializeRequestReceivedEvent::getParams) + .map(InitializeParams::getClientInfo) + .map(ClientInfo::getName) + .orElse(""); + clientIsSupported = "Visual Studio Code".equals(clientName); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isApplicable(DocumentContext documentContext) { + return documentContext.getFileType() == FileType.OS && clientIsSupported; + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 84b77b9c6bd..2074b4665a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -50,7 +50,7 @@ @RequiredArgsConstructor @Slf4j public class RunAllTestsCodeLensSupplier - implements CodeLensSupplier { + extends AbstractRunTestsCodeLensSupplier { private static final String COMMAND_ID = "language-1c-bsl.languageServer.runAllTests"; @@ -58,33 +58,6 @@ public class RunAllTestsCodeLensSupplier private final LanguageServerConfiguration configuration; private final Resources resources; - private boolean clientIsSupported; - - /** - * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. - *

- * Анализирует тип подключенного клиента и управляет применимостью линзы. - * - * @param event Событие - */ - @EventListener - public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { - var clientName = Optional.of(event) - .map(LanguageServerInitializeRequestReceivedEvent::getParams) - .map(InitializeParams::getClientInfo) - .map(ClientInfo::getName) - .orElse(""); - clientIsSupported = "Visual Studio Code".equals(clientName); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean isApplicable(DocumentContext documentContext) { - return documentContext.getFileType() == FileType.OS && clientIsSupported; - } - /** * {@inheritDoc} */ diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index 0960c030f7f..c9d754beedb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -56,7 +56,7 @@ @RequiredArgsConstructor @Slf4j public class RunTestCodeLensSupplier - implements CodeLensSupplier { + extends AbstractRunTestsCodeLensSupplier { private static final String COMMAND_ID = "language-1c-bsl.languageServer.runTest"; @@ -64,33 +64,6 @@ public class RunTestCodeLensSupplier private final LanguageServerConfiguration configuration; private final Resources resources; - private boolean clientIsSupported; - - /** - * Обработчик события {@link LanguageServerInitializeRequestReceivedEvent}. - *

- * Анализирует тип подключенного клиента и управляет применимостью линзы. - * - * @param event Событие - */ - @EventListener - public void handleEvent(LanguageServerInitializeRequestReceivedEvent event) { - var clientName = Optional.of(event) - .map(LanguageServerInitializeRequestReceivedEvent::getParams) - .map(InitializeParams::getClientInfo) - .map(ClientInfo::getName) - .orElse(""); - clientIsSupported = "Visual Studio Code".equals(clientName); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean isApplicable(DocumentContext documentContext) { - return documentContext.getFileType() == FileType.OS && clientIsSupported; - } - /** * {@inheritDoc} */ From d2962611631a8e0b387a503802e4d239fab211f1 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 18 Jun 2023 17:50:02 +0200 Subject: [PATCH 236/595] Cleanup --- .../codelenses/RunAllTestsCodeLensSupplier.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 2074b4665a8..8077915b378 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -24,24 +24,18 @@ import com.github._1c_syntax.bsl.languageserver.codelenses.testrunner.TestRunnerAdapter; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.eclipse.lsp4j.ClientInfo; import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.Command; -import org.eclipse.lsp4j.InitializeParams; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.nio.file.Paths; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Optional; /** * Поставщик линзы для запуска всех тестов в текущем файле. From af8d558613d880a212717d531e05f9e9c6b85c9c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 18 Jun 2023 18:22:50 +0200 Subject: [PATCH 237/595] Nullable --- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 47cf776f8da..7c24af98dbe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -37,12 +37,12 @@ import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AllArgsConstructor; import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.Range; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; From 0a91cb49ccb4cf060cbe4c3130fcd5e1df9f38b8 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 11:28:00 +0000 Subject: [PATCH 238/595] Translate DenyIncompleteValues.md in en 100% translated source file: 'DenyIncompleteValues.md' on 'en'. --- docs/en/diagnostics/DenyIncompleteValues.md | 26 +++++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/en/diagnostics/DenyIncompleteValues.md b/docs/en/diagnostics/DenyIncompleteValues.md index cd35ff58118..79dbd6bdcdb 100644 --- a/docs/en/diagnostics/DenyIncompleteValues.md +++ b/docs/en/diagnostics/DenyIncompleteValues.md @@ -1,16 +1,32 @@ -# Запрет незаполненных значений (DenyIncompleteValues) +# Deny incomplete values for dimensions (DenyIncompleteValues) -## Description +## Описание диагностики +Often when designing a metadata structure, it is required that the dimensions of a register must always be filled with values (should not be empty). -## Examples +Checking for completeness of the dimension value should be done using the "Deny Incomplete Values" flag for the register dimension; additional software control of measurement filling is not required. +It is assumed that records with an empty dimension value do not make sense in the infobase. +The absence of a set flag can lead to potential problems if the application developers have not provided a value validation algorithm. + +The current rule may give a lot of false positives, use at your own risk. + +The rule applies to the following registers: +- information register +- accumulation register +- accounting register +- calculation register + +## Примеры ## Sources +- [Development of the interface for applied solutions on the "1C:Enterprise" platform (RU). Ch "Fill check and check on write"](https://its.1c.ru/db/pubv8devui#content:225:1) +- [Developer's Guide - Properties of a dimension (resource, attribute) of the information register (RU)](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000349) +- [Developer's Guide - Properties of a dimension (resource, attribute) of the accumulation register (RU)](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000363) From e0067af680561ce119dcd6de9d3aff3438c40ecc Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 11:29:28 +0000 Subject: [PATCH 239/595] Translate DenyIncompleteValues.md in en 100% translated source file: 'DenyIncompleteValues.md' on 'en'. --- docs/en/diagnostics/DenyIncompleteValues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/DenyIncompleteValues.md b/docs/en/diagnostics/DenyIncompleteValues.md index 79dbd6bdcdb..82b4fdfcc33 100644 --- a/docs/en/diagnostics/DenyIncompleteValues.md +++ b/docs/en/diagnostics/DenyIncompleteValues.md @@ -1,7 +1,7 @@ # Deny incomplete values for dimensions (DenyIncompleteValues) -## Описание диагностики +## Description Often when designing a metadata structure, it is required that the dimensions of a register must always be filled with values (should not be empty). From 74979b720edc70603df9208b0d931e751e22a381 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 11:29:56 +0000 Subject: [PATCH 240/595] Translate DenyIncompleteValues.md in en 100% translated source file: 'DenyIncompleteValues.md' on 'en'. --- docs/en/diagnostics/DenyIncompleteValues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/DenyIncompleteValues.md b/docs/en/diagnostics/DenyIncompleteValues.md index 82b4fdfcc33..477e71da299 100644 --- a/docs/en/diagnostics/DenyIncompleteValues.md +++ b/docs/en/diagnostics/DenyIncompleteValues.md @@ -17,7 +17,7 @@ The rule applies to the following registers: - accounting register - calculation register -## Примеры +## Examples ## Sources From 392c43d6bf644eb780df70e2bbfc44fea2ee7b85 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Jun 2023 08:42:19 +0200 Subject: [PATCH 241/595] Update systemRequirements.md --- docs/en/systemRequirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/systemRequirements.md b/docs/en/systemRequirements.md index cbff3d96733..64b79c356af 100644 --- a/docs/en/systemRequirements.md +++ b/docs/en/systemRequirements.md @@ -6,7 +6,7 @@ Using `BSL Language Server` has some limitations, listed bellow `BSL Language Server` is a console Java application and requires the presence of a Java virtual machine on the computer. -The minimum supported version is Java 17, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 17 and 19 are currently supported. +The minimum supported version is Java 17, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 17 and 20 are currently supported. JDK vendor is also interesting. Due to the changed licensing policy of Oracle, it is recommended to use open implementations of the `OpenJDK` virtual machine: AdoptOpenJDK, Liberica JDK. From 30a2ea459d32080b6641bf6578ec5115a3400cf7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Jun 2023 08:42:49 +0200 Subject: [PATCH 242/595] Update systemRequirements.md --- docs/systemRequirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/systemRequirements.md b/docs/systemRequirements.md index f3749508a29..6d6bc14fad1 100644 --- a/docs/systemRequirements.md +++ b/docs/systemRequirements.md @@ -6,7 +6,7 @@ `BSL Language Server` представляет собой консольное Java приложение, соответственно, для его функционирования необходимо наличие виртуальной машины Java на компьютере. -На данный момент минимальной поддерживаемой версией является Java 17, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 17 и 19. +На данный момент минимальной поддерживаемой версией является Java 17, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 17 и 20. Кроме версии Java интересен и вендор JDK. В связи с изменившейся политикой лицензирования Oracle, рекомендуется использование открытых реализаций виртуальной машины `OpenJDK`: AdoptOpenJDK, Liberica JDK. From 204e8056646f1a3742ef9f3d791e35b914be2563 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Jun 2023 08:53:07 +0200 Subject: [PATCH 243/595] Update DiagnosticDescriptionDocumentLinkSupplierTest.java --- .../DiagnosticDescriptionDocumentLinkSupplierTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index 5db435aa255..d5bd0c672ad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import jakarta.annotation.PostConstruct; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -199,4 +200,4 @@ private DocumentContext getDocumentContext() { documentContext.getDiagnostics(); return documentContext; } -} \ No newline at end of file +} From 2fa88309e9ceadcaa0bdf8baaea6e2bd48bad0f2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Jun 2023 10:04:01 +0200 Subject: [PATCH 244/595] Spring boot 3.1 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d58b0619a5c..a6807780237 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "6.6.1" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" - id("org.springframework.boot") version "3.0.1" + id("org.springframework.boot") version "3.1.0" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" From eecbf0225e20b790ba6c4ec3820e23c2cb86f42b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jun 2023 09:56:51 +0000 Subject: [PATCH 245/595] build(deps): bump org.sonarqube from 4.0.0.2929 to 4.2.1.3168 Bumps org.sonarqube from 4.0.0.2929 to 4.2.1.3168. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a6807780237..e881ef2b204 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "4.0.0.2929" + id("org.sonarqube") version "4.2.1.3168" id("io.freefair.lombok") version "6.6.1" id("io.freefair.javadoc-links") version "6.6.1" id("io.freefair.javadoc-utf-8") version "6.6.1" From 3fe228c4423be7d035df264c742a281bcdbfb13d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jun 2023 09:56:52 +0000 Subject: [PATCH 246/595] build(deps): bump JetBrains/qodana-action from 2023.1.4 to 2023.1.5 Bumps [JetBrains/qodana-action](https://github.com/JetBrains/qodana-action) from 2023.1.4 to 2023.1.5. - [Release notes](https://github.com/JetBrains/qodana-action/releases) - [Commits](https://github.com/JetBrains/qodana-action/compare/v2023.1.4...v2023.1.5) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 8b4df680512..208f314fc69 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.1.4 + uses: JetBrains/qodana-action@v2023.1.5 with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From c18882cce28a30ab88558cf5082d79bf738a6140 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 09:56:59 +0000 Subject: [PATCH 247/595] build(deps): bump io.sentry:sentry-bom from 6.22.0 to 6.23.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.22.0 to 6.23.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.22.0...6.23.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e881ef2b204..7c551c9c50e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.22.0") + mavenBom("io.sentry:sentry-bom:6.23.0") } } From be62b8c6128e5c44c76433b344e645d63df9dd60 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 23 Jun 2023 21:04:46 +0300 Subject: [PATCH 248/595] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/InternetAccess.md | 17 ++++++ docs/en/diagnostics/InternetAccess.md | 16 +++++ .../diagnostics/InternetAccessDiagnostic.java | 60 ++++++++++++++++++ .../InternetAccessDiagnostic_en.properties | 2 + .../InternetAccessDiagnostic_ru.properties | 2 + .../InternetAccessDiagnosticTest.java | 61 +++++++++++++++++++ .../diagnostics/InternetAccessDiagnostic.bsl | 39 ++++++++++++ 7 files changed, 197 insertions(+) create mode 100644 docs/diagnostics/InternetAccess.md create mode 100644 docs/en/diagnostics/InternetAccess.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/InternetAccessDiagnostic.bsl diff --git a/docs/diagnostics/InternetAccess.md b/docs/diagnostics/InternetAccess.md new file mode 100644 index 00000000000..71c168b105c --- /dev/null +++ b/docs/diagnostics/InternetAccess.md @@ -0,0 +1,17 @@ +# (InternetAccess) + + +## Описание диагностики + +При код-ревью или аудите кода необходимо проверять обращения к Интернет-ресурсам и набор передаваемых данных для исключения передачи конфиденциальной или защищенной информации. + +## Примеры + + +## Источники + + diff --git a/docs/en/diagnostics/InternetAccess.md b/docs/en/diagnostics/InternetAccess.md new file mode 100644 index 00000000000..403cc40d707 --- /dev/null +++ b/docs/en/diagnostics/InternetAccess.md @@ -0,0 +1,16 @@ +# (InternetAccess) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java new file mode 100644 index 00000000000..20e28719ff2 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java @@ -0,0 +1,60 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; +import org.antlr.v4.runtime.tree.ParseTree; + +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MINOR, + minutesToFix = 1, + tags = { + DiagnosticTag.SUSPICIOUS + } +) + +public class InternetAccessDiagnostic extends AbstractVisitorDiagnostic { + private static final Pattern PATTERN_NEW_EXPRESSION = CaseInsensitivePattern.compile( + "FTPСоединение|FTPConnection|HTTPСоединение|HTTPConnection|WSОпределения|WSDefinitions|WSПрокси|WSProxy" + + "|ИнтернетПочтовыйПрофиль|InternetMailProfile|ИнтернетПочта|InternetMail|Почта|Mail|HTTPЗапрос|HTTPRequest|" + + "ИнтернетПрокси|InternetProxy"); + + @Override + public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { + var typeNameContext = ctx.typeName(); + if (typeNameContext != null) { + var matcherTypeName = PATTERN_NEW_EXPRESSION.matcher(typeNameContext.getText()); + if (matcherTypeName.matches()) { + diagnosticStorage.addDiagnostic(ctx); + } + } + return super.visitNewExpression(ctx); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_en.properties new file mode 100644 index 00000000000..1e4019e3eb8 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the reference to Internet resources +diagnosticName=Referring to Internet resources diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties new file mode 100644 index 00000000000..e867153bc6a --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте обращение к Интернет-ресурсам +diagnosticName=Обращение к Интернет-ресурсам \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java new file mode 100644 index 00000000000..8ee4571ff67 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -0,0 +1,61 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class InternetAccessDiagnosticTest extends AbstractDiagnosticTest { + InternetAccessDiagnosticTest() { + super(InternetAccessDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(1, 20, 75) + .hasRange(3, 18, 72) + .hasRange(5, 16, 80) + .hasRange(8, 8, 111) + .hasRange(13, 21, 65) + .hasRange(14, 17, 35) + .hasRange(15, 17, 47) + .hasRange(16, 17, 43) + .hasRange(17, 21, 51) + .hasRange(21, 21, 65) + .hasRange(22, 17, 35) + .hasRange(23, 17, 47) + .hasRange(24, 17, 43) + .hasRange(25, 21, 51) + .hasRange(29, 14, 43) + .hasRange(35, 14, 32) + .hasRange(38, 10, 21) + .hasSize(17); + } +} diff --git a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl new file mode 100644 index 00000000000..8f0e4a83a8c --- /dev/null +++ b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl @@ -0,0 +1,39 @@ +Процедура Тест1() + FTPСоединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль); // ошибка + + Определения = Новый WSОпределения("http://localhost/test.asmx?WSDL"); // ошибка + + ПроксиДва = Новый WSПрокси(Определения, "http://localhost/", "test", "test"); // ошибка + + Определения = + Новый WSОпределения("http://localhost/test.asmx?WSDL", "Пользователь", "Пароль", Неопределено, Таймаут); // ошибка + +КонецПроцедуры + +Процедура HTTP() + HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80); // ошибка + HTTPЗапрос = Новый HTTPЗапрос(); // ошибка + HTTPЗапрос = Новый HTTPЗапрос("zabbix", 80); // ошибка + HTTPЗапрос = Новый HTTPЗапрос("zabbix"); // ошибка + ИнтернетПрокси = Новый ИнтернетПрокси("zabbix"); // ошибка +КонецПроцедуры + +Процедура HTTP() + HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80); // ошибка + HTTPЗапрос = Новый HTTPЗапрос(); // ошибка + HTTPЗапрос = Новый HTTPЗапрос("zabbix", 80); // ошибка + HTTPЗапрос = Новый HTTPЗапрос("zabbix"); // ошибка + ИнтернетПрокси = Новый ИнтернетПрокси("zabbix"); // ошибка +КонецПроцедуры + +Функция НовыйИнтернетПочтовыйПрофильБезТаймАута() + Профиль = Новый ИнтернетПочтовыйПрофиль; // ошибка + Профиль.Пользователь = "admin"; + Возврат Профиль; +КонецФункции + +Функция InternetMail() + Профиль = Новый InternetMail; // ошибка +КонецФункции + +Профиль = Новый Почта; // ошибка \ No newline at end of file From c95c01058648793058a818f5666243464874af8b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 23 Jun 2023 21:10:13 +0300 Subject: [PATCH 249/595] precommit --- docs/diagnostics/InternetAccess.md | 2 +- docs/en/diagnostics/InternetAccess.md | 2 +- .../configuration/parameters-schema.json | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/diagnostics/InternetAccess.md b/docs/diagnostics/InternetAccess.md index 71c168b105c..b6c2c4646d8 100644 --- a/docs/diagnostics/InternetAccess.md +++ b/docs/diagnostics/InternetAccess.md @@ -1,4 +1,4 @@ -# (InternetAccess) +# Обращение к Интернет-ресурсам (InternetAccess) ## Описание диагностики diff --git a/docs/en/diagnostics/InternetAccess.md b/docs/en/diagnostics/InternetAccess.md index 403cc40d707..9c2305abc49 100644 --- a/docs/en/diagnostics/InternetAccess.md +++ b/docs/en/diagnostics/InternetAccess.md @@ -1,4 +1,4 @@ -# (InternetAccess) +# Referring to Internet resources (InternetAccess) ## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 2652d6eed1e..194546f1487 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -888,6 +888,16 @@ "title": "Incorrect use of \"StrTemplate\"", "$id": "#/definitions/IncorrectUseOfStrTemplate" }, + "InternetAccess": { + "description": "Referring to Internet resources", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Referring to Internet resources", + "$id": "#/definitions/InternetAccess" + }, "InvalidCharacterInFile": { "description": "Invalid character", "default": true, From 62f7ce283efa4943655ec62a162f1e7296032331 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 29 Jun 2023 21:32:42 +0200 Subject: [PATCH 250/595] Upgrade deps and fix javadoc --- build.gradle.kts | 19 +++++++------------ gradle/wrapper/gradle-wrapper.properties | 2 +- ...leComplexityInlayHintsCommandSupplier.java | 4 ++-- .../AbstractComplexityInlayHintSupplier.java | 6 +++--- .../CognitiveComplexityInlayHintSupplier.java | 2 +- ...CyclomaticComplexityInlayHintSupplier.java | 2 +- 6 files changed, 15 insertions(+), 20 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7c551c9c50e..cb7e29cf761 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,14 +9,14 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.2.1.3168" - id("io.freefair.lombok") version "6.6.1" - id("io.freefair.javadoc-links") version "6.6.1" - id("io.freefair.javadoc-utf-8") version "6.6.1" - id("io.freefair.aspectj.post-compile-weaving") version "6.6.1" - id("io.freefair.maven-central.validate-poms") version "6.6.1" + id("io.freefair.lombok") version "8.1.0" + id("io.freefair.javadoc-links") version "8.1.0" + id("io.freefair.javadoc-utf-8") version "8.1.0" + id("io.freefair.aspectj.post-compile-weaving") version "8.1.0" + id("io.freefair.maven-central.validate-poms") version "8.1.0" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" - id("org.springframework.boot") version "3.1.0" + id("org.springframework.boot") version "3.1.1" id("io.spring.dependency-management") version "1.1.0" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.23.0") + mavenBom("io.sentry:sentry-bom:6.24.0") } } @@ -145,10 +145,6 @@ lombok { version.set("edge-SNAPSHOT") } -jacoco { - toolVersion = "0.8.10" -} - java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 @@ -237,7 +233,6 @@ tasks.generateDiagnosticDocs { } tasks.javadoc { - isFailOnError = false options { this as StandardJavadocDocletOptions links( diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 508322917bd..37aef8d3f0c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index 685550191fc..86f0a04f9d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -47,7 +47,7 @@ public Class getCommandArgumentsClas } /** - * @inheritDoc + * {@inheritDoc} */ @Override public Optional execute(ToggleComplexityInlayHintsCommandArguments arguments) { @@ -56,7 +56,7 @@ public Optional execute(ToggleComplexityInlayHintsCommandArguments argum } /** - * @inheritDoc + * {@inheritDoc} */ @Override public boolean needRefreshInlayHintsAfterExecuteCommand() { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java index 67a39418da9..636e8c83ceb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -40,7 +40,7 @@ /** * Абстрактный поставщик подсказок о сложности методов. - *

+ *

* По умолчанию подсказки отключены. Для включения нужно вызвать метод {@link #toggleHints(URI, String)}. */ public abstract class AbstractComplexityInlayHintSupplier implements InlayHintSupplier { @@ -49,9 +49,9 @@ public abstract class AbstractComplexityInlayHintSupplier implements InlayHintSu /** * Получение подсказок о местах увеличения сложности метода. - *

+ *

* - * @inheritDoc + * {@inheritDoc} */ @Override public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java index c159eac5c54..9acef3ce5f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -38,7 +38,7 @@ public class CognitiveComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { /** - * @inheritDoc + * {@inheritDoc} */ @Override protected Map> getComplexityLocations( diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java index 2c262743951..4706d4fce7a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -38,7 +38,7 @@ public class CyclomaticComplexityInlayHintSupplier extends AbstractComplexityInlayHintSupplier { /** - * @inheritDoc + * {@inheritDoc} */ @Override protected Map> getComplexityLocations( From 0336ed6700a80c07171ff54cfd16d292ccc62ad8 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Jul 2023 09:23:37 +0200 Subject: [PATCH 251/595] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=BE=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=BC=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B0=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=20sonar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 853e05ca374..e34f4c5220c 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -54,7 +54,7 @@ jobs: distribution: 'temurin' - name: SonarCloud Scan on PR if: github.event.workflow_run.event == 'pull_request' - run: ./gradlew check sonarqube -Dsonar.scm.revision=${{ github.event.workflow_run.head_sha }} -Dsonar.pullrequest.key=${{ fromJson(steps.get_pr_data.outputs.data).number }} -Dsonar.pullrequest.branch=${{ fromJson(steps.get_pr_data.outputs.data).head.ref }} -Dsonar.pullrequest.base=${{ fromJson(steps.get_pr_data.outputs.data).base.ref }} + run: ./gradlew check sonar -Dsonar.scm.revision=${{ github.event.workflow_run.head_sha }} -Dsonar.pullrequest.key=${{ fromJson(steps.get_pr_data.outputs.data).number }} -Dsonar.pullrequest.branch=${{ fromJson(steps.get_pr_data.outputs.data).head.ref }} -Dsonar.pullrequest.base=${{ fromJson(steps.get_pr_data.outputs.data).base.ref }} env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a3f2ec7ea053569882e5258befa95c5805e3f712 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Jul 2023 09:24:10 +0200 Subject: [PATCH 252/595] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=BE=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=BC=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B0=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=20sonar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index e34f4c5220c..c6d82bb0b10 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -60,7 +60,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: SonarCloud Scan on push if: github.event.workflow_run.event == 'push' && github.event.workflow_run.head_repository.full_name == github.event.repository.full_name - run: ./gradlew check sonarqube -Dsonar.scm.revision=${{ github.event.workflow_run.head_sha }} -Dsonar.branch.name=${{ github.event.workflow_run.head_branch }} + run: ./gradlew check sonar -Dsonar.scm.revision=${{ github.event.workflow_run.head_sha }} -Dsonar.branch.name=${{ github.event.workflow_run.head_branch }} env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 9f719d97d9f4112d2bde9e7e0b56f5e4ea7933ce Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Jul 2023 14:08:05 +0200 Subject: [PATCH 253/595] Qodana portal --- .github/workflows/qodana.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 208f314fc69..774c2b9f5b1 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -21,6 +21,8 @@ jobs: - uses: actions/checkout@v3 - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2023.1.5 + env: + QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v2 From e1b3c47044161712946bd48d9652ecc726374949 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jul 2023 09:21:54 +0000 Subject: [PATCH 254/595] build(deps): bump io.sentry:sentry-bom from 6.24.0 to 6.25.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.24.0 to 6.25.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.24.0...6.25.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cb7e29cf761..c9e8a01f390 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.24.0") + mavenBom("io.sentry:sentry-bom:6.25.0") } } From c767b74882a2c40d280473e8aaa39f0795e1a287 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 09:55:17 +0000 Subject: [PATCH 255/595] build(deps): bump io.sentry:sentry-bom from 6.25.0 to 6.25.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.25.0 to 6.25.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.25.0...6.25.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c9e8a01f390..805bf10d7d7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.25.0") + mavenBom("io.sentry:sentry-bom:6.25.1") } } From 114fb5d7627bd245a4356a2431c54ed3ff2ea9e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 09:55:32 +0000 Subject: [PATCH 256/595] build(deps): bump io.spring.dependency-management from 1.1.0 to 1.1.1 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.0 to 1.1.1. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.0...v1.1.1) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c9e8a01f390..7eb82d256a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "3.1.1" - id("io.spring.dependency-management") version "1.1.0" + id("io.spring.dependency-management") version "1.1.1" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" From cf35b4734ccb6a2d88fb2f8f0559b99e1b6773c1 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Thu, 13 Jul 2023 23:12:34 +0300 Subject: [PATCH 257/595] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B0,=20=D1=87=D1=82=D0=BE=20=D0=B1=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BF=D0=B0=D0=B4=D0=B0=D0=BB=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 1 + src/test/resources/application-measures.properties | 1 + src/test/resources/application.properties | 1 + 3 files changed, 3 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a67dd2df49f..d8fbdfba51e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,3 +12,4 @@ logging.level.org.springframework.context.support.PostProcessorRegistrationDeleg spring.application.name=BSL Language Server app.globalConfiguration.path=${user.home}/.bsl-language-server.json app.configuration.path=.bsl-language-server.json +logging.level.org.eclipse.lsp4j.jsonrpc.RemoteEndpoint=fatal \ No newline at end of file diff --git a/src/test/resources/application-measures.properties b/src/test/resources/application-measures.properties index 9e87d3d52a8..ec6e358ac4c 100644 --- a/src/test/resources/application-measures.properties +++ b/src/test/resources/application-measures.properties @@ -10,6 +10,7 @@ logging.level.org.springframework.data.repository.config.RepositoryConfiguration logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn spring.application.name=BSL Language Server +logging.level.org.eclipse.lsp4j.jsonrpc.RemoteEndpoint=fatal logging.level.org.springframework.test.context.support.AnnotationConfigContextLoaderUtils=warn logging.level.org.springframework.test.context.support.AbstractContextLoader=warn diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index b9d9d03fe18..6293b8a1c2c 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -10,6 +10,7 @@ logging.level.org.springframework.data.repository.config.RepositoryConfiguration logging.level.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean=warn logging.level.org.springframework.context.support.PostProcessorRegistrationDelegate=warn spring.application.name=BSL Language Server +logging.level.org.eclipse.lsp4j.jsonrpc.RemoteEndpoint=fatal logging.level.org.springframework.test.context.support.AnnotationConfigContextLoaderUtils=warn logging.level.org.springframework.test.context.support.AbstractContextLoader=warn From 727890d226628766d8876d2540398b6c284e2597 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jul 2023 09:08:11 +0000 Subject: [PATCH 258/595] build(deps): bump io.sentry:sentry-bom from 6.25.1 to 6.25.2 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.25.1 to 6.25.2. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.25.1...6.25.2) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 366381b6b7e..ee401a3a3e3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.25.1") + mavenBom("io.sentry:sentry-bom:6.25.2") } } From 643d8fd7ae6416cdd6fb340c4ab1500d6d8824f9 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Sun, 16 Jul 2023 00:19:29 +0300 Subject: [PATCH 259/595] =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D0=BB=20commons-logging.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ee401a3a3e3..36cf05bd14a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -54,6 +54,14 @@ val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG val languageToolVersion = "6.1" +allprojects { + configurations { + all { + exclude(group = "commons-logging") + } + } +} + dependencyManagement { imports { mavenBom("io.sentry:sentry-bom:6.25.2") From dfbb35e6693e745085f7d5829845e9655216eade Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Sun, 16 Jul 2023 01:52:37 +0300 Subject: [PATCH 260/595] =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D0=BB=20commons-logging.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 36cf05bd14a..0e0d12d8666 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -54,14 +54,6 @@ val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG val languageToolVersion = "6.1" -allprojects { - configurations { - all { - exclude(group = "commons-logging") - } - } -} - dependencyManagement { imports { mavenBom("io.sentry:sentry-bom:6.25.2") @@ -96,7 +88,9 @@ dependencies { api("io.github.1c-syntax", "supportconf", "0.1.1") // JLanguageTool - implementation("org.languagetool", "languagetool-core", languageToolVersion) + implementation("org.languagetool", "languagetool-core", languageToolVersion){ + exclude("commons-logging", "commons-logging") + } implementation("org.languagetool", "language-en", languageToolVersion) implementation("org.languagetool", "language-ru", languageToolVersion) @@ -106,7 +100,9 @@ dependencies { // commons utils implementation("commons-io", "commons-io", "2.13.0") implementation("org.apache.commons", "commons-lang3", "3.12.0") - implementation("commons-beanutils", "commons-beanutils", "1.9.4") + implementation("commons-beanutils", "commons-beanutils", "1.9.4"){ + exclude("commons-logging", "commons-logging") + } implementation("org.apache.commons", "commons-collections4", "4.4") implementation("org.apache.commons", "commons-exec", "1.3") From 6479122844e8e2b26642cf242b99ed6e8acf1529 Mon Sep 17 00:00:00 2001 From: Nikita Ivanchenko Date: Sun, 16 Jul 2023 11:05:39 +0300 Subject: [PATCH 261/595] =?UTF-8?q?=D0=B1=D0=B0=D0=BC=D0=BF=D0=BD=D1=83?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D1=81=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0e0d12d8666..ec9518d24b0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.21.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "0.22.0") { + api("com.github.1c-syntax", "bsl-parser", "bba7c0b091aca562ec082829a49f525a9bb5d7ef") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") From 4e824dc81f96254aeadf7cea8c34e2c95ea3f716 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jul 2023 10:16:52 +0200 Subject: [PATCH 262/595] Make coverage work again --- build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ec9518d24b0..00b7745b6a9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -149,6 +149,10 @@ lombok { version.set("edge-SNAPSHOT") } +jacoco { + toolVersion = "0.8.11" +} + java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 From 86607677b6c249dc9d7cc904b5525214fd1e58e6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jul 2023 10:22:00 +0200 Subject: [PATCH 263/595] Fix jacoco version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 00b7745b6a9..146c42ee397 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -150,7 +150,7 @@ lombok { } jacoco { - toolVersion = "0.8.11" + toolVersion = "0.8.10" } java { From 7ee86a3ca55e6004935bf104b505415ce50e1d5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jul 2023 09:30:20 +0000 Subject: [PATCH 264/595] build(deps): bump io.spring.dependency-management from 1.1.1 to 1.1.2 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.1 to 1.1.2. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.1...v1.1.2) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 146c42ee397..79bf7d34cf0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "3.1.1" - id("io.spring.dependency-management") version "1.1.1" + id("io.spring.dependency-management") version "1.1.2" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" From 53fd886dd0e87c3bfa6fb14c271d15d1f9b88e09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jul 2023 09:30:28 +0000 Subject: [PATCH 265/595] build(deps): bump org.sonarqube from 4.2.1.3168 to 4.3.0.3225 Bumps org.sonarqube from 4.2.1.3168 to 4.3.0.3225. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 146c42ee397..e4c81648bbb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "4.2.1.3168" + id("org.sonarqube") version "4.3.0.3225" id("io.freefair.lombok") version "8.1.0" id("io.freefair.javadoc-links") version "8.1.0" id("io.freefair.javadoc-utf-8") version "8.1.0" From 0bbac6799d9d7ca4d6253160789806e51ccfd9f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 09:40:23 +0000 Subject: [PATCH 266/595] build(deps): bump JetBrains/qodana-action from 2023.1.5 to 2023.2.1 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.1.5 to 2023.2.1. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.1.5...v2023.2.1) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 774c2b9f5b1..b66887e84a0 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.1.5 + uses: JetBrains/qodana-action@v2023.2.1 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From e1e796025632d20c04a9bd2c866f647defca6707 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 09:47:34 +0000 Subject: [PATCH 267/595] build(deps): bump io.sentry:sentry-bom from 6.25.2 to 6.26.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.25.2 to 6.26.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.25.2...6.26.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d0fb7162879..87514fdb9af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.25.2") + mavenBom("io.sentry:sentry-bom:6.26.0") } } From 07387eccfb2bb0b9eb9f2e9905673ae2bb3d077c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 20 Jul 2023 00:10:27 +0200 Subject: [PATCH 268/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=8D=D0=BA=D0=B7?= =?UTF-8?q?=D0=B5=D0=BA=D1=8C=D1=8E=D1=82=D0=BE=D1=80=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B0=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/BSLLanguageServer.java | 7 +- .../BSLTextDocumentService.java | 123 +++++++++++++----- .../languageserver/BSLWorkspaceService.java | 14 +- 3 files changed, 106 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index b265faba0b5..001b31123ba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -72,6 +72,8 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Slf4j @Component @@ -85,6 +87,9 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension { private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final ServerContext context; private final ServerInfo serverInfo; + + private final ExecutorService executorService = Executors.newCachedThreadPool(); + private boolean shutdownWasCalled; @Override @@ -93,7 +98,7 @@ public CompletableFuture initialize(InitializeParams params) { clientCapabilitiesHolder.setCapabilities(params.getCapabilities()); setConfigurationRoot(params); - CompletableFuture.runAsync(context::populateContext); + CompletableFuture.runAsync(context::populateContext, executorService); var capabilities = new ServerCapabilities(); capabilities.setTextDocumentSync(getTextDocumentSyncOptions()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 39bb51eae13..3e89387939a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -99,7 +99,8 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Component @RequiredArgsConstructor @@ -123,14 +124,17 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final RenameProvider renameProvider; private final InlayHintProvider inlayHintProvider; + private final ExecutorService executorService = Executors.newCachedThreadPool(); + @Override public CompletableFuture hover(HoverParams params) { var documentContext = context.getDocument(params.getTextDocument().getUri()); if (documentContext == null) { return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> - hoverProvider.getHover(documentContext, params).orElse(null) + return CompletableFuture.supplyAsync( + () -> hoverProvider.getHover(documentContext, params).orElse(null), + executorService ); } @@ -143,8 +147,9 @@ public CompletableFuture, List - Either.forRight(definitionProvider.getDefinition(documentContext, params)) + return CompletableFuture.supplyAsync( + () -> Either.forRight(definitionProvider.getDefinition(documentContext, params)), + executorService ); } @@ -155,7 +160,10 @@ public CompletableFuture> references(ReferenceParams pa return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> referencesProvider.getReferences(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> referencesProvider.getReferences(documentContext, params), + executorService + ); } @Override @@ -167,10 +175,11 @@ public CompletableFuture>> docume return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> - documentSymbolProvider.getDocumentSymbols(documentContext).stream() + return CompletableFuture.supplyAsync( + () -> documentSymbolProvider.getDocumentSymbols(documentContext).stream() .map(Either::forRight) - .collect(Collectors.toList()) + .toList(), + executorService ); } @@ -181,7 +190,10 @@ public CompletableFuture>> codeAction(CodeActio return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> codeActionProvider.getCodeActions(params, documentContext)); + return CompletableFuture.supplyAsync( + () -> codeActionProvider.getCodeActions(params, documentContext), + executorService + ); } @Override @@ -191,7 +203,10 @@ public CompletableFuture> codeLens(CodeLensParams param return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> codeLensProvider.getCodeLens(documentContext)); + return CompletableFuture.supplyAsync( + () -> codeLensProvider.getCodeLens(documentContext), + executorService + ); } @Override @@ -201,7 +216,10 @@ public CompletableFuture resolveCodeLens(CodeLens unresolved) { if (documentContext == null) { return CompletableFuture.completedFuture(unresolved); } - return CompletableFuture.supplyAsync(() -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data)); + return CompletableFuture.supplyAsync( + () -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data), + executorService + ); } @Override @@ -211,8 +229,10 @@ public CompletableFuture> formatting(DocumentFormatting return CompletableFuture.completedFuture(null); } - List edits = formatProvider.getFormatting(params, documentContext); - return CompletableFuture.completedFuture(edits); + return CompletableFuture.supplyAsync( + () -> formatProvider.getFormatting(params, documentContext), + executorService + ); } @Override @@ -222,8 +242,10 @@ public CompletableFuture> rangeFormatting(DocumentRange return CompletableFuture.completedFuture(null); } - List edits = formatProvider.getRangeFormatting(params, documentContext); - return CompletableFuture.completedFuture(edits); + return CompletableFuture.supplyAsync( + () -> formatProvider.getRangeFormatting(params, documentContext), + executorService + ); } @Override @@ -233,7 +255,10 @@ public CompletableFuture> foldingRange(FoldingRangeRequestPar return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> foldingRangeProvider.getFoldingRange(documentContext)); + return CompletableFuture.supplyAsync( + () -> foldingRangeProvider.getFoldingRange(documentContext), + executorService + ); } @Override @@ -244,13 +269,15 @@ public CompletableFuture> prepareCallHierarchy(CallHiera return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> { - List callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params); - if (callHierarchyItems.isEmpty()) { - return null; - } - return callHierarchyItems; - }); + return CompletableFuture.supplyAsync( + () -> { + List callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params); + if (callHierarchyItems.isEmpty()) { + return null; + } + return callHierarchyItems; + }, + executorService); } @Override @@ -262,7 +289,10 @@ public CompletableFuture> callHierarchyIncomingC return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> callHierarchyProvider.incomingCalls(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> callHierarchyProvider.incomingCalls(documentContext, params), + executorService + ); } @Override @@ -274,7 +304,10 @@ public CompletableFuture> callHierarchyOutgoingC return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> callHierarchyProvider.outgoingCalls(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> callHierarchyProvider.outgoingCalls(documentContext, params), + executorService + ); } @Override @@ -284,7 +317,10 @@ public CompletableFuture> selectionRange(SelectionRangePara return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> selectionRangeProvider.getSelectionRange(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> selectionRangeProvider.getSelectionRange(documentContext, params), + executorService + ); } @Override @@ -294,7 +330,10 @@ public CompletableFuture> documentColor(DocumentColorPara return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> colorProvider.getDocumentColor(documentContext)); + return CompletableFuture.supplyAsync( + () -> colorProvider.getDocumentColor(documentContext), + executorService + ); } @Override @@ -304,7 +343,10 @@ public CompletableFuture> colorPresentation(ColorPresent return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> colorProvider.getColorPresentation(documentContext, params), + executorService + ); } @Override @@ -314,7 +356,10 @@ public CompletableFuture> inlayHint(InlayHintParams params) { return CompletableFuture.completedFuture(Collections.emptyList()); } - return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> inlayHintProvider.getInlayHint(documentContext, params), + executorService + ); } @Override @@ -380,7 +425,10 @@ public CompletableFuture> documentLink(DocumentLinkParams par return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> documentLinkProvider.getDocumentLinks(documentContext)); + return CompletableFuture.supplyAsync( + () -> documentLinkProvider.getDocumentLinks(documentContext), + executorService + ); } @Override @@ -397,7 +445,7 @@ public CompletableFuture diagnostics(DiagnosticParams params) { if (range != null) { diagnostics = diagnostics.stream() .filter(diagnostic -> Ranges.containsRange(range, diagnostic.getRange())) - .collect(Collectors.toList()); + .toList(); } return new Diagnostics(diagnostics, documentContext.getVersion()); }); @@ -410,8 +458,10 @@ public CompletableFuture - Either3.forFirst(renameProvider.getPrepareRename(documentContext, params))); + return CompletableFuture.supplyAsync( + () -> Either3.forFirst(renameProvider.getPrepareRename(documentContext, params)), + executorService + ); } @Override @@ -421,7 +471,10 @@ public CompletableFuture rename(RenameParams params) { return CompletableFuture.completedFuture(null); } - return CompletableFuture.supplyAsync(() -> renameProvider.getRename(documentContext, params)); + return CompletableFuture.supplyAsync( + () -> renameProvider.getRename(documentContext, params), + executorService + ); } public void reset() { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index f78659b4214..5ed10d0b28f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -39,6 +39,8 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Component @RequiredArgsConstructor @@ -48,9 +50,14 @@ public class BSLWorkspaceService implements WorkspaceService { private final CommandProvider commandProvider; private final SymbolProvider symbolProvider; + private final ExecutorService executorService = Executors.newCachedThreadPool(); + @Override public CompletableFuture,List>> symbol(WorkspaceSymbolParams params) { - return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params))); + return CompletableFuture.supplyAsync( + () -> Either.forRight(symbolProvider.getSymbols(params)), + executorService + ); } @Override @@ -71,6 +78,9 @@ public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) { public CompletableFuture executeCommand(ExecuteCommandParams params) { var arguments = commandProvider.extractArguments(params); - return CompletableFuture.supplyAsync(() -> commandProvider.executeCommand(arguments)); + return CompletableFuture.supplyAsync( + () -> commandProvider.executeCommand(arguments), + executorService + ); } } From b77d9473f5196419ae13ba5ef2271c46c6b20f08 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 20 Jul 2023 14:55:18 +0300 Subject: [PATCH 269/595] =?UTF-8?q?=D1=82=D0=B8=D0=BF=20=D0=BE=D0=B1=D1=8B?= =?UTF-8?q?=D1=87=D0=BD=D0=B0=D1=8F=20=D1=83=D1=8F=D0=B7=D0=B2=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20+=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9(?= =?UTF-8?q?=D0=A2=D0=B8=D0=BF)=20+=20=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/InternetAccessDiagnostic.java | 13 +++++++------ .../diagnostics/InternetAccessDiagnosticTest.java | 5 +++-- .../diagnostics/InternetAccessDiagnostic.bsl | 4 ++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java index 20e28719ff2..ed34637e69e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; @@ -32,12 +33,13 @@ import java.util.regex.Pattern; @DiagnosticMetadata( - type = DiagnosticType.CODE_SMELL, + type = DiagnosticType.VULNERABILITY, severity = DiagnosticSeverity.MINOR, minutesToFix = 1, tags = { DiagnosticTag.SUSPICIOUS - } + }, + activatedByDefault = false ) public class InternetAccessDiagnostic extends AbstractVisitorDiagnostic { @@ -48,13 +50,12 @@ public class InternetAccessDiagnostic extends AbstractVisitorDiagnostic { @Override public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { - var typeNameContext = ctx.typeName(); - if (typeNameContext != null) { - var matcherTypeName = PATTERN_NEW_EXPRESSION.matcher(typeNameContext.getText()); + Constructors.typeName(ctx).ifPresent((String typeName) -> { + var matcherTypeName = PATTERN_NEW_EXPRESSION.matcher(typeName); if (matcherTypeName.matches()) { diagnosticStorage.addDiagnostic(ctx); } - } + }); return super.visitNewExpression(ctx); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java index 8ee4571ff67..096df28e5d6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -55,7 +55,8 @@ void test() { .hasRange(25, 21, 51) .hasRange(29, 14, 43) .hasRange(35, 14, 32) - .hasRange(38, 10, 21) - .hasSize(17); + .hasRange(39, 14, 35) + .hasRange(42, 10, 21) + .hasSize(18); } } diff --git a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl index 8f0e4a83a8c..af23599447d 100644 --- a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl +++ b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl @@ -36,4 +36,8 @@ Профиль = Новый InternetMail; // ошибка КонецФункции +Функция InternetMail_НовыйТип() + Профиль = Новый("InternetMail"); // ошибка +КонецФункции + Профиль = Новый Почта; // ошибка \ No newline at end of file From 9f1dbe97ac8c95c2a8786663950962a5e139a066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 09:38:12 +0000 Subject: [PATCH 270/595] build(deps): bump org.springframework.boot from 3.1.1 to 3.1.2 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 87514fdb9af..0dcc580f84b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.1.0" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" - id("org.springframework.boot") version "3.1.1" + id("org.springframework.boot") version "3.1.2" id("io.spring.dependency-management") version "1.1.2" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" id("ru.vyarus.pom") version "2.2.2" From 1521fdf35a349912f6987c173fa6c207c78cd87c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 21 Jul 2023 18:32:36 +0200 Subject: [PATCH 271/595] =?UTF-8?q?=D0=98=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=82=D1=80=D0=B5=D0=B4-?= =?UTF-8?q?=D0=BF=D1=83=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_1c_syntax/bsl/languageserver/BSLLanguageServer.java | 4 ++-- .../_1c_syntax/bsl/languageserver/BSLTextDocumentService.java | 3 ++- .../_1c_syntax/bsl/languageserver/BSLWorkspaceService.java | 3 ++- .../_1c_syntax/bsl/languageserver/aop/SentryAspect.java | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 001b31123ba..12553fed938 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -62,6 +62,7 @@ import org.eclipse.lsp4j.services.LanguageServer; import org.eclipse.lsp4j.services.TextDocumentService; import org.eclipse.lsp4j.services.WorkspaceService; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Component; import java.io.File; @@ -88,8 +89,6 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension { private final ServerContext context; private final ServerInfo serverInfo; - private final ExecutorService executorService = Executors.newCachedThreadPool(); - private boolean shutdownWasCalled; @Override @@ -98,6 +97,7 @@ public CompletableFuture initialize(InitializeParams params) { clientCapabilitiesHolder.setCapabilities(params.getCapabilities()); setConfigurationRoot(params); + ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("populate-context-")); CompletableFuture.runAsync(context::populateContext, executorService); var capabilities = new ServerCapabilities(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 3e89387939a..ff5cf9b9135 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -93,6 +93,7 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.jsonrpc.messages.Either3; import org.eclipse.lsp4j.services.TextDocumentService; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Component; import java.net.URI; @@ -124,7 +125,7 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final RenameProvider renameProvider; private final InlayHintProvider inlayHintProvider; - private final ExecutorService executorService = Executors.newCachedThreadPool(); + private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("text-document-service-")); @Override public CompletableFuture hover(HoverParams params) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 5ed10d0b28f..4d0cba21357 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -34,6 +34,7 @@ import org.eclipse.lsp4j.WorkspaceSymbolParams; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.WorkspaceService; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Component; import java.lang.reflect.InvocationTargetException; @@ -50,7 +51,7 @@ public class BSLWorkspaceService implements WorkspaceService { private final CommandProvider commandProvider; private final SymbolProvider symbolProvider; - private final ExecutorService executorService = Executors.newCachedThreadPool(); + private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("workspace-service-")); @Override public CompletableFuture,List>> symbol(WorkspaceSymbolParams params) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java index 43a761a0f28..3b07903ac1b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java @@ -27,6 +27,7 @@ import lombok.NoArgsConstructor; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; @@ -43,7 +44,7 @@ public class SentryAspect { @PostConstruct private void init() { - executorService = Executors.newCachedThreadPool(); + executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("sentry-")); } @PreDestroy From b6992f6ca9af512c92b347a22806e14b753f40ee Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 22 Jul 2023 12:06:53 +0300 Subject: [PATCH 272/595] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DisableSafeMode.md | 30 +++++++ docs/en/diagnostics/DisableSafeMode.md | 16 ++++ .../DisableSafeModeDiagnostic.java | 83 +++++++++++++++++++ .../configuration/parameters-schema.json | 10 +++ .../DisableSafeModeDiagnostic_en.properties | 2 + .../DisableSafeModeDiagnostic_ru.properties | 2 + .../DisableSafeModeDiagnosticTest.java | 49 +++++++++++ .../diagnostics/DisableSafeModeDiagnostic.bsl | 16 ++++ 8 files changed, 208 insertions(+) create mode 100644 docs/diagnostics/DisableSafeMode.md create mode 100644 docs/en/diagnostics/DisableSafeMode.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/DisableSafeModeDiagnostic.bsl diff --git a/docs/diagnostics/DisableSafeMode.md b/docs/diagnostics/DisableSafeMode.md new file mode 100644 index 00000000000..92a2fd908cc --- /dev/null +++ b/docs/diagnostics/DisableSafeMode.md @@ -0,0 +1,30 @@ +# Отключение безопасного режима (DisableSafeMode) + + +## Описание диагностики + +Текущее правило находит код отключения безопасного режима. +Для внешнего кода, например, кода из внешних отчетов\обработок, расширений это действие может быть небезопасным. +Также важно проверять код от сторонних разработчиков, подрядчиков и т.п. + +По найденным замечаниям необходимо выполнить ручной аудит кода на предмет его правильности и безопасности. + +Правило находит вызовы методов ` УстановитьБезопасныйРежим` и `УстановитьОтключениеБезопасногоРежима` +- вызов `УстановитьБезопасныйРежим (Истина)` игнорируется +- вызов `УстановитьОтключениеБезопасногоРежима(Ложь)` игнорируется + +## Примеры + + +## Источники + + +- [Статья "Безопасный режим работы" - руководство разработчика 1С 8.3.22](https://its.1c.ru/db/v8322doc#bookmark:dev:TI000000186@ee788d9) +- [Стандарт "Ограничение на выполнение «внешнего» кода"](https://its.1c.ru/db/v8std/content/669/hdoc) +- [Стандарт "Безопасность прикладного программного интерфейса сервера"](https://its.1c.ru/db/v8std/content/678/hdoc) +- [Стандарт "Ограничения на использование Выполнить и Вычислить на сервере"](https://its.1c.ru/db/v8std#content:770:hdoc) +- [Стандарт Использование привилегированного режима](https://its.1c.ru/db/v8std/content/485/hdoc) diff --git a/docs/en/diagnostics/DisableSafeMode.md b/docs/en/diagnostics/DisableSafeMode.md new file mode 100644 index 00000000000..83a36958b30 --- /dev/null +++ b/docs/en/diagnostics/DisableSafeMode.md @@ -0,0 +1,16 @@ +# Disable safe mode (DisableSafeMode) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java new file mode 100644 index 00000000000..ec39d81db9c --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java @@ -0,0 +1,83 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; + +import java.util.Optional; +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.VULNERABILITY, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 1, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL +) +public class DisableSafeModeDiagnostic extends AbstractFindMethodDiagnostic { + private static final Pattern methodPattern = CaseInsensitivePattern.compile( + "УстановитьБезопасныйРежим|SetSafeMode|УстановитьОтключениеБезопасногоРежима|SetSafeModeDisabled"); + private static final Pattern safeModePattern = CaseInsensitivePattern.compile( + "УстановитьБезопасныйРежим|SetSafeMode"); + + public DisableSafeModeDiagnostic() { + super(methodPattern); + } + + @Override + protected boolean checkGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { + final var result = super.checkGlobalMethodCall(ctx); + if (!result) { + return false; + } + final int enabledValue; + if(safeModePattern.matcher(ctx.methodName().getText()).matches()){ + enabledValue = BSLParser.TRUE; + } else { + enabledValue = BSLParser.FALSE; + } + return !enabledCall(ctx, enabledValue); + } + + private static boolean enabledCall(BSLParser.GlobalMethodCallContext ctx, int enabledValue) { + return Optional.of(ctx) + .map(BSLParser.GlobalMethodCallContext::doCall) + .map(BSLParser.DoCallContext::callParamList) + .map(BSLParser.CallParamListContext::callParam) + .filter(callParamContexts -> callParamContexts.size() == 1) + .map(callParamContexts -> callParamContexts.get(0)) + .map(BSLParser.CallParamContext::expression) + .map(BSLParser.ExpressionContext::member) + .map(memberContexts -> memberContexts.get(0)) + .map(BSLParser.MemberContext::constValue) + .filter(constValueContext -> constValueContext.getToken(enabledValue, 0) != null) + .isPresent(); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..f3d9d2356cd 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -500,6 +500,16 @@ "title": "Deprecated ManagedForm type", "$id": "#/definitions/DeprecatedTypeManagedForm" }, + "DisableSafeMode": { + "description": "Disable safe mode", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Disable safe mode", + "$id": "#/definitions/DisableSafeMode" + }, "DuplicateRegion": { "description": "Duplicate regions", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_en.properties new file mode 100644 index 00000000000..7270e9aafaa --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the safe mode setting +diagnosticName=Disable safe mode diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_ru.properties new file mode 100644 index 00000000000..186180f5a86 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте отключение безопасного режима +diagnosticName=Отключение безопасного режима diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java new file mode 100644 index 00000000000..f54eb5579aa --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java @@ -0,0 +1,49 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class DisableSafeModeDiagnosticTest extends AbstractDiagnosticTest { + DisableSafeModeDiagnosticTest() { + super(DisableSafeModeDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(2, 4, 29) + .hasRange(5, 4, 29) + .hasRange(9, 4, 41) + .hasRange(12, 4, 41) + .hasSize(4); + + } +} diff --git a/src/test/resources/diagnostics/DisableSafeModeDiagnostic.bsl b/src/test/resources/diagnostics/DisableSafeModeDiagnostic.bsl new file mode 100644 index 00000000000..e51acd2d709 --- /dev/null +++ b/src/test/resources/diagnostics/DisableSafeModeDiagnostic.bsl @@ -0,0 +1,16 @@ +&НаСервере +Процедура Метод() + УстановитьБезопасныйРежим(Ложь); // есть замечание + + Значение = Ложь; + УстановитьБезопасныйРежим(Значение); // есть замечание + + УстановитьБезопасныйРежим(Истина); // нет замечания + + УстановитьОтключениеБезопасногоРежима(Истина); // есть замечание + + Значение = Истина; + УстановитьОтключениеБезопасногоРежима(Значение); // есть замечание + + УстановитьОтключениеБезопасногоРежима(Ложь); // нет замечания +КонецПроцедуры From b0f2920096e53f13e77c54af1d00be7bde8b5b1e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 22 Jul 2023 12:52:51 +0300 Subject: [PATCH 273/595] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=B4=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DisableSafeMode.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/diagnostics/DisableSafeMode.md b/docs/diagnostics/DisableSafeMode.md index 92a2fd908cc..47e865e1d35 100644 --- a/docs/diagnostics/DisableSafeMode.md +++ b/docs/diagnostics/DisableSafeMode.md @@ -15,6 +15,21 @@ ## Примеры +``` + УстановитьБезопасныйРежим (Ложь); // есть замечание + + Значение = Ложь; + УстановитьБезопасныйРежим (Значение); // есть замечание + + УстановитьБезопасныйРежим (Истина); // нет замечания + + УстановитьОтключениеБезопасногоРежима(Истина); // есть замечание + + Значение = Истина; + УстановитьОтключениеБезопасногоРежима(Значение); // есть замечание + + УстановитьОтключениеБезопасногоРежима(Ложь); // нет замечания +``` ## Источники From 7de58a1b15dfe093fd49533861b169ca624e0f52 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 23 Jul 2023 16:51:34 +0300 Subject: [PATCH 274/595] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit по умолчанию, как и сейчас, модули объектов игнорятся #3111 --- .../UnusedLocalMethodDiagnostic.java | 16 ++++- .../UnusedLocalMethodDiagnostic_en.properties | 1 + .../UnusedLocalMethodDiagnostic_ru.properties | 1 + .../UnusedLocalMethodDiagnosticTest.java | 70 ++++++++++++++++++- 4 files changed, 86 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java index 886c7f2ae55..725c1958979 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java @@ -48,7 +48,8 @@ type = DiagnosticType.CODE_SMELL, severity = DiagnosticSeverity.MAJOR, modules = { - ModuleType.CommonModule + ModuleType.CommonModule, + ModuleType.ObjectModule }, minutesToFix = 1, tags = { @@ -74,6 +75,7 @@ public class UnusedLocalMethodDiagnostic extends AbstractVisitorDiagnostic { AnnotationKind.BEFORE, AnnotationKind.CHANGEANDVALIDATE ); + private static final boolean CHECK_OBJECT_MODULE = false; @DiagnosticParameter( type = String.class, @@ -81,10 +83,18 @@ public class UnusedLocalMethodDiagnostic extends AbstractVisitorDiagnostic { ) private Pattern attachableMethodPrefixes = DiagnosticHelper.createPatternFromString(ATTACHABLE_METHOD_PREFIXES); + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + CHECK_OBJECT_MODULE + ) + private boolean checkObjectModule = CHECK_OBJECT_MODULE; + @Override public void configure(Map configuration) { this.attachableMethodPrefixes = DiagnosticHelper.createPatternFromString( (String) configuration.getOrDefault("attachableMethodPrefixes", ATTACHABLE_METHOD_PREFIXES)); + + this.checkObjectModule = (boolean) configuration.getOrDefault("checkObjectModule", CHECK_OBJECT_MODULE); } private boolean isAttachable(MethodSymbol methodSymbol) { @@ -104,6 +114,10 @@ private static boolean isOverride(MethodSymbol method) { @Override public ParseTree visitFile(BSLParser.FileContext ctx) { + var moduleType = documentContext.getModuleType(); + if (!checkObjectModule && moduleType == ModuleType.ObjectModule) { + return ctx; + } List collect = Trees.findAllRuleNodes(ctx, BSLParser.RULE_globalMethodCall) .stream() diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties index ebadb58a518..20347033cdb 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties @@ -1,3 +1,4 @@ diagnosticMessage=Method "%s" is not called in the module diagnosticName=Unused local method attachableMethodPrefixes=Method prefixes (comma separated) +checkObjectModule=Check object modules \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties index bcebece21c0..d564ad0c4c4 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties @@ -1,3 +1,4 @@ diagnosticMessage=Метод "%s" не вызывается в теле модуля diagnosticName=Неиспользуемый локальный метод attachableMethodPrefixes=Префиксы подключаемых методов (через запятую) +checkObjectModule=Проверять модули объектов \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java index 747bf7b8243..681a61283e0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java @@ -21,30 +21,58 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.types.ModuleType; +import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.utils.Absolute; +import lombok.SneakyThrows; +import org.apache.commons.io.FileUtils; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.Map; +import java.util.Optional; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; class UnusedLocalMethodDiagnosticTest extends AbstractDiagnosticTest { + private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; + private static final String PATH_TO_MODULE_FILE = PATH_TO_METADATA + "/CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl"; + private static final String PATH_TO_MODULE_CONTENT = "src/test/resources/diagnostics/UnusedLocalMethodDiagnostic.bsl"; + + private MDCommonModule module; + private DocumentContext documentContext; UnusedLocalMethodDiagnosticTest() { super(UnusedLocalMethodDiagnostic.class); } @Test void test() { - List diagnostics = getDiagnostics(); + checkByDefault(diagnostics); + } + private static void checkByDefault(List diagnostics) { assertThat(diagnostics).hasSize(2); assertThat(diagnostics, true) .hasRange(1, 10, 24) .hasRange(70, 10, 41) ; + } + + @Test + void testObjectModuleByDefault() { + getObjectModuleDocumentContext(); + List diagnostics = getDiagnostics(documentContext); + assertThat(diagnostics).isEmpty(); } @Test @@ -65,4 +93,44 @@ void testConfigure() { .hasRange(63, 10, 39) ; } + + @Test + void testObjectModuleWithEnabledConfiguration() { + // given + getObjectModuleDocumentContext(); + + Map configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); + configuration.put("checkObjectModule", true); + diagnosticInstance.configure(configuration); + + // when + List diagnostics = getDiagnostics(documentContext); + + // then + checkByDefault(diagnostics); + } + + private void getObjectModuleDocumentContext() { + Path testFile = Paths.get(PATH_TO_MODULE_CONTENT).toAbsolutePath(); + getDocumentContextFromFile(testFile); + when(documentContext.getModuleType()).thenReturn(ModuleType.ObjectModule); + when(documentContext.getMdObject()).thenReturn(Optional.of(module)); + } + + @SneakyThrows + void getDocumentContextFromFile(Path testFile) { + + Path path = Absolute.path(PATH_TO_METADATA); + Path moduleFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); + + initServerContext(path); + var configuration = context.getConfiguration(); + documentContext = spy(TestUtils.getDocumentContext( + testFile.toUri(), + FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), + context + )); + + module = spy((MDCommonModule) configuration.getModulesByObject().get(moduleFile.toUri())); + } } From 35108d517013a643a2b5bbb489c6fa16990f2f46 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 23 Jul 2023 16:52:55 +0300 Subject: [PATCH 275/595] precommit #3111 --- .../bsl/languageserver/configuration/parameters-schema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..49076e741f5 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1872,6 +1872,12 @@ "default": "\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439_,attachable_", "type": "string", "title": "Method prefixes (comma separated)" + }, + "checkObjectModule": { + "description": "Check object modules", + "default": false, + "type": "boolean", + "title": "Check object modules" } }, "$id": "#/definitions/UnusedLocalMethod" From ae9d7b8284d406f49c03e406dfc65d11aa96e77e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 24 Jul 2023 21:22:53 +0300 Subject: [PATCH 276/595] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20+=20precommit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 67 +++++++++++++++++++ docs/en/diagnostics/ExternalAppStarting.md | 16 +++++ .../ExternalAppStartingDiagnostic.java | 55 +++++++++++++++ .../configuration/parameters-schema.json | 10 +++ ...xternalAppStartingDiagnostic_en.properties | 2 + ...xternalAppStartingDiagnostic_ru.properties | 2 + .../ExternalAppStartingDiagnosticTest.java | 60 +++++++++++++++++ .../ExternalAppStartingDiagnostic.bsl | 37 ++++++++++ 8 files changed, 249 insertions(+) create mode 100644 docs/diagnostics/ExternalAppStarting.md create mode 100644 docs/en/diagnostics/ExternalAppStarting.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md new file mode 100644 index 00000000000..abc1eb5e2bb --- /dev/null +++ b/docs/diagnostics/ExternalAppStarting.md @@ -0,0 +1,67 @@ +# Запуск внешних приложений (ExternalAppStarting) + + +## Описание диагностики + +Для контроля безопасности кода необходимо контролировать запуск внешних приложений из кода 1С. + +Данное правило распространяется на все способы запуска внешних программ, в том числе: +- КомандаСистемы +- ЗапуститьПриложение +- НачатьЗапускПриложения +- ЗапуститьПриложениеАсинх +- ПерейтиПоНавигационнойСсылке или ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку +- ФайловаяСистемаКлиент.ЗапуститьПрограмму (в клиентском коде) и ФайловаяСистема.ЗапуститьПрограмму (в серверном коде) +- ФайловаяСистемаКлиент.ОткрытьПроводник +- ФайловаяСистемаКлиент.ОткрытьФайл + +## Примеры + +```bsl +Процедура Метод() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + ОписаниеОповещения = Неопределено; + ПараметрыКоманды = Новый Структура; + + КомандаСистемы(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, Истина); // есть замечание + + НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание + + ПерейтиПоНавигационнойСсылке(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды, ОписаниеОповещения); // есть замечание + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыКоманды); // есть замечание + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + + ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды, ОписаниеОповещения); // есть замечание + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура Подключить() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры +``` + +## Источники + + +- [стандарт Безопасность запуска приложений](https://its.1c.ru/db/v8std/content/774/hdoc) +- [стандарт Ограничение на выполнение «внешнего» кода](https://its.1c.ru/db/v8std/content/669/hdoc ) diff --git a/docs/en/diagnostics/ExternalAppStarting.md b/docs/en/diagnostics/ExternalAppStarting.md new file mode 100644 index 00000000000..061fa651c09 --- /dev/null +++ b/docs/en/diagnostics/ExternalAppStarting.md @@ -0,0 +1,16 @@ +# External applications starting (ExternalAppStarting) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java new file mode 100644 index 00000000000..2fe6c59b8c0 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -0,0 +1,55 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.utils.CaseInsensitivePattern; + +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.VULNERABILITY, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 5, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL + +) +public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { + private static final Pattern messagePattern = CaseInsensitivePattern.compile( + "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + + "|ЗапуститьПриложениеАсинх|RunAppAsync|ПерейтиПоНавигационнойСсылке|GotoURL" + + "|ОткрытьНавигационнуюСсылку|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл" + ); + // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила + + public ExternalAppStartingDiagnostic() { + super(messagePattern); + } + +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..4d8c44b256f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -642,6 +642,16 @@ "title": "Ban export global module variables", "$id": "#/definitions/ExportVariables" }, + "ExternalAppStarting": { + "description": "External applications starting", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "External applications starting", + "$id": "#/definitions/ExternalAppStarting" + }, "ExtraCommas": { "description": "Commas without a parameter at the end of a method call", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties new file mode 100644 index 00000000000..ecf7e37307d --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the launch of an external application +diagnosticName=External applications starting diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties new file mode 100644 index 00000000000..f6afe882ae3 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте запуск внешнего приложения +diagnosticName=Запуск внешних приложений diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java new file mode 100644 index 00000000000..ab32859c625 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -0,0 +1,60 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class ExternalAppStartingDiagnosticTest extends AbstractDiagnosticTest { + ExternalAppStartingDiagnosticTest() { + super(ExternalAppStartingDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + .hasSize(15) + ; + } +} diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl new file mode 100644 index 00000000000..f39baf1ad25 --- /dev/null +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -0,0 +1,37 @@ + +Процедура Метод() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + ОписаниеОповещения = Неопределено; + ПараметрыКоманды = Новый Структура; + + КомандаСистемы(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, Истина); // есть замечание + + НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание + + ПерейтиПоНавигационнойСсылке(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды, ОписаниеОповещения); // есть замечание + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыКоманды); // есть замечание + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + + ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды, ОписаниеОповещения); // есть замечание + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура Подключить() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры From c4d9edc54797c3239a52f411b83908abb49fc881 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 24 Jul 2023 22:05:59 +0300 Subject: [PATCH 277/595] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BF=D0=BE=20=D0=BD=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8-=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 31 +++++++++++++++--- ...xternalAppStartingDiagnostic_en.properties | 1 + ...xternalAppStartingDiagnostic_ru.properties | 1 + .../ExternalAppStartingDiagnosticTest.java | 32 +++++++++++++++++-- .../ExternalAppStartingDiagnostic.bsl | 9 ++++++ 5 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 2fe6c59b8c0..614fcdfe1c8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -22,12 +22,14 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import java.util.Map; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -41,15 +43,34 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { - private static final Pattern messagePattern = CaseInsensitivePattern.compile( + private static final String MAIN_PATTERN_STRING = "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + - "|ЗапуститьПриложениеАсинх|RunAppAsync|ПерейтиПоНавигационнойСсылке|GotoURL" + - "|ОткрытьНавигационнуюСсылку|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл" - ); + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; + private static final String PATTERN_STRING_FOR_NAVI = + "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила + private static final Pattern MAIN_PATTERN = CaseInsensitivePattern.compile(MAIN_PATTERN_STRING); + private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( + MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); + private static final boolean CHECK_GOTO_URL = true; + + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + CHECK_GOTO_URL + ) + private boolean checkGotoUrl = CHECK_GOTO_URL; public ExternalAppStartingDiagnostic() { - super(messagePattern); + super(FULL_PATTERN); } + @Override + public void configure(Map configuration) { + super.configure(configuration); + if (checkGotoUrl){ + setMethodPattern(FULL_PATTERN); + } else { + setMethodPattern(MAIN_PATTERN); + } + } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index ecf7e37307d..a9c158b9fc3 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,2 +1,3 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting +checkGotoUrl=Check navigation links diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index f6afe882ae3..e04690feb72 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,2 +1,3 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений +checkGotoUrl=Проверять переход по навигационным ссылкам \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index ab32859c625..7181d8eb7cb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Map; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -54,7 +55,34 @@ void test() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(15) - ; + .hasSize(15); + } + + @Test + void testConfigure() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("checkGotoUrl", false); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) +// .hasRange(14, 4, 32) +// .hasRange(15, 26, 52) +// .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + .hasSize(12); } } diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl index f39baf1ad25..667aa14b775 100644 --- a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -35,3 +35,12 @@ Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаСервере +Процедура ПараметрНаИмяВнешнегоПриложения() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + МойОбщийМодуль.ЗапуститьВнешнееПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры From 779940ecfd58cc2583d581335d96c68467e5c4fb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:29:50 +0300 Subject: [PATCH 278/595] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 14 ++++--- ...xternalAppStartingDiagnostic_en.properties | 1 + ...xternalAppStartingDiagnostic_ru.properties | 3 +- .../ExternalAppStartingDiagnosticTest.java | 40 +++++++++++++++++-- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 614fcdfe1c8..31e50d2714d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -48,8 +48,6 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; - // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила - private static final Pattern MAIN_PATTERN = CaseInsensitivePattern.compile(MAIN_PATTERN_STRING); private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); private static final boolean CHECK_GOTO_URL = true; @@ -60,6 +58,12 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic ) private boolean checkGotoUrl = CHECK_GOTO_URL; + @DiagnosticParameter( + type = String.class, + defaultValue = MAIN_PATTERN_STRING + ) + private String userPatternString = MAIN_PATTERN_STRING; + public ExternalAppStartingDiagnostic() { super(FULL_PATTERN); } @@ -67,10 +71,10 @@ public ExternalAppStartingDiagnostic() { @Override public void configure(Map configuration) { super.configure(configuration); + var pattern = userPatternString; if (checkGotoUrl){ - setMethodPattern(FULL_PATTERN); - } else { - setMethodPattern(MAIN_PATTERN); + pattern += PATTERN_STRING_FOR_NAVI; } + setMethodPattern(CaseInsensitivePattern.compile(pattern)); } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index a9c158b9fc3..52a59ce7431 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,3 +1,4 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting checkGotoUrl=Check navigation links +userPatternString=User regex pattern \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index e04690feb72..f7465d6e8c8 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,3 +1,4 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений -checkGotoUrl=Проверять переход по навигационным ссылкам \ No newline at end of file +checkGotoUrl=Проверять переход по навигационным ссылкам +userPatternString=Пользовательский шаблон (регулярное выражение) \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index 7181d8eb7cb..c65f68ef824 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -59,7 +59,7 @@ void test() { } @Test - void testConfigure() { + void testConfigure_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); configuration.put("checkGotoUrl", false); @@ -72,9 +72,7 @@ void testConfigure() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) -// .hasRange(14, 4, 32) -// .hasRange(15, 26, 52) -// .hasRange(16, 26, 52) + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) @@ -85,4 +83,38 @@ void testConfigure() { .hasRange(35, 10, 34) .hasSize(12); } + + @Test + void testConfigure_userPatternString() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("userPatternString", "КомандаСистемы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + + .hasSize(4); + } + + @Test + void testConfigure_userPatternString_checkGotoUrl() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("checkGotoUrl", false); + configuration.put("userPatternString", "КомандаСистемы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasSize(1); + } } From b8407368cfaba870f8eec620137a0bf47c8c0077 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:40:44 +0300 Subject: [PATCH 279/595] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=97=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=82=D1=8C=D0=A1=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 11 +++++++++++ .../diagnostics/ExternalAppStartingDiagnostic.java | 2 +- .../ExternalAppStartingDiagnosticTest.java | 14 ++++++++++++-- .../diagnostics/ExternalAppStartingDiagnostic.bsl | 12 ++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md index abc1eb5e2bb..0a632729189 100644 --- a/docs/diagnostics/ExternalAppStarting.md +++ b/docs/diagnostics/ExternalAppStarting.md @@ -7,6 +7,7 @@ Данное правило распространяется на все способы запуска внешних программ, в том числе: - КомандаСистемы +- ЗапуститьСистему - ЗапуститьПриложение - НачатьЗапускПриложения - ЗапуститьПриложениеАсинх @@ -54,6 +55,16 @@ Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, КодВозврата) + ДождатьсяЗавершения = Истина; + + ЗапуститьСистему(); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата); // есть замечание +КонецПроцедуры ``` ## Источники diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 31e50d2714d..b867837d84a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -44,7 +44,7 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { private static final String MAIN_PATTERN_STRING = - "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + + "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index c65f68ef824..b618b9bf771 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -55,7 +55,12 @@ void test() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(15); + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(19); } @Test @@ -81,7 +86,12 @@ void testConfigure_checkGotoUrl() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(12); + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(16); } @Test diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl index 667aa14b775..80924867e83 100644 --- a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -44,3 +44,15 @@ МойОбщийМодуль.ЗапуститьВнешнееПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаЗапуститьСистему() + ДополнительныеПараметрыКоманднойСтроки = ""; + ДождатьсяЗавершения = Истина; + КодВозврата = Неопределено; + + ЗапуститьСистему(); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата); // есть замечание +КонецПроцедуры From c3b9c7ae35c125264f9959cab1b0db67969438eb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:52:15 +0300 Subject: [PATCH 280/595] precommit + Sonar --- .../diagnostics/ExternalAppStartingDiagnostic.java | 5 +++-- .../configuration/parameters-schema.json | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index b867837d84a..40a33a1bbac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -44,8 +44,9 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { private static final String MAIN_PATTERN_STRING = - "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + - "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; + "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp" + + "|НачатьЗапускПриложения|BeginRunningApplication" + + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 4d8c44b256f..d622a7fbd58 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -650,6 +650,20 @@ "object" ], "title": "External applications starting", + "properties": { + "checkGotoUrl": { + "description": "Check navigation links", + "default": true, + "type": "boolean", + "title": "Check navigation links" + }, + "userPatternString": { + "description": "User regex pattern", + "default": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u0421\u0438\u0441\u0442\u0435\u043c\u044b|System|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0421\u0438\u0441\u0442\u0435\u043c\u0443|RunSystem|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435|RunApp|\u041d\u0430\u0447\u0430\u0442\u044c\u0417\u0430\u043f\u0443\u0441\u043a\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f|BeginRunningApplication|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0410\u0441\u0438\u043d\u0445|RunAppAsync|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443|\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u041f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a|\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u0424\u0430\u0439\u043b", + "type": "string", + "title": "User regex pattern" + } + }, "$id": "#/definitions/ExternalAppStarting" }, "ExtraCommas": { From 5c3bb5bbc25921b7d485f0b6a447be82617c5c6f Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 19:15:11 +0300 Subject: [PATCH 281/595] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20FileSystemAccess?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/FileSystemAccess.md | 35 +++++++++ docs/en/diagnostics/FileSystemAccess.md | 16 ++++ .../FileSystemAccessDiagnostic.java | 78 +++++++++++++++++++ .../configuration/parameters-schema.json | 10 +++ .../FileSystemAccessDiagnostic_en.properties | 2 + .../FileSystemAccessDiagnostic_ru.properties | 2 + .../FileSystemAccessDiagnosticTest.java | 70 +++++++++++++++++ .../FileSystemAccessDiagnostic.bsl | 41 ++++++++++ 8 files changed, 254 insertions(+) create mode 100644 docs/diagnostics/FileSystemAccess.md create mode 100644 docs/en/diagnostics/FileSystemAccess.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/FileSystemAccessDiagnostic.bsl diff --git a/docs/diagnostics/FileSystemAccess.md b/docs/diagnostics/FileSystemAccess.md new file mode 100644 index 00000000000..36cbd40a1a5 --- /dev/null +++ b/docs/diagnostics/FileSystemAccess.md @@ -0,0 +1,35 @@ +# Доступ к файловой системе (FileSystemAccess) + + +## Описание диагностики + +При код-ревью или аудите кода необходимо проверять обращения к файлам, каталогам и набор действий, выполняемых с ними, для исключения передачи конфиденциальной или защищенной информации, а также для исключения деструктивных действий с файловой системой. + +## Примеры + +```bsl + Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI); // есть замечание + Текст = Новый ЗаписьТекста("d:\win.txt", КодировкаТекста.ANSI); // есть замечание + + ЗначениеВФайл("C:\Temp\PersonalData.txt", ЛичныеДанные); // есть замечание + КопироватьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть замечание + + МассивИмен = Новый Массив(); + МассивИмен.Добавить("C:\Windows\Temp\Presentation.ppt.1"); + ОбъединитьФайлы(МассивИмен, "C:\Windows\Temp\Presentation.ppt"); // есть замечание + + ПереместитьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть замечание + РазделитьФайл("C:\Windows\Temp\Presentation.ppt", 1024 * 1024 ); // есть замечание + СоздатьКаталог("C:\Temp"); // есть замечание + УдалитьФайлы("C:\temp\Works"); // есть замечание +``` + +## Источники + + +* [Стандарт Доступ к файловой системе из кода конфигурации](https://its.1c.ru/db/v8std#content:542:hdoc) +* [Стандарт Безопасность запуска приложений](https://its.1c.ru/db/v8std#content:774:hdoc) diff --git a/docs/en/diagnostics/FileSystemAccess.md b/docs/en/diagnostics/FileSystemAccess.md new file mode 100644 index 00000000000..67b207cf852 --- /dev/null +++ b/docs/en/diagnostics/FileSystemAccess.md @@ -0,0 +1,16 @@ +# FileSystemAccess (FileSystemAccess) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java new file mode 100644 index 00000000000..37d9418e87a --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -0,0 +1,78 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.utils.CaseInsensitivePattern; +import org.antlr.v4.runtime.tree.ParseTree; + +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.VULNERABILITY, + severity = DiagnosticSeverity.MINOR, + minutesToFix = 3, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL +) +public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { + private static final Pattern NEW_EXPRESSION = CaseInsensitivePattern.compile( + "File|Файл|xBase|HTMLWriter|ЗаписьHTML|HTMLReader|ЧтениеHTML|FastInfosetReader|ЧтениеFastInfoset" + + "|FastInfosetWriter|ЗаписьFastInfoset|XSLTransform|ПреобразованиеXSL" + + "|ZipFileWriter|ЗаписьZipФайла|ZipFileReader|ЧтениеZipФайла|TextReader|ЧтениеТекста|TextWriter|ЗаписьТекста" + + "|TextExtraction|ИзвлечениеТекста|BinaryData|ДвоичныеДанные|FileStream|ФайловыйПоток"); + + private static final Pattern GLOBAL_METHODS = CaseInsensitivePattern.compile( + "ЗначениеВФайл|ValueToFile|КопироватьФайл|FileCopy|ОбъединитьФайлы|MergeFiles|ПереместитьФайл|MoveFile" + + "|РазделитьФайл|SplitFile|СоздатьКаталог|CreateDirectory|УдалитьФайлы|DeleteFiles" + + "|КаталогПрограммы|BinDir|КаталогВременныхФайлов|TempFilesDir|КаталогДокументов|DocumentsDir" + + "|РабочийКаталогДанныхПользователя|UserDataWorkDir"); + // TODO добавить глобальные асинхронные методы работы с файлами + + public FileSystemAccessDiagnostic() { + super(GLOBAL_METHODS); + } + + @Override + public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { + Constructors.typeName(ctx).ifPresent((String typeName) -> { + var matcherTypeName = NEW_EXPRESSION.matcher(typeName); + if (matcherTypeName.matches()) { + diagnosticStorage.addDiagnostic(ctx); + } + }); + return super.visitNewExpression(ctx); + } + + @Override + protected boolean checkMethodCall(BSLParser.MethodCallContext ctx) { + return false; + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..2502c9da424 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -662,6 +662,16 @@ "title": "No NULL checks for fields from joined tables", "$id": "#/definitions/FieldsFromJoinsWithoutIsNull" }, + "FileSystemAccess": { + "description": "FileSystemAccess", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "FileSystemAccess", + "$id": "#/definitions/FileSystemAccess" + }, "ForbiddenMetadataName": { "description": "Metadata object has a forbidden name", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties new file mode 100644 index 00000000000..e8de30d28c1 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check access to the file system +diagnosticName=FileSystemAccess diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties new file mode 100644 index 00000000000..3db2addccfd --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте обращение к файловой системе +diagnosticName=Доступ к файловой системе diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java new file mode 100644 index 00000000000..04528445d2a --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java @@ -0,0 +1,70 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class FileSystemAccessDiagnosticTest extends AbstractDiagnosticTest { + FileSystemAccessDiagnosticTest() { + super(FileSystemAccessDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(1, 15, 35) + .hasRange(2, 15, 41) + .hasRange(3, 15, 31) + .hasRange(4, 15, 31) + .hasRange(5, 15, 38) + .hasRange(6, 15, 38) + .hasRange(7, 15, 33) + .hasRange(8, 15, 44) + .hasRange(9, 15, 44) + .hasRange(10, 15, 41) + .hasRange(11, 15, 41) + .hasRange(12, 15, 45) + .hasRange(13, 15, 41) + .hasRange(14, 15, 56) + .hasRange(19, 15, 41) + .hasRange(24, 15, 26) + + .hasRange(29, 4, 17) + .hasRange(30, 4, 18) + .hasRange(34, 4, 19) + .hasRange(36, 4, 19) + .hasRange(37, 4, 17) + .hasRange(38, 4, 18) + .hasRange(39, 4, 16) + .hasSize(23) + ; + + } +} diff --git a/src/test/resources/diagnostics/FileSystemAccessDiagnostic.bsl b/src/test/resources/diagnostics/FileSystemAccessDiagnostic.bsl new file mode 100644 index 00000000000..84333a26b2c --- /dev/null +++ b/src/test/resources/diagnostics/FileSystemAccessDiagnostic.bsl @@ -0,0 +1,41 @@ +Процедура Метод1() + Значение = Новый File(ИмяФайла); // есть ошибка + Значение = Новый xBase("C:\temp.dbf"); // есть ошибка + Значение = Новый HTMLWriter; // есть ошибка + Значение = Новый HTMLReader; // есть ошибка + Значение = Новый FastInfosetReader; // есть ошибка + Значение = Новый FastInfosetWriter; // есть ошибка + Значение = Новый XSLTransform; // есть ошибка + Значение = Новый ZipFileWriter(ИмяФайла); // есть ошибка + Значение = Новый ZipFileReader(ИмяФайла); // есть ошибка + Значение = Новый TextReader(ИмяФайла); // есть ошибка + Значение = Новый TextWriter(ИмяФайла); // есть ошибка + Значение = Новый TextExtraction(ИмяФайла); // есть ошибка + Значение = Новый BinaryData(ИмяФайла); // есть ошибка + Значение = Новый FileStream(ИмяФайла, РежимОткрытия); // есть ошибка +КонецПроцедуры + +&НаСервере +Процедура Метод2() + Значение = Новый xBase("C:\temp.dbf"); // есть ошибка +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура Метод3() + Значение = Новый xBase; // есть ошибка +КонецПроцедуры + +&НаКлиенте +Процедура Метод4() + ЗначениеВФайл("C:\Temp\PersonalData.txt", ЛичныеДанные); // есть ошибка + КопироватьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть ошибка + + МассивИмен = Новый Массив(); + МассивИмен.Добавить("C:\Windows\Temp\Presentation.ppt.1"); + ОбъединитьФайлы(МассивИмен, "C:\Windows\Temp\Presentation.ppt"); // есть ошибка + + ПереместитьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть ошибка + РазделитьФайл("C:\Windows\Temp\Presentation.ppt", 1024 * 1024 ); // есть ошибка + СоздатьКаталог("C:\Temp"); // есть ошибка + УдалитьФайлы("C:\temp\Works"); // есть ошибка +КонецПроцедуры From c78d08d38ba831c45cb5e82b8b40263e26aff028 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 19:32:33 +0300 Subject: [PATCH 282/595] =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md index 0a632729189..711d1403a18 100644 --- a/docs/diagnostics/ExternalAppStarting.md +++ b/docs/diagnostics/ExternalAppStarting.md @@ -3,7 +3,7 @@ ## Описание диагностики -Для контроля безопасности кода необходимо контролировать запуск внешних приложений из кода 1С. +Для повышения качества и безопасности решения на 1С необходимо контролировать запуск внешних приложений из кода 1С. Данное правило распространяется на все способы запуска внешних программ, в том числе: - КомандаСистемы From 9211e34a38b519780a807ce0adf7a403c096c1e8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 19:58:41 +0300 Subject: [PATCH 283/595] =?UTF-8?q?=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=B0=D1=81=D0=B8=D0=BD=D1=85=D1=80?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D1=8B=20+=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit уточнил документацию --- docs/diagnostics/FileSystemAccess.md | 3 ++ .../FileSystemAccessDiagnostic.java | 30 ++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/docs/diagnostics/FileSystemAccess.md b/docs/diagnostics/FileSystemAccess.md index 36cbd40a1a5..ea10df0aa00 100644 --- a/docs/diagnostics/FileSystemAccess.md +++ b/docs/diagnostics/FileSystemAccess.md @@ -4,6 +4,9 @@ ## Описание диагностики При код-ревью или аудите кода необходимо проверять обращения к файлам, каталогам и набор действий, выполняемых с ними, для исключения передачи конфиденциальной или защищенной информации, а также для исключения деструктивных действий с файловой системой. +Важно проверять код от сторонних разработчиков, подрядчиков, из различных интернет-сервисов, каталогов и т.п. + +По найденным замечаниям рекомендуется выполнить ручной аудит кода на предмет его правильности и безопасности. ## Примеры diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index 37d9418e87a..ac54c36a4e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -53,13 +53,34 @@ public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { "ЗначениеВФайл|ValueToFile|КопироватьФайл|FileCopy|ОбъединитьФайлы|MergeFiles|ПереместитьФайл|MoveFile" + "|РазделитьФайл|SplitFile|СоздатьКаталог|CreateDirectory|УдалитьФайлы|DeleteFiles" + "|КаталогПрограммы|BinDir|КаталогВременныхФайлов|TempFilesDir|КаталогДокументов|DocumentsDir" + - "|РабочийКаталогДанныхПользователя|UserDataWorkDir"); - // TODO добавить глобальные асинхронные методы работы с файлами + "|РабочийКаталогДанныхПользователя|UserDataWorkDir" + + "|НачатьПодключениеРасширенияРаботыСФайлами|BeginAttachingFileSystemExtension" + + "|НачатьУстановкуРасширенияРаботыСФайлами|BeginInstallFileSystemExtension" + + "|УстановитьРасширениеРаботыСФайлами|InstallFileSystemExtension" + + "|УстановитьРасширениеРаботыСФайламиАсинх|InstallFileSystemExtensionAsync" + + "|ПодключитьРасширениеРаботыСФайламиАсинх|AttachFileSystemExtensionAsync|" + + "КаталогВременныхФайловАсинх|TempFilesDirAsync|КаталогДокументовАсинх|DocumentsDirAsync" + + "|НачатьПолучениеКаталогаВременныхФайлов|BeginGettingTempFilesDir" + + "|НачатьПолучениеКаталогаДокументов|BeginGettingDocumentsDir" + + "|НачатьПолучениеРабочегоКаталогаДанныхПользователя|BeginGettingUserDataWorkDir" + + "|РабочийКаталогДанныхПользователяАсинх|UserDataWorkDirAsync" + + "|КопироватьФайлАсинх|CopyFileAsync|НайтиФайлыАсинх|FindFilesAsync|НачатьКопированиеФайла|BeginCopyingFile" + + "|НачатьПеремещениеФайла|BeginMovingFile|НачатьПоискФайлов|BeginFindingFiles" + + "|НачатьСозданиеДвоичныхДанныхИзФайла|BeginCreateBinaryDataFromFile" + + "|НачатьСозданиеКаталога|BeginCreatingDirectory" + + "|НачатьУдалениеФайлов|BeginDeletingFiles|ПереместитьФайлАсинх|MoveFileAsync" + + "|СоздатьДвоичныеДанныеИзФайлаАсинх|CreateBinaryDataFromFileAsync|СоздатьКаталогАсинх|CreateDirectoryAsync" + + "|УдалитьФайлыАсинх|DeleteFilesAsync"); public FileSystemAccessDiagnostic() { super(GLOBAL_METHODS); } + @Override + protected boolean checkMethodCall(BSLParser.MethodCallContext ctx) { + return false; + } + @Override public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { Constructors.typeName(ctx).ifPresent((String typeName) -> { @@ -70,9 +91,4 @@ public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { }); return super.visitNewExpression(ctx); } - - @Override - protected boolean checkMethodCall(BSLParser.MethodCallContext ctx) { - return false; - } } From 8b3fb0842e066748aab4e80dbb59dc514b35e91c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 26 Jul 2023 10:18:40 +0300 Subject: [PATCH 284/595] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit globalMethods=Шаблон глобальных методов (регулярное выражение) newExpression=Шаблон классов (регулярное выражение) --- .../FileSystemAccessDiagnostic.java | 83 ++++++++++++------- .../FileSystemAccessDiagnostic_en.properties | 2 + .../FileSystemAccessDiagnostic_ru.properties | 2 + .../FileSystemAccessDiagnosticTest.java | 17 ++++ 4 files changed, 75 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index ac54c36a4e9..b870ce2f553 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -31,6 +32,7 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; +import java.util.Map; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -43,37 +45,60 @@ scope = DiagnosticScope.BSL ) public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { - private static final Pattern NEW_EXPRESSION = CaseInsensitivePattern.compile( - "File|Файл|xBase|HTMLWriter|ЗаписьHTML|HTMLReader|ЧтениеHTML|FastInfosetReader|ЧтениеFastInfoset" + - "|FastInfosetWriter|ЗаписьFastInfoset|XSLTransform|ПреобразованиеXSL" + - "|ZipFileWriter|ЗаписьZipФайла|ZipFileReader|ЧтениеZipФайла|TextReader|ЧтениеТекста|TextWriter|ЗаписьТекста" + - "|TextExtraction|ИзвлечениеТекста|BinaryData|ДвоичныеДанные|FileStream|ФайловыйПоток"); + public static final String NEW_EXPRESSION = "File|Файл|xBase|HTMLWriter|ЗаписьHTML|HTMLReader|ЧтениеHTML" + + "|FastInfosetReader|ЧтениеFastInfoset|FastInfosetWriter|ЗаписьFastInfoset|XSLTransform|ПреобразованиеXSL" + + "|ZipFileWriter|ЗаписьZipФайла|ZipFileReader|ЧтениеZipФайла|TextReader|ЧтениеТекста|TextWriter|ЗаписьТекста" + + "|TextExtraction|ИзвлечениеТекста|BinaryData|ДвоичныеДанные|FileStream|ФайловыйПоток"; - private static final Pattern GLOBAL_METHODS = CaseInsensitivePattern.compile( - "ЗначениеВФайл|ValueToFile|КопироватьФайл|FileCopy|ОбъединитьФайлы|MergeFiles|ПереместитьФайл|MoveFile" + - "|РазделитьФайл|SplitFile|СоздатьКаталог|CreateDirectory|УдалитьФайлы|DeleteFiles" + - "|КаталогПрограммы|BinDir|КаталогВременныхФайлов|TempFilesDir|КаталогДокументов|DocumentsDir" + - "|РабочийКаталогДанныхПользователя|UserDataWorkDir" + - "|НачатьПодключениеРасширенияРаботыСФайлами|BeginAttachingFileSystemExtension" + - "|НачатьУстановкуРасширенияРаботыСФайлами|BeginInstallFileSystemExtension" + - "|УстановитьРасширениеРаботыСФайлами|InstallFileSystemExtension" + - "|УстановитьРасширениеРаботыСФайламиАсинх|InstallFileSystemExtensionAsync" + - "|ПодключитьРасширениеРаботыСФайламиАсинх|AttachFileSystemExtensionAsync|" + - "КаталогВременныхФайловАсинх|TempFilesDirAsync|КаталогДокументовАсинх|DocumentsDirAsync" + - "|НачатьПолучениеКаталогаВременныхФайлов|BeginGettingTempFilesDir" + - "|НачатьПолучениеКаталогаДокументов|BeginGettingDocumentsDir" + - "|НачатьПолучениеРабочегоКаталогаДанныхПользователя|BeginGettingUserDataWorkDir" + - "|РабочийКаталогДанныхПользователяАсинх|UserDataWorkDirAsync" + - "|КопироватьФайлАсинх|CopyFileAsync|НайтиФайлыАсинх|FindFilesAsync|НачатьКопированиеФайла|BeginCopyingFile" + - "|НачатьПеремещениеФайла|BeginMovingFile|НачатьПоискФайлов|BeginFindingFiles" + - "|НачатьСозданиеДвоичныхДанныхИзФайла|BeginCreateBinaryDataFromFile" + - "|НачатьСозданиеКаталога|BeginCreatingDirectory" + - "|НачатьУдалениеФайлов|BeginDeletingFiles|ПереместитьФайлАсинх|MoveFileAsync" + - "|СоздатьДвоичныеДанныеИзФайлаАсинх|CreateBinaryDataFromFileAsync|СоздатьКаталогАсинх|CreateDirectoryAsync" + - "|УдалитьФайлыАсинх|DeleteFilesAsync"); + public static final String GLOBAL_METHODS = "ЗначениеВФайл|ValueToFile|КопироватьФайл|FileCopy" + + "|ОбъединитьФайлы|MergeFiles|ПереместитьФайл|MoveFile|РазделитьФайл|SplitFile|СоздатьКаталог|CreateDirectory|" + + "УдалитьФайлы|DeleteFiles|КаталогПрограммы|BinDir|КаталогВременныхФайлов|TempFilesDir" + + "|КаталогДокументов|DocumentsDir|РабочийКаталогДанныхПользователя|UserDataWorkDir" + + "|НачатьПодключениеРасширенияРаботыСФайлами|BeginAttachingFileSystemExtension" + + "|НачатьУстановкуРасширенияРаботыСФайлами|BeginInstallFileSystemExtension" + + "|УстановитьРасширениеРаботыСФайлами|InstallFileSystemExtension" + + "|УстановитьРасширениеРаботыСФайламиАсинх|InstallFileSystemExtensionAsync" + + "|ПодключитьРасширениеРаботыСФайламиАсинх|AttachFileSystemExtensionAsync|" + + "КаталогВременныхФайловАсинх|TempFilesDirAsync|КаталогДокументовАсинх|DocumentsDirAsync" + + "|НачатьПолучениеКаталогаВременныхФайлов|BeginGettingTempFilesDir" + + "|НачатьПолучениеКаталогаДокументов|BeginGettingDocumentsDir" + + "|НачатьПолучениеРабочегоКаталогаДанныхПользователя|BeginGettingUserDataWorkDir" + + "|РабочийКаталогДанныхПользователяАсинх|UserDataWorkDirAsync" + + "|КопироватьФайлАсинх|CopyFileAsync|НайтиФайлыАсинх|FindFilesAsync|НачатьКопированиеФайла|BeginCopyingFile" + + "|НачатьПеремещениеФайла|BeginMovingFile|НачатьПоискФайлов|BeginFindingFiles" + + "|НачатьСозданиеДвоичныхДанныхИзФайла|BeginCreateBinaryDataFromFile" + + "|НачатьСозданиеКаталога|BeginCreatingDirectory" + + "|НачатьУдалениеФайлов|BeginDeletingFiles|ПереместитьФайлАсинх|MoveFileAsync" + + "|СоздатьДвоичныеДанныеИзФайлаАсинх|CreateBinaryDataFromFileAsync|СоздатьКаталогАсинх|CreateDirectoryAsync" + + "|УдалитьФайлыАсинх|DeleteFilesAsync"; + private static final Pattern GLOBAL_METHODS_PATTERN = getPattern(GLOBAL_METHODS); + + @DiagnosticParameter( + type = String.class, + defaultValue = "" + GLOBAL_METHODS + ) + private String globalMethods = GLOBAL_METHODS; + + @DiagnosticParameter( + type = String.class, + defaultValue = NEW_EXPRESSION + ) + private String newExpression = NEW_EXPRESSION; + private Pattern newExpressionPattern = getPattern(newExpression); public FileSystemAccessDiagnostic() { - super(GLOBAL_METHODS); + super(GLOBAL_METHODS_PATTERN); + } + + private static Pattern getPattern(String newExpression) { + return CaseInsensitivePattern.compile(newExpression); + } + + @Override + public void configure(Map configuration) { + super.configure(configuration); + setMethodPattern(getPattern(globalMethods)); + newExpressionPattern = getPattern(newExpression); } @Override @@ -84,7 +109,7 @@ protected boolean checkMethodCall(BSLParser.MethodCallContext ctx) { @Override public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { Constructors.typeName(ctx).ifPresent((String typeName) -> { - var matcherTypeName = NEW_EXPRESSION.matcher(typeName); + var matcherTypeName = newExpressionPattern.matcher(typeName); if (matcherTypeName.matches()) { diagnosticStorage.addDiagnostic(ctx); } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties index e8de30d28c1..b1dba726614 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties @@ -1,2 +1,4 @@ diagnosticMessage=Check access to the file system diagnosticName=FileSystemAccess +globalMethods=Global methods pattern (regex) +newExpression=Class names pattern (regex) \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties index 3db2addccfd..02846b96439 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties @@ -1,2 +1,4 @@ diagnosticMessage=Проверьте обращение к файловой системе diagnosticName=Доступ к файловой системе +globalMethods=Шаблон глобальных методов (регулярное выражение) +newExpression=Шаблон классов (регулярное выражение) \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java index 04528445d2a..e12905ee47f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Map; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -65,6 +66,22 @@ void test() { .hasRange(39, 4, 16) .hasSize(23) ; + } + + @Test + void testConfigure() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("globalMethods", "ЗначениеВФайл"); + configuration.put("newExpression", "File"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + assertThat(diagnostics, true) + .hasRange(1, 15, 35) + .hasRange(29, 4, 17) + .hasSize(2); } + } From f04964fae08152f92d0f3e12dd61d2f7d2064bb4 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 26 Jul 2023 12:21:57 +0300 Subject: [PATCH 285/595] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D0=BC=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20=D0=B8=20=D1=81=D1=81?= =?UTF-8?q?=D1=8B=D0=BB=D0=BA=D0=B0=20=D0=B2=20=D0=B4=D0=BE=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/FileSystemAccess.md | 1 + .../languageserver/diagnostics/FileSystemAccessDiagnostic.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/diagnostics/FileSystemAccess.md b/docs/diagnostics/FileSystemAccess.md index ea10df0aa00..77eef23696f 100644 --- a/docs/diagnostics/FileSystemAccess.md +++ b/docs/diagnostics/FileSystemAccess.md @@ -36,3 +36,4 @@ * Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) --> * [Стандарт Доступ к файловой системе из кода конфигурации](https://its.1c.ru/db/v8std#content:542:hdoc) * [Стандарт Безопасность запуска приложений](https://its.1c.ru/db/v8std#content:774:hdoc) +* [Безопасный режим работы - руководство разработчика](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000186) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index b870ce2f553..2bc10ba1bd1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -48,7 +48,8 @@ public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { public static final String NEW_EXPRESSION = "File|Файл|xBase|HTMLWriter|ЗаписьHTML|HTMLReader|ЧтениеHTML" + "|FastInfosetReader|ЧтениеFastInfoset|FastInfosetWriter|ЗаписьFastInfoset|XSLTransform|ПреобразованиеXSL" + "|ZipFileWriter|ЗаписьZipФайла|ZipFileReader|ЧтениеZipФайла|TextReader|ЧтениеТекста|TextWriter|ЗаписьТекста" + - "|TextExtraction|ИзвлечениеТекста|BinaryData|ДвоичныеДанные|FileStream|ФайловыйПоток"; + "|TextExtraction|ИзвлечениеТекста|BinaryData|ДвоичныеДанные|FileStream|ФайловыйПоток" + + "|FileStreamsManager|МенеджерФайловыхПотоков|DataWriter|ЗаписьДанных|DataReader|ЧтениеДанных"; public static final String GLOBAL_METHODS = "ЗначениеВФайл|ValueToFile|КопироватьФайл|FileCopy" + "|ОбъединитьФайлы|MergeFiles|ПереместитьФайл|MoveFile|РазделитьФайл|SplitFile|СоздатьКаталог|CreateDirectory|" + From 95dc5ac9769c61c4c9a596dd6d6989fdd6c37869 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 18 Jul 2023 00:02:56 +0200 Subject: [PATCH 286/595] =?UTF-8?q?=D0=9D=D0=B0=D0=BC=D0=B5=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=20=D0=B0=D0=BF=D0=BF=D0=B5=D0=BD=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D1=83=20=D0=B2=20language=20client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageClientAwareAppender.java | 62 +++++++++++++++++++ ...guageClientAwareAppenderConfiguration.java | 34 ++++++++++ .../language-client-aware-appender.xml | 18 ++++++ src/main/resources/logback-spring.xml | 8 +++ 4 files changed, 122 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java create mode 100644 src/main/resources/language-client-aware-appender.xml create mode 100644 src/main/resources/logback-spring.xml diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java new file mode 100644 index 00000000000..43140d6138d --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java @@ -0,0 +1,62 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.infrastructure; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.ConsoleAppender; +import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import jakarta.annotation.Nullable; +import lombok.Setter; +import org.eclipse.lsp4j.MessageParams; +import org.eclipse.lsp4j.MessageType; +import org.eclipse.lsp4j.services.LanguageClient; + +import java.io.IOException; + +public class LanguageClientAwareAppender + extends ConsoleAppender { + + protected static LanguageClientAwareAppender INSTANCE; + + @Setter + @Nullable + private LanguageClientHolder clientHolder; + + public LanguageClientAwareAppender() { + super(); + // hacky hack + INSTANCE = this; + } + + @Override + protected void writeOut(ILoggingEvent event) throws IOException { + if (clientHolder != null && clientHolder.isConnected()) { + LanguageClient languageClient = clientHolder.getClient().orElseThrow(); + + var params = new MessageParams(MessageType.Info, event.getFormattedMessage()); + languageClient.logMessage(params); + + return; + } + super.writeOut(event); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java new file mode 100644 index 00000000000..6b664953116 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java @@ -0,0 +1,34 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.infrastructure; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class LanguageClientAwareAppenderConfiguration { + + @Bean + public LanguageClientAwareAppender languageClientAwareAppender() { + return LanguageClientAwareAppender.INSTANCE; + } +} diff --git a/src/main/resources/language-client-aware-appender.xml b/src/main/resources/language-client-aware-appender.xml new file mode 100644 index 00000000000..199315fc5fd --- /dev/null +++ b/src/main/resources/language-client-aware-appender.xml @@ -0,0 +1,18 @@ + + + + + + + + ${CONSOLE_LOG_THRESHOLD} + + + ${CONSOLE_LOG_PATTERN} + ${CONSOLE_LOG_CHARSET} + + + \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 00000000000..d32f81a917d --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From e9aef17422bff759a4820b75502fdb7b483aa0ea Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 19 Jul 2023 23:34:58 +0200 Subject: [PATCH 287/595] =?UTF-8?q?=D0=92=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B2?= =?UTF-8?q?=20=D0=BD=D1=83=D0=B6=D0=BD=D0=BE=D0=BC=20=D1=83=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageClientAwareAppender.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java index 43140d6138d..d20e8ecdf15 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.infrastructure; +import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.ConsoleAppender; import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; @@ -29,16 +30,25 @@ import org.eclipse.lsp4j.MessageParams; import org.eclipse.lsp4j.MessageType; import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; +import java.util.Map; public class LanguageClientAwareAppender extends ConsoleAppender { protected static LanguageClientAwareAppender INSTANCE; - @Setter + private static final Map loggingLevels = Map.of( + Level.DEBUG, MessageType.Log, + Level.ERROR, MessageType.Error, + Level.INFO, MessageType.Info, + Level.WARN, MessageType.Warning + ); + @Nullable + @Setter(onMethod_ = {@Autowired}) private LanguageClientHolder clientHolder; public LanguageClientAwareAppender() { @@ -52,7 +62,14 @@ protected void writeOut(ILoggingEvent event) throws IOException { if (clientHolder != null && clientHolder.isConnected()) { LanguageClient languageClient = clientHolder.getClient().orElseThrow(); - var params = new MessageParams(MessageType.Info, event.getFormattedMessage()); + var messageType = loggingLevels.getOrDefault(event.getLevel(), MessageType.Log); + String message = "[%s] [%s] [%s]: %s".formatted( + event.getLevel(), + event.getThreadName(), + event.getLoggerName(), + event.getFormattedMessage() + ); + var params = new MessageParams(messageType, message); languageClient.logMessage(params); return; From da60e680cd8a6288d361a5acee57f0b2323b4489 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 26 Jul 2023 11:27:18 +0200 Subject: [PATCH 288/595] =?UTF-8?q?Info=20=D0=BA=D0=B0=D0=BA=20=D1=83?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/logback-spring.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index d32f81a917d..be77b622cab 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -2,7 +2,7 @@ - + - \ No newline at end of file + From fd86f5d5108d1d418641f7e3e2f7e51edb806869 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jul 2023 09:37:44 +0000 Subject: [PATCH 289/595] build(deps): bump io.sentry:sentry-bom from 6.26.0 to 6.27.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.26.0 to 6.27.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.26.0...6.27.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0dcc580f84b..4f4c980bf3d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.26.0") + mavenBom("io.sentry:sentry-bom:6.27.0") } } From ac8abbdf48bf772c8ef906601d7a76cb97aabd97 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 26 Jul 2023 21:16:23 +0200 Subject: [PATCH 290/595] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=BE=D1=81=20=D1=82?= =?UTF-8?q?=D1=8F=D0=B6=D0=B5=D0=BB=D1=8B=D1=85=20parallelStream=20=D0=B2?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BF=D1=83=D0=BB=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?,=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF=D1=83?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/AnalyzeProjectOnStart.java | 4 +- .../bsl/languageserver/BSLLanguageServer.java | 14 +++-- .../BSLTextDocumentService.java | 9 +++- .../languageserver/BSLWorkspaceService.java | 6 +++ .../languageserver/context/ServerContext.java | 5 +- .../context/computer/DiagnosticComputer.java | 33 +++++++++--- .../NamedForkJoinWorkerThreadFactory.java | 52 +++++++++++++++++++ 7 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java index 94ef6e95b14..5283444a4f6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.events.ServerContextPopulatedEvent; import com.github._1c_syntax.bsl.languageserver.providers.DiagnosticProvider; +import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.RequiredArgsConstructor; import org.springframework.context.event.EventListener; @@ -63,7 +64,8 @@ public void handleEvent(ServerContextPopulatedEvent event) { var progress = workDoneProgressHelper.createProgress(documentContexts.size(), getMessage("filesSuffix")); progress.beginProgress(getMessage("analyzeProject")); - var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism()); + var factory = new NamedForkJoinWorkerThreadFactory("analyze-on-start-"); + var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true); try { executorService.submit(() -> diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 12553fed938..19ba3a0b523 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.jsonrpc.ProtocolExtension; import com.github._1c_syntax.bsl.languageserver.providers.CommandProvider; import com.github._1c_syntax.bsl.languageserver.providers.DocumentSymbolProvider; +import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.CallHierarchyRegistrationOptions; @@ -62,7 +63,6 @@ import org.eclipse.lsp4j.services.LanguageServer; import org.eclipse.lsp4j.services.TextDocumentService; import org.eclipse.lsp4j.services.WorkspaceService; -import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Component; import java.io.File; @@ -73,8 +73,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.ForkJoinPool; @Slf4j @Component @@ -97,8 +96,13 @@ public CompletableFuture initialize(InitializeParams params) { clientCapabilitiesHolder.setCapabilities(params.getCapabilities()); setConfigurationRoot(params); - ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("populate-context-")); - CompletableFuture.runAsync(context::populateContext, executorService); + + var factory = new NamedForkJoinWorkerThreadFactory("populate-context-"); + var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true); + CompletableFuture + .runAsync(context::populateContext, executorService) + .thenAccept(unused -> executorService.shutdown()) + ; var capabilities = new ServerCapabilities(); capabilities.setTextDocumentSync(getTextDocumentSyncOptions()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index ff5cf9b9135..6dbca3ef889 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -44,6 +44,7 @@ import com.github._1c_syntax.bsl.languageserver.providers.RenameProvider; import com.github._1c_syntax.bsl.languageserver.providers.SelectionRangeProvider; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import jakarta.annotation.PreDestroy; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.CallHierarchyIncomingCall; import org.eclipse.lsp4j.CallHierarchyIncomingCallsParams; @@ -127,6 +128,11 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("text-document-service-")); + @PreDestroy + private void onDestroy() { + executorService.shutdown(); + } + @Override public CompletableFuture hover(HoverParams params) { var documentContext = context.getDocument(params.getTextDocument().getUri()); @@ -278,7 +284,8 @@ public CompletableFuture> prepareCallHierarchy(CallHiera } return callHierarchyItems; }, - executorService); + executorService + ); } @Override diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 4d0cba21357..2ed324237aa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -24,6 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.providers.CommandProvider; import com.github._1c_syntax.bsl.languageserver.providers.SymbolProvider; +import jakarta.annotation.PreDestroy; import lombok.RequiredArgsConstructor; import org.apache.commons.beanutils.PropertyUtils; import org.eclipse.lsp4j.DidChangeConfigurationParams; @@ -53,6 +54,11 @@ public class BSLWorkspaceService implements WorkspaceService { private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("workspace-service-")); + @PreDestroy + private void onDestroy() { + executorService.shutdown(); + } + @Override public CompletableFuture,List>> symbol(WorkspaceSymbolParams params) { return CompletableFuture.supplyAsync( diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index c8a9b7067f2..67e54a57078 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -24,6 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.WorkDoneProgressHelper; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; +import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.mdclasses.Configuration; @@ -280,8 +281,10 @@ private Configuration computeConfigurationMetadata() { var progress = workDoneProgressHelper.createProgress(0, ""); progress.beginProgress(getMessage("computeConfigurationMetadata")); + var factory = new NamedForkJoinWorkerThreadFactory("compute-configuration-"); + var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true); + Configuration configuration; - var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism()); try { configuration = executorService.submit(() -> Configuration.create(configurationRoot)).get(); } catch (ExecutionException e) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index 6a91c3d43ab..b2de3ea0022 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -23,23 +23,45 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.BSLDiagnostic; -import lombok.RequiredArgsConstructor; +import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; import org.eclipse.lsp4j.Diagnostic; import org.springframework.beans.factory.annotation.Lookup; import org.springframework.stereotype.Component; import java.util.List; -import java.util.stream.Collectors; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Predicate; import java.util.stream.Stream; @Component -@RequiredArgsConstructor @Slf4j public abstract class DiagnosticComputer { + private ExecutorService executorService; + + @PostConstruct + private void init() { + var factory = new NamedForkJoinWorkerThreadFactory("diagnostic-computer-"); + executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true); + } + + @PreDestroy + private void onDestroy() { + executorService.shutdown(); + } + public List compute(DocumentContext documentContext) { + return CompletableFuture + .supplyAsync(() -> internalCompute(documentContext), executorService) + .join(); + } + private List internalCompute(DocumentContext documentContext) { DiagnosticIgnoranceComputer.Data diagnosticIgnorance = documentContext.getDiagnosticIgnorance(); return diagnostics(documentContext).parallelStream() @@ -64,9 +86,8 @@ public List compute(DocumentContext documentContext) { return Stream.empty(); } }) - .filter((Diagnostic diagnostic) -> - !diagnosticIgnorance.diagnosticShouldBeIgnored(diagnostic)) - .collect(Collectors.toList()); + .filter(Predicate.not(diagnosticIgnorance::diagnosticShouldBeIgnored)) + .toList(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java new file mode 100644 index 00000000000..b4532d52506 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java @@ -0,0 +1,52 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.utils; + +import lombok.RequiredArgsConstructor; + +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinWorkerThread; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Фабрика тредов для ForkJoinPool, автоматически добаляющая префикс к имени треда. + */ +@RequiredArgsConstructor +public class NamedForkJoinWorkerThreadFactory implements ForkJoinPool.ForkJoinWorkerThreadFactory { + + private static final AtomicLong index = new AtomicLong(); + + /** + * Префикс для добавления к имени треда. + */ + private final String prefix; + + /** + * {@inheritDoc} + */ + @Override + public ForkJoinWorkerThread newThread(ForkJoinPool pool) { + var worker = ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool); + worker.setName(prefix + index.incrementAndGet()); + return worker; + } +} From 3bd07d3641b1b39a725908729ce3a6bb7815ef85 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 26 Jul 2023 21:57:00 +0200 Subject: [PATCH 291/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20=D0=B2=D1=8B=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=B4=D0=B0=D1=82=D1=8B,=20javadoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageClientAwareAppender.java | 32 ++++++++++++++++--- ...uration.java => LogbackConfiguration.java} | 8 ++++- .../language-client-aware-appender.xml | 6 ---- 3 files changed, 35 insertions(+), 11 deletions(-) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/{LanguageClientAwareAppenderConfiguration.java => LogbackConfiguration.java} (84%) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java index d20e8ecdf15..56a77678a51 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java @@ -29,42 +29,66 @@ import lombok.Setter; import org.eclipse.lsp4j.MessageParams; import org.eclipse.lsp4j.MessageType; -import org.eclipse.lsp4j.services.LanguageClient; import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.util.Map; +/** + * Расширение штатного {@link ConsoleAppender}, выводящего сообщения + * в {@link org.eclipse.lsp4j.services.LanguageClient}, если он подключен, + * или в штатные потоки вывода в обратном случае. + */ public class LanguageClientAwareAppender extends ConsoleAppender { + /** + * Singletone-like хранилище проинициализированного инфраструктурой Logback аппендера + * для последующего возврата его через {@link LogbackConfiguration#languageClientAwareAppender()}. + */ protected static LanguageClientAwareAppender INSTANCE; private static final Map loggingLevels = Map.of( - Level.DEBUG, MessageType.Log, + Level.TRACE, MessageType.Log, + Level.DEBUG, MessageType.Log, Level.ERROR, MessageType.Error, Level.INFO, MessageType.Info, Level.WARN, MessageType.Warning ); + /** + * Хранилище возможно подключенного LanguageClient. + */ @Nullable @Setter(onMethod_ = {@Autowired}) private LanguageClientHolder clientHolder; + /** + * Конструктор по умолчанию. + *

+ * Сохраняет сконструированный объект в переменную {@link LanguageClientAwareAppender#INSTANCE}. + */ public LanguageClientAwareAppender() { super(); // hacky hack INSTANCE = this; } + /** + * Общий метод вывода информации, проверяющий наличие подключенного LanguageClient. + * + * @param event Логируемое событие + * @throws IOException Выбрасывает исключение в случае ошибок записи в стандартные потоки вывода. + */ @Override protected void writeOut(ILoggingEvent event) throws IOException { if (clientHolder != null && clientHolder.isConnected()) { - LanguageClient languageClient = clientHolder.getClient().orElseThrow(); + var languageClient = clientHolder.getClient().orElseThrow(); var messageType = loggingLevels.getOrDefault(event.getLevel(), MessageType.Log); - String message = "[%s] [%s] [%s]: %s".formatted( + String message = "[%s - %s] [%s] [%s]: %s".formatted( event.getLevel(), + event.getInstant(), event.getThreadName(), event.getLoggerName(), event.getFormattedMessage() diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java similarity index 84% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java index 6b664953116..eee439b6cbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppenderConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java @@ -24,9 +24,15 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * Spring-конфигурация для настройки logback. + */ @Configuration -public class LanguageClientAwareAppenderConfiguration { +public class LogbackConfiguration { + /** + * @return Настроенный аппендер сообщений в LanguageClient. + */ @Bean public LanguageClientAwareAppender languageClientAwareAppender() { return LanguageClientAwareAppender.INSTANCE; diff --git a/src/main/resources/language-client-aware-appender.xml b/src/main/resources/language-client-aware-appender.xml index 199315fc5fd..4f8d680ab46 100644 --- a/src/main/resources/language-client-aware-appender.xml +++ b/src/main/resources/language-client-aware-appender.xml @@ -1,10 +1,4 @@ - - - From e577e4af03b2c29b47d919eeebac287f90a4a26f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 26 Jul 2023 21:58:08 +0200 Subject: [PATCH 292/595] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?todo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/computer/DiagnosticComputer.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index 6a91c3d43ab..d1f2aa7d549 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -47,14 +47,7 @@ public List compute(DocumentContext documentContext) { try { return diagnostic.getDiagnostics(documentContext).stream(); } catch (RuntimeException e) { - /* - TODO: - В случае если подключен ленг клиент, то логирование ошибки в консоль приводит к падению сервера - т.к данный лог идёт в выхлоп не по протоколу. - Требуется обернуть логгер в случае подключенного ленг клиента и слать прокольное событие - которое запишет ошибку в лог. - */ - String message = String.format( + var message = String.format( "Diagnostic computation error.%nFile: %s%nDiagnostic: %s", documentContext.getUri(), diagnostic.getInfo().getCode() From 7bc0f54d2e9969bb2db3a8fa972dfbc082a3412b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 28 Jul 2023 21:45:12 +0200 Subject: [PATCH 293/595] =?UTF-8?q?=D0=9E=D1=82=D0=B2=D1=8F=D0=B7=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=20CommandLineRunn?= =?UTF-8?q?er=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Чтобы исключить запуск сервера каждый раз при поднятии спринг-контекста. --- .../_1c_syntax/bsl/languageserver/BSLLSPLauncher.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index a2a9e028f2f..0f6cfb922d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.bsl.languageserver.cli.WebsocketCommand; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.RequiredArgsConstructor; -import org.springframework.boot.CommandLineRunner; import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; @@ -71,7 +70,7 @@ havingValue = "true", matchIfMissing = true) @RequiredArgsConstructor -public class BSLLSPLauncher implements Callable, CommandLineRunner, ExitCodeGenerator { +public class BSLLSPLauncher implements Callable, ExitCodeGenerator { private static final String DEFAULT_COMMAND = "lsp"; @@ -106,7 +105,10 @@ public static void main(String[] args) { var applicationContext = new SpringApplicationBuilder(BSLLSPLauncher.class) .web(getWebApplicationType(args)) .run(args); + var launcher = applicationContext.getBean(BSLLSPLauncher.class); + launcher.run(args); + if (launcher.getExitCode() >= 0) { System.exit( SpringApplication.exit(applicationContext) @@ -114,7 +116,6 @@ public static void main(String[] args) { } } - @Override public void run(String... args) { var cmd = new CommandLine(this, picocliFactory); From 4d658d91147587162887dde0bd0809fb7a692827 Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Fri, 28 Jul 2023 15:34:56 +0300 Subject: [PATCH 294/595] schema.json fix --- build.gradle.kts | 2 +- .../configuration/parameters-schema.json | 20 +++++++ .../languageserver/configuration/schema.json | 54 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4f4c980bf3d..8b2b6ae21c9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "3.1.2" id("io.spring.dependency-management") version "1.1.2" - id("io.github.1c-syntax.bslls-dev-tools") version "0.7.2" + id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" id("io.codearte.nexus-staging") version "0.30.0" diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 2652d6eed1e..498b96475db 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -420,6 +420,16 @@ "title": "Deleting an item when iterating through collection using the operator \"For each ... In ... Do\"", "$id": "#/definitions/DeletingCollectionItem" }, + "DenyIncompleteValues": { + "description": "Deny incomplete values for dimensions", + "default": false, + "type": [ + "boolean", + "object" + ], + "title": "Deny incomplete values for dimensions", + "$id": "#/definitions/DenyIncompleteValues" + }, "DeprecatedAttributes8312": { "description": "Deprecated 8.3.12 platform features.", "default": true, @@ -1784,6 +1794,16 @@ }, "$id": "#/definitions/TooManyReturns" }, + "TransferringParametersBetweenClientAndServer": { + "description": "Transferring parameters between the client and the server", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Transferring parameters between the client and the server", + "$id": "#/definitions/TransferringParametersBetweenClientAndServer" + }, "TryNumber": { "description": "Cast to number of try catch block", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 38c1d63a88b..3626e6d94e2 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -29,6 +29,9 @@ "AssignAliasFieldsInQuery": { "$ref": "parameters-schema.json#/definitions/AssignAliasFieldsInQuery" }, + "BadWords": { + "$ref": "parameters-schema.json#/definitions/BadWords" + }, "BeginTransactionBeforeTryCatch": { "$ref": "parameters-schema.json#/definitions/BeginTransactionBeforeTryCatch" }, @@ -116,6 +119,9 @@ "DeletingCollectionItem": { "$ref": "parameters-schema.json#/definitions/DeletingCollectionItem" }, + "DenyIncompleteValues": { + "$ref": "parameters-schema.json#/definitions/DenyIncompleteValues" + }, "DeprecatedAttributes8312": { "$ref": "parameters-schema.json#/definitions/DeprecatedAttributes8312" }, @@ -143,6 +149,12 @@ "DuplicateRegion": { "$ref": "parameters-schema.json#/definitions/DuplicateRegion" }, + "DuplicateStringLiteral": { + "$ref": "parameters-schema.json#/definitions/DuplicateStringLiteral" + }, + "DuplicatedInsertionIntoCollection": { + "$ref": "parameters-schema.json#/definitions/DuplicatedInsertionIntoCollection" + }, "EmptyCodeBlock": { "$ref": "parameters-schema.json#/definitions/EmptyCodeBlock" }, @@ -170,6 +182,9 @@ "FieldsFromJoinsWithoutIsNull": { "$ref": "parameters-schema.json#/definitions/FieldsFromJoinsWithoutIsNull" }, + "ForbiddenMetadataName": { + "$ref": "parameters-schema.json#/definitions/ForbiddenMetadataName" + }, "FormDataToValue": { "$ref": "parameters-schema.json#/definitions/FormDataToValue" }, @@ -251,9 +266,15 @@ "MethodSize": { "$ref": "parameters-schema.json#/definitions/MethodSize" }, + "MissedRequiredParameter": { + "$ref": "parameters-schema.json#/definitions/MissedRequiredParameter" + }, "MissingCodeTryCatchEx": { "$ref": "parameters-schema.json#/definitions/MissingCodeTryCatchEx" }, + "MissingCommonModuleMethod": { + "$ref": "parameters-schema.json#/definitions/MissingCommonModuleMethod" + }, "MissingEventSubscriptionHandler": { "$ref": "parameters-schema.json#/definitions/MissingEventSubscriptionHandler" }, @@ -335,12 +356,27 @@ "PublicMethodsDescription": { "$ref": "parameters-schema.json#/definitions/PublicMethodsDescription" }, + "QueryParseError": { + "$ref": "parameters-schema.json#/definitions/QueryParseError" + }, + "QueryToMissingMetadata": { + "$ref": "parameters-schema.json#/definitions/QueryToMissingMetadata" + }, "RedundantAccessToObject": { "$ref": "parameters-schema.json#/definitions/RedundantAccessToObject" }, "RefOveruse": { "$ref": "parameters-schema.json#/definitions/RefOveruse" }, + "RewriteMethodParameter": { + "$ref": "parameters-schema.json#/definitions/RewriteMethodParameter" + }, + "SameMetadataObjectAndChildNames": { + "$ref": "parameters-schema.json#/definitions/SameMetadataObjectAndChildNames" + }, + "ScheduledJobHandler": { + "$ref": "parameters-schema.json#/definitions/ScheduledJobHandler" + }, "SelectTopWithoutOrderBy": { "$ref": "parameters-schema.json#/definitions/SelectTopWithoutOrderBy" }, @@ -353,9 +389,15 @@ "SemicolonPresence": { "$ref": "parameters-schema.json#/definitions/SemicolonPresence" }, + "ServerSideExportFormMethod": { + "$ref": "parameters-schema.json#/definitions/ServerSideExportFormMethod" + }, "SetPermissionsForNewObjects": { "$ref": "parameters-schema.json#/definitions/SetPermissionsForNewObjects" }, + "SetPrivilegedMode": { + "$ref": "parameters-schema.json#/definitions/SetPrivilegedMode" + }, "SeveralCompilerDirectives": { "$ref": "parameters-schema.json#/definitions/SeveralCompilerDirectives" }, @@ -380,6 +422,9 @@ "TooManyReturns": { "$ref": "parameters-schema.json#/definitions/TooManyReturns" }, + "TransferringParametersBetweenClientAndServer": { + "$ref": "parameters-schema.json#/definitions/TransferringParametersBetweenClientAndServer" + }, "TryNumber": { "$ref": "parameters-schema.json#/definitions/TryNumber" }, @@ -416,6 +461,9 @@ "UseLessForEach": { "$ref": "parameters-schema.json#/definitions/UseLessForEach" }, + "UseSystemInformation": { + "$ref": "parameters-schema.json#/definitions/UseSystemInformation" + }, "UsingCancelParameter": { "$ref": "parameters-schema.json#/definitions/UsingCancelParameter" }, @@ -461,12 +509,18 @@ "WrongDataPathForFormElements": { "$ref": "parameters-schema.json#/definitions/WrongDataPathForFormElements" }, + "WrongHttpServiceHandler": { + "$ref": "parameters-schema.json#/definitions/WrongHttpServiceHandler" + }, "WrongUseFunctionProceedWithCall": { "$ref": "parameters-schema.json#/definitions/WrongUseFunctionProceedWithCall" }, "WrongUseOfRollbackTransactionMethod": { "$ref": "parameters-schema.json#/definitions/WrongUseOfRollbackTransactionMethod" }, + "WrongWebServiceHandler": { + "$ref": "parameters-schema.json#/definitions/WrongWebServiceHandler" + }, "YoLetterUsage": { "$ref": "parameters-schema.json#/definitions/YoLetterUsage" } From 00d2a4e797f590cda9e45bb831733c54962736f1 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 30 Jul 2023 09:31:32 +0200 Subject: [PATCH 295/595] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=84=D0=BE=D0=BB=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BB?= =?UTF-8?q?=D0=B8=D0=BC=D0=B8=D1=82=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BE=203g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/scripts/build-jpackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/build-jpackage.py b/.github/scripts/build-jpackage.py index 4c437e61bad..c1a63d8c04c 100644 --- a/.github/scripts/build-jpackage.py +++ b/.github/scripts/build-jpackage.py @@ -23,7 +23,7 @@ def build_image(base_dir, image_prefix, executable_file): cmd_args.append('--type') cmd_args.append('app-image') cmd_args.append('--java-options') - cmd_args.append('-Xmx2g') + cmd_args.append('-Xmx3g') cmd = ' '.join(cmd_args) os.system(cmd) From 98a77df83cbe641003bf82b323eb249cfae9d9e2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 30 Jul 2023 10:35:41 +0200 Subject: [PATCH 296/595] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8b2b6ae21c9..7ff85d46ccc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.21.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "bba7c0b091aca562ec082829a49f525a9bb5d7ef") { + api("com.github.1c-syntax", "bsl-parser", "0.22.1") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") From 2d9a4c7640c9376d3cc2e96a671fd54f92509501 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 09:49:38 +0000 Subject: [PATCH 297/595] build(deps): bump io.sentry:sentry-bom from 6.27.0 to 6.28.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.27.0 to 6.28.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.27.0...6.28.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7ff85d46ccc..1056cc9cbd8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.27.0") + mavenBom("io.sentry:sentry-bom:6.28.0") } } From 05d27dbce2e3fa340aacf6a51bb6fdf4810eb301 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:22:58 +0000 Subject: [PATCH 298/595] build(deps): bump io.freefair.javadoc-utf-8 from 8.1.0 to 8.3 Bumps [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) from 8.1.0 to 8.3. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.1.0...8.3) --- updated-dependencies: - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1056cc9cbd8..0a2cfb22e01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { id("org.sonarqube") version "4.3.0.3225" id("io.freefair.lombok") version "8.1.0" id("io.freefair.javadoc-links") version "8.1.0" - id("io.freefair.javadoc-utf-8") version "8.1.0" + id("io.freefair.javadoc-utf-8") version "8.3" id("io.freefair.aspectj.post-compile-weaving") version "8.1.0" id("io.freefair.maven-central.validate-poms") version "8.1.0" id("me.qoomon.git-versioning") version "6.4.2" From 96246867c9da827472d09a3e2b7430ef5f0e31d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:23:18 +0000 Subject: [PATCH 299/595] build(deps): bump io.freefair.maven-central.validate-poms Bumps [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) from 8.1.0 to 8.3. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.1.0...8.3) --- updated-dependencies: - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1056cc9cbd8..7b3000fcbab 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ plugins { id("io.freefair.javadoc-links") version "8.1.0" id("io.freefair.javadoc-utf-8") version "8.1.0" id("io.freefair.aspectj.post-compile-weaving") version "8.1.0" - id("io.freefair.maven-central.validate-poms") version "8.1.0" + id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "3.1.2" From fe04d8d2efafffd456a7d37e8aabf90ad761d088 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:23:39 +0000 Subject: [PATCH 300/595] build(deps): bump io.freefair.lombok from 8.1.0 to 8.3 Bumps [io.freefair.lombok](https://github.com/freefair/gradle-plugins) from 8.1.0 to 8.3. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.1.0...8.3) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1056cc9cbd8..e5c63829628 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.3.0.3225" - id("io.freefair.lombok") version "8.1.0" + id("io.freefair.lombok") version "8.3" id("io.freefair.javadoc-links") version "8.1.0" id("io.freefair.javadoc-utf-8") version "8.1.0" id("io.freefair.aspectj.post-compile-weaving") version "8.1.0" From d9b2b5e962febeabefdd4541384a9e305f5230dc Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 5 Sep 2023 00:20:38 +0200 Subject: [PATCH 301/595] Ignore dependabot branches --- .github/workflows/sentry.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sentry.yml b/.github/workflows/sentry.yml index c435c5b8af7..85c769c55e7 100644 --- a/.github/workflows/sentry.yml +++ b/.github/workflows/sentry.yml @@ -3,6 +3,7 @@ on: push: branches-ignore: - "translations_*" + - "dependabot/*" jobs: sentry: From b2ae9b2b8390aac25642e30800981b5e483c3477 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Sep 2023 09:12:28 +0000 Subject: [PATCH 302/595] build(deps): bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/benchmark.yml | 2 +- .github/workflows/check-package.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/gh-pages.yml | 2 +- .github/workflows/gradle.yml | 2 +- .github/workflows/javadoc.yml | 2 +- .github/workflows/publish-to-sonatype.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/qodana.yml | 2 +- .github/workflows/rebase.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/sentry.yml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index a151fc26bd9..e44c17bd34c 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -26,7 +26,7 @@ jobs: runs-on: self-hosted steps: - name: Checkout project - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup JDK uses: actions/setup-java@v3 diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index b7850fa9785..bcef581c07f 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -31,7 +31,7 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v3 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 4a201535b01..9e04ea88f80 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 50423a636b0..37ea796983b 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -17,7 +17,7 @@ jobs: build-deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup JDK uses: actions/setup-java@v3 diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d64c2a2cbd3..ede86476c5c 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -21,7 +21,7 @@ jobs: java_version: ['17', '20'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java_version }} uses: actions/setup-java@v3 with: diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index 6c28e6b491d..2362a39423c 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -17,7 +17,7 @@ jobs: needs: gatekeeper runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v3 with: diff --git a/.github/workflows/publish-to-sonatype.yml b/.github/workflows/publish-to-sonatype.yml index 8db838b6f4e..925bdc3a776 100644 --- a/.github/workflows/publish-to-sonatype.yml +++ b/.github/workflows/publish-to-sonatype.yml @@ -12,7 +12,7 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v3 with: diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index c6d82bb0b10..60c4d127520 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -34,7 +34,7 @@ jobs: full_name: ${{ github.event.repository.full_name }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: ${{ github.event.workflow_run.head_repository.full_name }} ref: ${{ github.event.workflow_run.head_branch }} diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index b66887e84a0..3e47172d93d 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -18,7 +18,7 @@ jobs: needs: gatekeeper runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2023.2.1 env: diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index 4e1a59c9938..c06a1bcdf2e 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the latest code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e6e4fd2816..e9a7dfaaa6e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up JDK uses: actions/setup-java@v3 diff --git a/.github/workflows/sentry.yml b/.github/workflows/sentry.yml index 85c769c55e7..0aa4dace8b7 100644 --- a/.github/workflows/sentry.yml +++ b/.github/workflows/sentry.yml @@ -10,7 +10,7 @@ jobs: name: Sentry runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Create Sentry release uses: getsentry/action-release@v1 env: From 56db898849b7759c76947e47b2c65ae9e55dd99c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 6 Sep 2023 08:19:03 +0200 Subject: [PATCH 303/595] Fix checkout on old vm --- .github/workflows/benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index e44c17bd34c..a151fc26bd9 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -26,7 +26,7 @@ jobs: runs-on: self-hosted steps: - name: Checkout project - uses: actions/checkout@v4 + uses: actions/checkout@v3 - name: Setup JDK uses: actions/setup-java@v3 From 7fdede352d09b777d594b784e17648c8aa2b6bf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Sep 2023 06:19:17 +0000 Subject: [PATCH 304/595] build(deps): bump JetBrains/qodana-action from 2023.2.1 to 2023.2.6 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.2.1 to 2023.2.6. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.2.1...v2023.2.6) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 3e47172d93d..d96030c6f03 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.2.1 + uses: JetBrains/qodana-action@v2023.2.6 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 5fcb717f48d76f590750145b0455e03ef88abc79 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 8 Sep 2023 20:24:23 +0200 Subject: [PATCH 305/595] Update dependabot.yml --- .github/dependabot.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7687c759aff..a99e9b2a5d1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,3 +13,8 @@ updates: directory: "/" schedule: interval: "daily" + groups: + freefair: + patterns: + - "io.freefair*" + From 2ab4178647c47a53d1ce22be4ed435224160f9bf Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 8 Sep 2023 20:29:19 +0200 Subject: [PATCH 306/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B8=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sentry.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sentry.yml b/.github/workflows/sentry.yml index 0aa4dace8b7..5ed0d5a5622 100644 --- a/.github/workflows/sentry.yml +++ b/.github/workflows/sentry.yml @@ -2,8 +2,8 @@ name: Sentry on: push: branches-ignore: - - "translations_*" - - "dependabot/*" + - "translations_**" + - "dependabot/**" jobs: sentry: From c9d7527137bee4c325198c918051b89c8caa03d1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 13 Sep 2023 15:23:48 +0000 Subject: [PATCH 307/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/FileSystemAccess.md | 20 +++++++++---------- .../FileSystemAccessDiagnostic.java | 2 +- .../FileSystemAccessDiagnostic_en.properties | 2 +- .../FileSystemAccessDiagnostic_ru.properties | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/diagnostics/FileSystemAccess.md b/docs/diagnostics/FileSystemAccess.md index 77eef23696f..ea11adf570b 100644 --- a/docs/diagnostics/FileSystemAccess.md +++ b/docs/diagnostics/FileSystemAccess.md @@ -11,20 +11,20 @@ ## Примеры ```bsl - Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.ANSI); // есть замечание - Текст = Новый ЗаписьТекста("d:\win.txt", КодировкаТекста.ANSI); // есть замечание + Текст = Новый ЧтениеТекста(ПутьФайла, КодировкаТекста.ANSI); // есть замечание + Текст = Новый ЗаписьТекста(ПутьФайла, КодировкаТекста.ANSI); // есть замечание - ЗначениеВФайл("C:\Temp\PersonalData.txt", ЛичныеДанные); // есть замечание - КопироватьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть замечание + ЗначениеВФайл(ПутьФайла, ЛичныеДанные); // есть замечание + КопироватьФайл(ПутьФайла, ДругойПутьФайла); // есть замечание МассивИмен = Новый Массив(); - МассивИмен.Добавить("C:\Windows\Temp\Presentation.ppt.1"); - ОбъединитьФайлы(МассивИмен, "C:\Windows\Temp\Presentation.ppt"); // есть замечание + МассивИмен.Добавить(ПутьФайла); + ОбъединитьФайлы(МассивИмен, ДругойПутьФайла); // есть замечание - ПереместитьФайл("C:\Temp\Order.htm", "C:\My Documents\Order.htm"); // есть замечание - РазделитьФайл("C:\Windows\Temp\Presentation.ppt", 1024 * 1024 ); // есть замечание - СоздатьКаталог("C:\Temp"); // есть замечание - УдалитьФайлы("C:\temp\Works"); // есть замечание + ПереместитьФайл(ПутьФайла, ДругойПутьФайла); // есть замечание + РазделитьФайл(ПутьФайла, 1024 * 1024 ); // есть замечание + СоздатьКаталог(ИмяКаталога); // есть замечание + УдалитьФайлы(ПутьФайла); // есть замечание ``` ## Источники diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index 2bc10ba1bd1..130631aa836 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -37,7 +37,7 @@ @DiagnosticMetadata( type = DiagnosticType.VULNERABILITY, - severity = DiagnosticSeverity.MINOR, + severity = DiagnosticSeverity.MAJOR, minutesToFix = 3, tags = { DiagnosticTag.SUSPICIOUS diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties index b1dba726614..ef44edd4783 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties @@ -1,4 +1,4 @@ diagnosticMessage=Check access to the file system diagnosticName=FileSystemAccess globalMethods=Global methods pattern (regex) -newExpression=Class names pattern (regex) \ No newline at end of file +newExpression=Class names pattern (regex) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties index 02846b96439..73648370051 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_ru.properties @@ -1,4 +1,4 @@ diagnosticMessage=Проверьте обращение к файловой системе diagnosticName=Доступ к файловой системе globalMethods=Шаблон глобальных методов (регулярное выражение) -newExpression=Шаблон классов (регулярное выражение) \ No newline at end of file +newExpression=Шаблон классов (регулярное выражение) From 5f180581510fa7a8afafa0ca94422e45beee6be7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 13 Sep 2023 15:34:11 +0000 Subject: [PATCH 308/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 2 +- ...xternalAppStartingDiagnostic_en.properties | 2 +- ...xternalAppStartingDiagnostic_ru.properties | 2 +- .../ExternalAppStartingDiagnosticTest.java | 48 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 40a33a1bbac..07798ae5738 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -51,7 +51,7 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); - private static final boolean CHECK_GOTO_URL = true; + private static final boolean CHECK_GOTO_URL = false; @DiagnosticParameter( type = Boolean.class, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index 52a59ce7431..117f5638521 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,4 +1,4 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting checkGotoUrl=Check navigation links -userPatternString=User regex pattern \ No newline at end of file +userPatternString=User regex pattern diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index f7465d6e8c8..45d566bc4d6 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,4 +1,4 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений checkGotoUrl=Проверять переход по навигационным ссылкам -userPatternString=Пользовательский шаблон (регулярное выражение) \ No newline at end of file +userPatternString=Пользовательский шаблон (регулярное выражение) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index b618b9bf771..3a22071fae2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -44,9 +44,7 @@ void test() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) - .hasRange(14, 4, 32) - .hasRange(15, 26, 52) - .hasRange(16, 26, 52) + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) @@ -60,38 +58,40 @@ void test() { .hasRange(54, 4, 20) .hasRange(55, 4, 20) .hasRange(56, 4, 20) - .hasSize(19); + .hasSize(16); } @Test void testConfigure_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("checkGotoUrl", false); + configuration.put("checkGotoUrl", true); diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); assertThat(diagnostics, true) - .hasRange(8, 4, 18) - .hasRange(9, 4, 23) - .hasRange(10, 4, 23) - .hasRange(12, 4, 26) - - .hasRange(18, 26, 44) - .hasRange(19, 26, 44) - .hasRange(20, 20, 38) - .hasRange(21, 20, 38) - .hasRange(23, 26, 42) - .hasRange(24, 26, 37) - .hasRange(25, 26, 37) - .hasRange(35, 10, 34) - - .hasRange(53, 4, 20) - .hasRange(54, 4, 20) - .hasRange(55, 4, 20) - .hasRange(56, 4, 20) - .hasSize(16); + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(19); } @Test From 719cae584f48983531a79a66481999c31da77cb6 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 13 Sep 2023 15:39:46 +0000 Subject: [PATCH 309/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/UnusedLocalMethodDiagnostic_en.properties | 2 +- .../diagnostics/UnusedLocalMethodDiagnostic_ru.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties index 20347033cdb..14fb4339fec 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_en.properties @@ -1,4 +1,4 @@ diagnosticMessage=Method "%s" is not called in the module diagnosticName=Unused local method attachableMethodPrefixes=Method prefixes (comma separated) -checkObjectModule=Check object modules \ No newline at end of file +checkObjectModule=Check object modules diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties index d564ad0c4c4..07da1efa33f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic_ru.properties @@ -1,4 +1,4 @@ diagnosticMessage=Метод "%s" не вызывается в теле модуля diagnosticName=Неиспользуемый локальный метод attachableMethodPrefixes=Префиксы подключаемых методов (через запятую) -checkObjectModule=Проверять модули объектов \ No newline at end of file +checkObjectModule=Проверять модули объектов From 49d04eb9b124f1e79a6cf8cd15c40b27277e2c82 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 13 Sep 2023 15:55:46 +0000 Subject: [PATCH 310/595] =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20+=20=D1=83=D0=B2=D0=B5=D0=BB=D0=B8=D1=87=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D1=82=D0=B5=D1=85.=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DisableSafeMode.md | 10 +++++----- .../diagnostics/DisableSafeModeDiagnostic.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/diagnostics/DisableSafeMode.md b/docs/diagnostics/DisableSafeMode.md index 47e865e1d35..31a74a35a8e 100644 --- a/docs/diagnostics/DisableSafeMode.md +++ b/docs/diagnostics/DisableSafeMode.md @@ -3,13 +3,13 @@ ## Описание диагностики -Текущее правило находит код отключения безопасного режима. -Для внешнего кода, например, кода из внешних отчетов\обработок, расширений это действие может быть небезопасным. -Также важно проверять код от сторонних разработчиков, подрядчиков и т.п. +Помимо программного кода конфигурации, в прикладном решении может исполняться сторонний программный код, который может быть подключен с помощью внешних отчетов, внешних обработок, расширений конфигурации, внешних компонент или другими способами, например, с помощью стороннего (по отношению к конфигурации) программного кода, надежность которого разработчик гарантировать не может (далее – внешний код). При этом злоумышленник может предусмотреть в нем различные деструктивные действия (как в самом внешнем коде, так и опосредовано, через запуск внешних приложений, внешних компонент, COM-объектов), которые могут нанести вред компьютерам пользователей, серверным компьютерам, а также данным в программе. -По найденным замечаниям необходимо выполнить ручной аудит кода на предмет его правильности и безопасности. +Перечисленные проблемы безопасности особенно критичны при работе конфигураций в модели сервиса. Например, получив доступ к сервису, вредоносный код может получить доступ сразу ко всем приложениям всех пользователей сервиса. -Правило находит вызовы методов ` УстановитьБезопасныйРежим` и `УстановитьОтключениеБезопасногоРежима` +Поэтому важно контролировать выполнение подобного внешнего кода в безопасном режиме, в исключительных случаях точечно разрешая выполнять код в небезопасном режиме после верификации кода. + +Правило диагностирует вызовы методов ` УстановитьБезопасныйРежим` и `УстановитьОтключениеБезопасногоРежима` в режиме отключения контроля безопасного режима - вызов `УстановитьБезопасныйРежим (Истина)` игнорируется - вызов `УстановитьОтключениеБезопасногоРежима(Ложь)` игнорируется diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java index ec39d81db9c..7e2f529aee2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java @@ -35,7 +35,7 @@ @DiagnosticMetadata( type = DiagnosticType.VULNERABILITY, severity = DiagnosticSeverity.MAJOR, - minutesToFix = 1, + minutesToFix = 15, tags = { DiagnosticTag.SUSPICIOUS }, From d2a14d4a8ae667b9f942c9a1401d95d8a6dfc9a5 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 22 Sep 2023 21:54:47 +0200 Subject: [PATCH 311/595] Update qodana.yml --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index d96030c6f03..d59a03f9d66 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -10,7 +10,7 @@ on: jobs: gatekeeper: runs-on: ubuntu-latest - if: github.event_name == 'pull_request' && startsWith(github.head_ref, 'translations_') == false || github.event_name == 'push' + if: github.event_name == 'pull_request' && startsWith(github.head_ref, 'translations_') == false || github.event_name == 'push' || github.event_name == 'workflow_dispatch' steps: - run: echo 'Open the Golden Gate' From 5c1b48515b800c0c0dd1064408d85d8b6286ab5b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 22 Sep 2023 21:56:38 +0200 Subject: [PATCH 312/595] Update qodana.yaml --- qodana.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/qodana.yaml b/qodana.yaml index 52d8b52a379..69ef158b519 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,5 +1,4 @@ version: "1.0" -linter: jetbrains/qodana-jvm-community:2023.1 projectJDK: 17 profile: name: qodana.starter From f2991925dc65352595418461356741e6df0c0ca4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:52:58 +0000 Subject: [PATCH 313/595] build(deps): bump io.spring.dependency-management from 1.1.2 to 1.1.3 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.2 to 1.1.3. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.2...v1.1.3) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3a8340c38ce..b2c3c47b649 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" id("org.springframework.boot") version "3.1.2" - id("io.spring.dependency-management") version "1.1.2" + id("io.spring.dependency-management") version "1.1.3" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" From 90bbcede7bd9c84abcf51de78b086f30b290ce03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:53:13 +0000 Subject: [PATCH 314/595] build(deps): bump io.sentry:sentry-bom from 6.28.0 to 6.30.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.28.0 to 6.30.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.28.0...6.30.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3a8340c38ce..41adb03d248 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.28.0") + mavenBom("io.sentry:sentry-bom:6.30.0") } } From c256b3a2a9345c380025a381735560c95d116745 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 18:19:00 +0000 Subject: [PATCH 315/595] build(deps): bump org.springframework.boot from 3.1.2 to 3.1.4 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.1.2 to 3.1.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.2...v3.1.4) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 821a1526908..626b85c069f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" - id("org.springframework.boot") version "3.1.2" + id("org.springframework.boot") version "3.1.4" id("io.spring.dependency-management") version "1.1.3" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" From 795fa395d0432f8fceb547cbd3e39c6ebe120fbd Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Thu, 5 Oct 2023 11:51:34 +0300 Subject: [PATCH 316/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 626b85c069f..1918cdee8ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,9 +10,9 @@ plugins { id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.3.0.3225" id("io.freefair.lombok") version "8.3" - id("io.freefair.javadoc-links") version "8.1.0" + id("io.freefair.javadoc-links") version "8.3" id("io.freefair.javadoc-utf-8") version "8.3" - id("io.freefair.aspectj.post-compile-weaving") version "8.1.0" + id("io.freefair.aspectj.post-compile-weaving") version "8.3" id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.47.0" @@ -83,9 +83,9 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("com.github.1c-syntax", "mdclasses", "0.10.3") + api("com.github.1c-syntax", "mdclasses", "0.10.4") api("io.github.1c-syntax", "bsl-common-library", "0.3.0") - api("io.github.1c-syntax", "supportconf", "0.1.1") + api("io.github.1c-syntax", "supportconf", "0.12.1") // JLanguageTool implementation("org.languagetool", "languagetool-core", languageToolVersion){ From b39b449ec325ee9e0c7656175336d87100f3a30f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:44:13 +0000 Subject: [PATCH 317/595] build(deps): bump info.picocli:picocli-spring-boot-starter Bumps [info.picocli:picocli-spring-boot-starter](https://github.com/remkop/picocli) from 4.7.4 to 4.7.5. - [Release notes](https://github.com/remkop/picocli/releases) - [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md) - [Commits](https://github.com/remkop/picocli/compare/v4.7.4...v4.7.5) --- updated-dependencies: - dependency-name: info.picocli:picocli-spring-boot-starter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1918cdee8ed..335d949ce1d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,7 +67,7 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") - api("info.picocli:picocli-spring-boot-starter:4.7.4") + api("info.picocli:picocli-spring-boot-starter:4.7.5") // lsp4j core api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.21.0") From be200027c318aef9c529e2677aac42b416ccbbf3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:44:15 +0000 Subject: [PATCH 318/595] build(deps): bump com.github.ben-manes.versions from 0.47.0 to 0.48.0 Bumps com.github.ben-manes.versions from 0.47.0 to 0.48.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1918cdee8ed..a02f4410fdc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { id("io.freefair.aspectj.post-compile-weaving") version "8.3" id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" - id("com.github.ben-manes.versions") version "0.47.0" + id("com.github.ben-manes.versions") version "0.48.0" id("org.springframework.boot") version "3.1.4" id("io.spring.dependency-management") version "1.1.3" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" From df90247135ae8a9cff6c71ebdc31efdf880ce895 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:44:23 +0000 Subject: [PATCH 319/595] build(deps): bump org.sonarqube from 4.3.0.3225 to 4.4.1.3373 Bumps org.sonarqube from 4.3.0.3225 to 4.4.1.3373. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1918cdee8ed..6fc9df261ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "4.3.0.3225" + id("org.sonarqube") version "4.4.1.3373" id("io.freefair.lombok") version "8.3" id("io.freefair.javadoc-links") version "8.3" id("io.freefair.javadoc-utf-8") version "8.3" From 67ced1b89840a9be499129d6cb95e89f0cddfb35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:40:31 +0000 Subject: [PATCH 320/595] build(deps): bump com.github.ben-manes.versions from 0.48.0 to 0.49.0 Bumps com.github.ben-manes.versions from 0.48.0 to 0.49.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6b09e36a66a..f13d393ee90 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { id("io.freefair.aspectj.post-compile-weaving") version "8.3" id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" - id("com.github.ben-manes.versions") version "0.48.0" + id("com.github.ben-manes.versions") version "0.49.0" id("org.springframework.boot") version "3.1.4" id("io.spring.dependency-management") version "1.1.3" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" From 6e66a5759da9f8c10a187ff10f72a0561bcdcdf7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:40:39 +0000 Subject: [PATCH 321/595] build(deps): bump io.freefair.javadoc-utf-8 from 8.3 to 8.4 Bumps [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) from 8.3 to 8.4. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.3...8.4) --- updated-dependencies: - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6b09e36a66a..3fdf4e72097 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { id("org.sonarqube") version "4.4.1.3373" id("io.freefair.lombok") version "8.3" id("io.freefair.javadoc-links") version "8.3" - id("io.freefair.javadoc-utf-8") version "8.3" + id("io.freefair.javadoc-utf-8") version "8.4" id("io.freefair.aspectj.post-compile-weaving") version "8.3" id("io.freefair.maven-central.validate-poms") version "8.3" id("me.qoomon.git-versioning") version "6.4.2" From 226099654958e58c8865bc37828b3945cc2afc52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:45:20 +0000 Subject: [PATCH 322/595] build(deps): bump JetBrains/qodana-action from 2023.2.6 to 2023.2.7 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.2.6 to 2023.2.7. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.2.6...v2023.2.7) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index d59a03f9d66..739769e4f8a 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.2.6 + uses: JetBrains/qodana-action@v2023.2.7 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 37a7702c5a5c6274e8fb91c1c356bc2ec65ae91b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 9 Oct 2023 14:07:28 +0200 Subject: [PATCH 323/595] Update dependabot.yml --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a99e9b2a5d1..947714263eb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,5 +16,5 @@ updates: groups: freefair: patterns: - - "io.freefair*" + - "io.freefair.*" From c4f69defcdcdb90bae538720bfc1e8f3411b6daf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:44:41 +0000 Subject: [PATCH 324/595] build(deps): bump io.freefair.maven-central.validate-poms Bumps [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) from 8.3 to 8.4. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.3...8.4) --- updated-dependencies: - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f13d393ee90..bf4e27fd3e4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ plugins { id("io.freefair.javadoc-links") version "8.3" id("io.freefair.javadoc-utf-8") version "8.3" id("io.freefair.aspectj.post-compile-weaving") version "8.3" - id("io.freefair.maven-central.validate-poms") version "8.3" + id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.49.0" id("org.springframework.boot") version "3.1.4" From 380ba841b63e42780181ce2fbe83f2a42bf50dad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 18:12:57 +0000 Subject: [PATCH 325/595] build(deps): bump io.freefair.lombok from 8.3 to 8.4 Bumps [io.freefair.lombok](https://github.com/freefair/gradle-plugins) from 8.3 to 8.4. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.3...8.4) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f13d393ee90..022d061f0ca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.4.1.3373" - id("io.freefair.lombok") version "8.3" + id("io.freefair.lombok") version "8.4" id("io.freefair.javadoc-links") version "8.3" id("io.freefair.javadoc-utf-8") version "8.3" id("io.freefair.aspectj.post-compile-weaving") version "8.3" From 49c95375b8ecb091242284e7416f053b1376b30c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 06:09:27 +0000 Subject: [PATCH 326/595] build(deps): bump io.freefair.javadoc-links from 8.3 to 8.4 Bumps [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) from 8.3 to 8.4. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.3...8.4) --- updated-dependencies: - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d04822fd95c..c23b62bb148 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.4.1.3373" id("io.freefair.lombok") version "8.4" - id("io.freefair.javadoc-links") version "8.3" + id("io.freefair.javadoc-links") version "8.4" id("io.freefair.javadoc-utf-8") version "8.4" id("io.freefair.aspectj.post-compile-weaving") version "8.3" id("io.freefair.maven-central.validate-poms") version "8.4" From b400f381dc32c6a6f4d34ffb2151aa39cffb252c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:16:49 +0000 Subject: [PATCH 327/595] build(deps): bump io.freefair.aspectj.post-compile-weaving Bumps [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) from 8.3 to 8.4. - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.3...8.4) --- updated-dependencies: - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c23b62bb148..0c0909e1456 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { id("io.freefair.lombok") version "8.4" id("io.freefair.javadoc-links") version "8.4" id("io.freefair.javadoc-utf-8") version "8.4" - id("io.freefair.aspectj.post-compile-weaving") version "8.3" + id("io.freefair.aspectj.post-compile-weaving") version "8.4" id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.49.0" From ca62d89ad28ef26faaa7a4c9d9110c8e47da755a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:36:22 +0000 Subject: [PATCH 328/595] build(deps): bump JetBrains/qodana-action from 2023.2.7 to 2023.2.8 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.2.7 to 2023.2.8. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.2.7...v2023.2.8) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 739769e4f8a..1522b6f4e02 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.2.7 + uses: JetBrains/qodana-action@v2023.2.8 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 20a2e87fa6d52fc859e3370bbba72c166d437244 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 09:09:04 +0000 Subject: [PATCH 329/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.7.3 to 4.8.0. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.7.3...4.8.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0c0909e1456..14f0e0d1e5f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -131,7 +131,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.7.3") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.0") // TEST From 3c4bb9f48ffb430b39420c449db5e57240dde6ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Oct 2023 09:10:09 +0000 Subject: [PATCH 330/595] build(deps): bump io.sentry:sentry-bom from 6.30.0 to 6.31.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.30.0 to 6.31.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.30.0...6.31.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 14f0e0d1e5f..2e44e2eed62 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.30.0") + mavenBom("io.sentry:sentry-bom:6.31.0") } } From be17b0322b27e5514bf952da5d06eac520900bd5 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 14 Oct 2023 12:30:19 +0300 Subject: [PATCH 331/595] =?UTF-8?q?=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/FileSystemAccessDiagnostic.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index 130631aa836..8dca05a200f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -42,7 +42,8 @@ tags = { DiagnosticTag.SUSPICIOUS }, - scope = DiagnosticScope.BSL + scope = DiagnosticScope.BSL, + activatedByDefault = false ) public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { public static final String NEW_EXPRESSION = "File|Файл|xBase|HTMLWriter|ЗаписьHTML|HTMLReader|ЧтениеHTML" + @@ -76,7 +77,7 @@ public class FileSystemAccessDiagnostic extends AbstractFindMethodDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + GLOBAL_METHODS + defaultValue = GLOBAL_METHODS ) private String globalMethods = GLOBAL_METHODS; From 05abc31febb11d7a087124d537525ddd377a99f6 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 15 Oct 2023 19:21:24 +0300 Subject: [PATCH 332/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/diagnostics/InternetAccessDiagnostic.java | 4 ++-- .../diagnostics/InternetAccessDiagnostic_ru.properties | 2 +- src/test/resources/diagnostics/InternetAccessDiagnostic.bsl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java index ed34637e69e..5f61d1fb290 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java @@ -34,8 +34,8 @@ @DiagnosticMetadata( type = DiagnosticType.VULNERABILITY, - severity = DiagnosticSeverity.MINOR, - minutesToFix = 1, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 60, tags = { DiagnosticTag.SUSPICIOUS }, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties index e867153bc6a..4cf26b98770 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic_ru.properties @@ -1,2 +1,2 @@ diagnosticMessage=Проверьте обращение к Интернет-ресурсам -diagnosticName=Обращение к Интернет-ресурсам \ No newline at end of file +diagnosticName=Обращение к Интернет-ресурсам diff --git a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl index af23599447d..daa61b1756e 100644 --- a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl +++ b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl @@ -36,8 +36,8 @@ Профиль = Новый InternetMail; // ошибка КонецФункции -Функция InternetMail_НовыйТип() +Функция InternetMail_НовыйИмя() Профиль = Новый("InternetMail"); // ошибка КонецФункции -Профиль = Новый Почта; // ошибка \ No newline at end of file +Профиль = Новый Почта; // ошибка From ff1230a07e415d6bdc1ca6fe0694eacd706a3d83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Oct 2023 09:26:02 +0000 Subject: [PATCH 333/595] build(deps): bump io.sentry:sentry-bom from 6.31.0 to 6.32.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.31.0 to 6.32.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.31.0...6.32.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2e44e2eed62..d1ccf341581 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.31.0") + mavenBom("io.sentry:sentry-bom:6.32.0") } } From 3b604ee251a05b0577e6ea1f946dff94e5c8fc91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Oct 2023 09:42:28 +0000 Subject: [PATCH 334/595] build(deps): bump org.springframework.boot from 3.1.4 to 3.1.5 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.4...v3.1.5) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2e44e2eed62..a0989b52151 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.49.0" - id("org.springframework.boot") version "3.1.4" + id("org.springframework.boot") version "3.1.5" id("io.spring.dependency-management") version "1.1.3" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" From 73745fb3828de332feb8d0a670e35182b39f1a2c Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 Oct 2023 13:19:19 +0300 Subject: [PATCH 335/595] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=9E=D0=B1=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BA=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D0=BC=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B2=D0=B8=D0=BB=D0=B5=D0=B3=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit добавлена отдельная мини-конфигурация для тестов closes #1870 --- .../diagnostics/PrivilegedModuleMethodCall.md | 26 +++ .../diagnostics/PrivilegedModuleMethodCall.md | 16 ++ .../PrivilegedModuleMethodCallDiagnostic.java | 96 ++++++++ ...edModuleMethodCallDiagnostic_en.properties | 2 + ...edModuleMethodCallDiagnostic_ru.properties | 2 + ...vilegedModuleMethodCallDiagnosticTest.java | 56 +++++ .../PrivilegedModuleMethodCallDiagnostic.bsl | 17 ++ ...\276\320\264\321\203\320\273\321\2142.xml" | 18 ++ .../Ext/Module.bsl" | 90 ++++++++ ...\276\320\264\321\203\320\273\321\2143.xml" | 18 ++ .../Ext/Module.bsl" | 90 ++++++++ ...\276\320\264\321\203\320\273\321\2141.xml" | 18 ++ .../Ext/Module.bsl" | 23 ++ .../privilegedModules/Configuration.xml | 209 ++++++++++++++++++ ...1\201\321\201\320\272\320\270\320\271.xml" | 16 ++ 15 files changed, 697 insertions(+) create mode 100644 docs/diagnostics/PrivilegedModuleMethodCall.md create mode 100644 docs/en/diagnostics/PrivilegedModuleMethodCall.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/PrivilegedModuleMethodCallDiagnostic.bsl create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142.xml" create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142/Ext/Module.bsl" create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143.xml" create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143/Ext/Module.bsl" create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141.xml" create mode 100644 "src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" create mode 100644 src/test/resources/metadata/privilegedModules/Configuration.xml create mode 100644 "src/test/resources/metadata/privilegedModules/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" diff --git a/docs/diagnostics/PrivilegedModuleMethodCall.md b/docs/diagnostics/PrivilegedModuleMethodCall.md new file mode 100644 index 00000000000..860a0b95ada --- /dev/null +++ b/docs/diagnostics/PrivilegedModuleMethodCall.md @@ -0,0 +1,26 @@ +# (PrivilegedModuleMethodCall) + + +## Описание диагностики + +При обращении к публичным процедурам и функциям привилегированных общих модулей могут нарушаться ограничения конфигурации по правам и ролям конфигурации, решения 1С. +Необходимо провалидировать подобные обращения для исключения обхода ограничений. + +## Примеры + +Например, в конфигурации существует привилегированный модуль выполнения заданий с именем `Задания`. +В этом модуле есть публичная функция `Функция ДобавитьЗадание(Знач ИмяМетода, Знач Параметры) Экспорт`. +Какой-то код конфигурации или расширения обращается к этому методу `Задания.ДобавитьЗадание("МетодДляВыполнения", Параметры);` + +Необходимо проанализировать код и убедиться в том, что: +- указан правильный метод для выполнения задания - `МетодДляВыполнения` +- метод `МетодДляВыполнения` для выполнения задания не выполняет деструктивных действий +- и не выдает пользователям данные, запрещенные ограничениями конфигурации + +## Источники + + diff --git a/docs/en/diagnostics/PrivilegedModuleMethodCall.md b/docs/en/diagnostics/PrivilegedModuleMethodCall.md new file mode 100644 index 00000000000..469c9d80d59 --- /dev/null +++ b/docs/en/diagnostics/PrivilegedModuleMethodCall.md @@ -0,0 +1,16 @@ +# (PrivilegedModuleMethodCall) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java new file mode 100644 index 00000000000..bbc18df210e --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -0,0 +1,96 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.ModuleSymbol; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.types.ModuleType; +import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@DiagnosticMetadata( + type = DiagnosticType.VULNERABILITY, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 60, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL +) +@RequiredArgsConstructor +public class PrivilegedModuleMethodCallDiagnostic extends AbstractDiagnostic { + private final ReferenceIndex referenceIndex; + private List privilegedModuleSymbols = new ArrayList<>(); + + private static boolean isReferenceToModules(Reference reference, List privilegedModuleSymbols) { + return reference.getSourceDefinedSymbol() + .flatMap(sourceDefinedSymbol -> sourceDefinedSymbol.getRootParent(SymbolKind.Module)) + .filter(ModuleSymbol.class::isInstance) + .map(ModuleSymbol.class::cast) + .filter(privilegedModuleSymbols::contains) + .isPresent(); + } + + @Override + protected void check() { + if (privilegedModuleSymbols.isEmpty()){ + privilegedModuleSymbols = getPrivilegedModuleSymbols(); + } + if (privilegedModuleSymbols.isEmpty()){ + return; + } + + referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream() + .filter(reference -> isReferenceToModules(reference, privilegedModuleSymbols)) + .forEach(this::fireIssue); + } + + private List getPrivilegedModuleSymbols() { + return documentContext.getServerContext().getConfiguration().getCommonModules() + .values().stream() + .filter(MDCommonModule::isPrivileged) + .flatMap(mdCommonModule -> getPrivilegedModuleSymbol(mdCommonModule).stream()) + .toList(); + } + + private Optional getPrivilegedModuleSymbol(MDCommonModule mdCommonModule) { + return documentContext.getServerContext().getDocument( + mdCommonModule.getMdoReference().getMdoRef(), ModuleType.CommonModule) + .map(documentContext1 -> documentContext1.getSymbolTree().getModule()); + } + + private void fireIssue(Reference reference) { + diagnosticStorage.addDiagnostic(reference.getSelectionRange(), + info.getMessage(reference.getSymbol().getName())); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties new file mode 100644 index 00000000000..60269b66c95 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the %s method access of the privileged module +diagnosticName=Accessing privileged module methods \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties new file mode 100644 index 00000000000..92318fdcdf9 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте обращение к методу %s привилегированного модуля +diagnosticName=Обращение к методам привилегированных модулей diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java new file mode 100644 index 00000000000..d639627a96a --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java @@ -0,0 +1,56 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class PrivilegedModuleMethodCallDiagnosticTest extends AbstractDiagnosticTest { + private static final String PATH_TO_METADATA = "src/test/resources/metadata/privilegedModules"; + + PrivilegedModuleMethodCallDiagnosticTest() { + super(PrivilegedModuleMethodCallDiagnostic.class); + } + + @Test + void test() { + initServerContext(PATH_TO_METADATA); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).hasSize(2); + assertThat(diagnostics, true) + .hasMessageOnRange("Проверьте обращение к методу ПубличнаяФункция привилегированного модуля", 3, 40, 56) + .hasMessageOnRange("Проверьте обращение к методу ПубличнаяПроцедура привилегированного модуля", 4, 29, 47); + } + + @Test + void testWithoutMetadata() { + + List diagnostics = getDiagnostics(); + assertThat(diagnostics).isEmpty(); + } +} diff --git a/src/test/resources/diagnostics/PrivilegedModuleMethodCallDiagnostic.bsl b/src/test/resources/diagnostics/PrivilegedModuleMethodCallDiagnostic.bsl new file mode 100644 index 00000000000..7058aac790b --- /dev/null +++ b/src/test/resources/diagnostics/PrivilegedModuleMethodCallDiagnostic.bsl @@ -0,0 +1,17 @@ +#Область ПрограммныйИнтерфейс + +Функция Тест1() + Значение = ПривилегированныйМодуль1.ПубличнаяФункция(); // ошибка + ПривилегированныйМодуль1.ПубличнаяПроцедура(); // ошибка +КонецФункции + +Процедура Тест2() + Значение = ПривилегированныйМодуль1.ПриватнаяФункция(); // не ошибка в данном правиле + ПривилегированныйМодуль1.ПриватнаяПроцедура(); // не ошибка в данном правиле +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142.xml" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142.xml" new file mode 100644 index 00000000000..fab8cc555db --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142.xml" @@ -0,0 +1,18 @@ + + + + + ОбщийМодуль2 + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142/Ext/Module.bsl" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142/Ext/Module.bsl" new file mode 100644 index 00000000000..291d5ad6c4b --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2142/Ext/Module.bsl" @@ -0,0 +1,90 @@ + +/////Описание +///// +///// + +#Область ОписаниеПеременных + + + + +#КонецОбласти + +#Область ПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// Код процедур и функций +#КонецОбласти + + +#Region EventHandlers +// Enter code here. +#EndRegion + +#Region Internal +// Enter code here. +#EndRegion + +#Область ОбработчикиСобытийФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыИмяТаблицыФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиКомандФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытий +// Код процедур и функций +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +Функция Тест() + РегистрыСведений.РегистрСведений1.УстаревшаяПроцедура(); +КонецФункции + +#КонецОбласти + +Процедура НеУстаревшаяПроцедура() Экспорт + +КонецПроцедуры + +// Устарела. См. НеУстаревшаяПроцедура. +// Процедура - Устаревшая процедура +Процедура УстаревшаяПроцедура() Экспорт + +КонецПроцедуры + +Функция НеУстаревшаяФункция() Экспорт + +КонецФункции + +// Устарела. См. НеУстаревшаяФункция. +// Функция - Устаревшая функция +Функция УстаревшаяФункция() Экспорт + + ПервыйОбщийМодуль.НеУстаревшаяФункция(); + НеУстаревшаяФункция(); + +КонецФункции + +Процедура ВерсионированиеПриЗаписи(Источник, Отказ) Экспорт + +КонецПроцедуры + +Процедура РегистрацияИзмененийПередУдалением(Источник, Отказ) + +КонецПроцедуры diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143.xml" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143.xml" new file mode 100644 index 00000000000..c3d3f9e69b1 --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143.xml" @@ -0,0 +1,18 @@ + + + + + ОбщийМодуль3 + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143/Ext/Module.bsl" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143/Ext/Module.bsl" new file mode 100644 index 00000000000..291d5ad6c4b --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\236\320\261\321\211\320\270\320\271\320\234\320\276\320\264\321\203\320\273\321\2143/Ext/Module.bsl" @@ -0,0 +1,90 @@ + +/////Описание +///// +///// + +#Область ОписаниеПеременных + + + + +#КонецОбласти + +#Область ПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс +// Код процедур и функций +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// Код процедур и функций +#КонецОбласти + + +#Region EventHandlers +// Enter code here. +#EndRegion + +#Region Internal +// Enter code here. +#EndRegion + +#Область ОбработчикиСобытийФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыИмяТаблицыФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиКомандФормы +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытий +// Код процедур и функций +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +Функция Тест() + РегистрыСведений.РегистрСведений1.УстаревшаяПроцедура(); +КонецФункции + +#КонецОбласти + +Процедура НеУстаревшаяПроцедура() Экспорт + +КонецПроцедуры + +// Устарела. См. НеУстаревшаяПроцедура. +// Процедура - Устаревшая процедура +Процедура УстаревшаяПроцедура() Экспорт + +КонецПроцедуры + +Функция НеУстаревшаяФункция() Экспорт + +КонецФункции + +// Устарела. См. НеУстаревшаяФункция. +// Функция - Устаревшая функция +Функция УстаревшаяФункция() Экспорт + + ПервыйОбщийМодуль.НеУстаревшаяФункция(); + НеУстаревшаяФункция(); + +КонецФункции + +Процедура ВерсионированиеПриЗаписи(Источник, Отказ) Экспорт + +КонецПроцедуры + +Процедура РегистрацияИзмененийПередУдалением(Источник, Отказ) + +КонецПроцедуры diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141.xml" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141.xml" new file mode 100644 index 00000000000..24a9c1248c1 --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141.xml" @@ -0,0 +1,18 @@ + + + + + ПривилегированныйМодуль1 + + + false + false + true + false + false + false + true + DontUse + + + \ No newline at end of file diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" new file mode 100644 index 00000000000..626fd1e6394 --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" @@ -0,0 +1,23 @@ +#Область ПрограммныйИнтерфейс + +Функция ПубличнаяФункция() Экспорт + +КонецФункции + +Процедура ПубличнаяПроцедура() Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПриватнаяФункция() + +КонецФункции + +Процедура ПриватнаяПроцедура() + +КонецПроцедуры + +#КонецОбласти diff --git a/src/test/resources/metadata/privilegedModules/Configuration.xml b/src/test/resources/metadata/privilegedModules/Configuration.xml new file mode 100644 index 00000000000..35e55b12302 --- /dev/null +++ b/src/test/resources/metadata/privilegedModules/Configuration.xml @@ -0,0 +1,209 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + f47a8858-7778-47e9-9a9f-4eb4daedec56 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 38996962-4abe-4c75-b3fe-8d2fa95cf83c + + + e3687481-0a87-462c-a166-9f34594f9bba + 5af4c67d-90e8-46b7-bff3-009df1043aee + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + c519e804-03e1-428c-b447-9d7682802dcf + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 842dca23-a50c-4a90-99dc-d0b8fa46d6bd + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 1ef3f7d7-1891-4c7e-80b2-497689df7a80 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + d625341b-aef8-4049-888c-681733b130fb + + + + privilegedModules + + + + Version8_3_18 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + Taxi + Version8_3_18 + + + + Русский + ПривилегированныйМодуль1 + ОбщийМодуль2 + ОбщийМодуль3 + + + \ No newline at end of file diff --git "a/src/test/resources/metadata/privilegedModules/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" "b/src/test/resources/metadata/privilegedModules/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" new file mode 100644 index 00000000000..a46e619fe47 --- /dev/null +++ "b/src/test/resources/metadata/privilegedModules/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file From 69eac62a1a569100d9e92f55518668dec498a095 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 24 Oct 2023 13:23:24 +0300 Subject: [PATCH 336/595] precommit --- docs/diagnostics/PrivilegedModuleMethodCall.md | 2 +- docs/en/diagnostics/PrivilegedModuleMethodCall.md | 2 +- .../configuration/parameters-schema.json | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/diagnostics/PrivilegedModuleMethodCall.md b/docs/diagnostics/PrivilegedModuleMethodCall.md index 860a0b95ada..5fe2ea880ef 100644 --- a/docs/diagnostics/PrivilegedModuleMethodCall.md +++ b/docs/diagnostics/PrivilegedModuleMethodCall.md @@ -1,4 +1,4 @@ -# (PrivilegedModuleMethodCall) +# Обращение к методам привилегированных модулей (PrivilegedModuleMethodCall) ## Описание диагностики diff --git a/docs/en/diagnostics/PrivilegedModuleMethodCall.md b/docs/en/diagnostics/PrivilegedModuleMethodCall.md index 469c9d80d59..5db0a1be36f 100644 --- a/docs/en/diagnostics/PrivilegedModuleMethodCall.md +++ b/docs/en/diagnostics/PrivilegedModuleMethodCall.md @@ -1,4 +1,4 @@ -# (PrivilegedModuleMethodCall) +# Accessing privileged module methods (PrivilegedModuleMethodCall) ## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..cb8891995eb 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1470,6 +1470,16 @@ "title": "Source code parse error", "$id": "#/definitions/ParseError" }, + "PrivilegedModuleMethodCall": { + "description": "Accessing privileged module methods", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Accessing privileged module methods", + "$id": "#/definitions/PrivilegedModuleMethodCall" + }, "ProcedureReturnsValue": { "description": "Procedure should not return Value", "default": true, From 4187c9e855c2f032287b5c5d4ed10579f9fefbb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:38:39 +0000 Subject: [PATCH 337/595] build(deps): bump me.champeau.jmh from 0.7.1 to 0.7.2 Bumps me.champeau.jmh from 0.7.1 to 0.7.2. --- updated-dependencies: - dependency-name: me.champeau.jmh dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 73ce8dee33c..ddba6f820cf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ plugins { id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" id("io.codearte.nexus-staging") version "0.30.0" - id("me.champeau.jmh") version "0.7.1" + id("me.champeau.jmh") version "0.7.2" } repositories { From 70a797960657fb698c95f5d36742dd72d447c4ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 09:19:29 +0000 Subject: [PATCH 338/595] build(deps): bump io.sentry:sentry-bom from 6.32.0 to 6.33.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.32.0 to 6.33.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.32.0...6.33.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ddba6f820cf..d6abd7caf95 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.32.0") + mavenBom("io.sentry:sentry-bom:6.33.0") } } From cbf64248fae43ad8482426132f3b1dd659b35139 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 09:32:37 +0000 Subject: [PATCH 339/595] build(deps): bump io.sentry:sentry-bom from 6.33.0 to 6.33.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.33.0 to 6.33.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.33.0...6.33.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d6abd7caf95..559c2004f78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.33.0") + mavenBom("io.sentry:sentry-bom:6.33.1") } } From 1cfcf9a483bd9ca9c033ceb0118e76ce25425641 Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Mon, 13 Nov 2023 18:07:13 +0300 Subject: [PATCH 340/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=81=D0=B8=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B0=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ServerSideExportFormMethod.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/ServerSideExportFormMethod.md b/docs/diagnostics/ServerSideExportFormMethod.md index 65e25bf1e72..192641e72ca 100644 --- a/docs/diagnostics/ServerSideExportFormMethod.md +++ b/docs/diagnostics/ServerSideExportFormMethod.md @@ -5,7 +5,7 @@ В модуле формы можно объявлять экспортные методы, доступные в клиентском контексте (обычно это методы-обработчики событий оповещения формы). -У экспортных методов формы может быть указана только директива компиляции `НаКлиенте`, так как для остальных практического смысла нет: обращение к методам формы из вне доступно только после вызова метода `ПолучитьФорму`, который доступен только на клиенте. +У экспортных методов формы может быть указана только директива компиляции `НаКлиенте`, так как для остальных практического смысла нет: обращение к методам формы извне доступно только после вызова метода `ПолучитьФорму`, который доступен только на клиенте. Указание экспортному методу формы иной директивы компиляции либо ее опускание считается ошибкой. From 4d5da90a861815dfaf39fab159726028b801d687 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:23:33 +0000 Subject: [PATCH 341/595] build(deps): bump io.spring.dependency-management from 1.1.3 to 1.1.4 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.3 to 1.1.4. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.3...v1.1.4) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 559c2004f78..bb74a1ba0d4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.2" id("com.github.ben-manes.versions") version "0.49.0" id("org.springframework.boot") version "3.1.5" - id("io.spring.dependency-management") version "1.1.3" + id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.4.1" From cb922b877eaf4a016f9706cd37e575303b95396a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 17 Nov 2023 21:27:55 +0300 Subject: [PATCH 342/595] =?UTF-8?q?=D0=BE=D0=BF=D1=86=D0=B8=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PrivilegedModuleMethodCallDiagnostic.java | 33 ++++++++++----- .../configuration/parameters-schema.json | 8 ++++ ...edModuleMethodCallDiagnostic_en.properties | 3 +- ...edModuleMethodCallDiagnostic_ru.properties | 1 + ...vilegedModuleMethodCallDiagnosticTest.java | 41 +++++++++++++++++-- .../Ext/Module.bsl" | 4 +- 6 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java index bbc18df210e..b2bab8ad94a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -23,6 +23,7 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.ModuleSymbol; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -49,18 +50,18 @@ ) @RequiredArgsConstructor public class PrivilegedModuleMethodCallDiagnostic extends AbstractDiagnostic { + + private static final boolean VALIDATE_NESTED_CALLS = true; + + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + VALIDATE_NESTED_CALLS + ) + private boolean validateNestedCalls = VALIDATE_NESTED_CALLS; + private final ReferenceIndex referenceIndex; private List privilegedModuleSymbols = new ArrayList<>(); - private static boolean isReferenceToModules(Reference reference, List privilegedModuleSymbols) { - return reference.getSourceDefinedSymbol() - .flatMap(sourceDefinedSymbol -> sourceDefinedSymbol.getRootParent(SymbolKind.Module)) - .filter(ModuleSymbol.class::isInstance) - .map(ModuleSymbol.class::cast) - .filter(privilegedModuleSymbols::contains) - .isPresent(); - } - @Override protected void check() { if (privilegedModuleSymbols.isEmpty()){ @@ -71,7 +72,7 @@ protected void check() { } referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream() - .filter(reference -> isReferenceToModules(reference, privilegedModuleSymbols)) + .filter(this::isReferenceToModules) .forEach(this::fireIssue); } @@ -89,6 +90,18 @@ private Optional getPrivilegedModuleSymbol(MDCommonModule mdCommon .map(documentContext1 -> documentContext1.getSymbolTree().getModule()); } + private boolean isReferenceToModules(Reference reference) { + if (!validateNestedCalls && reference.getUri().equals(documentContext.getUri())){ + return false; + } + return reference.getSourceDefinedSymbol() + .flatMap(sourceDefinedSymbol -> sourceDefinedSymbol.getRootParent(SymbolKind.Module)) + .filter(ModuleSymbol.class::isInstance) + .map(ModuleSymbol.class::cast) + .filter(privilegedModuleSymbols::contains) + .isPresent(); + } + private void fireIssue(Reference reference) { diagnosticStorage.addDiagnostic(reference.getSelectionRange(), info.getMessage(reference.getSymbol().getName())); diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index cb8891995eb..08feceabd85 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1478,6 +1478,14 @@ "object" ], "title": "Accessing privileged module methods", + "properties": { + "validateNestedCalls": { + "description": "Validate nested method calls from privileged modules", + "default": true, + "type": "boolean", + "title": "Validate nested method calls from privileged modules" + } + }, "$id": "#/definitions/PrivilegedModuleMethodCall" }, "ProcedureReturnsValue": { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties index 60269b66c95..eb7fdf7c62c 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_en.properties @@ -1,2 +1,3 @@ diagnosticMessage=Check the %s method access of the privileged module -diagnosticName=Accessing privileged module methods \ No newline at end of file +diagnosticName=Accessing privileged module methods +validateNestedCalls=Validate nested method calls from privileged modules diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties index 92318fdcdf9..e350b71eecf 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic_ru.properties @@ -1,2 +1,3 @@ diagnosticMessage=Проверьте обращение к методу %s привилегированного модуля diagnosticName=Обращение к методам привилегированных модулей +validateNestedCalls=Проверять вложенные вызовы методов из привилегированных модулей diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java index d639627a96a..e1323becebb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java @@ -24,22 +24,34 @@ import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; +import java.util.Map; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; class PrivilegedModuleMethodCallDiagnosticTest extends AbstractDiagnosticTest { private static final String PATH_TO_METADATA = "src/test/resources/metadata/privilegedModules"; + private static final String PATH_TO_MODULE_FILE = PATH_TO_METADATA + "/CommonModules/ПривилегированныйМодуль1/Ext/Module.bsl"; PrivilegedModuleMethodCallDiagnosticTest() { super(PrivilegedModuleMethodCallDiagnostic.class); } + @Test + void testWithoutMetadata() { + var diagnostics = getDiagnostics(); + assertThat(diagnostics).isEmpty(); + } + @Test void test() { initServerContext(PATH_TO_METADATA); - List diagnostics = getDiagnostics(); + var diagnostics = getDiagnostics(); assertThat(diagnostics).hasSize(2); assertThat(diagnostics, true) @@ -48,9 +60,32 @@ void test() { } @Test - void testWithoutMetadata() { + void getNestedCalls() { + var diagnostics = getDiagnosticsAsCommonModule(); + assertThat(diagnostics).hasSize(2); + assertThat(diagnostics, true) + .hasMessageOnRange("Проверьте обращение к методу ПубличнаяФункция привилегированного модуля", 15, 15, 31) + .hasMessageOnRange("Проверьте обращение к методу ПубличнаяПроцедура привилегированного модуля", 19, 4, 22); + } - List diagnostics = getDiagnostics(); + @Test + void testParameterValidateNestedCalls() { + Map configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); + configuration.put("validateNestedCalls", false); + diagnosticInstance.configure(configuration); + + var diagnostics = getDiagnosticsAsCommonModule(); assertThat(diagnostics).isEmpty(); } + + private List getDiagnosticsAsCommonModule() { + Path moduleFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); + + initServerContext(PATH_TO_METADATA); + + var documentContext = spy(getDocumentContext(diagnosticInstance.getClass().getSimpleName())); + when(documentContext.getUri()).thenReturn(moduleFile.toUri()); + + return getDiagnostics(documentContext); + } } diff --git "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" index 626fd1e6394..f7d88c16cfd 100644 --- "a/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" +++ "b/src/test/resources/metadata/privilegedModules/CommonModules/\320\237\321\200\320\270\320\262\320\270\320\273\320\265\320\263\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\2141/Ext/Module.bsl" @@ -13,11 +13,11 @@ #Область СлужебныеПроцедурыИФункции Функция ПриватнаяФункция() - + Значение = ПубличнаяФункция(); КонецФункции Процедура ПриватнаяПроцедура() - + ПубличнаяПроцедура(); КонецПроцедуры #КонецОбласти From f378e30a4fd99619af0fecc526fa0362ea1e06c6 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 18 Nov 2023 21:49:50 +0300 Subject: [PATCH 343/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit переделаны тесты выполнен precommit --- .../ExternalAppStartingDiagnostic.java | 11 +++++----- .../configuration/parameters-schema.json | 2 +- .../ExternalAppStartingDiagnosticTest.java | 22 ++++++++++--------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 07798ae5738..d0255aae186 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -43,14 +43,13 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { - private static final String MAIN_PATTERN_STRING = + private static final String DEFAULT_PATTERN_STRING = "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp" + "|НачатьЗапускПриложения|BeginRunningApplication" + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; - private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( - MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); + private static final Pattern DEFAULT_PATTERN = CaseInsensitivePattern.compile(DEFAULT_PATTERN_STRING); private static final boolean CHECK_GOTO_URL = false; @DiagnosticParameter( @@ -61,12 +60,12 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic @DiagnosticParameter( type = String.class, - defaultValue = MAIN_PATTERN_STRING + defaultValue = DEFAULT_PATTERN_STRING ) - private String userPatternString = MAIN_PATTERN_STRING; + private String userPatternString = DEFAULT_PATTERN_STRING; public ExternalAppStartingDiagnostic() { - super(FULL_PATTERN); + super(DEFAULT_PATTERN); } @Override diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index d622a7fbd58..1d9b5aae21f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -653,7 +653,7 @@ "properties": { "checkGotoUrl": { "description": "Check navigation links", - "default": true, + "default": false, "type": "boolean", "title": "Check navigation links" }, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index 3a22071fae2..0c281f9fc7d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -75,10 +75,12 @@ void testConfigure_checkGotoUrl() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) - .hasRange(14, 4, 32) + + .hasRange(14, 4, 32) .hasRange(15, 26, 52) .hasRange(16, 26, 52) - .hasRange(18, 26, 44) + + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) .hasRange(21, 20, 38) @@ -105,19 +107,14 @@ void testConfigure_userPatternString() { assertThat(diagnostics, true) .hasRange(8, 4, 18) - - .hasRange(14, 4, 32) - .hasRange(15, 26, 52) - .hasRange(16, 26, 52) - - .hasSize(4); + .hasSize(1); } @Test void testConfigure_userPatternString_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("checkGotoUrl", false); + configuration.put("checkGotoUrl", true); configuration.put("userPatternString", "КомандаСистемы"); diagnosticInstance.configure(configuration); @@ -125,6 +122,11 @@ void testConfigure_userPatternString_checkGotoUrl() { assertThat(diagnostics, true) .hasRange(8, 4, 18) - .hasSize(1); + + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + + .hasSize(4); } } From baa7f989f45174d9bb91a213f0415f875a7f7818 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 09:31:23 +0000 Subject: [PATCH 344/595] build(deps): bump me.qoomon.git-versioning from 6.4.2 to 6.4.3 Bumps me.qoomon.git-versioning from 6.4.2 to 6.4.3. --- updated-dependencies: - dependency-name: me.qoomon.git-versioning dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index bb74a1ba0d4..2edfa8f88ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ plugins { id("io.freefair.javadoc-utf-8") version "8.4" id("io.freefair.aspectj.post-compile-weaving") version "8.4" id("io.freefair.maven-central.validate-poms") version "8.4" - id("me.qoomon.git-versioning") version "6.4.2" + id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.49.0" id("org.springframework.boot") version "3.1.5" id("io.spring.dependency-management") version "1.1.4" From e4d6c0ee71b223b517d95f423a2958b273da9448 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 18:16:27 +0000 Subject: [PATCH 345/595] build(deps): bump com.github.ben-manes.versions from 0.49.0 to 0.50.0 Bumps com.github.ben-manes.versions from 0.49.0 to 0.50.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2edfa8f88ce..30f65724b39 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { id("io.freefair.aspectj.post-compile-weaving") version "8.4" id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.3" - id("com.github.ben-manes.versions") version "0.49.0" + id("com.github.ben-manes.versions") version "0.50.0" id("org.springframework.boot") version "3.1.5" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" From d2cd9cf286ef27494db2b6089a855829318da826 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 09:12:59 +0000 Subject: [PATCH 346/595] build(deps): bump io.sentry:sentry-bom from 6.33.1 to 6.34.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.33.1 to 6.34.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.33.1...6.34.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 30f65724b39..9d8ca4a876b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.33.1") + mavenBom("io.sentry:sentry-bom:6.34.0") } } From 793edbd1d0170580a185188bca4c42238d772acb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 09:16:07 +0000 Subject: [PATCH 347/595] build(deps): bump AButler/upload-release-assets from 2.0 to 3.0 Bumps [AButler/upload-release-assets](https://github.com/abutler/upload-release-assets) from 2.0 to 3.0. - [Release notes](https://github.com/abutler/upload-release-assets/releases) - [Commits](https://github.com/abutler/upload-release-assets/compare/v2.0...v3.0) --- updated-dependencies: - dependency-name: AButler/upload-release-assets dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9a7dfaaa6e..5ba575a6062 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,7 +49,7 @@ jobs: path: ./${{ matrix.app-image }} - name: Upload assets to release - uses: AButler/upload-release-assets@v2.0 + uses: AButler/upload-release-assets@v3.0 with: files: './bsl-language-server_${{ matrix.prefix }}.zip' repo-token: ${{ secrets.GITHUB_TOKEN }} @@ -60,7 +60,7 @@ jobs: - name: Upload jar to release if: matrix.prefix == 'nix' - uses: AButler/upload-release-assets@v2.0 + uses: AButler/upload-release-assets@v3.0 with: files: './build/libs/*.jar' repo-token: ${{ secrets.GITHUB_TOKEN }} From 99ddd7f09fd99acbcfe14d749236c3c7d738601a Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Thu, 23 Nov 2023 00:01:55 +0300 Subject: [PATCH 348/595] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?"=D0=97=D0=B0=D1=80=D0=B5=D0=B7=D0=B5=D1=80=D0=B2=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ReservedParameterNames.md | 11 +++ docs/en/diagnostics/ReservedParameterNames.md | 11 +++ .../ReservedParameterNamesDiagnostic.java | 96 +++++++++++++++++++ .../configuration/parameters-schema.json | 18 ++++ .../languageserver/configuration/schema.json | 3 + ...rvedParameterNamesDiagnostic_en.properties | 4 + ...rvedParameterNamesDiagnostic_ru.properties | 4 + .../ReservedParameterNamesTest.java | 61 ++++++++++++ .../ReservedParameterNamesDiagnostic.bsl | 7 ++ 9 files changed, 215 insertions(+) create mode 100644 docs/diagnostics/ReservedParameterNames.md create mode 100644 docs/en/diagnostics/ReservedParameterNames.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java create mode 100644 src/test/resources/diagnostics/ReservedParameterNamesDiagnostic.bsl diff --git a/docs/diagnostics/ReservedParameterNames.md b/docs/diagnostics/ReservedParameterNames.md new file mode 100644 index 00000000000..e7854f4e437 --- /dev/null +++ b/docs/diagnostics/ReservedParameterNames.md @@ -0,0 +1,11 @@ +# Зарезервированные имена параметра (ReservedParameterNames) + + +## Описание диагностики +Имя параметра не должно совпадать с именами системных перечислений. +Список зарезервированных слов задается регулярным выражением. +Поиск производится без учета регистра символов. + +**Примеры настройки:** + +"ВидГруппыФормы|ВидПоляФормы" diff --git a/docs/en/diagnostics/ReservedParameterNames.md b/docs/en/diagnostics/ReservedParameterNames.md new file mode 100644 index 00000000000..ac95be1e1d2 --- /dev/null +++ b/docs/en/diagnostics/ReservedParameterNames.md @@ -0,0 +1,11 @@ +# Reserved parameter names (ReservedParameterNames) + + +## Description +Parameter names should not contain reserved words such as system enumerations. +The list of reserved words is set by a regular expression. +The search is case-insensitive. + +**For example:** + +"FormGroupType|FormFieldType" diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java new file mode 100644 index 00000000000..a2f0bc088ca --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -0,0 +1,96 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import org.apache.commons.collections4.map.CaseInsensitiveMap; + +import com.github._1c_syntax.utils.CaseInsensitivePattern; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; +import java.util.stream.Collectors; + +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 5, + tags = { + DiagnosticTag.STANDARD, + DiagnosticTag.BADPRACTICE + } +) +public class ReservedParameterNamesDiagnostic extends AbstractSymbolTreeDiagnostic { + + private static final String RESERVED_WORDS_DEFAULT = ""; + + @DiagnosticParameter( + type = String.class, + defaultValue = RESERVED_WORDS_DEFAULT + ) + private Pattern reservedWords = CaseInsensitivePattern.compile(RESERVED_WORDS_DEFAULT); + + @Override + public void configure(Map configuration) { + this.reservedWords = CaseInsensitivePattern.compile( + (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT)); + } + + @Override + public void visitMethod(MethodSymbol methodSymbol) { + if (reservedWords.pattern().isBlank()) { + return; + } + + List parameters = methodSymbol.getParameters(); + checkParameterName(methodSymbol, parameters); + } + + private void checkParameterName(MethodSymbol methodSymbol, + List parameters) { + + parameters.forEach((ParameterDefinition parameter) -> { + + Matcher matcher = reservedWords.matcher(parameter.getName()); + while (matcher.find()) { + diagnosticStorage.addDiagnostic(parameter.getRange(), info.getResourceString("reservedWordMessage", parameter.getName())); + } + }); + } + +} \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 61fbd57d2cd..0f6b6b6b1f7 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1578,6 +1578,24 @@ "title": "Overuse \"Reference\" in a query", "$id": "#/definitions/RefOveruse" }, + "ReservedParameterNames": { + "description": "Reserved parameter names", + "default": false, + "type": [ + "boolean", + "object" + ], + "title": "Reserved parameter names", + "properties": { + "reservedWords": { + "description": "Regular expression for reserved parameter names.", + "default": "", + "type": "string", + "title": "Regular expression for reserved parameter names." + } + }, + "$id": "#/definitions/ReservedParameterNames" + }, "RewriteMethodParameter": { "description": "Rewrite method parameter", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 3626e6d94e2..fc33aa6d53d 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -368,6 +368,9 @@ "RefOveruse": { "$ref": "parameters-schema.json#/definitions/RefOveruse" }, + "ReservedParameterNames": { + "$ref": "parameters-schema.json#/definitions/ReservedParameterNames" + }, "RewriteMethodParameter": { "$ref": "parameters-schema.json#/definitions/RewriteMethodParameter" }, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties new file mode 100644 index 00000000000..dd36278a493 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties @@ -0,0 +1,4 @@ +diagnosticMessage=Reserved name found as parameter name. +diagnosticName=Reserved parameter names +reservedWords=Regular expression for reserved parameter names. +reservedWordMessage=Rename parameter "%s" that matches one of reserved words diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties new file mode 100644 index 00000000000..82f8c19367d --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties @@ -0,0 +1,4 @@ +diagnosticMessage=Имя параметра совпадает с зарезервированным словом. +diagnosticName=Зарезервированные имена параметров +reservedWords=Регулярное выражение для зарезервированных имен параметров. +reservedWordMessage=Необходимо переименовать параметр "%s", совпадающий с зарезервированным словом \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java new file mode 100644 index 00000000000..fc529342ddf --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -0,0 +1,61 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest { + ReservedParameterNamesDiagnosticTest() { + super(ReservedParameterNamesDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + assertThat(diagnostics).hasSize(0); // Проверка количества + + } + + @Test + void testConfigure() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("reservedWords", "ВидГруппыФормы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).hasSize(1); + assertThat(diagnostics, true) + .hasMessageOnRange("Необходимо переименовать параметр \"ВидГруппыФормы\", совпадающий с зарезервированным словом", + 2, 16, 30); + + } + +} \ No newline at end of file diff --git a/src/test/resources/diagnostics/ReservedParameterNamesDiagnostic.bsl b/src/test/resources/diagnostics/ReservedParameterNamesDiagnostic.bsl new file mode 100644 index 00000000000..0ab58041572 --- /dev/null +++ b/src/test/resources/diagnostics/ReservedParameterNamesDiagnostic.bsl @@ -0,0 +1,7 @@ +// при наличии в списке зарезервированного имени перечисления ВидГруппыФормы должен сработать тест + +Процедура Тест1(ВидГруппыФормы) // здесь должен сработать тест + + А = ВидГруппыФормы.ОбычнаяГруппа; + +КонецПроцедуры From deecc2997af1b74ffeedac851d57c5a246fa8af1 Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Thu, 23 Nov 2023 09:45:50 +0300 Subject: [PATCH 349/595] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?"=D0=97=D0=B0=D1=80=D0=B5=D0=B7=D0=B5=D1=80=D0=B2=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservedParameterNamesDiagnostic.java | 7 ++--- ...rvedParameterNamesDiagnostic_en.properties | 3 +- ...rvedParameterNamesDiagnostic_ru.properties | 3 +- .../ReservedParameterNamesTest.java | 30 +++++++++++++++++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java index a2f0bc088ca..5d6cfc3cd15 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -67,8 +67,7 @@ public class ReservedParameterNamesDiagnostic extends AbstractSymbolTreeDiagnost @Override public void configure(Map configuration) { - this.reservedWords = CaseInsensitivePattern.compile( - (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT)); + this.reservedWords = CaseInsensitivePattern.compile("^" + (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT) + "$"); } @Override @@ -87,8 +86,8 @@ private void checkParameterName(MethodSymbol methodSymbol, parameters.forEach((ParameterDefinition parameter) -> { Matcher matcher = reservedWords.matcher(parameter.getName()); - while (matcher.find()) { - diagnosticStorage.addDiagnostic(parameter.getRange(), info.getResourceString("reservedWordMessage", parameter.getName())); + if (matcher.find()) { + diagnosticStorage.addDiagnostic(parameter.getRange(), info.getMessage(parameter.getName())); } }); } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties index dd36278a493..52aea28826f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_en.properties @@ -1,4 +1,3 @@ -diagnosticMessage=Reserved name found as parameter name. +diagnosticMessage=Rename parameter "%s" that matches one of reserved words. diagnosticName=Reserved parameter names reservedWords=Regular expression for reserved parameter names. -reservedWordMessage=Rename parameter "%s" that matches one of reserved words diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties index 82f8c19367d..1a6a444e62a 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties @@ -1,4 +1,3 @@ -diagnosticMessage=Имя параметра совпадает с зарезервированным словом. +diagnosticMessage=Переименуйте параметр "%s" чтобы он не совпадал с зарезервированным словом. diagnosticName=Зарезервированные имена параметров reservedWords=Регулярное выражение для зарезервированных имен параметров. -reservedWordMessage=Необходимо переименовать параметр "%s", совпадающий с зарезервированным словом \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index fc529342ddf..06cea3ecb38 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -38,7 +38,7 @@ class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(0); // Проверка количества + assertThat(diagnostics).hasSize(0); } @@ -53,9 +53,33 @@ void testConfigure() { assertThat(diagnostics).hasSize(1); assertThat(diagnostics, true) - .hasMessageOnRange("Необходимо переименовать параметр \"ВидГруппыФормы\", совпадающий с зарезервированным словом", + .hasMessageOnRange("Переименуйте параметр \"ВидГруппыФормы\" чтобы он не совпадал с зарезервированным словом.", 2, 16, 30); } - + +@Test + void testConfigureNegative() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("reservedWords", "ВидГруппы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + assertThat(diagnostics).hasSize(0); + + } + +@Test + void testConfigureNegative2() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("reservedWords", "ВидГруппыФормыРасширенный"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + assertThat(diagnostics).hasSize(0); + + } + } \ No newline at end of file From 0de76af0a21dc2fbf4745c0d15deeca101650a5f Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Thu, 23 Nov 2023 11:50:15 +0300 Subject: [PATCH 350/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20sonarqube?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservedParameterNamesDiagnostic.java | 31 ++++++------------- .../ReservedParameterNamesTest.java | 6 ++-- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java index 5d6cfc3cd15..69bc5c09a21 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -23,27 +23,16 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import org.apache.commons.collections4.map.CaseInsensitiveMap; import com.github._1c_syntax.utils.CaseInsensitivePattern; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Locale; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Function; -import java.util.stream.Collectors; - import java.util.Map; -import java.util.regex.Matcher; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -59,37 +48,37 @@ public class ReservedParameterNamesDiagnostic extends AbstractSymbolTreeDiagnost private static final String RESERVED_WORDS_DEFAULT = ""; - @DiagnosticParameter( - type = String.class, - defaultValue = RESERVED_WORDS_DEFAULT - ) + @DiagnosticParameter(type = String.class) private Pattern reservedWords = CaseInsensitivePattern.compile(RESERVED_WORDS_DEFAULT); @Override public void configure(Map configuration) { - this.reservedWords = CaseInsensitivePattern.compile("^" + (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT) + "$"); + + this.reservedWords = CaseInsensitivePattern.compile("^" + + (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT) + + "$"); } @Override public void visitMethod(MethodSymbol methodSymbol) { + if (reservedWords.pattern().isBlank()) { return; } List parameters = methodSymbol.getParameters(); - checkParameterName(methodSymbol, parameters); + checkParameterName(parameters); } - private void checkParameterName(MethodSymbol methodSymbol, - List parameters) { + private void checkParameterName(List parameters) { parameters.forEach((ParameterDefinition parameter) -> { - Matcher matcher = reservedWords.matcher(parameter.getName()); + var matcher = reservedWords.matcher(parameter.getName()); if (matcher.find()) { diagnosticStorage.addDiagnostic(parameter.getRange(), info.getMessage(parameter.getName())); } }); } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index 06cea3ecb38..ae66de6846a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -38,7 +38,7 @@ class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(0); + assertThat(diagnostics).isEmpty(); } @@ -66,7 +66,7 @@ void testConfigureNegative() { diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(0); + assertThat(diagnostics).isEmpty(); } @@ -78,7 +78,7 @@ void testConfigureNegative2() { diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(0); + assertThat(diagnostics).isEmpty(); } From f9112a3753d9e0616e34ecbfac3aa9e79e227a61 Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Fri, 24 Nov 2023 01:25:59 +0300 Subject: [PATCH 351/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=90=D1=80=D1=82=D1=83=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservedParameterNamesDiagnostic.java | 15 ++++++++++----- .../diagnostics/ReservedParameterNamesTest.java | 12 ++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java index 69bc5c09a21..c1d4e308e30 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -54,18 +54,23 @@ public class ReservedParameterNamesDiagnostic extends AbstractSymbolTreeDiagnost @Override public void configure(Map configuration) { - this.reservedWords = CaseInsensitivePattern.compile("^" - + (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT) - + "$"); + var incomingMask = (String) configuration.getOrDefault("reservedWords", RESERVED_WORDS_DEFAULT); + + this.reservedWords = CaseInsensitivePattern.compile("^" + incomingMask.trim() + "$"); } @Override - public void visitMethod(MethodSymbol methodSymbol) { + protected void check() { if (reservedWords.pattern().isBlank()) { return; } - + super.check(); + } + + @Override + public void visitMethod(MethodSymbol methodSymbol) { + List parameters = methodSymbol.getParameters(); checkParameterName(parameters); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index ae66de6846a..c88a4b96448 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -58,6 +58,18 @@ void testConfigure() { } +@Test + void testConfigure2() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("reservedWords", " "); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + assertThat(diagnostics).isEmpty(); + + } + @Test void testConfigureNegative() { From 3742730676501c8e84e5d2bd69bc3c317d1a5ca0 Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Fri, 24 Nov 2023 02:06:20 +0300 Subject: [PATCH 352/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20sonarqube?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReservedParameterNamesTest.java | 38 +++++-------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index c88a4b96448..5d59199e026 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -27,6 +27,9 @@ import java.util.List; import java.util.Map; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest { @@ -35,7 +38,7 @@ class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); assertThat(diagnostics).isEmpty(); @@ -43,7 +46,7 @@ void test() { } @Test - void testConfigure() { + void testPositive() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); configuration.put("reservedWords", "ВидГруппыФормы"); @@ -58,35 +61,12 @@ void testConfigure() { } -@Test - void testConfigure2() { - - Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("reservedWords", " "); - diagnosticInstance.configure(configuration); - - List diagnostics = getDiagnostics(); - assertThat(diagnostics).isEmpty(); - - } - -@Test - void testConfigureNegative() { - - Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("reservedWords", "ВидГруппы"); - diagnosticInstance.configure(configuration); - - List diagnostics = getDiagnostics(); - assertThat(diagnostics).isEmpty(); - - } - -@Test - void testConfigureNegative2() { + @ParameterizedTest + @ValueSource(strings = {" ", "ВидГруппы", "ВидГруппыФормыРасширенный"}) + void testNegative(String testWord) { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("reservedWords", "ВидГруппыФормыРасширенный"); + configuration.put("reservedWords", testWord); diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); From 6c377e2e7a3950dff7114b5068eeea0b3fff5716 Mon Sep 17 00:00:00 2001 From: Alexander Medvedko Date: Fri, 24 Nov 2023 09:51:49 +0300 Subject: [PATCH 353/595] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B8,=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B8=D0=BB=20=D0=BE=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B8=D0=B0=D0=B3?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ReservedParameterNames.md | 9 ++++++++- docs/en/diagnostics/ReservedParameterNames.md | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/diagnostics/ReservedParameterNames.md b/docs/diagnostics/ReservedParameterNames.md index e7854f4e437..591058e9c2c 100644 --- a/docs/diagnostics/ReservedParameterNames.md +++ b/docs/diagnostics/ReservedParameterNames.md @@ -2,10 +2,17 @@ ## Описание диагностики -Имя параметра не должно совпадать с именами системных перечислений. +Если имя параметра совпадает с именем системного перечисления, то в локальном контексте доступ к значениям этого перечисления будет недоступен. +Синтаксическая проверка кода модуля не выявит такую ошибку. Чтобы предотвратить эту ситуацию имя параметра не должно совпадать с именами системных перечислений. Список зарезервированных слов задается регулярным выражением. Поиск производится без учета регистра символов. **Примеры настройки:** "ВидГруппыФормы|ВидПоляФормы" + +## Источники + + +* Источник: [Стандарт: Параметры процедур и функций](https://its.1c.ru/db/v8std/content/640/hdoc) +* Источник: [Стандарт: Правила образования имен переменных](https://its.1c.ru/db/v8std#content:454:hdoc) diff --git a/docs/en/diagnostics/ReservedParameterNames.md b/docs/en/diagnostics/ReservedParameterNames.md index ac95be1e1d2..50a783d844b 100644 --- a/docs/en/diagnostics/ReservedParameterNames.md +++ b/docs/en/diagnostics/ReservedParameterNames.md @@ -2,6 +2,11 @@ ## Description + + +If a parameter name matches one of a system enumeration's name, then all values of that enumeration will not be available in the local context. +Module code's syntax checking will not detect an error. To prevent this situation, a parameter name should not match all names of system enumerations. + Parameter names should not contain reserved words such as system enumerations. The list of reserved words is set by a regular expression. The search is case-insensitive. @@ -9,3 +14,9 @@ The search is case-insensitive. **For example:** "FormGroupType|FormFieldType" + +## Sources + + +* Source: [Standard: Procedure and Function Parameters (RU)](https://its.1c.ru/db/v8std/content/640/hdoc) +* Source: [Standard: Rules for generating variable names (RU)](https://its.1c.ru/db/v8std#content:454:hdoc) From a0e8d517918c99f585432ae97464b0bf1d306d5a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 25 Nov 2023 19:32:52 +0300 Subject: [PATCH 354/595] =?UTF-8?q?=D0=BE=D0=BF=D1=86=D0=B8=D1=8F=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit по умолчанию включено, как и в текущем варианте по умолчанию --- .../diagnostics/BadWordsDiagnostic.java | 59 +++++++++++++++++-- .../BadWordsDiagnostic_en.properties | 1 + .../BadWordsDiagnostic_ru.properties | 1 + .../diagnostics/BadWordsDiagnosticTest.java | 32 +++++++--- 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 0a40ebb529a..cd6390ff6c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -28,8 +28,11 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; import java.util.Map; -import java.util.regex.Matcher; +import java.util.Set; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -44,6 +47,7 @@ public class BadWordsDiagnostic extends AbstractDiagnostic { private static final String BAD_WORDS_DEFAULT = ""; + private static final boolean FIND_IN_COMMENTS = true; @DiagnosticParameter( type = String.class, @@ -51,10 +55,17 @@ public class BadWordsDiagnostic extends AbstractDiagnostic { ) private Pattern badWords = CaseInsensitivePattern.compile(BAD_WORDS_DEFAULT); - @Override + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + FIND_IN_COMMENTS + ) + private boolean findInComments = FIND_IN_COMMENTS; + + @Override public void configure(Map configuration) { this.badWords = CaseInsensitivePattern.compile( (String) configuration.getOrDefault("badWords", BAD_WORDS_DEFAULT)); + this.findInComments = (boolean) configuration.getOrDefault("findInComments", FIND_IN_COMMENTS); } @Override @@ -64,12 +75,50 @@ protected void check() { return; } - String[] moduleLines = documentContext.getContentList(); - for (int i = 0; i < moduleLines.length; i++) { - Matcher matcher = badWords.matcher(moduleLines[i]); + var moduleLines = getContentList(); + for (var i = 0; i < moduleLines.length; i++) { + final var moduleLine = moduleLines[i]; + if (moduleLine.isEmpty()) { + continue; + } + var matcher = badWords.matcher(moduleLine); while (matcher.find()) { diagnosticStorage.addDiagnostic(i, matcher.start(), i, matcher.end()); } } } + + private String[] getContentList() { + final var moduleLines = documentContext.getContentList(); + if (findInComments) { + return moduleLines; + } + final var lineNumbersWithoutComments = getLineNumbersWithoutComments(); + if (lineNumbersWithoutComments.isEmpty()) { + return moduleLines; + } + final List result = new ArrayList<>(lineNumbersWithoutComments.size()); + for (var i = 0; i < moduleLines.length; i++) { + if (lineNumbersWithoutComments.contains(i)) { + result.add(moduleLines[i]); + } else { + result.add(""); + } + } + return result.toArray(new String[0]); + } + + private Set getLineNumbersWithoutComments() { + var result = new HashSet(); + final var tokens = documentContext.getTokensFromDefaultChannel(); + int lastLine = -1; + for (var token : tokens) { + var line = token.getLine(); + if (line > lastLine) { + lastLine = line; + result.add(line - 1); // т.к. в токенах нумерация строк с 1 + } + } + return result; + } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties index d4f0db3b506..7fa458c1794 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties @@ -1,3 +1,4 @@ diagnosticMessage=Prohibited word found. diagnosticName=Prohibited words badWords=Regular expression for prohibited words. +findInComments=Find in comments diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties index de3556166c6..a3e64facc06 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties @@ -1,3 +1,4 @@ diagnosticMessage=В тексте модуля найдено запрещенное слово. diagnosticName=Запрещенные слова badWords=Регулярное выражение для слов-исключений. +findInComments=Искать в комментариях diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java index 22d5eff9d42..a78083610b8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java @@ -38,7 +38,7 @@ class BadWordsDiagnosticTest extends AbstractDiagnosticTest{ void test() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(0); // Проверка количества + assertThat(diagnostics).isEmpty(); // Проверка количества } @Test @@ -52,11 +52,29 @@ void testConfigure() { assertThat(diagnostics).hasSize(6); assertThat(diagnostics, true) - .hasRange(0, 42, 0, 47) - .hasRange(0, 48, 0, 54) - .hasRange(4, 4, 4, 9) - .hasRange(6, 24, 6, 29) - .hasRange(6, 34, 6, 39) - .hasRange(8, 4, 8, 10); + .hasRange(0, 42, 47) + .hasRange(0, 48, 54) + .hasRange(4, 4, 9) + .hasRange(6, 24, 29) + .hasRange(6, 34, 39) + .hasRange(8, 4, 10); + } + + @Test + void testFindWithoutComments() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("badWords", "лотус|шмотус"); + configuration.put("findInComments", false); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics).hasSize(4); + assertThat(diagnostics, true) + .hasRange(4, 4, 9) + .hasRange(6, 24, 29) + .hasRange(6, 34, 39) + .hasRange(8, 4, 10); } } From 7c945e1502faa4921cc0d251f67843d67728cd82 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 25 Nov 2023 19:44:05 +0300 Subject: [PATCH 355/595] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BB=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B2=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/BadWordsDiagnostic.java | 4 +++- .../BadWordsDiagnostic_en.properties | 2 +- .../BadWordsDiagnostic_ru.properties | 2 +- .../diagnostics/BadWordsDiagnosticTest.java | 20 +++++++++---------- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index cd6390ff6c6..023f2ab3765 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.ArrayList; @@ -83,7 +84,8 @@ protected void check() { } var matcher = badWords.matcher(moduleLine); while (matcher.find()) { - diagnosticStorage.addDiagnostic(i, matcher.start(), i, matcher.end()); + diagnosticStorage.addDiagnostic(Ranges.create(i, matcher.start(), i, matcher.end()), + info.getMessage(matcher.group())); } } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties index 7fa458c1794..5d24e89b057 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_en.properties @@ -1,4 +1,4 @@ -diagnosticMessage=Prohibited word found. +diagnosticMessage=Prohibited word found <%s>. diagnosticName=Prohibited words badWords=Regular expression for prohibited words. findInComments=Find in comments diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties index a3e64facc06..952f8aa5921 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic_ru.properties @@ -1,4 +1,4 @@ -diagnosticMessage=В тексте модуля найдено запрещенное слово. +diagnosticMessage=В тексте модуля найдено запрещенное слово <%s>. diagnosticName=Запрещенные слова badWords=Регулярное выражение для слов-исключений. findInComments=Искать в комментариях diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java index a78083610b8..d68ba5ff425 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java @@ -52,12 +52,12 @@ void testConfigure() { assertThat(diagnostics).hasSize(6); assertThat(diagnostics, true) - .hasRange(0, 42, 47) - .hasRange(0, 48, 54) - .hasRange(4, 4, 9) - .hasRange(6, 24, 29) - .hasRange(6, 34, 39) - .hasRange(8, 4, 10); + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <лотус>.", 0, 42, 0, 47) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <шмотус>.", 0, 48, 0, 54) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 4, 4, 4, 9) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 6, 24, 6, 29) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 6, 34, 6, 39) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Шмотус>.", 8, 4, 8, 10); } @Test @@ -72,9 +72,9 @@ void testFindWithoutComments() { assertThat(diagnostics).hasSize(4); assertThat(diagnostics, true) - .hasRange(4, 4, 9) - .hasRange(6, 24, 29) - .hasRange(6, 34, 39) - .hasRange(8, 4, 10); + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 4, 4, 4, 9) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 6, 24, 6, 29) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Лотус>.", 6, 34, 6, 39) + .hasMessageOnRange("В тексте модуля найдено запрещенное слово <Шмотус>.", 8, 4, 8, 10); } } From 9e58bedab39cef46d73df5c11492cd4a38e13736 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 25 Nov 2023 20:09:31 +0300 Subject: [PATCH 356/595] precommit --- .../bsl/languageserver/configuration/parameters-schema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..da1611a2973 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -47,6 +47,12 @@ ], "title": "Prohibited words", "properties": { + "findInComments": { + "description": "Find in comments", + "default": true, + "type": "boolean", + "title": "Find in comments" + }, "badWords": { "description": "Regular expression for prohibited words.", "default": "", From 1e31e772d348bbb86a4687e651e5b50216b0cbf0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Nov 2023 09:43:44 +0300 Subject: [PATCH 357/595] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java Co-authored-by: Nikita Fedkin --- .../bsl/languageserver/diagnostics/BadWordsDiagnostic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 023f2ab3765..de25675a597 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -84,7 +84,8 @@ protected void check() { } var matcher = badWords.matcher(moduleLine); while (matcher.find()) { - diagnosticStorage.addDiagnostic(Ranges.create(i, matcher.start(), i, matcher.end()), + diagnosticStorage.addDiagnostic( + Ranges.create(i, matcher.start(), i, matcher.end()), info.getMessage(matcher.group())); } } From 8763be8111b18b3ab89d113b3161334d2df75ee3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Nov 2023 09:44:39 +0300 Subject: [PATCH 358/595] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java Co-authored-by: Nikita Fedkin --- .../bsl/languageserver/diagnostics/BadWordsDiagnostic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index de25675a597..06021a2bd84 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -86,7 +86,8 @@ protected void check() { while (matcher.find()) { diagnosticStorage.addDiagnostic( Ranges.create(i, matcher.start(), i, matcher.end()), - info.getMessage(matcher.group())); + info.getMessage(matcher.group()) + ); } } } From 1009afa9652b7384e47a839072470debef28b489 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Nov 2023 09:51:49 +0300 Subject: [PATCH 359/595] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=B7=20=D0=9F=D0=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/BadWordsDiagnostic.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 06021a2bd84..f320ff28222 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -48,7 +48,7 @@ public class BadWordsDiagnostic extends AbstractDiagnostic { private static final String BAD_WORDS_DEFAULT = ""; - private static final boolean FIND_IN_COMMENTS = true; + private static final boolean FIND_IN_COMMENTS_DEFAULT = true; @DiagnosticParameter( type = String.class, @@ -58,15 +58,15 @@ public class BadWordsDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = Boolean.class, - defaultValue = "" + FIND_IN_COMMENTS + defaultValue = "" + FIND_IN_COMMENTS_DEFAULT ) - private boolean findInComments = FIND_IN_COMMENTS; + private boolean findInComments = FIND_IN_COMMENTS_DEFAULT; @Override public void configure(Map configuration) { this.badWords = CaseInsensitivePattern.compile( (String) configuration.getOrDefault("badWords", BAD_WORDS_DEFAULT)); - this.findInComments = (boolean) configuration.getOrDefault("findInComments", FIND_IN_COMMENTS); + this.findInComments = (boolean) configuration.getOrDefault("findInComments", FIND_IN_COMMENTS_DEFAULT); } @Override @@ -78,7 +78,7 @@ protected void check() { var moduleLines = getContentList(); for (var i = 0; i < moduleLines.length; i++) { - final var moduleLine = moduleLines[i]; + var moduleLine = moduleLines[i]; if (moduleLine.isEmpty()) { continue; } @@ -93,15 +93,15 @@ protected void check() { } private String[] getContentList() { - final var moduleLines = documentContext.getContentList(); + var moduleLines = documentContext.getContentList(); if (findInComments) { return moduleLines; } - final var lineNumbersWithoutComments = getLineNumbersWithoutComments(); + var lineNumbersWithoutComments = getLineNumbersWithoutComments(); if (lineNumbersWithoutComments.isEmpty()) { return moduleLines; } - final List result = new ArrayList<>(lineNumbersWithoutComments.size()); + List result = new ArrayList<>(lineNumbersWithoutComments.size()); for (var i = 0; i < moduleLines.length; i++) { if (lineNumbersWithoutComments.contains(i)) { result.add(moduleLines[i]); @@ -114,7 +114,7 @@ private String[] getContentList() { private Set getLineNumbersWithoutComments() { var result = new HashSet(); - final var tokens = documentContext.getTokensFromDefaultChannel(); + var tokens = documentContext.getTokensFromDefaultChannel(); int lastLine = -1; for (var token : tokens) { var line = token.getLine(); From 3020c65f11c7eb06587fe0bf04fa12bd9ebbc51a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 26 Nov 2023 15:42:49 +0300 Subject: [PATCH 360/595] =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit использую предрассчитанное значение из метрик --- .../diagnostics/BadWordsDiagnostic.java | 69 +++++++------------ 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index f320ff28222..68e3059be85 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -29,11 +29,7 @@ import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.utils.CaseInsensitivePattern; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -75,54 +71,39 @@ protected void check() { if (badWords.pattern().isBlank()) { return; } + var moduleLines = documentContext.getContentList(); + if (findInComments) { + checkAllLines(moduleLines); + return; + } + checkLinesWithoutComments(moduleLines); + } - var moduleLines = getContentList(); + private void checkAllLines(String[] moduleLines) { for (var i = 0; i < moduleLines.length; i++) { - var moduleLine = moduleLines[i]; - if (moduleLine.isEmpty()) { - continue; - } - var matcher = badWords.matcher(moduleLine); - while (matcher.find()) { - diagnosticStorage.addDiagnostic( - Ranges.create(i, matcher.start(), i, matcher.end()), - info.getMessage(matcher.group()) - ); - } + checkLine(moduleLines, i); } } - private String[] getContentList() { - var moduleLines = documentContext.getContentList(); - if (findInComments) { - return moduleLines; - } - var lineNumbersWithoutComments = getLineNumbersWithoutComments(); - if (lineNumbersWithoutComments.isEmpty()) { - return moduleLines; - } - List result = new ArrayList<>(lineNumbersWithoutComments.size()); - for (var i = 0; i < moduleLines.length; i++) { - if (lineNumbersWithoutComments.contains(i)) { - result.add(moduleLines[i]); - } else { - result.add(""); - } + private void checkLinesWithoutComments(String[] moduleLines) { + final var nclocData = documentContext.getMetrics().getNclocData(); + for (int i : nclocData) { + final var moduleNumber = i - 1; // т.к. в токенах нумерация строк с 1, а в moduleLines с 0 + checkLine(moduleLines, moduleNumber); } - return result.toArray(new String[0]); } - private Set getLineNumbersWithoutComments() { - var result = new HashSet(); - var tokens = documentContext.getTokensFromDefaultChannel(); - int lastLine = -1; - for (var token : tokens) { - var line = token.getLine(); - if (line > lastLine) { - lastLine = line; - result.add(line - 1); // т.к. в токенах нумерация строк с 1 - } + private void checkLine(String[] lines, int lineNumber) { + var moduleLine = lines[lineNumber]; + if (moduleLine.isEmpty()) { + return; + } + var matcher = badWords.matcher(moduleLine); + while (matcher.find()) { + diagnosticStorage.addDiagnostic( + Ranges.create(lineNumber, matcher.start(), lineNumber, matcher.end()), + info.getMessage(matcher.group()) + ); } - return result; } } From 38b485328f44b0892fdc3524b5228a6231130d1d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 30 Nov 2023 09:59:39 +0300 Subject: [PATCH 361/595] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=9F=D0=BE=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=D0=9F=D0=BE=D0=9D=D0=BE=D0=BC=D0=B5=D1=80=D1=83=20=D1=81?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=BC?= =?UTF-8?q?-=D0=BB=D0=B8=D1=82=D0=B5=D1=80=D0=B0=D0=BB=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - доработан код, тесты, название и описание правила - precommit #3191 --- docs/diagnostics/UsingFindElementByString.md | 20 ++++++++++++++++--- .../diagnostics/UsingFindElementByString.md | 2 +- .../UsingFindElementByStringDiagnostic.java | 7 +++---- .../configuration/parameters-schema.json | 4 ++-- ...indElementByStringDiagnostic_en.properties | 2 +- ...indElementByStringDiagnostic_ru.properties | 2 +- ...singFindElementByStringDiagnosticTest.java | 7 ++++--- .../UsingFindElementByStringDiagnostic.bsl | 16 ++++++++++++++- 8 files changed, 44 insertions(+), 16 deletions(-) diff --git a/docs/diagnostics/UsingFindElementByString.md b/docs/diagnostics/UsingFindElementByString.md index 4acff08d202..52de8359277 100644 --- a/docs/diagnostics/UsingFindElementByString.md +++ b/docs/diagnostics/UsingFindElementByString.md @@ -1,20 +1,30 @@ -# Использование методов "НайтиПоНаименованию" и "НайтиПоКоду" (UsingFindElementByString) +# Использование методов "НайтиПоНаименованию", "НайтиПоКоду" и "НайтиПоНомеру" (UsingFindElementByString) ## Описание диагностики -Запрещено использовать методы поиска элементов "НайтиПоНаименованию" или "НайтиПоКоду". +Правило находит использование методов `НайтиПоНаименованию`, `НайтиПоКоду` или `НайтиПоНомеру` с указанием конкретных и +уникальных номеров, кодов и названий элементов или документов. +Скорее всего, подобный код не будет работать в других ИБ, что приведет к ошибкам выполнения. +Возможно, в финальный код попал тестовый код, что также не рекомендовано. + +Константные значения данных из ИБ рекомендуется указывать в константах ИБ, предопределенных элементах метаданных. ## Примеры +Неправильно: ```bsl Должность = Справочники.Должности.НайтиПоНаименованию("Ведущий бухгалтер"); ``` +или +```bsl +Должность = Справочники.Должности.НайтиПоКоду("00-0000001"); +``` или ```bsl -Должность = Справочники.Должности.НайтиПоКоду("00-0000001"); +ОбъектНазначения = Документы.ПередачаТоваровМеждуОрганизациями.НайтиПоНомеру("0000-000001", ТекущаяДата()); ``` Допустимо использование: @@ -24,3 +34,7 @@ ```bsl Справочники.КлассификаторБанков.НайтиПоКоду(СведенияОБанке.БИК); ``` + +```bsl +Документы.Реализация.НайтиПоНомеру(НомерДокумента); +``` diff --git a/docs/en/diagnostics/UsingFindElementByString.md b/docs/en/diagnostics/UsingFindElementByString.md index 56136068be1..0737366e318 100644 --- a/docs/en/diagnostics/UsingFindElementByString.md +++ b/docs/en/diagnostics/UsingFindElementByString.md @@ -1,4 +1,4 @@ -# Using FindByName and FindByCode (UsingFindElementByString) +# Using FindByName, FindByCode and FindByNumber (UsingFindElementByString) ## Description diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java index 7414902952d..a27e32a0bb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java @@ -30,7 +30,6 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; -import java.util.regex.Matcher; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -48,13 +47,13 @@ public class UsingFindElementByStringDiagnostic extends AbstractVisitorDiagnostic { private final Pattern pattern = CaseInsensitivePattern.compile( - "(НайтиПоНаименованию|FindByDescription|НайтиПоКоду|FindByCode)" + "(НайтиПоНаименованию|FindByDescription|НайтиПоКоду|FindByCode|НайтиПоНомеру|FindByNumber)" ); @Override public ParseTree visitMethodCall(BSLParser.MethodCallContext ctx) { - Matcher matcher = pattern.matcher(ctx.methodName().getText()); - if (matcher.find()) { + var matcher = pattern.matcher(ctx.methodName().getText()); + if (matcher.matches()) { BSLParser.CallParamContext param = ctx.doCall().callParamList().callParam().get(0); if (param.children == null || param.getStart().getType() == BSLParser.STRING || diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..731344ad533 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1947,13 +1947,13 @@ "$id": "#/definitions/UsingExternalCodeTools" }, "UsingFindElementByString": { - "description": "Using FindByName and FindByCode", + "description": "Using FindByName, FindByCode and FindByNumber", "default": true, "type": [ "boolean", "object" ], - "title": "Using FindByName and FindByCode", + "title": "Using FindByName, FindByCode and FindByNumber", "$id": "#/definitions/UsingFindElementByString" }, "UsingGoto": { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_en.properties index 7f80282befe..06f19a2a603 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_en.properties @@ -1,2 +1,2 @@ diagnosticMessage=Don't use method "%s" and finding by string. -diagnosticName=Using FindByName and FindByCode \ No newline at end of file +diagnosticName=Using FindByName, FindByCode and FindByNumber \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_ru.properties index 6ae96c597d6..476a7617437 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic_ru.properties @@ -1,2 +1,2 @@ diagnosticMessage=Не следует использовать метод "%s" и поиск по строке -diagnosticName=Использование методов "НайтиПоНаименованию" и "НайтиПоКоду" \ No newline at end of file +diagnosticName=Использование методов "НайтиПоНаименованию", "НайтиПоКоду" и "НайтиПоНомеру" \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java index 617e91e0408..414745dfb23 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java @@ -42,7 +42,7 @@ void runTest() { List diagnostics = getDiagnostics(); // then - assertThat(diagnostics).hasSize(6); + assertThat(diagnostics).hasSize(9); assertThat(diagnostics, true) .hasRange(7, 38, 7, 78) .hasRange(9, 40, 9, 61) @@ -50,8 +50,9 @@ void runTest() { .hasRange(24, 35, 24, 53) .hasRange(27, 35, 27, 51) .hasRange(30, 27, 30, 53) + .hasRange(39, 67, 110) + .hasRange(41, 35, 53) + .hasRange(44, 29, 49) ; - } - } diff --git a/src/test/resources/diagnostics/UsingFindElementByStringDiagnostic.bsl b/src/test/resources/diagnostics/UsingFindElementByStringDiagnostic.bsl index 2f6d4784cac..8b0ac99391e 100644 --- a/src/test/resources/diagnostics/UsingFindElementByStringDiagnostic.bsl +++ b/src/test/resources/diagnostics/UsingFindElementByStringDiagnostic.bsl @@ -30,4 +30,18 @@ А = Справочники.Валюты.Функция( Справочники.Валюты.НайтиПоНаименованию("777") // сработает ); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Процедура Тест3() + + Наименование = "333"; // Пока не сработает + Значение = Документы.Реализация.НайтиПоНомеру(Наименование); + + ОбъектНазначения = Документы.ПередачаТоваровМеждуОрганизациями.НайтиПоНомеру("0000-000001", ТекущаяДата()); // замечание + + Значение3 = БизнесПроцессы.БП1.НайтиПоНомеру(333); // замечание + + А = Документы.Реализация.Функция( + Документы.Реализация.НайтиПоНомеру("333") // замечание + ); +КонецПроцедуры From b63832981d7aae7ef89e4e6c0b7f2957899d8056 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:05:07 +0000 Subject: [PATCH 362/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.0 to 4.8.2. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.0...4.8.2) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9d8ca4a876b..6b2e42ebc7b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -131,7 +131,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.0") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.2") // TEST From e52d731d34fbbcfe2b61d40b182b28727dc6d4ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:07:25 +0000 Subject: [PATCH 363/595] build(deps): bump actions/setup-java from 3 to 4 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/benchmark.yml | 2 +- .github/workflows/check-package.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/gh-pages.yml | 2 +- .github/workflows/gradle.yml | 2 +- .github/workflows/javadoc.yml | 2 +- .github/workflows/publish-to-sonatype.yml | 2 +- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index a151fc26bd9..1b1da2fd5dc 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -29,7 +29,7 @@ jobs: uses: actions/checkout@v3 - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index bcef581c07f..af6c2260d65 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -34,7 +34,7 @@ jobs: uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 20 distribution: 'temurin' diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9e04ea88f80..2ac7a05420d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,7 +30,7 @@ jobs: fetch-depth: 2 - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 37ea796983b..0ad0aac45a9 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v4 - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index ede86476c5c..630ed70524d 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -23,7 +23,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java_version }} - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java_version }} distribution: 'temurin' diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index 2362a39423c..ec8bc5c1b6c 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/publish-to-sonatype.yml b/.github/workflows/publish-to-sonatype.yml index 925bdc3a776..2c5dc68bd01 100644 --- a/.github/workflows/publish-to-sonatype.yml +++ b/.github/workflows/publish-to-sonatype.yml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 60c4d127520..bb25f1763da 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -48,7 +48,7 @@ jobs: git checkout ${{ github.event.workflow_run.head_branch }} git clean -ffdx && git reset --hard HEAD - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5ba575a6062..ab80e6b214b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 20 distribution: 'temurin' From 476bc3893a1f23bd3ee3b18750688b0d67723842 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 4 Dec 2023 08:40:33 +0100 Subject: [PATCH 364/595] Downgrade version of setup-java - old libs on host --- .github/workflows/benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 1b1da2fd5dc..a151fc26bd9 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -29,7 +29,7 @@ jobs: uses: actions/checkout@v3 - name: Setup JDK - uses: actions/setup-java@v4 + uses: actions/setup-java@v3 with: java-version: 17 distribution: 'temurin' From a6a05caf146c56ddfde9ee212dc78fd0893deb0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 09:18:54 +0000 Subject: [PATCH 365/595] build(deps): bump JetBrains/qodana-action from 2023.2.8 to 2023.2.9 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.2.8 to 2023.2.9. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.2.8...v2023.2.9) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 1522b6f4e02..c867d3e5fef 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.2.8 + uses: JetBrains/qodana-action@v2023.2.9 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 98bbf2e47bd8d2f9db71921d9b581dc7eb517ee9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 6 Dec 2023 18:45:00 +0100 Subject: [PATCH 366/595] Update dependabot.yml --- .github/dependabot.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 947714263eb..7b69fdb395b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,12 +9,11 @@ updates: directory: "/" # Location of package manifests schedule: interval: "daily" - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" groups: freefair: patterns: - "io.freefair.*" - + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" From e1beb6ab683cfcba4c93ab0d0f5ac74b4cb5a624 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:45:38 +0000 Subject: [PATCH 367/595] build(deps): bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/benchmark.yml | 2 +- .github/workflows/gh-pages.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index a151fc26bd9..bd9ba05ea06 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -38,7 +38,7 @@ jobs: run: ./gradlew bootJar - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.7" diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 0ad0aac45a9..cbec2a32a12 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -29,7 +29,7 @@ jobs: run: ./gradlew --no-daemon javadoc - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.7.15' architecture: 'x64' From e4fade0e71df8f747ecaf82dd2f6432012ccb77b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 7 Dec 2023 00:06:26 +0100 Subject: [PATCH 368/595] Update benchmark.yml --- .github/workflows/benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index a151fc26bd9..1b1da2fd5dc 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -29,7 +29,7 @@ jobs: uses: actions/checkout@v3 - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' From d0de23823962fe0650180ad9dd2cb99057acddd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 09:13:38 +0000 Subject: [PATCH 369/595] build(deps): bump JetBrains/qodana-action from 2023.2.9 to 2023.3.0 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.2.9 to 2023.3.0. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.2.9...v2023.3.0) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index c867d3e5fef..eaf2dc4ee01 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.2.9 + uses: JetBrains/qodana-action@v2023.3.0 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 3d5bb544e5bad382d4ff62963e7d9703eac965e5 Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Tue, 12 Dec 2023 21:23:44 +0400 Subject: [PATCH 370/595] fix syntax error in docs #3200 --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index c476360630e..cc06a95a501 100644 --- a/docs/index.md +++ b/docs/index.md @@ -207,7 +207,7 @@ Run analysis and get diagnostic info ``` Для указания каталога расположения анализируемых исходников используется параметр `--srcDir` (сокращенно `-s`), за которым следует путь (относительный или абсолютный) к каталогу исходников. -Для формирования отчета об анализе требуется указать один или "репортеров". Для указания репортера используется параметр `--reporter` (сокращенно `-r`), за которым следует ключ репортера. Допустимо указывать несколько репортеров. Список репортетов см. в разделе **Репортеры**. +Для формирования отчета об анализе требуется указать один из "репортеров". Для указания репортера используется параметр `--reporter` (сокращенно `-r`), за которым следует ключ репортера. Допустимо указывать несколько репортеров. Список репортетов см. в разделе **Репортеры**. Пример строки запуска анализа: From 72598688734a31c10ffae8572e4408ea47460183 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 09:35:54 +0000 Subject: [PATCH 371/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.2 to 4.8.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.2...4.8.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6b2e42ebc7b..9c0f0ceca7b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -131,7 +131,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.2") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.3") // TEST From 2878eb40d8c192bd25340dfe34d675f6f41a9f35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 09:42:35 +0000 Subject: [PATCH 372/595] build(deps): bump dawidd6/action-download-artifact from 2 to 3 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 2 to 3. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v2...v3) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index bb25f1763da..8923c07c393 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Download PR number artifact if: github.event.workflow_run.event == 'pull_request' - uses: dawidd6/action-download-artifact@v2 + uses: dawidd6/action-download-artifact@v3 with: workflow: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} From 95f8c6fba23a612444c23fffc7c6add4bbb0c8e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:21:03 +0000 Subject: [PATCH 373/595] build(deps): bump github/codeql-action from 2 to 3 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v2...v3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/qodana.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2ac7a05420d..d42c3aa797a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,7 +37,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 # Override language selection by uncommenting this and choosing your languages with: languages: java @@ -52,4 +52,4 @@ jobs: - run: ./gradlew jar - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index eaf2dc4ee01..7b7ab7f595a 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -25,7 +25,7 @@ jobs: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: linter: jetbrains/qodana-jvm-community - - uses: github/codeql-action/upload-sarif@v2 + - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json - name: Deploy to GitHub Pages From 9858fb71705d5dbd4a6e3017a83e1846e8dbe4b7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 14 Dec 2023 21:37:13 +0300 Subject: [PATCH 374/595] =?UTF-8?q?=D0=BC=D0=B0=D0=B3=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=D0=B5=20=D0=B4=D0=B0=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=85=D0=BE=D0=B4=D0=B8=D0=BC=20=D0=B2=D0=B5=D0=B7=D0=B4?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit кроме присваиваний closes #3206 --- .../diagnostics/MagicDateDiagnostic.java | 91 +++++++++++-------- .../diagnostics/MagicDateDiagnosticTest.java | 32 ++++--- .../diagnostics/MagicDateDiagnostic.bsl | 8 +- 3 files changed, 83 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index ab216658a53..b0f4df368f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -29,9 +29,7 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; -import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.runtime.tree.TerminalNode; import java.util.Arrays; import java.util.HashSet; @@ -83,51 +81,72 @@ public void configure(Map configuration) { authorizedDates.addAll(authD); } - @Override - public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - Optional.of(ctx) - .filter(it -> methodPattern.matcher(it.methodName().getText()).matches()) - .map(BSLParser.GlobalMethodCallContext::doCall) - .map(BSLParser.DoCallContext::callParamList) - .filter(callParamList -> paramPattern.matcher(callParamList.getText()).matches()) - .ifPresent(this::checkExclAddDiagnostic); - - return super.visitGlobalMethodCall(ctx); + private static Optional getExpression(Optional contextOptional) { + return contextOptional + .map(BSLParserRuleContext::getParent) + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) + .filter(context -> context.getChildCount() == 1) + .filter(BSLParser.ExpressionContext.class::isInstance); } - @Override - public ParseTree visitConstValue(BSLParser.ConstValueContext ctx) { - TerminalNode tNode = ctx.DATETIME(); - if (tNode != null) { - checkExclAddDiagnostic(ctx); - } + private static boolean insideSimpleDateAssignment(Optional expressionContext) { + return expressionContext + .map(BSLParserRuleContext::getParent) + .filter(BSLParser.AssignmentContext.class::isInstance) + .isPresent(); + } - return ctx; + private static boolean insideAssignmentWithDateMethodForSimpleDate(Optional expressionContext) { + return expressionContext + .map(BSLParserRuleContext::getParent) // callParam + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) // callParamList + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) // doCall + .map(BSLParserRuleContext::getParent) // globalCall - метод Дата(ХХХ) + .filter(BSLParser.GlobalMethodCallContext.class::isInstance) + .map(BSLParser.GlobalMethodCallContext.class::cast) + .filter(context -> methodPattern.matcher(context.methodName().getText()).matches()) + .map(BSLParserRuleContext::getParent) // complexId + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) // member + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) // expression + .filter(context -> context.getChildCount() == 1) + .map(BSLParserRuleContext::getParent) + .filter(BSLParser.AssignmentContext.class::isInstance) + .isPresent(); } - private void checkExclAddDiagnostic(BSLParserRuleContext ctx){ - String checked = ctx.getText(); - if (checked != null && !isExcluded(checked)) { - ParserRuleContext expression; - if (ctx instanceof BSLParser.CallParamListContext){ - expression = ctx.getParent().getParent().getParent().getParent().getParent(); - } else { - expression = ctx.getParent().getParent(); + @Override + public ParseTree visitConstValue(BSLParser.ConstValueContext ctx) { + var tNode = ctx.DATETIME(); + var sNode = ctx.string(); + if ((tNode != null || sNode != null) && isAccepted(ctx)) { + var contextOptional = Optional.of(ctx); + if (sNode != null) { + contextOptional = contextOptional + .filter(constValueContext -> paramPattern.matcher(constValueContext.getText()).matches()); } - if (expression instanceof BSLParser.ExpressionContext - && (!isAssignExpression((BSLParser.ExpressionContext) expression))) { - diagnosticStorage.addDiagnostic(ctx.stop, info.getMessage(checked)); + + final var expressionContext = getExpression(contextOptional); + if (!insideSimpleDateAssignment(expressionContext) + && !insideAssignmentWithDateMethodForSimpleDate(expressionContext)) { + diagnosticStorage.addDiagnostic(ctx, info.getMessage(ctx.getText())); } } - } - private boolean isExcluded(String sIn) { - String s = nonNumberPattern.matcher(sIn).replaceAll(""); - return authorizedDates.contains(s); + return ctx; } - private static boolean isAssignExpression(BSLParser.ExpressionContext expression) { - return (expression.getChildCount() <= 1); + private boolean isAccepted(BSLParserRuleContext ctx) { + String text = ctx.getText(); + return text != null && !text.isEmpty() && !isExcluded(text); } + private boolean isExcluded(String text) { + String s = nonNumberPattern.matcher(text).replaceAll(""); + return authorizedDates.contains(s); + } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 353c823612a..1d1bf82ef31 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -39,13 +39,20 @@ void test() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(5); + assertThat(diagnostics).hasSize(12); assertThat(diagnostics, true) - .hasRange(1, 12, 1, 22) - .hasRange(2, 12, 2, 28) - .hasRange(3, 7, 3, 17) - .hasRange(4, 14, 4, 24) - .hasRange(13, 7, 13, 26); + .hasRange(1, 12, 22) + .hasRange(2, 12, 28) + .hasRange(3, 7, 17) + .hasRange(4, 14, 24) + .hasRange(13, 7, 26) + .hasRange(15, 87, 97) + .hasRange(16, 80, 90) + .hasRange(16, 92, 102) + .hasRange(17, 22, 32) + .hasRange(18, 19, 35) + .hasRange(19, 10, 26) + .hasRange(19, 29, 39); } @@ -53,16 +60,19 @@ void test() { void testConfigure() { Map configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); - configuration.put("authorizedDates", "00010101,00010101000000,000101010000,12340101, 00020101 ,,"); + configuration.put("authorizedDates", "00010101,00010101000000,000101010000,00050101,00020501121314,12340101, 00020101 ,,"); diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(3); + assertThat(diagnostics).hasSize(5); assertThat(diagnostics, true) - .hasRange(2, 12, 2, 28) - .hasRange(3, 7, 3, 17) - .hasRange(13, 7, 13, 26); + .hasRange(2, 12, 28) + .hasRange(3, 7, 17) + .hasRange(13, 7, 26) + .hasRange(13, 7, 26) + .hasRange(17, 22, 32) + .hasRange(19, 29, 39); } } diff --git a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl index 044f4133257..7f47f947fcd 100644 --- a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl +++ b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl @@ -11,4 +11,10 @@ КонецЦикла; День = Дата("00010101") + Шаг; // исключение День = '0001-01why not?01' + Шаг; // исключение -День = '0001-01why not?02' + Шаг; // ошибка \ No newline at end of file +День = '0001-01why not?02' + Шаг; // ошибка + +ИменаПараметров = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ИмяПараметра, , Дата("00050101")); // замечание +ИменаПараметров = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(ИмяПараметра, "00050101", "00050101"); // замечание +Настройки = Настройки('12350101'); // замечание +Настройки.Свойство("00020501121314", ЗначениеЕдиничногоПараметра); // замечание +Выполнить("00020501121314" + '12350101'); // замечание From e6b2d8e0680c9ef26c90238b9b9bed5c5acf0cd1 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 14 Dec 2023 21:43:55 +0300 Subject: [PATCH 375/595] =?UTF-8?q?=D1=82=D0=B8=D0=BF=20SECURITY=5FHOTSPOT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/PrivilegedModuleMethodCallDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java index b2bab8ad94a..078b8187e2e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -40,7 +40,7 @@ import java.util.Optional; @DiagnosticMetadata( - type = DiagnosticType.VULNERABILITY, + type = DiagnosticType.SECURITY_HOTSPOT, severity = DiagnosticSeverity.MAJOR, minutesToFix = 60, tags = { From 76ddd28dc211e70f8b10f94a4d5dd7b56c126829 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Thu, 14 Dec 2023 22:40:10 +0300 Subject: [PATCH 376/595] =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B8=D1=81=D1=8C=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MagicDateDiagnostic.java | 32 +++++++++---------- .../diagnostics/MagicDateDiagnostic.bsl | 5 +++ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index b0f4df368f8..85cb1298e90 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -71,16 +71,6 @@ public class MagicDateDiagnostic extends AbstractVisitorDiagnostic { ) private final Set authorizedDates = new HashSet<>(Arrays.asList(DEFAULT_AUTHORIZED_DATES.split(","))); - @Override - public void configure(Map configuration) { - var authorizedDatesString = (String) configuration.getOrDefault("authorizedDates", DEFAULT_AUTHORIZED_DATES); - Set authD = Arrays.stream(authorizedDatesString.split(",")) - .map(String::trim) - .collect(Collectors.toSet()); - authorizedDates.clear(); - authorizedDates.addAll(authD); - } - private static Optional getExpression(Optional contextOptional) { return contextOptional .map(BSLParserRuleContext::getParent) @@ -119,28 +109,36 @@ private static boolean insideAssignmentWithDateMethodForSimpleDate(Optional configuration) { + var authorizedDatesString = (String) configuration.getOrDefault("authorizedDates", DEFAULT_AUTHORIZED_DATES); + Set authD = Arrays.stream(authorizedDatesString.split(",")) + .map(String::trim) + .collect(Collectors.toSet()); + authorizedDates.clear(); + authorizedDates.addAll(authD); + } + @Override public ParseTree visitConstValue(BSLParser.ConstValueContext ctx) { var tNode = ctx.DATETIME(); var sNode = ctx.string(); if ((tNode != null || sNode != null) && isAccepted(ctx)) { - var contextOptional = Optional.of(ctx); - if (sNode != null) { - contextOptional = contextOptional - .filter(constValueContext -> paramPattern.matcher(constValueContext.getText()).matches()); + if (sNode != null && !paramPattern.matcher(ctx.getText()).matches()) { + return defaultResult(); } - final var expressionContext = getExpression(contextOptional); + final var expressionContext = getExpression(Optional.of(ctx)); if (!insideSimpleDateAssignment(expressionContext) && !insideAssignmentWithDateMethodForSimpleDate(expressionContext)) { diagnosticStorage.addDiagnostic(ctx, info.getMessage(ctx.getText())); } } - return ctx; + return defaultResult(); } - private boolean isAccepted(BSLParserRuleContext ctx) { + private boolean isAccepted(BSLParser.ConstValueContext ctx) { String text = ctx.getText(); return text != null && !text.isEmpty() && !isExcluded(text); } diff --git a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl index 7f47f947fcd..cc1fd04b908 100644 --- a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl +++ b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl @@ -18,3 +18,8 @@ Настройки = Настройки('12350101'); // замечание Настройки.Свойство("00020501121314", ЗначениеЕдиничногоПараметра); // замечание Выполнить("00020501121314" + '12350101'); // замечание + +Значение = Метод("%1/%2"); +Если Условие Тогда + ВызватьИсключение "Не указано значение константы ХХХ"; +КонецЕсли; \ No newline at end of file From 473c87b546921d92e276c45c24ac76731ee9f10d Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 15 Dec 2023 00:10:10 +0300 Subject: [PATCH 377/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=A4=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/MagicDateDiagnostic.java | 42 ++++++++++++++++++- .../diagnostics/MagicDateDiagnosticTest.java | 38 ++++++++--------- .../diagnostics/MagicDateDiagnostic.bsl | 40 +++++++++++++++++- 3 files changed, 98 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index 85cb1298e90..fc611406a09 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -58,8 +58,9 @@ public class MagicDateDiagnostic extends AbstractVisitorDiagnostic { ); private static final Pattern paramPattern = CaseInsensitivePattern.compile( - "\"\\d{8}.*" + "\"[0123]{1}\\d{7}\"|\"[0123]{1}\\d{13}\"" ); + private static final Pattern zeroPattern = Pattern.compile("^0+"); private static final Pattern nonNumberPattern = CaseInsensitivePattern.compile( "\\D" @@ -109,6 +110,43 @@ private static boolean insideAssignmentWithDateMethodForSimpleDate(Optional 3999) { + return false; + } + var month = parseInt(strDate.substring(4, 6)); + var day = parseInt(strDate.substring(6, 8)); + if (month < 1 || month > 12 || day < 1 || day > 31) { + return false; + } + if (strDate.length() == 8) { + return true; + } + var hh = parseInt(strDate.substring(8, 10)); + var mm = parseInt(strDate.substring(10, 12)); + var ss = parseInt(strDate.substring(12, 14)); + return hh <= 24 && mm <= 60 && ss <= 60; + } + + private static int parseInt(String text) { + String s = zeroPattern.matcher(text).replaceAll(""); + try { + return Integer.parseInt(s); + } catch (NumberFormatException e) { + return 0; + } + } + @Override public void configure(Map configuration) { var authorizedDatesString = (String) configuration.getOrDefault("authorizedDates", DEFAULT_AUTHORIZED_DATES); @@ -124,7 +162,7 @@ public ParseTree visitConstValue(BSLParser.ConstValueContext ctx) { var tNode = ctx.DATETIME(); var sNode = ctx.string(); if ((tNode != null || sNode != null) && isAccepted(ctx)) { - if (sNode != null && !paramPattern.matcher(ctx.getText()).matches()) { + if (sNode != null && !isValidDate(sNode)) { return defaultResult(); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 1d1bf82ef31..4212193d79d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -39,20 +39,21 @@ void test() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(12); + assertThat(diagnostics).hasSize(13); assertThat(diagnostics, true) - .hasRange(1, 12, 22) - .hasRange(2, 12, 28) - .hasRange(3, 7, 17) - .hasRange(4, 14, 24) - .hasRange(13, 7, 26) - .hasRange(15, 87, 97) - .hasRange(16, 80, 90) - .hasRange(16, 92, 102) - .hasRange(17, 22, 32) - .hasRange(18, 19, 35) - .hasRange(19, 10, 26) - .hasRange(19, 29, 39); + .hasRange(11, 12, 22) + .hasRange(12, 12, 28) + .hasRange(13, 7, 17) + .hasRange(14, 14, 24) + .hasRange(23, 7, 26) + .hasRange(25, 87, 97) + .hasRange(26, 80, 90) + .hasRange(26, 92, 102) + .hasRange(27, 22, 32) + .hasRange(28, 19, 35) + .hasRange(29, 10, 26) + .hasRange(29, 29, 39) + .hasRange(31, 64, 80); } @@ -67,12 +68,11 @@ void testConfigure() { assertThat(diagnostics).hasSize(5); assertThat(diagnostics, true) - .hasRange(2, 12, 28) - .hasRange(3, 7, 17) - .hasRange(13, 7, 26) - .hasRange(13, 7, 26) - .hasRange(17, 22, 32) - .hasRange(19, 29, 39); + .hasRange(12, 12, 28) + .hasRange(13, 7, 17) + .hasRange(23, 7, 26) + .hasRange(27, 22, 32) + .hasRange(29, 29, 39); } } diff --git a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl index cc1fd04b908..a89df894f87 100644 --- a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl +++ b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl @@ -1,3 +1,13 @@ +Функция МаксимальнаяДата() Экспорт + //Возврат '39991231235959'; // TODO +КонецФункции + +Функция МаксимальнаяДатаПриПродолжении() + //Возврат '39990101000000'; // TODO +КонецФункции + +Процедура Тест3() + День = Дата("00020101"); День = Дата("00020101") + Шаг; // ошибка День = Дата("00020101121314") + Шаг; // ошибка @@ -19,7 +29,35 @@ Настройки.Свойство("00020501121314", ЗначениеЕдиничногоПараметра); // замечание Выполнить("00020501121314" + '12350101'); // замечание +ОтборЭлемента.ПравоеЗначение = Новый СтандартнаяДатаНачала(Дата('19800101000000')); + Значение = Метод("%1/%2"); Если Условие Тогда ВызватьИсключение "Не указано значение константы ХХХ"; -КонецЕсли; \ No newline at end of file +КонецЕсли; + +УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); +ПосторонниеСимволы = СтрСоединить(СтрРазделить(СтрокаСЧислом, "0123456789", Ложь), ""); +Объект.GetStringValue("2147483649","Software\Buhphone","ProgramPath", Значение); +НедопустимыеСимволы = НедопустимыеСимволыВСтроке(СтрАдрес.АдресСервера, + "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ_-.:*?"); +НедопустимыеСимволы = НедопустимыеСимволы + "1234567890 "; + +Дата = Метод("04937803-5dba-11df-a1d4-005056c00008"); +Набор.Идентификатор = Новый УникальныйИдентификатор("70425541-23e3-4e5a-8bd3-9587cc949dfa"); + +НецифровыеСимволы = СтрСоединить(СтрРазделить(Значение, "1234567890,.")); +Результат = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат; + +Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); +КодСтроки = КодРодителя + Прав("00000000" + Формат(Счетчик, "ЧГ="), ЧислоЦифр); +КлючНаборовСвойств = НачалоКлюча + Лев(КлючНазначения + "00000000000000000000000000000000", 32); + +КодыКЛАДР.Регион = Лев(КодКЛАДР, 2) + "00000000000"; +КодыКЛАДР.Район = Лев(КодКЛАДР, 5) + "00000000"; + +//'39990202' +//'39991231235959' +//'39990101000000' + +КонецПроцедуры \ No newline at end of file From 3598cc30a12cdbf7e4c1fb862daa303d228f92a8 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 15 Dec 2023 00:21:04 +0300 Subject: [PATCH 378/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/diagnostics/MagicDateDiagnosticTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 4212193d79d..79f0acb71fb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -66,13 +66,13 @@ void testConfigure() { List diagnostics = getDiagnostics(); - assertThat(diagnostics).hasSize(5); + assertThat(diagnostics).hasSize(6); assertThat(diagnostics, true) .hasRange(12, 12, 28) .hasRange(13, 7, 17) .hasRange(23, 7, 26) .hasRange(27, 22, 32) - .hasRange(29, 29, 39); - + .hasRange(29, 29, 39) + .hasRange(31, 64, 80); } } From b21b4fcc0f6a57006b0a73835b8a32b5652c7cb5 Mon Sep 17 00:00:00 2001 From: nicolay kuznetsov Date: Fri, 15 Dec 2023 07:28:38 +0300 Subject: [PATCH 379/595] Update UsageWriteLogEvent.md --- docs/diagnostics/UsageWriteLogEvent.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/diagnostics/UsageWriteLogEvent.md b/docs/diagnostics/UsageWriteLogEvent.md index 33a392f0721..3f0ad01f758 100644 --- a/docs/diagnostics/UsageWriteLogEvent.md +++ b/docs/diagnostics/UsageWriteLogEvent.md @@ -57,7 +57,27 @@ ВызватьИсключение; КонецПопытки; ``` +В тоже время, если во внешней попытке делается запись в ЖР, во внутренней делать её уже не нужно. +```bsl +Процедура ЗагрузитьДанные() Экспорт + Попытка + ВыполнитьЗаписьДанных(); + Исключение + ЗаписьЖурналаРегистрации(); // <- исключение подавляется с записью в ЖР + КонецПопытки; +КонецПроцедуры +Процедура ВыполнитьЗаписьДанных() + НачатьТранзакцию(); + Попытка + // ... + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; // <- вложенная попытка, запись в ЖР не требуется + КонецПопытки; +КонецПроцедуры +``` ## Источники ## Description -It is forbidden to use the search methods for elements "FindByName" or "FindByCode". +The rule finds the use of the `FindByName`, `FindByCode` or `FindByNumber` methods using specific numbers, codes and names of elements or documents. +Similar code may not work correctly in other databases. +Often such code is test code included in the release version, which is also not recommended. + +It is recommended to specify constant data values ​​from the database in "Сonstants" or predefined metadata elements. ## Examples +Incorrect: ```bsl Position = Catalogs.Positions.FindByName("Senior Accountant"); ``` +or +```bsl +Position = Catalogs.Positions.FindByCode("00-0000001"); +``` or ```bsl -Position = Catalogs.Positions.FindByCode("00-0000001"); +Object = Documents.Invoice.FindByNumber("0000-000001", CurrentDate()); ``` Acceptable use: @@ -24,3 +33,7 @@ Catalogs.Currencies.FindByCode(CurrentData.CurrencyCodeDigital); ```bsl Catalogs.BankClassifier.FindByCode(BankDetails.BIK); ``` + +```bsl +Documents.Invoice.FindByNumber(Number); +``` From c5e34bc9d063e9c7a67270e69ee560118f4fe7cb Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 06:20:18 +0000 Subject: [PATCH 389/595] Translate ServerSideExportFormMethod.md in en 100% translated source file: 'ServerSideExportFormMethod.md' on 'en'. --- docs/en/diagnostics/ServerSideExportFormMethod.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/en/diagnostics/ServerSideExportFormMethod.md b/docs/en/diagnostics/ServerSideExportFormMethod.md index d886a1f4f1c..53aeac3b31c 100644 --- a/docs/en/diagnostics/ServerSideExportFormMethod.md +++ b/docs/en/diagnostics/ServerSideExportFormMethod.md @@ -1,8 +1,7 @@ # Server-side export form method (ServerSideExportFormMethod) -## Description - +## Описание диагностики In a form module, you can declare export methods that are available in the client context (usually, these are form notification event handlers). For export methods of the form, only the compilation directive `AtClient` can be specified, since for the rest there is no practical sense: accessing form methods from outside is available only after calling the method `GetForm`, which is available only on the client. From 462394e8e1b6b1706ca57471bbc2d7d4b30f4fb3 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 06:23:47 +0000 Subject: [PATCH 390/595] Translate ServerSideExportFormMethod.md in en 100% translated source file: 'ServerSideExportFormMethod.md' on 'en'. --- docs/en/diagnostics/ServerSideExportFormMethod.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/ServerSideExportFormMethod.md b/docs/en/diagnostics/ServerSideExportFormMethod.md index 53aeac3b31c..478e3f60df2 100644 --- a/docs/en/diagnostics/ServerSideExportFormMethod.md +++ b/docs/en/diagnostics/ServerSideExportFormMethod.md @@ -1,7 +1,7 @@ # Server-side export form method (ServerSideExportFormMethod) -## Описание диагностики +## Description In a form module, you can declare export methods that are available in the client context (usually, these are form notification event handlers). For export methods of the form, only the compilation directive `AtClient` can be specified, since for the rest there is no practical sense: accessing form methods from outside is available only after calling the method `GetForm`, which is available only on the client. From c7cde6f9569826f8c044193e8b2f65b474208cc2 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Mon, 18 Dec 2023 15:39:04 +0300 Subject: [PATCH 391/595] bump bsp-parser --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9c0f0ceca7b..997b4728a87 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,7 +74,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.21.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "0.22.1") { + api("io.github.1c-syntax", "bsl-parser", "0.23.3") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") From 6e4fcffd751f541a9a4b5e77c3bf9c45b9a342b2 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Sat, 7 Oct 2023 18:23:36 +0300 Subject: [PATCH 392/595] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=BA=D0=B8=20mdclasses=200.12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 4 +- .../languageserver/cli/AnalyzeCommand.java | 4 +- .../context/DocumentContext.java | 26 +++--- .../languageserver/context/ServerContext.java | 19 +++-- .../AbstractCommonModuleNameDiagnostic.java | 23 +++-- .../AbstractMetadataDiagnostic.java | 19 +++-- .../diagnostics/CachedPublicDiagnostic.java | 18 ++-- .../CommonModuleAssignDiagnostic.java | 11 +-- .../CommonModuleInvalidTypeDiagnostic.java | 6 +- .../CommonModuleNameCachedDiagnostic.java | 6 +- .../CommonModuleNameClientDiagnostic.java | 6 +- ...ommonModuleNameClientServerDiagnostic.java | 4 +- .../CommonModuleNameFullAccessDiagnostic.java | 4 +- ...ommonModuleNameGlobalClientDiagnostic.java | 4 +- .../CommonModuleNameGlobalDiagnostic.java | 4 +- .../CommonModuleNameServerCallDiagnostic.java | 4 +- .../CommonModuleNameWordsDiagnostic.java | 6 +- .../CompilationDirectiveLostDiagnostic.java | 14 +-- .../DenyIncompleteValuesDiagnostic.java | 33 +++---- ...eExternalCodeInCommonModuleDiagnostic.java | 6 +- .../ForbiddenMetadataNameDiagnostic.java | 24 ++---- .../MetadataObjectNameLengthDiagnostic.java | 11 ++- ...ingEventSubscriptionHandlerDiagnostic.java | 36 ++++---- .../OrdinaryAppSupportDiagnostic.java | 16 ++-- .../QueryToMissingMetadataDiagnostic.java | 16 +--- .../RedundantAccessToObjectDiagnostic.java | 17 ++-- .../diagnostics/RefOveruseDiagnostic.java | 28 +++--- ...MetadataObjectAndChildNamesDiagnostic.java | 41 +++++---- .../ScheduledJobHandlerDiagnostic.java | 51 ++++++----- .../ServerSideExportFormMethodDiagnostic.java | 11 ++- ...SetPermissionsForNewObjectsDiagnostic.java | 6 +- .../UsingModalWindowsDiagnostic.java | 5 +- .../UsingSynchronousCallsDiagnostic.java | 5 +- ...rongDataPathForFormElementsDiagnostic.java | 32 +++---- .../WrongHttpServiceHandlerDiagnostic.java | 16 ++-- .../WrongWebServiceHandlerDiagnostic.java | 16 ++-- .../DiagnosticsConfiguration.java | 59 ++++++------- .../references/ReferenceIndexFiller.java | 40 ++++----- .../reporters/data/FileInfo.java | 11 +-- .../languageserver/utils/MdoRefBuilder.java | 14 ++- .../context/ServerContextTest.java | 16 ++-- .../computer/ModuleSymbolComputerTest.java | 4 +- .../CachedPublicDiagnosticTest.java | 8 +- ...CommonModuleInvalidTypeDiagnosticTest.java | 7 +- .../CommonModuleNameCachedDiagnosticTest.java | 11 +-- .../CommonModuleNameClientDiagnosticTest.java | 12 +-- ...nModuleNameClientServerDiagnosticTest.java | 10 +-- ...monModuleNameFullAccessDiagnosticTest.java | 9 +- ...nModuleNameGlobalClientDiagnosticTest.java | 10 +-- .../CommonModuleNameGlobalDiagnosticTest.java | 11 +-- ...monModuleNameServerCallDiagnosticTest.java | 10 +-- .../CommonModuleNameWordsDiagnosticTest.java | 10 +-- ...ompilationDirectiveLostDiagnosticTest.java | 6 +- .../DenyIncompleteValuesDiagnosticTest.java | 18 ++-- .../diagnostics/DiagnosticsTest.java | 47 ++++------ ...ernalCodeInCommonModuleDiagnosticTest.java | 8 +- .../ForbiddenMetadataNameDiagnosticTest.java | 57 ++++++------- ...etadataObjectNameLengthDiagnosticTest.java | 26 ++++-- ...RedundantAccessToObjectDiagnosticTest.java | 4 +- ...dataObjectAndChildNamesDiagnosticTest.java | 85 ++++++++++++------- .../ScheduledJobHandlerDiagnosticTest.java | 23 +++-- ...verSideExportFormMethodDiagnosticTest.java | 6 +- .../UnusedLocalMethodDiagnosticTest.java | 7 +- .../UsingModalWindowsDiagnosticTest.java | 5 +- .../UsingSynchronousCallsDiagnosticTest.java | 5 +- ...DataPathForFormElementsDiagnosticTest.java | 28 +++--- .../references/ReferenceIndexTest.java | 4 +- 67 files changed, 510 insertions(+), 613 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 997b4728a87..4e55df0dd2b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -83,8 +83,8 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("com.github.1c-syntax", "mdclasses", "0.10.4") - api("io.github.1c-syntax", "bsl-common-library", "0.3.0") + api("com.github.1c-syntax", "mdclasses", "0.12.0-rc.2") + api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") // JLanguageTool diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index 06908fbabc3..f31241320fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.reporters.ReportersAggregator; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MdoReference; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.utils.Absolute; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -208,7 +208,7 @@ private FileInfo getFileInfoFromFile(Path srcDir, File file) { List diagnostics = documentContext.getDiagnostics(); MetricStorage metrics = documentContext.getMetrics(); var mdoRef = documentContext.getMdObject() - .map(AbstractMDObjectBase::getMdoReference) + .map(MD::getMdoReference) .map(MdoReference::getMdoRef) .orElse(""); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index c52fec899b7..0d56d8ec736 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -33,16 +33,16 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree; import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.Module; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.parser.BSLLexer; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLTokenizer; import com.github._1c_syntax.bsl.parser.SDBLTokenizer; -import com.github._1c_syntax.bsl.supconf.SupportConfiguration; import com.github._1c_syntax.bsl.support.SupportVariant; import com.github._1c_syntax.bsl.types.ConfigurationSource; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.utils.Lazy; import edu.umd.cs.findbugs.annotations.Nullable; import jakarta.annotation.PostConstruct; @@ -68,7 +68,6 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Optional; import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Pattern; @@ -120,8 +119,6 @@ public class DocumentContext { private final Lazy contentList = new Lazy<>(this::computeContentList, computeLock); private final Lazy moduleType = new Lazy<>(this::computeModuleType, computeLock); - private final Lazy> supportVariants - = new Lazy<>(this::computeSupportVariants, computeLock); private final Lazy cognitiveComplexityData = new Lazy<>(this::computeCognitiveComplexity, computeLock); private final Lazy cyclomaticComplexityData @@ -240,13 +237,12 @@ public ModuleType getModuleType() { return moduleType.getOrCompute(); } - public Map getSupportVariants() { - return supportVariants.getOrCompute(); + public SupportVariant getSupportVariant() { + return getMdObject().map(MD::getSupportVariant).orElse(SupportVariant.NONE); } - public Optional getMdObject() { - return Optional - .ofNullable((AbstractMDObjectBase) getServerContext().getConfiguration().getModulesByObject().get(getUri())); + public Optional getMdObject() { + return getServerContext().getConfiguration().findChild(getUri()); } public List getQueries() { @@ -340,7 +336,6 @@ private void clearDependantData() { diagnosticsLock.unlock(); computeLock.unlock(); } - } private static FileType computeFileType(URI uri) { @@ -371,11 +366,10 @@ private SymbolTree computeSymbolTree() { private ModuleType computeModuleType() { - return context.getConfiguration().getModuleType(uri); - } - - private Map computeSupportVariants() { - return context.getConfiguration().getModuleSupport(uri); + return context.getConfiguration() + .getModuleByUri(uri) + .map(Module::getModuleType) + .orElse(ModuleType.UNKNOWN); } private ComplexityData computeCognitiveComplexity() { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 67e54a57078..dd273945d79 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -26,8 +26,9 @@ import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; import com.github._1c_syntax.bsl.languageserver.utils.NamedForkJoinWorkerThreadFactory; import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import com.github._1c_syntax.bsl.mdclasses.CF; +import com.github._1c_syntax.bsl.mdclasses.MDClasses; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.Configuration; import com.github._1c_syntax.utils.Absolute; import com.github._1c_syntax.utils.Lazy; import edu.umd.cs.findbugs.annotations.Nullable; @@ -63,7 +64,7 @@ public class ServerContext { private final LanguageServerConfiguration languageServerConfiguration; private final Map documents = Collections.synchronizedMap(new HashMap<>()); - private final Lazy configurationMetadata = new Lazy<>(this::computeConfigurationMetadata); + private final Lazy configurationMetadata = new Lazy<>(this::computeConfigurationMetadata); @Nullable @Setter private Path configurationRoot; @@ -258,7 +259,7 @@ public void closeDocument(DocumentContext documentContext) { documentContext.clearSecondaryData(); } - public Configuration getConfiguration() { + public CF getConfiguration() { return configurationMetadata.getOrCompute(); } @@ -273,9 +274,9 @@ private DocumentContext createDocumentContext(URI uri) { return documentContext; } - private Configuration computeConfigurationMetadata() { + private CF computeConfigurationMetadata() { if (configurationRoot == null) { - return Configuration.create(); + return (CF) MDClasses.createConfiguration(); } var progress = workDoneProgressHelper.createProgress(0, ""); @@ -284,15 +285,15 @@ private Configuration computeConfigurationMetadata() { var factory = new NamedForkJoinWorkerThreadFactory("compute-configuration-"); var executorService = new ForkJoinPool(ForkJoinPool.getCommonPoolParallelism(), factory, null, true); - Configuration configuration; + CF configuration; try { - configuration = executorService.submit(() -> Configuration.create(configurationRoot)).get(); + configuration = (CF) executorService.submit(() -> MDClasses.createConfiguration(configurationRoot)).get(); } catch (ExecutionException e) { LOGGER.error("Can't parse configuration metadata. Execution exception.", e); - configuration = Configuration.create(); + configuration = (CF) MDClasses.createConfiguration(); } catch (InterruptedException e) { LOGGER.error("Can't parse configuration metadata. Interrupted exception.", e); - configuration = Configuration.create(); + configuration = (CF) MDClasses.createConfiguration(); Thread.currentThread().interrupt(); } finally { executorService.shutdown(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java index 7d442b99905..e20de3803f6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java @@ -23,8 +23,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.regex.Matcher; @@ -49,36 +48,36 @@ protected void check() { } documentContext.getMdObject() - .filter(MDCommonModule.class::isInstance) - .map(MDCommonModule.class::cast) + .filter(CommonModule.class::isInstance) + .map(CommonModule.class::cast) .filter(this::flagsCheck) - .map(AbstractMDObjectBase::getName) + .map(CommonModule::getName) .map(pattern::matcher) .filter(this::matchCheck) .ifPresent(commonModule -> diagnosticStorage.addDiagnostic(range)); } - protected abstract boolean flagsCheck(MDCommonModule commonModule); + protected abstract boolean flagsCheck(CommonModule commonModule); protected boolean matchCheck(Matcher matcher) { return !matcher.find(); } - protected boolean isClientServer(MDCommonModule commonModule) { + protected boolean isClientServer(CommonModule commonModule) { return !commonModule.isServerCall() && commonModule.isServer() && commonModule.isExternalConnection() && isClientApplication(commonModule); } - protected boolean isClient(MDCommonModule commonModule) { + protected boolean isClient(CommonModule commonModule) { return !commonModule.isServerCall() && !commonModule.isServer() && !commonModule.isExternalConnection() && isClientApplication(commonModule); } - protected boolean isServerCall(MDCommonModule commonModule) { + protected boolean isServerCall(CommonModule commonModule) { return commonModule.isServerCall() && commonModule.isServer() && !commonModule.isExternalConnection() @@ -86,7 +85,7 @@ protected boolean isServerCall(MDCommonModule commonModule) { && !commonModule.isClientManagedApplication(); } - protected boolean isServer(MDCommonModule commonModule) { + protected boolean isServer(CommonModule commonModule) { return !commonModule.isServerCall() && commonModule.isServer() && commonModule.isExternalConnection() @@ -94,12 +93,12 @@ && isClientOrdinaryAppIfNeed(commonModule) && !commonModule.isClientManagedApplication(); } - private boolean isClientApplication(MDCommonModule commonModule) { + private boolean isClientApplication(CommonModule commonModule) { return isClientOrdinaryAppIfNeed(commonModule) && commonModule.isClientManagedApplication(); } - private boolean isClientOrdinaryAppIfNeed(MDCommonModule commonModule) { + private boolean isClientOrdinaryAppIfNeed(CommonModule commonModule) { return commonModule.isClientOrdinaryApplication() || !serverConfiguration.getDiagnosticsOptions().isOrdinaryAppSupport(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index e1a429211a8..2f87aa805bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -22,10 +22,10 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.ModuleOwner; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBSL; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import org.eclipse.lsp4j.Range; import java.util.ArrayList; @@ -103,24 +103,25 @@ protected void addDiagnostic(String message) { diagnosticStorage.addDiagnostic(diagnosticRange, message); } - protected abstract void checkMetadata(AbstractMDObjectBase mdo); + protected abstract void checkMetadata(MD mdo); private void checkMetadataWithModules() { documentContext.getMdObject() .filter(mdo -> filterMdoTypes.contains(mdo.getMdoType())) - .filter(AbstractMDObjectBSL.class::isInstance) + .filter(ModuleOwner.class::isInstance) + .map(ModuleOwner.class::cast) .filter(this::haveMatchingModule) .ifPresent(this::checkMetadata); } - private boolean haveMatchingModule(AbstractMDObjectBase mdo) { + private boolean haveMatchingModule(ModuleOwner mdo) { // чтобы не анализировать несколько раз и не выдавать одинаковые результаты для разных модулей, // выберем только один модуль, например модуль менеджера - if (documentContext.getModuleType() == ModuleType.ManagerModule){ + if (documentContext.getModuleType() == ModuleType.ManagerModule) { return true; } - return ((AbstractMDObjectBSL) mdo).getModules().stream() + return mdo.getModules().stream() .filter(mdoModule -> OBJECT_MODULES.contains(mdoModule.getModuleType())) .count() == 1; } @@ -135,8 +136,8 @@ private boolean haveMatchingModule(AbstractMDObjectBase mdo) { private void checkMetadataWithoutModules() { documentContext.getServerContext().getConfiguration().getChildren().stream() .filter(mdo -> filterMdoTypes.contains(mdo.getMdoType())) - .filter(mdo -> !(mdo instanceof AbstractMDObjectBSL) - || (((AbstractMDObjectBSL) mdo).getModules().stream() + .filter(mdo -> !(mdo instanceof ModuleOwner moduleOwner) + || (moduleOwner.getModules().stream() .noneMatch(module -> OBJECT_MODULES.contains(module.getModuleType())))) .forEach(this::checkMetadata); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java index efd49c36e72..7e63ac9c73e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java @@ -28,9 +28,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Keywords; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.regex.Pattern; @@ -68,18 +68,14 @@ protected void check() { .forEach(regionSymbol -> diagnosticStorage.addDiagnostic(regionSymbol.getRegionNameRange())); } - private boolean isCashed(DocumentContext documentContext) { + private static boolean isCashed(DocumentContext documentContext) { return documentContext.getMdObject() - .filter(MDCommonModule.class::isInstance) - .map(MDCommonModule.class::cast) - .map(MDCommonModule::getReturnValuesReuse) - .filter(this::isReuseValue) + .filter(CommonModule.class::isInstance) + .map(CommonModule.class::cast) + .map(CommonModule::getReturnValuesReuse) + .filter(value -> value == ReturnValueReuse.DURING_REQUEST + || value == ReturnValueReuse.DURING_SESSION) .isPresent(); } - private Boolean isReuseValue(ReturnValueReuse value) { - return value == ReturnValueReuse.DURING_REQUEST - || value == ReturnValueReuse.DURING_SESSION; - } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java index 050e29ec191..f1bc8d5d0b9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java @@ -26,9 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.parser.BSLParser; -import com.github._1c_syntax.mdclasses.Configuration; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.runtime.tree.TerminalNode; @DiagnosticMetadata( type = DiagnosticType.ERROR, @@ -43,15 +41,14 @@ public class CommonModuleAssignDiagnostic extends AbstractVisitorDiagnostic { @Override public ParseTree visitLValue(BSLParser.LValueContext ctx) { - TerminalNode identifier = ctx.IDENTIFIER(); + var identifier = ctx.IDENTIFIER(); - if (identifier == null - || ctx.acceptor() != null) { + if (identifier == null || ctx.acceptor() != null) { return ctx; } - Configuration configuration = documentContext.getServerContext().getConfiguration(); - if (configuration.getCommonModule(identifier.getText()).isPresent()) { + var configuration = documentContext.getServerContext().getConfiguration(); + if (configuration.findCommonModule(identifier.getText()).isPresent()) { diagnosticStorage.addDiagnostic(identifier, info.getMessage(identifier.getText())); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java index 48d16860240..5265f557566 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import java.util.regex.Matcher; @@ -45,9 +45,7 @@ DiagnosticTag.UNPREDICTABLE, DiagnosticTag.DESIGN } - ) - public class CommonModuleInvalidTypeDiagnostic extends AbstractCommonModuleNameDiagnostic { public CommonModuleInvalidTypeDiagnostic(LanguageServerConfiguration serverConfiguration) { @@ -55,7 +53,7 @@ public CommonModuleInvalidTypeDiagnostic(LanguageServerConfiguration serverConfi } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return !isServer(commonModule) && !isServerCall(commonModule) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java index 07ee6bb7d53..0e1ee8c27c8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java @@ -27,9 +27,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -47,7 +47,6 @@ ) public class CommonModuleNameCachedDiagnostic extends AbstractCommonModuleNameDiagnostic { - private static final String REGEXP = "повторноеиспользование|повтисп|cached"; public CommonModuleNameCachedDiagnostic(LanguageServerConfiguration serverConfiguration) { @@ -55,9 +54,8 @@ public CommonModuleNameCachedDiagnostic(LanguageServerConfiguration serverConfig } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return commonModule.getReturnValuesReuse() == ReturnValueReuse.DURING_REQUEST || commonModule.getReturnValuesReuse() == ReturnValueReuse.DURING_SESSION; } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java index 2349de3a0e1..e6bed8dfb9d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -53,10 +53,8 @@ public CommonModuleNameClientDiagnostic(LanguageServerConfiguration serverConfig } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return !commonModule.isGlobal() && isClient(commonModule); } - - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java index 9e49412059a..a38c28cc652 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -53,7 +53,7 @@ public CommonModuleNameClientServerDiagnostic(LanguageServerConfiguration server } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return isClientServer(commonModule); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java index b88d86ec27e..2a66588b810 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.SECURITY_HOTSPOT, @@ -53,7 +53,7 @@ public CommonModuleNameFullAccessDiagnostic(LanguageServerConfiguration serverCo } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return commonModule.isPrivileged(); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java index ed7b5b1fe98..be210450e54 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -51,7 +51,7 @@ public CommonModuleNameGlobalClientDiagnostic(LanguageServerConfiguration server } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return commonModule.isGlobal() && isClient(commonModule); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java index 8f6609550a0..ef4d52ff035 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -53,7 +53,7 @@ public CommonModuleNameGlobalDiagnostic(LanguageServerConfiguration serverConfig } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return commonModule.isGlobal(); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java index 7468c937aec..f2f4283bab2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java @@ -27,8 +27,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -53,7 +53,7 @@ public CommonModuleNameServerCallDiagnostic(LanguageServerConfiguration serverCo } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return isServerCall(commonModule); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java index ecbd20b0e92..68273127991 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java @@ -28,8 +28,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.Map; @@ -73,7 +73,7 @@ public void configure(Map configuration) { } @Override - protected boolean flagsCheck(MDCommonModule commonModule) { + protected boolean flagsCheck(CommonModule commonModule) { return true; } @@ -81,6 +81,4 @@ protected boolean flagsCheck(MDCommonModule commonModule) { protected boolean matchCheck(Matcher matcher) { return matcher.find(); } - } - diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java index fa4ce7d8369..1ad40cd9c14 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java @@ -26,10 +26,10 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.Form; import com.github._1c_syntax.bsl.mdo.support.FormType; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDOForm; import org.antlr.v4.runtime.tree.ParseTree; @DiagnosticMetadata( @@ -53,11 +53,8 @@ public class CompilationDirectiveLostDiagnostic extends AbstractVisitorDiagnosti public ParseTree visitFile(BSLParser.FileContext ctx) { if (documentContext.getModuleType() == ModuleType.FormModule) { var mdo = documentContext.getMdObject(); - if (mdo.isPresent() && mdo.get() instanceof AbstractMDOForm) { - var form = (AbstractMDOForm) mdo.get(); - if (form.getFormType() != FormType.MANAGED) { - return ctx; - } + if (mdo.isPresent() && mdo.get() instanceof Form form && form.getFormType() != FormType.MANAGED) { + return ctx; } } return super.visitFile(ctx); @@ -65,22 +62,17 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { @Override public ParseTree visitProcDeclaration(BSLParser.ProcDeclarationContext ctx) { - if (ctx.compilerDirective().isEmpty()) { diagnosticStorage.addDiagnostic(ctx.subName(), info.getMessage(ctx.subName().getText())); } - return ctx; } @Override public ParseTree visitFuncDeclaration(BSLParser.FuncDeclarationContext ctx) { - if (ctx.compilerDirective().isEmpty()) { diagnosticStorage.addDiagnostic(ctx.subName(), info.getMessage(ctx.subName().getText())); } - return ctx; } } - diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index 896bc6fb8f9..c6454558050 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -27,14 +27,12 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.Register; +import com.github._1c_syntax.bsl.mdo.children.Dimension; import com.github._1c_syntax.bsl.types.MDOType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.Dimension; -import org.jetbrains.annotations.NotNull; import java.util.List; -import java.util.stream.Stream; @DiagnosticMetadata( activatedByDefault = false, @@ -54,23 +52,18 @@ public DenyIncompleteValuesDiagnostic() { MDOType.ACCUMULATION_REGISTER, MDOType.ACCOUNTING_REGISTER, MDOType.CALCULATION_REGISTER - )); + )); } @Override - protected void checkMetadata(AbstractMDObjectBase mdo) { - getWrongDimensions((AbstractMDObjectComplex) mdo) - .forEach((Dimension dimension) -> { - var ownerMDOName = MdoRefBuilder.getLocaleOwnerMdoName(documentContext, mdo); - addDiagnostic(info.getMessage(dimension.getName(), ownerMDOName)); - }); - } - - @NotNull - private static Stream getWrongDimensions(AbstractMDObjectComplex mdo) { - return mdo.getChildren().stream() - .filter(Dimension.class::isInstance) - .map(Dimension.class::cast) - .filter(dimension -> !dimension.isDenyIncompleteValues()); + protected void checkMetadata(MD mdo) { + if (mdo instanceof Register register) { + register.getDimensions().stream() + .filter(dimension -> !dimension.isDenyIncompleteValues()) + .forEach((Dimension dimension) -> { + var ownerMDOName = MdoRefBuilder.getLocaleOwnerMdoName(documentContext, mdo); + addDiagnostic(info.getMessage(dimension.getName(), ownerMDOName)); + }); + } } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java index 0573e40d9fb..b66510b8f07 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java @@ -26,9 +26,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import org.antlr.v4.runtime.tree.ParseTree; @DiagnosticMetadata( @@ -50,8 +50,8 @@ public class ExecuteExternalCodeInCommonModuleDiagnostic extends AbstractExecute public ParseTree visitFile(BSLParser.FileContext ctx) { // если модуль не серверный, не внешнее соединение и не обычный клиент, то не проверяем if (documentContext.getMdObject() - .filter(MDCommonModule.class::isInstance) - .map(MDCommonModule.class::cast) + .filter(CommonModule.class::isInstance) + .map(CommonModule.class::cast) .filter(commonModule -> commonModule.isServer() || commonModule.isClientOrdinaryApplication() || commonModule.isExternalConnection()) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index de12ab27d3e..445048c4d74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -28,15 +28,13 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.ChildrenOwner; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; import com.github._1c_syntax.utils.CaseInsensitivePattern; import lombok.RequiredArgsConstructor; -import java.util.Collection; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -131,23 +129,15 @@ public class ForbiddenMetadataNameDiagnostic extends AbstractMetadataDiagnostic private final LanguageServerConfiguration serverConfiguration; @Override - protected void checkMetadata(AbstractMDObjectBase mdo) { + protected void checkMetadata(MD mdo) { // проверка имени метаданного checkName(mdo.getName(), mdo.getMdoReference()); - if (mdo instanceof AbstractMDObjectComplex) { - // проверка имен реквизитов и табличных частей - ((AbstractMDObjectComplex) mdo).getAttributes() - .forEach(attribute -> checkName(attribute.getName(), attribute.getMdoReference())); - - // проверка имен реквизитов табличных частей - ((AbstractMDObjectComplex) mdo).getAttributes().stream() - .filter(TabularSection.class::isInstance) - .map(TabularSection.class::cast) - .map(TabularSection::getAttributes) - .flatMap(Collection::stream) - .forEach(attribute -> checkName(attribute.getName(), attribute.getMdoReference())); + // проверка имен реквизитов и табличных частей + if (mdo instanceof ChildrenOwner childrenOwner) { + childrenOwner.getMDOPlainChildren() + .forEach(child -> checkName(child.getName(), child.getMdoReference())); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java index 7b6602d35c5..a744ab315b9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java @@ -29,9 +29,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import java.util.List; @@ -46,10 +46,10 @@ ) public class MetadataObjectNameLengthDiagnostic extends AbstractMetadataDiagnostic { - private final LanguageServerConfiguration serverConfiguration; - private static final int MAX_METADATA_OBJECT_NAME_LENGTH = 80; + private final LanguageServerConfiguration serverConfiguration; + @DiagnosticParameter( type = Integer.class, defaultValue = "" + MAX_METADATA_OBJECT_NAME_LENGTH @@ -62,7 +62,7 @@ public class MetadataObjectNameLengthDiagnostic extends AbstractMetadataDiagnost } @Override - protected void checkMetadata(AbstractMDObjectBase mdo) { + protected void checkMetadata(MD mdo) { if (mdo.getName().length() > maxMetadataObjectNameLength) { addAttributeDiagnostic(mdo); } @@ -76,13 +76,12 @@ protected void check() { if (computeDiagnosticRange()) { documentContext.getMdObject().ifPresent(this::checkMetadata); } - } else { super.check(); } } - private void addAttributeDiagnostic(AbstractMDObjectBase attribute) { + private void addAttributeDiagnostic(MD attribute) { String mdoRef; if (serverConfiguration.getLanguage() == Language.RU) { mdoRef = attribute.getMdoReference().getMdoRefRu(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java index 45a7c146688..be57d96f682 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java @@ -28,15 +28,12 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.CommonModule; +import com.github._1c_syntax.bsl.mdo.EventSubscription; import com.github._1c_syntax.bsl.types.ConfigurationSource; -import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; -import com.github._1c_syntax.mdclasses.mdo.MDEventSubscription; import org.eclipse.lsp4j.Range; -import java.util.regex.Pattern; - @DiagnosticMetadata( type = DiagnosticType.ERROR, severity = DiagnosticSeverity.BLOCKER, @@ -57,7 +54,6 @@ public class MissingEventSubscriptionHandlerDiagnostic extends AbstractDiagnosti * Костыль, но пока так */ private Range diagnosticRange; - private static final Pattern SPLIT_PATTERN = Pattern.compile("\\."); @Override protected void check() { @@ -73,47 +69,45 @@ protected void check() { } // для анализа выбираются все имеющиеся подписки на события - configuration.getChildren().stream() - .filter(mdo -> mdo.getMdoType() == MDOType.EVENT_SUBSCRIPTION) - .map(MDEventSubscription.class::cast) - .forEach((MDEventSubscription eventSubs) -> { + configuration.getEventSubscriptions() + .forEach((EventSubscription eventSubs) -> { // проверка на пустой обработчик if (eventSubs.getHandler().isEmpty()) { addDiagnostic(eventSubs); return; } - var handlerParts = SPLIT_PATTERN.split(eventSubs.getHandler()); - // правильный обработчик состоит из трех частей: // - CommonModule - тип объекта, всегда постоянный: общий модуль // - Имя - имя модуля // - ИмяМетода - имя метода в модуле - if (handlerParts.length != 3) { - addDiagnostic("incorrectHandler", eventSubs, eventSubs.getHandler()); + // если имя метода пустое, то дальше и смотреть нет смысла + if (eventSubs.getHandler().getMethodName().isEmpty()) { + addDiagnostic("incorrectHandler", eventSubs, eventSubs.getHandler().getMethodPath()); return; } // проверка на существование модуля - var module = configuration.getCommonModule(handlerParts[1]); + var module = configuration.findCommonModule(eventSubs.getHandler().getModuleName()); + if (module.isEmpty()) { - addDiagnostic("missingModule", eventSubs, handlerParts[1]); + addDiagnostic("missingModule", eventSubs, eventSubs.getHandler().getModuleName()); return; } var commonModule = module.get(); // проверка наличия у модуля серверного флага if (!commonModule.isServer()) { - addDiagnostic("shouldBeServer", eventSubs, handlerParts[1]); + addDiagnostic("shouldBeServer", eventSubs, eventSubs.getHandler().getModuleName()); } // проверка на наличие метода и его экспортности - checkMethod(eventSubs, handlerParts[2], commonModule); + checkMethod(eventSubs, eventSubs.getHandler().getMethodName(), commonModule); }); } - private void checkMethod(MDEventSubscription eventSubs, String methodName, MDCommonModule commonModule) { + private void checkMethod(EventSubscription eventSubs, String methodName, CommonModule commonModule) { documentContext.getServerContext() .getDocument(commonModule.getMdoReference().getMdoRef(), ModuleType.CommonModule) .ifPresent((DocumentContext commonModuleContext) -> { @@ -130,12 +124,12 @@ private void checkMethod(MDEventSubscription eventSubs, String methodName, MDCom }); } - private void addDiagnostic(String messageString, MDEventSubscription eventSubs, String text) { + private void addDiagnostic(String messageString, EventSubscription eventSubs, String text) { diagnosticStorage.addDiagnostic(diagnosticRange, info.getResourceString(messageString, text, eventSubs.getName())); } - private void addDiagnostic(MDEventSubscription eventSubs) { + private void addDiagnostic(EventSubscription eventSubs) { diagnosticStorage.addDiagnostic(diagnosticRange, info.getMessage(eventSubs.getName())); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java index dcc55b9b7d0..d3f034fe08e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdclasses.Configuration; import com.github._1c_syntax.bsl.types.ModuleType; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.Range; @@ -64,16 +65,15 @@ protected void check() { } private void checkProperties(Range range) { - var configuration = documentContext.getServerContext().getConfiguration(); - if (!configuration.isUseManagedFormInOrdinaryApplication()) { - diagnosticStorage.addDiagnostic(range, info.getResourceString("managedFormInOrdinaryApp")); - } + if (configuration instanceof Configuration cf) { // у расширения нет таких атрибутов + if (!cf.isUseManagedFormInOrdinaryApplication()) { + diagnosticStorage.addDiagnostic(range, info.getResourceString("managedFormInOrdinaryApp")); + } - if (configuration.isUseOrdinaryFormInManagedApplication()) { - diagnosticStorage.addDiagnostic(range, info.getResourceString("ordinaryFormInManagedApp")); + if (cf.isUseOrdinaryFormInManagedApplication()) { + diagnosticStorage.addDiagnostic(range, info.getResourceString("ordinaryFormInManagedApp")); + } } - } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java index cedb64f1875..e0ee45f3b7f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java @@ -26,13 +26,12 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.parser.SDBLParser; import com.github._1c_syntax.bsl.types.ConfigurationSource; import com.github._1c_syntax.bsl.types.MDOType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import org.antlr.v4.runtime.tree.ParseTree; -import java.util.Map; import java.util.Optional; @DiagnosticMetadata( @@ -50,17 +49,14 @@ public class QueryToMissingMetadataDiagnostic extends AbstractSDBLVisitorDiagnos @Override public ParseTree visitQueryPackage(SDBLParser.QueryPackageContext ctx) { - if (documentContext.getServerContext().getConfiguration().getConfigurationSource() == ConfigurationSource.EMPTY) { return ctx; } - return super.visitQueryPackage(ctx); } @Override public ParseTree visitMdo(SDBLParser.MdoContext mdo) { - if (nonMdoExists(mdo.type.getText(), mdo.tableName.getText())) { diagnosticStorage.addDiagnostic(mdo, info.getMessage(mdo.getText())); @@ -72,13 +68,9 @@ private boolean nonMdoExists(String mdoType, String mdoName) { return getMdo(mdoType, mdoName).isEmpty(); } - private Optional getMdo(String mdoTypeName, String mdoName) { + private Optional getMdo(String mdoTypeName, String mdoName) { return MDOType.fromValue(mdoTypeName).flatMap(mdoType -> - documentContext.getServerContext().getConfiguration().getChildrenByMdoRef().entrySet().stream() - .filter(entry -> entry.getKey().getType() == mdoType - && mdoName.equalsIgnoreCase(entry.getValue().getName())) - .map(Map.Entry::getValue) - .findFirst() - ); + documentContext.getServerContext().getConfiguration().findChild(mdo -> mdo.getMdoType() == mdoType + && mdoName.equalsIgnoreCase(mdo.getName()))); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java index acfcee7d451..cd17c1ba125 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java @@ -28,12 +28,12 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.CommonModule; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.Diagnostic; @@ -68,8 +68,8 @@ public class RedundantAccessToObjectDiagnostic extends AbstractVisitorDiagnostic private static final boolean CHECK_FORM_MODULE = true; private static final boolean CHECK_RECORD_SET_MODULE = true; - private boolean needCheckName = false; - private boolean skipLValue = false; + private boolean needCheckName; + private boolean skipLValue; private Pattern namePatternWithDot; @DiagnosticParameter( @@ -94,14 +94,13 @@ public class RedundantAccessToObjectDiagnostic extends AbstractVisitorDiagnostic public List getDiagnostics(DocumentContext documentContext) { var typeModule = documentContext.getModuleType(); if (typeModule == ModuleType.CommonModule || typeModule == ModuleType.ManagerModule) { - documentContext.getMdObject().ifPresent((AbstractMDObjectBase mdObjectBase) -> { - - needCheckName = !(mdObjectBase instanceof MDCommonModule) - || ((MDCommonModule) mdObjectBase).getReturnValuesReuse() == ReturnValueReuse.DONT_USE; + documentContext.getMdObject().ifPresent((MD mdo) -> { + needCheckName = !(mdo instanceof CommonModule commonModule) + || commonModule.getReturnValuesReuse() == ReturnValueReuse.DONT_USE; skipLValue = true; namePatternWithDot = CaseInsensitivePattern.compile( - String.format(getManagerModuleName(mdObjectBase.getMdoType()), mdObjectBase.getName()) + String.format(getManagerModuleName(mdo.getMdoType()), mdo.getName()) ); }); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 7c24af98dbe..b5fbd371172 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -28,14 +28,13 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.mdo.TabularSection; +import com.github._1c_syntax.bsl.mdo.TabularSectionOwner; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.bsl.parser.SDBLParser; import com.github._1c_syntax.bsl.types.ConfigurationSource; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; import com.github._1c_syntax.utils.CaseInsensitivePattern; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AllArgsConstructor; @@ -154,7 +153,8 @@ private Map> dataSourcesWithTabularSection(SDBLParser.Query } private Map> calcDataSourceWithTabularSectionNames( - Stream dataSources) { + Stream dataSources + ) { return dataSources .map(dataSourceContext -> new TabularSectionTable(getTableNameOrAlias(dataSourceContext), @@ -177,7 +177,9 @@ private static Stream findAllDataSourceW ); } - private static Collection getInnerDataSource(SDBLParser.DataSourceContext dataSourceContext) { + private static Collection getInnerDataSource( + SDBLParser.DataSourceContext dataSourceContext + ) { var result = new ArrayList(); Optional.ofNullable(dataSourceContext.dataSource()) .map(RefOveruseDiagnostic::getInnerDataSource) @@ -242,18 +244,18 @@ private List getTabularSectionNames(SDBLParser.MdoContext mdo) { return Collections.emptyList(); } return MDOType.fromValue(mdo.type.getText()).stream() - .map(mdoType1 -> MdoReference.create(mdoType1, mdo.tableName.getText())) - .map(mdoReference -> configuration.getChildrenByMdoRef().get(mdoReference)) - .filter(AbstractMDObjectComplex.class::isInstance) - .map(AbstractMDObjectComplex.class::cast) + .map(mdoTypeTabular -> MdoReference.create(mdoTypeTabular, mdo.tableName.getText())) + .map(configuration::findChild) + .filter(Optional::isPresent) + .map(Optional::get) + .map(TabularSectionOwner.class::cast) .flatMap(RefOveruseDiagnostic::getTabularSectionNames) .collect(Collectors.toList()); } - private static Stream getTabularSectionNames(AbstractMDObjectComplex mdObjectComplex) { - return mdObjectComplex.getAttributes().stream() - .filter(TabularSection.class::isInstance) - .map(AbstractMDObjectBase::getName); + private static Stream getTabularSectionNames(TabularSectionOwner tabularSectionOwner) { + return tabularSectionOwner.getTabularSections().stream() + .map(TabularSection::getName); } private static Stream getSimpleOverused(List columnsCollection) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java index b93f790761a..283f84447b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java @@ -28,12 +28,14 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.Attribute; +import com.github._1c_syntax.bsl.mdo.AttributeOwner; +import com.github._1c_syntax.bsl.mdo.ChildrenOwner; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.TabularSection; +import com.github._1c_syntax.bsl.mdo.TabularSectionOwner; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.AbstractMDOAttribute; -import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; import com.github._1c_syntax.utils.StringInterner; import java.util.List; @@ -83,28 +85,31 @@ public class SameMetadataObjectAndChildNamesDiagnostic extends AbstractMetadataD } @Override - protected void checkMetadata(AbstractMDObjectBase mdo) { - if (!(mdo instanceof AbstractMDObjectComplex) || ((AbstractMDObjectComplex) mdo).getAttributes().isEmpty()) { + protected void checkMetadata(MD mdo) { + if (!(mdo instanceof ChildrenOwner)) { return; } - var mdoName = stringInterner.intern(mdo.getName()); - ((AbstractMDObjectComplex) mdo).getAttributes().stream() - .filter(attribute -> mdoName.equalsIgnoreCase(attribute.getName())) - .forEach(attribute -> addAttributeDiagnostic(attribute, mdoName)); + if (mdo instanceof AttributeOwner attributeOwner && !attributeOwner.getAllAttributes().isEmpty()) { + var mdoName = stringInterner.intern(mdo.getName()); + checkkAttributes(attributeOwner.getAllAttributes(), mdoName); + } - ((AbstractMDObjectComplex) mdo).getAttributes().stream() - .filter(TabularSection.class::isInstance) - .map(TabularSection.class::cast) - .forEach((TabularSection table) -> { + if (mdo instanceof TabularSectionOwner tabularSectionOwner && !tabularSectionOwner.getTabularSections().isEmpty()) { + tabularSectionOwner.getTabularSections().forEach((TabularSection table) -> { var tableName = stringInterner.intern(table.getName()); - table.getAttributes().stream() - .filter(attribute -> tableName.equalsIgnoreCase(attribute.getName())) - .forEach(attribute -> addAttributeDiagnostic(attribute, tableName)); + checkkAttributes(table.getAllAttributes(), tableName); }); + } + } + + private void checkkAttributes(List attributeOwner, String mdoName) { + attributeOwner.stream() + .filter(attribute -> mdoName.equalsIgnoreCase(attribute.getName())) + .forEach(attribute -> addAttributeDiagnostic(attribute, mdoName)); } - private void addAttributeDiagnostic(AbstractMDOAttribute attribute, String mdoName) { + private void addAttributeDiagnostic(Attribute attribute, String mdoName) { String mdoRef; if (serverConfiguration.getLanguage() == Language.RU) { mdoRef = attribute.getMdoReference().getMdoRefRu(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java index f89e66a7e2d..f22bb6ddde3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java @@ -29,11 +29,11 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; +import com.github._1c_syntax.bsl.mdo.CommonModule; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.ScheduledJob; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; -import com.github._1c_syntax.mdclasses.mdo.MDScheduledJob; import java.util.ArrayList; import java.util.Comparator; @@ -50,7 +50,6 @@ }, scope = DiagnosticScope.BSL ) - public class ScheduledJobHandlerDiagnostic extends AbstractMetadataDiagnostic { private static final String DIAGNOSTIC_MESSAGE = "diagnosticMessage"; @@ -62,19 +61,19 @@ public class ScheduledJobHandlerDiagnostic extends AbstractMetadataDiagnostic { private static final String DOUBLE_MESSAGE = "doubleMessage"; private final ReferenceIndex referenceIndex; - private final Map> scheduledJobHandlers = new HashMap<>(); + private final Map> scheduledJobHandlers = new HashMap<>(); - private static String getFullName(MDCommonModule mdCommonModule, String methodName) { - return getFullName(mdCommonModule.getName(), methodName); + public ScheduledJobHandlerDiagnostic(ReferenceIndex referenceIndex) { + super(List.of(MDOType.SCHEDULED_JOB)); + this.referenceIndex = referenceIndex; } - private static String getFullName(String commonModuleName, String methodName) { - return commonModuleName.concat(".").concat(methodName); + private static String getFullName(CommonModule commonModule, String methodName) { + return getFullName(commonModule.getName(), methodName); } - public ScheduledJobHandlerDiagnostic(ReferenceIndex referenceIndex) { - super(List.of(MDOType.SCHEDULED_JOB)); - this.referenceIndex = referenceIndex; + private static String getFullName(String commonModuleName, String methodName) { + return commonModuleName.concat(".").concat(methodName); } @Override @@ -86,29 +85,29 @@ protected void check() { private void checkHandlerDoubles() { scheduledJobHandlers.values().stream() .filter(mdScheduledJobs -> mdScheduledJobs.size() > 1) - .map((List mdScheduledJobs) -> { - mdScheduledJobs.sort(Comparator.comparing(AbstractMDObjectBase::getName)); + .map((List mdScheduledJobs) -> { + mdScheduledJobs.sort(Comparator.comparing(ScheduledJob::getName)); return mdScheduledJobs; }) .forEach(this::fireIssueForDoubles); scheduledJobHandlers.clear(); } - private void fireIssueForDoubles(List mdScheduledJobs) { + private void fireIssueForDoubles(List mdScheduledJobs) { final var scheduleJobNames = mdScheduledJobs.stream() - .map(AbstractMDObjectBase::getName) + .map(ScheduledJob::getName) .reduce((s, s2) -> s.concat(", ").concat(s2)) .orElseThrow(); - final var mdScheduledJob = mdScheduledJobs.get(0).getHandler(); + final var mdScheduledJob = mdScheduledJobs.get(0).getMethodName(); final var methodPath = getFullName(mdScheduledJob.getModuleName(), mdScheduledJob.getMethodName()); addDiagnostic(info.getResourceString(DOUBLE_MESSAGE, methodPath, scheduleJobNames)); } @Override - protected void checkMetadata(AbstractMDObjectBase mdo) { - final var scheduleJob = (MDScheduledJob) mdo; - final var handler = scheduleJob.getHandler(); + protected void checkMetadata(MD mdo) { + final var scheduleJob = (ScheduledJob) mdo; + final var handler = scheduleJob.getMethodName(); if (handler.isEmpty()) { addDiagnostic(scheduleJob); return; @@ -116,8 +115,8 @@ protected void checkMetadata(AbstractMDObjectBase mdo) { final var moduleName = handler.getModuleName(); - final var commonModuleOptional = - documentContext.getServerContext().getConfiguration().getCommonModule(moduleName); + final var commonModuleOptional = documentContext.getServerContext().getConfiguration() + .findCommonModule(moduleName); if (commonModuleOptional.isEmpty()) { addDiagnostic(MISSING_MODULE_MESSAGE, scheduleJob, moduleName); return; @@ -130,7 +129,7 @@ protected void checkMetadata(AbstractMDObjectBase mdo) { checkMethod(scheduleJob, mdCommonModule, handler.getMethodName()); } - private void checkMethod(MDScheduledJob scheduleJob, MDCommonModule mdCommonModule, String methodName) { + private void checkMethod(ScheduledJob scheduleJob, CommonModule mdCommonModule, String methodName) { final var fullName = getFullName(mdCommonModule, methodName); scheduledJobHandlers.computeIfAbsent(fullName, k -> new ArrayList<>()).add(scheduleJob); @@ -148,7 +147,7 @@ private void checkMethod(MDScheduledJob scheduleJob, MDCommonModule mdCommonModu }); } - private void checkMethod(MDScheduledJob scheduleJob, String fullName, MethodSymbol methodSymbol) { + private void checkMethod(ScheduledJob scheduleJob, String fullName, MethodSymbol methodSymbol) { if (!methodSymbol.isExport()) { addDiagnostic(NON_EXPORT_METHOD_MESSAGE, scheduleJob, fullName); } @@ -169,11 +168,11 @@ private boolean isEmptyMethodBody(MethodSymbol methodSymbol) { return referenceIndex.getReferencesFrom(methodSymbol).isEmpty(); } - private void addDiagnostic(String messageString, MDScheduledJob scheduleJob, String text) { + private void addDiagnostic(String messageString, ScheduledJob scheduleJob, String text) { addDiagnostic(info.getResourceString(messageString, text, scheduleJob.getName())); } - private void addDiagnostic(MDScheduledJob scheduleJob) { + private void addDiagnostic(ScheduledJob scheduleJob) { addDiagnostic(info.getMessage("", scheduleJob.getName())); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java index 84dea6a2502..c5de6bd7fac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java @@ -29,10 +29,10 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.Form; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.FormType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDOForm; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; @DiagnosticMetadata( type = DiagnosticType.ERROR, @@ -52,9 +52,9 @@ public class ServerSideExportFormMethodDiagnostic extends AbstractSymbolTreeDiag @Override public void visitModule(ModuleSymbol module) { - documentContext.getMdObject().ifPresent((AbstractMDObjectBase mdo) -> { + documentContext.getMdObject().ifPresent((MD mdo) -> { // проверка актуальна только для управляемых форм - if (mdo instanceof AbstractMDOForm && ((AbstractMDOForm) mdo).getFormType() != FormType.ORDINARY) { + if (mdo instanceof Form form && form.getFormType() != FormType.ORDINARY) { super.visitModule(module); } }); @@ -63,8 +63,7 @@ public void visitModule(ModuleSymbol module) { @Override public void visitMethod(MethodSymbol method) { if (method.isExport() - && method.getCompilerDirectiveKind() - .orElse(CompilerDirectiveKind.AT_SERVER) != CompilerDirectiveKind.AT_CLIENT) { + && method.getCompilerDirectiveKind().orElse(CompilerDirectiveKind.AT_SERVER) != CompilerDirectiveKind.AT_CLIENT) { diagnosticStorage.addDiagnostic(method); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java index ee070e84998..a317f2447e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java @@ -28,8 +28,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.Role; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDRole; import java.util.Map; import java.util.Set; @@ -68,8 +68,8 @@ public void check() { } documentContext.getServerContext().getConfiguration().getRoles().stream() - .filter(role -> role.getRoleData().isSetForNewObjects()) - .map(MDRole::getName) + .filter(role -> role.getData().isSetForNewObjects()) + .map(Role::getName) .filter(Predicate.not(namesFullAccessRole::contains)) .map(info::getMessage) .forEach((String diagnosticMessage) -> diagnosticStorage.addDiagnostic(range, diagnosticMessage) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java index 327938e4fac..cc2bd2657f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdclasses.Configuration; import com.github._1c_syntax.bsl.mdo.support.UseMode; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; @@ -95,10 +96,10 @@ public UsingModalWindowsDiagnostic() { @Override public ParseTree visitFile(BSLParser.FileContext ctx) { var configuration = documentContext.getServerContext().getConfiguration(); - // если использование модальных окон разрешено (без предупреждение) + // если использование модальных окон разрешено (без предупреждения) // и не установлен флаг игнорирования использования модальных окон, то // ничего не диагностируется - if (!forceModalityMode && configuration.getModalityUseMode() == UseMode.USE) { + if (!forceModalityMode && configuration instanceof Configuration cf && cf.getModalityUseMode() == UseMode.USE) { return ctx; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index 0622ad0e411..c7f7185779c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdclasses.Configuration; import com.github._1c_syntax.bsl.mdo.support.UseMode; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; @@ -127,9 +128,9 @@ public UsingSynchronousCallsDiagnostic() { @Override public ParseTree visitFile(BSLParser.FileContext ctx) { var configuration = documentContext.getServerContext().getConfiguration(); - // если использование синхронных вызовов разрешено (без предупреждение), то + // если использование синхронных вызовов разрешено (без предупреждения), то // ничего не диагностируется - if (configuration.getSynchronousExtensionAndAddInCallUseMode() == UseMode.USE) { + if (configuration instanceof Configuration cf && cf.getSynchronousExtensionAndAddInCallUseMode() == UseMode.USE) { return ctx; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index 1f7085631e2..77528c81a4c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -27,10 +27,10 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.Form; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.children.Form; import com.github._1c_syntax.mdclasses.mdo.children.form.FormItem; import org.eclipse.lsp4j.Range; @@ -50,7 +50,6 @@ tags = { DiagnosticTag.UNPREDICTABLE, } - ) public class WrongDataPathForFormElementsDiagnostic extends AbstractDiagnostic { @@ -65,9 +64,9 @@ protected void check() { } } - private static boolean wrongDataPath(FormItem formItem) { - return formItem.getDataPath().getSegment().startsWith("~"); - } +// private static boolean wrongDataPath(FormItem formItem) { +// return formItem.getDataPath().getSegment().startsWith("~"); +// } private static boolean haveFormModules(Form form) { return !form.getModules().isEmpty(); @@ -85,11 +84,12 @@ private void checkCurrentModule(Range range) { } private void checkAllFormsWithoutModules() { - checkMdoObjectStream(form -> !haveFormModules(form), - documentContext.getServerContext().getConfiguration().getChildrenByMdoRef().values().stream()); + // todo формы не доделаны +// checkMdoObjectStream(form -> !haveFormModules(form), +// documentContext.getServerContext().getConfiguration().getChildrenByMdoRef().values().stream()); } - private void checkMdoObjectStream(Predicate

formFilter, Stream stream) { + private void checkMdoObjectStream(Predicate formFilter, Stream stream) { stream .filter(Form.class::isInstance) @@ -101,15 +101,15 @@ private void checkMdoObjectStream(Predicate formFilter, Stream diagnosticStorage.addDiagnostic(diagnosticRange, - info.getMessage(formItem.getName(), getMdoRef(form)))); +// todo формы не доделаны +// formData.getPlainChildren() +// .stream() +// .filter(WrongDataPathForFormElementsDiagnostic::wrongDataPath) +// .forEach(formItem -> diagnosticStorage.addDiagnostic(diagnosticRange, +// info.getMessage(formItem.getName(), getMdoRef(form)))); } private String getMdoRef(Form form) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java index 96a85efae00..c7ed0bdfd0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java @@ -28,9 +28,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.HTTPService; +import com.github._1c_syntax.bsl.mdo.children.HTTPServiceMethod; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDHttpService; -import com.github._1c_syntax.mdclasses.mdo.children.HTTPServiceMethod; import org.eclipse.lsp4j.Range; @DiagnosticMetadata( @@ -64,18 +64,16 @@ protected void check() { private void processModule() { documentContext.getMdObject() - .filter(MDHttpService.class::isInstance) - .map(MDHttpService.class::cast) + .filter(HTTPService.class::isInstance) + .map(HTTPService.class::cast) .ifPresent(this::checkService); } - private void checkService(MDHttpService mdHttpService) { - - mdHttpService.getUrlTemplates().stream() - .flatMap(httpServiceURLTemplate -> httpServiceURLTemplate.getHttpServiceMethods().stream()) + private void checkService(HTTPService httpService) { + httpService.getUrlTemplates().stream() + .flatMap(httpServiceURLTemplate -> httpServiceURLTemplate.getMethods().stream()) .forEach((HTTPServiceMethod service) -> { final var serviceName = service.getMdoReference().getMdoRef(); - if (service.getHandler().isEmpty()) { addMissingHandlerDiagnostic(serviceName); return; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java index aeaa7be9699..6f7aecc23e0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java @@ -27,9 +27,9 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.WebService; +import com.github._1c_syntax.bsl.mdo.children.WebServiceOperation; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDWebService; -import com.github._1c_syntax.mdclasses.mdo.children.WEBServiceOperation; import org.eclipse.lsp4j.Range; @DiagnosticMetadata( @@ -63,20 +63,19 @@ protected void check() { private void processModule() { documentContext.getMdObject() - .filter(MDWebService.class::isInstance) - .map(MDWebService.class::cast) + .filter(WebService.class::isInstance) + .map(WebService.class::cast) .ifPresent(this::checkService); } - private void checkService(MDWebService mdWebService) { - + private void checkService(WebService mdWebService) { mdWebService.getOperations() .forEach(webServiceOperation -> checkOperation(mdWebService.getName(), webServiceOperation)); } - private void checkOperation(String serviceName, WEBServiceOperation webServiceOperation) { + private void checkOperation(String serviceName, WebServiceOperation webServiceOperation) { final var operationName = webServiceOperation.getName(); - final var handler = webServiceOperation.getHandler(); + final var handler = webServiceOperation.getProcedureName(); if (handler.isEmpty()) { addMissingHandlerDiagnostic(serviceName, operationName); return; @@ -101,5 +100,4 @@ private void addMissingHandlerDiagnostic(String serviceName, String operationNam diagnosticRange, info.getResourceString("missingHandler", operationName, serviceName)); } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java index 47386ef182a..c2bd0a9cae8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java @@ -31,12 +31,12 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCompatibilityMode; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; -import com.github._1c_syntax.bsl.supconf.SupportConfiguration; +import com.github._1c_syntax.bsl.mdclasses.CF; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.MDChild; import com.github._1c_syntax.bsl.support.CompatibilityMode; import com.github._1c_syntax.bsl.support.SupportVariant; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDSubsystem; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.springframework.beans.factory.annotation.Lookup; @@ -47,11 +47,9 @@ import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import java.util.stream.Stream; @Configuration @RequiredArgsConstructor @@ -64,17 +62,16 @@ public abstract class DiagnosticsConfiguration { @Scope("prototype") public List diagnostics(DocumentContext documentContext) { - Collection diagnosticInfos = diagnosticInfos(); - - DiagnosticsOptions diagnosticsOptions = configuration.getDiagnosticsOptions(); + var diagnosticInfos = diagnosticInfos(); + var diagnosticsOptions = configuration.getDiagnosticsOptions(); if (needToComputeDiagnostics(documentContext, diagnosticsOptions)) { - FileType fileType = documentContext.getFileType(); - CompatibilityMode compatibilityMode = documentContext + var fileType = documentContext.getFileType(); + var compatibilityMode = documentContext .getServerContext() .getConfiguration() .getCompatibilityMode(); - ModuleType moduleType = documentContext.getModuleType(); + var moduleType = documentContext.getModuleType(); return diagnosticInfos.stream() .filter(diagnosticInfo -> isEnabled(diagnosticInfo, diagnosticsOptions)) @@ -110,9 +107,7 @@ private static boolean filterSubsystems(DocumentContext documentContext, Diagnos return true; } - var subsystemsNames = subsystemFlatList(mdoObject.get().getIncludedSubsystems()).stream() - .map(AbstractMDObjectBase::getName) - .collect(Collectors.toList()); + var subsystemsNames = getSubsystemNames(documentContext.getServerContext().getConfiguration(), mdoObject.get()); var include = subsystemsFilter.getInclude().isEmpty() || subsystemsNames.stream() @@ -133,16 +128,11 @@ private static boolean checkSupport(DocumentContext documentContext, Diagnostics } var configuredSkipSupport = diagnosticsOptions.getSkipSupport(); - if (configuredSkipSupport == SkipSupport.NEVER) { return true; } - Map supportVariants = documentContext.getSupportVariants(); - var moduleSupportVariant = supportVariants.values().stream() - .min(Comparator.naturalOrder()) - .orElse(SupportVariant.NONE); - + var moduleSupportVariant = documentContext.getSupportVariant(); if (moduleSupportVariant == SupportVariant.NONE) { return true; } @@ -155,7 +145,6 @@ private static boolean checkSupport(DocumentContext documentContext, Diagnostics } private boolean isEnabled(DiagnosticInfo diagnosticInfo, DiagnosticsOptions diagnosticsOptions) { - var mode = diagnosticsOptions.getMode(); if (mode == Mode.OFF) { return false; @@ -188,7 +177,7 @@ private boolean isEnabled(DiagnosticInfo diagnosticInfo, DiagnosticsOptions diag } private static boolean inScope(DiagnosticInfo diagnosticInfo, FileType fileType) { - DiagnosticScope scope = diagnosticInfo.getScope(); + var scope = diagnosticInfo.getScope(); DiagnosticScope fileScope; if (fileType == FileType.OS) { fileScope = DiagnosticScope.OS; @@ -204,13 +193,13 @@ private static boolean correctModuleType(DiagnosticInfo diagnosticInfo, ModuleTy return true; } - ModuleType[] diagnosticModules = diagnosticInfo.getModules(); + var diagnosticModules = diagnosticInfo.getModules(); if (diagnosticModules.length == 0) { return true; } - boolean contain = false; + var contain = false; for (ModuleType module : diagnosticModules) { if (module == moduletype) { contain = true; @@ -224,8 +213,7 @@ private static boolean passedCompatibilityMode( DiagnosticInfo diagnosticInfo, CompatibilityMode contextCompatibilityMode ) { - DiagnosticCompatibilityMode compatibilityMode = diagnosticInfo.getCompatibilityMode(); - + var compatibilityMode = diagnosticInfo.getCompatibilityMode(); if (compatibilityMode == DiagnosticCompatibilityMode.UNDEFINED) { return true; } @@ -233,11 +221,20 @@ private static boolean passedCompatibilityMode( return CompatibilityMode.compareTo(compatibilityMode.getCompatibilityMode(), contextCompatibilityMode) >= 0; } - // перенести в mdClasses - private static List subsystemFlatList(Collection subsystems) { - return subsystems.stream() - .flatMap(subsys -> Stream.concat(Stream.of(subsys), subsystemFlatList(subsys.getIncludedSubsystems()).stream())) + private static List getSubsystemNames(CF configuration, MD mdObject) { + var subsystemsNames = configuration + .includedSubsystems(mdObject, true) + .stream() + .map(MD::getName) .collect(Collectors.toList()); - } + // если объект не обнаружен, попробуем поискать его родителя + if (subsystemsNames.isEmpty() && mdObject instanceof MDChild child) { + var parent = configuration.findChild(child.getOwner()); + if (parent.isPresent()) { + subsystemsNames = getSubsystemNames(configuration, parent.get()); + } + } + return subsystemsNames; + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index 1ffbd75354e..d0b43899cc2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -104,7 +104,6 @@ public BSLParserRuleContext visitFuncDeclaration(BSLParser.FuncDeclarationContex @Override public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ctx) { - if (ctx.globalMethodCall() != null) { // see visitGlobalMethodCall return super.visitCallStatement(ctx); @@ -122,14 +121,12 @@ public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ct @Override public BSLParserRuleContext visitComplexIdentifier(BSLParser.ComplexIdentifierContext ctx) { - - String mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); + var mdoRef = MdoRefBuilder.getMdoRef(documentContext, ctx); if (mdoRef.isEmpty()) { return super.visitComplexIdentifier(ctx); } Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); - return super.visitComplexIdentifier(ctx); } @@ -150,7 +147,7 @@ public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallCont public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ctx) { if (NotifyDescription.isNotifyDescription(ctx)) { final var doCallContext = ctx.doCall(); - if (doCallContext == null){ + if (doCallContext == null) { return super.visitNewExpression(ctx); } var callParamList = doCallContext.callParamList().callParam(); @@ -178,11 +175,11 @@ public BSLParserRuleContext visitNewExpression(BSLParser.NewExpressionContext ct @Override public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { final var identifier = ctx.IDENTIFIER(); - if (identifier != null){ + if (identifier != null) { final List modifiers = Optional.ofNullable(ctx.acceptor()) .map(BSLParser.AcceptorContext::modifier) .orElseGet(Collections::emptyList); - String mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, modifiers); + var mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, modifiers); if (!mdoRef.isEmpty()) { Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); } @@ -193,10 +190,10 @@ public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { private void checkCall(String mdoRef, Token methodName) { var methodNameText = Strings.trimQuotes(methodName.getText()); final var configuration = documentContext.getServerContext().getConfiguration(); - Map modules = configuration.getModulesByMDORef(mdoRef); + Map modules = configuration.mdoModuleTypes(mdoRef); for (ModuleType moduleType : modules.keySet()) { if (!DEFAULT_MODULE_TYPES.contains(moduleType) - || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { + || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { continue; } addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName)); @@ -209,7 +206,7 @@ private void addMethodCall(String mdoRef, ModuleType moduleType, String methodNa private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String mdoRef) { // todo: move this out of method - if (mdoRef.isEmpty()){ + if (mdoRef.isEmpty()) { return; } Methods.getMethodName(methodName).ifPresent((Token methodNameToken) -> { @@ -231,7 +228,7 @@ private String getModule(BSLParser.CallParamContext callParamContext) { .map(BSLParser.MemberContext::complexIdentifier) .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) .filter(complexIdentifierContext -> complexIdentifierContext.modifier().isEmpty()); - if (complexIdentifierContext1.isEmpty()){ + if (complexIdentifierContext1.isEmpty()) { return ""; } return complexIdentifierContext1 @@ -249,7 +246,7 @@ private Set calcParams(@Nullable BSLParser.ParamListContext paramList) { .map(BSLParser.ParamContext::IDENTIFIER) .filter(Objects::nonNull) .map(ParseTree::getText) - .map(configuration::getCommonModule) + .map(configuration::findCommonModule) .filter(Optional::isPresent) .flatMap(Optional::stream) .map(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef()) @@ -290,7 +287,7 @@ public BSLParserRuleContext visitSub(BSLParser.SubContext ctx) { .ifPresent(scope -> currentScope = scope); } - BSLParserRuleContext result = super.visitSub(ctx); + var result = super.visitSub(ctx); currentScope = documentContext.getSymbolTree().getModule(); return result; } @@ -323,7 +320,10 @@ public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ct var variableName = ctx.IDENTIFIER().getText(); findVariableSymbol(variableName) - .ifPresent(s -> addVariableUsage(s.getRootParent(SymbolKind.Method), variableName, Ranges.create(ctx.IDENTIFIER()), true)); + .ifPresent(s -> addVariableUsage( + s.getRootParent(SymbolKind.Method), variableName, Ranges.create(ctx.IDENTIFIER()), true + ) + ); return super.visitCallStatement(ctx); } @@ -335,7 +335,10 @@ public BSLParserRuleContext visitComplexIdentifier(BSLParser.ComplexIdentifierCo var variableName = ctx.IDENTIFIER().getText(); findVariableSymbol(variableName) - .ifPresent(s -> addVariableUsage(s.getRootParent(SymbolKind.Method), variableName, Ranges.create(ctx.IDENTIFIER()), true)); + .ifPresent(s -> addVariableUsage( + s.getRootParent(SymbolKind.Method), variableName, Ranges.create(ctx.IDENTIFIER()), true + ) + ); return super.visitComplexIdentifier(ctx); } @@ -395,7 +398,8 @@ private boolean notVariableInitialization(BSLParser.LValueContext ctx, VariableS return !Ranges.containsRange(variableSymbol.getRange(), Ranges.create(ctx)); } - private boolean notVariableInitialization(BSLParser.ModuleVarDeclarationContext ctx, VariableSymbol variableSymbol) { + private boolean notVariableInitialization(BSLParser.ModuleVarDeclarationContext ctx, + VariableSymbol variableSymbol) { return !Ranges.containsRange(variableSymbol.getRange(), Ranges.create(ctx)); } @@ -411,7 +415,7 @@ private void addVariableUsage(Optional methodSymbol, String variableName, Range range, boolean usage) { - String methodName = ""; + var methodName = ""; if (methodSymbol.isPresent()) { methodName = methodSymbol.get().getName(); @@ -427,7 +431,5 @@ private void addVariableUsage(Optional methodSymbol, !usage ); } - } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java index 78a9c8c630e..41efc437f78 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java @@ -24,17 +24,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.MetricStorage; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import com.github._1c_syntax.utils.Absolute; import lombok.AllArgsConstructor; import lombok.Value; import org.eclipse.lsp4j.Diagnostic; -import java.net.URI; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Value @AllArgsConstructor @@ -46,13 +43,13 @@ public class FileInfo { MetricStorage metrics; public FileInfo(String sourceDir, DocumentContext documentContext, List diagnostics) { - URI uri = documentContext.getUri(); + var uri = documentContext.getUri(); path = Absolute.path(sourceDir).relativize(Absolute.path(uri)); this.diagnostics = new ArrayList<>(diagnostics); metrics = documentContext.getMetrics(); - Optional mdObjectBase = documentContext.getMdObject(); - if (mdObjectBase.isPresent()) { - mdoRef = mdObjectBase.get().getMdoReference().getMdoRef(); + var mdo = documentContext.getMdObject(); + if (mdo.isPresent()) { + mdoRef = mdo.get().getMdoReference().getMdoRef(); } else { mdoRef = ""; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index 3121569ce66..6ee253642bd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -22,22 +22,19 @@ package com.github._1c_syntax.bsl.languageserver.utils; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; -import com.github._1c_syntax.mdclasses.utils.MDOUtils; import com.github._1c_syntax.utils.StringInterner; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -57,7 +54,7 @@ public String getMdoRef(DocumentContext documentContext, BSLParser.CallStatement public static String getMdoRef(DocumentContext documentContext) { var mdoRef = documentContext.getMdObject() - .map(AbstractMDObjectBase::getMdoReference) + .map(MD::getMdoReference) .map(MdoReference::getMdoRef) .orElseGet(() -> documentContext.getUri().toString()); return stringInterner.intern(mdoRef); @@ -83,8 +80,7 @@ public String getMdoRef( Optional.ofNullable(identifier) .map(ParseTree::getText) .flatMap(MDOType::fromValue) - .filter(mdoType -> MDOUtils.getModuleTypesForMdoTypes() - .getOrDefault(mdoType, Collections.emptySet()) + .filter(mdoType -> ModuleType.byMDOType(mdoType) .contains(ModuleType.ManagerModule)) .map(mdoType -> getMdoRef(mdoType, getMdoName(modifiers))) ) @@ -129,8 +125,8 @@ public String getLocaleOwnerMdoName(DocumentContext documentContext, MD mdo) { private Optional getCommonModuleMdoRef(DocumentContext documentContext, String commonModuleName) { return documentContext.getServerContext() .getConfiguration() - .getCommonModule(commonModuleName) - .map(MDCommonModule::getMdoReference) + .findCommonModule(commonModuleName) + .map(CommonModule::getMdoReference) .map(MdoReference::getMdoRef); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java index 8e2efa4b1c3..8ad4e0b87c7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java @@ -25,7 +25,6 @@ import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.types.ConfigurationSource; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.Configuration; import com.github._1c_syntax.utils.Absolute; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +33,6 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; -import java.nio.file.Paths; import static org.assertj.core.api.Assertions.assertThat; @@ -52,10 +50,9 @@ class ServerContextTest { @Test void testConfigurationMetadata() { - Path path = Absolute.path(PATH_TO_METADATA); serverContext.setConfigurationRoot(path); - Configuration configurationMetadata = serverContext.getConfiguration(); + var configurationMetadata = serverContext.getConfiguration(); assertThat(configurationMetadata).isNotNull(); @@ -67,14 +64,12 @@ void testConfigurationMetadata() { assertThat(configurationMetadata.getCompatibilityMode().getVersion()).isEqualTo(10); File file = new File(PATH_TO_METADATA, PATH_TO_MODULE_FILE); - ModuleType type = configurationMetadata.getModuleType(Absolute.uri(file.toURI())); + ModuleType type = configurationMetadata.getModuleTypeByURI(Absolute.uri(file.toURI())); assertThat(type).isEqualTo(ModuleType.CommonModule); - } @Test - void testMdoRefs() throws IOException { - + void testMdoRefs() { var path = Absolute.path(PATH_TO_METADATA); serverContext.setConfigurationRoot(path); var mdoRefCommonModule = "CommonModule.ПервыйОбщийМодуль"; @@ -106,10 +101,10 @@ void testMdoRefs() throws IOException { @Test void testErrorConfigurationMetadata() { - Path path = Absolute.path(Paths.get(PATH_TO_METADATA, "test")); + Path path = Absolute.path(PATH_TO_METADATA + "test"); serverContext.setConfigurationRoot(path); - Configuration configurationMetadata = serverContext.getConfiguration(); + var configurationMetadata = serverContext.getConfiguration(); assertThat(configurationMetadata).isNotNull(); assertThat(configurationMetadata.getModulesByType()).isEmpty(); @@ -137,5 +132,4 @@ private DocumentContext addDocumentContext(ServerContext serverContext, String p serverContext.rebuildDocument(documentContext); return documentContext; } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java index 70682c80e1b..32f287a85ba 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java @@ -23,9 +23,9 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import org.eclipse.lsp4j.SymbolKind; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -68,7 +68,7 @@ void testModuleName() { var mdoReference = mock(MdoReference.class); when(mdoReference.getMdoRef()).thenReturn("Document.Document1"); - AbstractMDObjectBase mdObject = mock(AbstractMDObjectBase.class); + var mdObject = mock(MD.class); when(mdObject.getMdoReference()).thenReturn(mdoReference); doReturn(Optional.of(mdObject)).when(documentContext).getMdObject(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java index 13a17ce0d20..4e5d35e476b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java @@ -23,8 +23,8 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -48,7 +48,7 @@ class CachedPublicDiagnosticTest extends AbstractDiagnosticTest { - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; CommonModuleNameCachedDiagnosticTest() { @@ -165,7 +165,6 @@ void testEmptyFile() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -176,10 +175,6 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java index 17a67f765e0..ca9457c17d4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -44,7 +44,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameClientDiagnosticTest extends AbstractDiagnosticTest { private DocumentContext documentContext; - private MDCommonModule module; + private CommonModule module; CommonModuleNameClientDiagnosticTest() { super(CommonModuleNameClientDiagnostic.class); @@ -163,10 +163,8 @@ void testGlobal() { } - @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -177,10 +175,6 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java index 0e1248ccfb1..784b31ddb15 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -43,7 +43,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameClientServerDiagnosticTest extends AbstractDiagnosticTest { - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; CommonModuleNameClientServerDiagnosticTest() { @@ -165,7 +165,6 @@ void testFalse2() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -176,9 +175,6 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java index 4ce1a77f55a..76862f56442 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -44,7 +44,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameFullAccessDiagnosticTest extends AbstractDiagnosticTest { private DocumentContext documentContext; - private MDCommonModule module; + private CommonModule module; CommonModuleNameFullAccessDiagnosticTest() { super(CommonModuleNameFullAccessDiagnostic.class); @@ -116,7 +116,6 @@ void testFalse() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -128,8 +127,6 @@ void getDocumentContextFromFile() { context )); - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java index bf57dc69af6..7f8daeb53ce 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -43,7 +43,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameGlobalClientDiagnosticTest extends AbstractDiagnosticTest { - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; CommonModuleNameGlobalClientDiagnosticTest() { @@ -206,7 +206,6 @@ void testClient() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -217,9 +216,6 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java index 5d86f4b365f..477ccf7fa02 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -44,7 +44,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameGlobalDiagnosticTest extends AbstractDiagnosticTest { private DocumentContext documentContext; - private MDCommonModule module; + private CommonModule module; CommonModuleNameGlobalDiagnosticTest() { super(CommonModuleNameGlobalDiagnostic.class); @@ -53,7 +53,6 @@ class CommonModuleNameGlobalDiagnosticTest extends AbstractDiagnosticTest { - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; CommonModuleNameServerCallDiagnosticTest() { @@ -146,7 +146,6 @@ void TestNegative() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -157,9 +156,6 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java index b783b50c1bc..61e6d6d01c1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java @@ -24,7 +24,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -45,7 +45,7 @@ @CleanupContextBeforeClassAndAfterEachTestMethod class CommonModuleNameWordsDiagnosticTest extends AbstractDiagnosticTest { - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; CommonModuleNameWordsDiagnosticTest() { @@ -118,7 +118,6 @@ void testConfigure() { @SneakyThrows void getDocumentContextFromFile() { - Path path = Absolute.path(PATH_TO_METADATA); Path testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); @@ -129,10 +128,7 @@ void getDocumentContextFromFile() { FileUtils.readFileToString(testFile.toFile(), StandardCharsets.UTF_8), context )); - - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java index 0a00e8cf490..369b2985677 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java @@ -21,9 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.mdo.Form; import com.github._1c_syntax.bsl.mdo.support.FormType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDOForm; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; @@ -56,12 +56,11 @@ void test() { void testOriginalFormModule() { final var PATH_TO_METADATA = "src/test/resources/metadata/designer"; initServerContext(Absolute.path(PATH_TO_METADATA)); - var form = spy((AbstractMDOForm) context.getConfiguration().getChildren().stream() + var form = spy((Form) context.getConfiguration().getPlainChildren().stream() .filter(mdo -> mdo.getName().equalsIgnoreCase("ФормаЭлемента")) .findFirst() .get()); - var documentContext = spy(getDocumentContext()); when(documentContext.getModuleType()).thenReturn(ModuleType.FormModule); when(form.getFormType()).thenReturn(FormType.ORDINARY); @@ -71,5 +70,4 @@ void testOriginalFormModule() { assertThat(diagnostics).isEmpty(); } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index dd2ca68aec6..4e56232c7d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -24,18 +24,18 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.mdo.InformationRegister; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.MDInformationRegister; import com.github._1c_syntax.utils.Absolute; import org.junit.jupiter.api.Test; import java.io.File; import java.util.Collections; +import java.util.List; import java.util.Optional; -import java.util.Set; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; import static org.mockito.Mockito.spy; @@ -86,17 +86,17 @@ private void checkMockHandler(ModuleType type, boolean noneModules) { var documentContext = spy(getDocumentContext()); when(documentContext.getModuleType()).thenReturn(type); - final var mdObjectBase = context.getConfiguration().getChildrenByMdoRef().get( - MdoReference.create(MDOType.INFORMATION_REGISTER, - "РегистрСведений1")); - var spyMdo = spy((MDInformationRegister) mdObjectBase); + final var infoReg = spy(context.getConfiguration().findChild(MdoReference.create(MDOType.INFORMATION_REGISTER, + "РегистрСведений1")).get() + ); + var spyMdo = spy((InformationRegister) infoReg); when(documentContext.getMdObject()).thenReturn(Optional.of(spyMdo)); - if (noneModules){ + if (noneModules) { when(spyMdo.getModules()).thenReturn(Collections.emptyList()); - Set children = Set.of(spyMdo); + List children = List.of(spyMdo); var configuration = spy(context.getConfiguration()); when(configuration.getChildren()).thenReturn(children); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java index e5c32c7ea97..ffcc4d7d9ee 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java @@ -30,7 +30,6 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure.DiagnosticsConfiguration; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.bsl.supconf.SupportConfiguration; import com.github._1c_syntax.bsl.support.CompatibilityMode; import com.github._1c_syntax.bsl.support.SupportVariant; import com.github._1c_syntax.bsl.types.ModuleType; @@ -41,7 +40,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -49,7 +47,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @SpringBootTest @@ -146,78 +143,77 @@ void testSkipSupport() { // given documentContext = spy(TestUtils.getDocumentContext("А = 0")); - var supportConfiguration = mock(SupportConfiguration.class); // when-then pairs ComputeDiagnosticsSkipSupport.NEVER configuration.getDiagnosticsOptions().setSkipSupport(SkipSupport.NEVER); - doReturn(Collections.emptyMap()).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NONE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_SUPPORTED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_SUPPORTED).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.EDITABLE_SUPPORT_ENABLED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.EDITABLE_SUPPORT_ENABLED).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_EDITABLE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_EDITABLE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); // when-then pairs ComputeDiagnosticsSkipSupport.WITHSUPPORTLOCKED configuration.getDiagnosticsOptions().setSkipSupport(SkipSupport.WITH_SUPPORT_LOCKED); - doReturn(Collections.emptyMap()).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NONE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_SUPPORTED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_SUPPORTED).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.EDITABLE_SUPPORT_ENABLED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.EDITABLE_SUPPORT_ENABLED).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_EDITABLE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_EDITABLE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); // when-then pairs ComputeDiagnosticsSkipSupport.WITHSUPPORT configuration.getDiagnosticsOptions().setSkipSupport(SkipSupport.WITH_SUPPORT); - doReturn(Collections.emptyMap()).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NONE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NONE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isNotEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_SUPPORTED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_SUPPORTED).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.EDITABLE_SUPPORT_ENABLED)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.EDITABLE_SUPPORT_ENABLED).when(documentContext) + .getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); - doReturn(Map.of(supportConfiguration, SupportVariant.NOT_EDITABLE)).when(documentContext).getSupportVariants(); + doReturn(SupportVariant.NOT_EDITABLE).when(documentContext).getSupportVariant(); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); } @Test void testDiagnosticModeOff() { - // when configuration.getDiagnosticsOptions().setMode(Mode.OFF); @@ -226,7 +222,6 @@ void testDiagnosticModeOff() { @Test void testDiagnosticModeOn() { - // when configuration.getDiagnosticsOptions().setMode(Mode.ON); @@ -238,7 +233,6 @@ void testDiagnosticModeOn() { @Test void testDiagnosticModeAll() { - // when configuration.getDiagnosticsOptions().setMode(Mode.ALL); @@ -250,7 +244,6 @@ void testDiagnosticModeAll() { @Test void testDiagnosticModeOnly() { - // when configuration.getDiagnosticsOptions().setMode(Mode.ONLY); Map>> rules = new HashMap<>(); @@ -269,7 +262,6 @@ void testDiagnosticModeOnly() { @Test void testDiagnosticModeExcept() { - // when configuration.getDiagnosticsOptions().setMode(Mode.EXCEPT); Map>> rules = new HashMap<>(); @@ -289,7 +281,6 @@ void testDiagnosticModeExcept() { @Test void testDiagnosticSubsystemsIncludeCheck() { - var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter"; context.clear(); context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA)); @@ -297,7 +288,7 @@ void testDiagnosticSubsystemsIncludeCheck() { documentContext = spy(TestUtils.getDocumentContext("А = 0")); - var form = context.getConfiguration().getChildren().stream() + var form = context.getConfiguration().getPlainChildren().stream() .filter(mdo -> mdo.getName().equalsIgnoreCase("ФормаЭлемента")) .findFirst(); @@ -340,13 +331,11 @@ void testDiagnosticSubsystemsIncludeCheck() { .setInclude(new TreeSet<>(List.of("Подсистема3"))); assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); - } // @Test void testDiagnosticSubsystemsExcludeCheck() { - var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter"; context.clear(); context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA)); @@ -375,7 +364,6 @@ void testDiagnosticSubsystemsExcludeCheck() { @Test void testDiagnosticSubsystemsIncludeExcludeCheck() { - var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter"; context.clear(); context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA)); @@ -404,5 +392,4 @@ void testDiagnosticSubsystemsIncludeExcludeCheck() { assertThat(diagnosticsConfiguration.diagnostics(documentContext)) .isEmpty(); } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java index 75bffe05642..f47358e3a59 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java @@ -23,7 +23,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; @@ -46,7 +46,7 @@ class ExecuteExternalCodeInCommonModuleDiagnosticTest extends AbstractDiagnostic private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer"; private static final String PATH_TO_MODULE_FILE = "src/test/resources/metadata/designer/CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl"; - private MDCommonModule module; + private CommonModule module; private DocumentContext documentContext; @Test @@ -128,8 +128,6 @@ private void getDocumentContextFromFile() { getText(), context )); - - module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); - + module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java index cebec5f9182..c9b9e2692f0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java @@ -21,11 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.ModuleOwner; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBSL; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.AbstractMDOAttribute; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.BeforeEach; @@ -33,10 +31,8 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; import static org.mockito.Mockito.spy; @@ -58,33 +54,32 @@ void beforeTest() { void testCatalog() { var documentContext = spy(getDocumentContext()); - var mdObjectBase = spy(context.getConfiguration().getChildren().stream() - .filter(mdo -> mdo.getMdoReference().getMdoRefRu().equalsIgnoreCase("Справочник.Справочник1")) - .findFirst() + var spyCatalog = spy(context.getConfiguration() + .findCatalog(catalog -> catalog.getName().equalsIgnoreCase("Справочник1")) .get()); when(documentContext.getModuleType()).thenReturn(ModuleType.ManagerModule); - when(mdObjectBase.getName()).thenReturn("Справочник"); - - List attributes = new ArrayList<>(); - - ((AbstractMDObjectComplex) mdObjectBase).getAttributes().forEach(mdo -> { - var spyMDO = spy(mdo); - when(spyMDO.getName()).thenReturn("РегистрСведений"); - var mdoRef = spy(mdo.getMdoReference()); - when(mdoRef.getMdoRefRu()) - .thenReturn(mdo.getMdoReference().getMdoRefRu().replace("." + mdo.getName(), ".РегистрСведений")); - when(spyMDO.getMdoReference()).thenReturn(mdoRef); - when(spyMDO.getName()).thenReturn("РегистрСведений"); - attributes.add(spyMDO); - }); - - when(((AbstractMDObjectComplex) mdObjectBase).getAttributes()).thenReturn(attributes); - when(documentContext.getMdObject()).thenReturn(Optional.of(mdObjectBase)); + when(spyCatalog.getName()).thenReturn("Справочник"); + + List children = new ArrayList<>(); + spyCatalog.getMDOPlainChildren() + .forEach(mdo -> { + var spyMDO = spy(mdo); + when(spyMDO.getName()).thenReturn("РегистрСведений"); + var mdoRef = spy(mdo.getMdoReference()); + when(mdoRef.getMdoRefRu()) + .thenReturn(mdo.getMdoReference().getMdoRefRu().replace("." + mdo.getName(), ".РегистрСведений")); + when(spyMDO.getMdoReference()).thenReturn(mdoRef); + when(spyMDO.getName()).thenReturn("РегистрСведений"); + children.add(spyMDO); + }); + + when(spyCatalog.getMDOPlainChildren()).thenReturn(children); + when(documentContext.getMdObject()).thenReturn(Optional.of(spyCatalog)); List diagnostics = diagnosticInstance.getDiagnostics(documentContext); - assertThat(diagnostics).hasSize(5); + assertThat(diagnostics).hasSize(7); assertThat(diagnostics, true) .hasMessageOnRange("Запрещено использовать имя `Справочник` для `Справочник.Справочник1`", 0, 0, 9) .hasMessageOnRange( @@ -100,7 +95,7 @@ void testCatalog() { void testOtherMDO() { var documentContext = spy(getDocumentContext()); - Set children = new HashSet<>(); + List children = new ArrayList<>(); context.getConfiguration().getChildren().forEach(mdo -> { var spyMDO = spy(mdo); @@ -132,7 +127,7 @@ void testOtherMDO() { void testAllMDO() { var documentContext = spy(getDocumentContext()); - Set children = new HashSet<>(); + List children = new ArrayList<>(); context.getConfiguration().getChildren().forEach(mdo -> { var spyMDO = spy(mdo); @@ -142,8 +137,8 @@ void testAllMDO() { .thenReturn(mdo.getMdoReference().getMdoRefRu().replace("." + mdo.getName(), ".РегистрСведений")); when(spyMDO.getMdoReference()).thenReturn(mdoRef); when(spyMDO.getName()).thenReturn("РегистрСведений"); - if (mdo instanceof AbstractMDObjectBSL) { - when(((AbstractMDObjectBSL) spyMDO).getModules()).thenReturn(Collections.emptyList()); + if (mdo instanceof ModuleOwner) { + when(((ModuleOwner) spyMDO).getModules()).thenReturn(Collections.emptyList()); } children.add(spyMDO); }); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java index dff2d4f769a..12da0d0e116 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java @@ -23,8 +23,10 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.mdo.CommonModule; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.children.ObjectModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; import lombok.SneakyThrows; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; @@ -35,12 +37,11 @@ import org.springframework.test.annotation.DirtiesContext; import java.io.File; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.stream.Stream; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -53,7 +54,7 @@ class MetadataObjectNameLengthDiagnosticTest extends AbstractDiagnosticTest children = new HashSet<>(); + List children = new ArrayList<>(); List.of("CommandGroup.ГруппаКоманд1", "EventSubscription.ВерсионированиеПриЗаписи", "Role.ПолныеПрава").forEach((String mdoName) -> { - var mdObjectBase = spy(context.getConfiguration().getChildren().stream() + var spyMdo = spy(context.getConfiguration().getChildren().stream() .filter(mdo -> mdo.getMdoReference().getMdoRef().equalsIgnoreCase(mdoName)) .findFirst() .get()); // given - when(mdObjectBase.getName()).thenReturn(LONG_NAME); - children.add(mdObjectBase); + when(spyMdo.getName()).thenReturn(LONG_NAME); + children.add(spyMdo); }); var configuration = spy(context.getConfiguration()); @@ -190,7 +191,14 @@ void getDocumentContextFromFile(String modulePath, String content) { initServerContext(PATH_TO_METADATA); var testFile = new File(PATH_TO_METADATA, modulePath).getAbsoluteFile(); documentContext = spy(TestUtils.getDocumentContext(testFile.toURI(), content, context)); - module = spy((AbstractMDObjectBase) Objects.requireNonNull(context).getConfiguration().getModulesByObject().get(documentContext.getUri())); + var moduleByUri = Objects.requireNonNull(context).getConfiguration() + .getModuleByUri(documentContext.getUri()).get(); + if (moduleByUri instanceof CommonModule) { + module = spy((CommonModule) moduleByUri); + } else { + module = spy(Objects.requireNonNull(context).getConfiguration().findChild(((ObjectModule) moduleByUri).getOwner()) + .get()); + } } static Stream contentProvider() { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java index 3e4f5578e35..d15c3a00c4b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java @@ -24,8 +24,8 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.mdo.support.ReturnValueReuse; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -86,7 +86,7 @@ void testCommonModuleCached() { ); var configuration = context.getConfiguration(); - var module = spy((MDCommonModule) configuration.getModulesByObject().get(documentContext.getUri())); + var module = spy((CommonModule) configuration.findChild(documentContext.getUri()).get()); when(module.getReturnValuesReuse()).thenReturn(ReturnValueReuse.DURING_SESSION); when(documentContext.getMdObject()).thenReturn(Optional.of(module)); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java index 761a8bbf3bb..24afc083036 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java @@ -21,12 +21,14 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.mdo.Attribute; +import com.github._1c_syntax.bsl.mdo.AttributeOwner; +import com.github._1c_syntax.bsl.mdo.Catalog; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.ModuleOwner; +import com.github._1c_syntax.bsl.mdo.TabularSection; +import com.github._1c_syntax.bsl.mdo.TabularSectionOwner; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.attributes.AbstractMDOAttribute; -import com.github._1c_syntax.mdclasses.mdo.attributes.TabularSection; -import com.github._1c_syntax.mdclasses.mdo.metadata.AttributeType; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.BeforeEach; @@ -34,10 +36,8 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; import static org.mockito.Mockito.spy; @@ -59,38 +59,37 @@ void beforeTest() { void testCatalog() { var documentContext = spy(getDocumentContext()); - var mdObjectBase = spy(context.getConfiguration().getChildren().stream() + var spyMDO = (Catalog) spy(context.getConfiguration().getChildren().stream() .filter(mdo -> mdo.getMdoReference().getMdoRefRu().equalsIgnoreCase("Справочник.Справочник1")) .findFirst() .get()); when(documentContext.getModuleType()).thenReturn(ModuleType.ManagerModule); - List attributes = new ArrayList<>(); + List attributes = new ArrayList<>(); + List tabularSections = new ArrayList<>(); - var attribute = spy(((AbstractMDObjectComplex) mdObjectBase).getAttributes().stream() - .filter(mdo -> mdo.getAttributeType() == AttributeType.ATTRIBUTE) + var attribute = spy(spyMDO.getAllAttributes().stream() .findFirst() .get()); when(attribute.getName()).thenReturn("Справочник1"); attributes.add(attribute); - var tabularSection = spy(((AbstractMDObjectComplex) mdObjectBase).getAttributes().stream() - .filter(mdo -> mdo.getAttributeType() == AttributeType.TABULAR_SECTION) - .map(TabularSection.class::cast) + var tabularSection = spy(spyMDO.getTabularSections().stream() .findFirst() .get()); when(tabularSection.getName()).thenReturn("Тара"); - attributes.add(tabularSection); + tabularSections.add(tabularSection); var tabAttribute = spy(tabularSection.getAttributes().get(0)); when(tabAttribute.getName()).thenReturn("Тара"); when(tabularSection.getAttributes()).thenReturn(List.of(tabAttribute)); - when(((AbstractMDObjectComplex) mdObjectBase).getAttributes()).thenReturn(attributes); - when(documentContext.getMdObject()).thenReturn(Optional.of(mdObjectBase)); + when(spyMDO.getAllAttributes()).thenReturn(attributes); + when(spyMDO.getTabularSections()).thenReturn(tabularSections); + when(documentContext.getMdObject()).thenReturn(Optional.of(spyMDO)); List diagnostics = diagnosticInstance.getDiagnostics(documentContext); @@ -105,25 +104,35 @@ void testCatalog() { void testOtherMDO() { var documentContext = spy(getDocumentContext()); - Set children = new HashSet<>(); + List children = new ArrayList<>(); context.getConfiguration().getChildren().forEach(mdo -> { - if (mdo instanceof AbstractMDObjectComplex) { - var spyMDO = spy(mdo); - List attributes = new ArrayList<>(); - ((AbstractMDObjectComplex) mdo).getAttributes().forEach(mdoAttribute -> { - var attribute = spy(mdoAttribute); - when(attribute.getName()).thenReturn(mdo.getName()); - attributes.add(attribute); - }); - when(((AbstractMDObjectComplex) spyMDO).getAttributes()).thenReturn(attributes); + var spyMDO = spy(mdo); - if (!mdo.getName().equalsIgnoreCase("Справочник1")) { - when(((AbstractMDObjectComplex) spyMDO).getModules()).thenReturn(Collections.emptyList()); - } + if (!(mdo instanceof ModuleOwner || mdo instanceof AttributeOwner || mdo instanceof TabularSectionOwner) + || mdo.getName().equalsIgnoreCase("Справочник1") + ) { + return; + } - children.add(spyMDO); + if (mdo instanceof ModuleOwner) { + when(((ModuleOwner) spyMDO).getModules()).thenReturn(Collections.emptyList()); } + + mockAttributes(mdo, spyMDO, mdo.getName()); + + if (mdo instanceof TabularSectionOwner tabularSectionOwner) { + List tabularSections = new ArrayList<>(); + tabularSectionOwner.getTabularSections().forEach(tabularSection -> { + var spyTabularSection = spy(tabularSection); + when(spyTabularSection.getName()).thenReturn(mdo.getName()); + mockAttributes(tabularSection, spyTabularSection, mdo.getName()); + tabularSections.add(spyTabularSection); + }); + when(((TabularSectionOwner) spyMDO).getTabularSections()).thenReturn(tabularSections); + } + + children.add(spyMDO); }); var configuration = spy(context.getConfiguration()); @@ -136,11 +145,23 @@ void testOtherMDO() { List diagnostics = diagnosticInstance.getDiagnostics(documentContext); assertThat(diagnostics) - .hasSize(5) + .hasSize(6) .noneMatch(diagnostic -> diagnostic.getMessage().contains("имя `Справочник.Справочник1")) .anyMatch(diagnostic -> diagnostic.getMessage().contains("имя `Документ.Документ1.Реквизит")) .anyMatch(diagnostic -> diagnostic.getMessage().contains("имя `Документ.Документ1.ТабличнаяЧасть")) .anyMatch(diagnostic -> diagnostic.getMessage().contains("имя `РегистрСведений.РегистрСведений1.Измерение")) ; } + + private static void mockAttributes(MD mdo, MD spyMDO, String parentName) { + if (mdo instanceof AttributeOwner attributeOwner) { + List attributes = new ArrayList<>(); + attributeOwner.getAllAttributes().forEach(attribute -> { + var spyAttribute = spy(attribute); + when(spyAttribute.getName()).thenReturn(parentName); + attributes.add(spyAttribute); + }); + when(((AttributeOwner) spyMDO).getAllAttributes()).thenReturn(attributes); + } + } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java index d8bdeb2480f..9f04f2cc6f6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java @@ -23,23 +23,22 @@ import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.Module; +import com.github._1c_syntax.bsl.mdo.ModuleOwner; +import com.github._1c_syntax.bsl.mdo.ScheduledJob; import com.github._1c_syntax.bsl.mdo.support.Handler; import com.github._1c_syntax.bsl.types.MDOType; import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectComplex; -import com.github._1c_syntax.mdclasses.mdo.MDScheduledJob; -import com.github._1c_syntax.mdclasses.mdo.support.MDOModule; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.Range; import org.junit.jupiter.api.Test; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -168,21 +167,21 @@ private List checkMockHandler(String methodPath) { var documentContext = spy(getDocumentContext()); when(documentContext.getModuleType()).thenReturn(ModuleType.SessionModule); - Set children = new HashSet<>(); + List children = new ArrayList<>(); context.getConfiguration().getChildren().forEach(mdo -> { var spyMDO = spy(mdo); - if (mdo instanceof MDScheduledJob) { - when(((MDScheduledJob) spyMDO).getHandler()).thenReturn(new Handler(methodPath)); + if (mdo instanceof ScheduledJob) { + when(((ScheduledJob) spyMDO).getMethodName()).thenReturn(new Handler(methodPath)); if (mdo.getName().equalsIgnoreCase("РегламентноеЗадание1")) { children.add(spyMDO); } - } else if (mdo instanceof AbstractMDObjectComplex) { - List modules = ((AbstractMDObjectComplex) mdo).getModules().stream() + } else if (mdo instanceof ModuleOwner moduleOwner) { + List modules = moduleOwner.getModules().stream() .filter(mdoModule -> mdoModule.getModuleType() == ModuleType.ManagerModule) .collect(Collectors.toList()); - when(((AbstractMDObjectComplex) spyMDO).getModules()).thenReturn(modules); + when(((ModuleOwner) spyMDO).getModules()).thenReturn(modules); } }); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java index 0d577472d8c..a367fe89ed2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java @@ -21,9 +21,9 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.mdo.Form; import com.github._1c_syntax.bsl.mdo.support.FormType; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.AbstractMDOForm; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.BeforeEach; @@ -42,12 +42,12 @@ class ServerSideExportFormMethodDiagnosticTest extends AbstractDiagnosticTest mdo.getName().equalsIgnoreCase("ФормаЭлемента")) .findFirst() .get()); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java index 681a61283e0..e33809679a9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java @@ -23,8 +23,8 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import com.github._1c_syntax.utils.Absolute; import lombok.SneakyThrows; import org.apache.commons.io.FileUtils; @@ -47,8 +47,9 @@ class UnusedLocalMethodDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(documentContext); assertThat(diagnostics).isEmpty(); @@ -127,7 +127,7 @@ private DocumentContext getDocumentContextWithUseFlag(UseMode useMode) { initServerContext(path); var serverContext = spy(context); var configuration = spy(serverContext.getConfiguration()); - when(configuration.getSynchronousExtensionAndAddInCallUseMode()).thenReturn(useMode); + when(((Configuration) configuration).getSynchronousExtensionAndAddInCallUseMode()).thenReturn(useMode); when(serverContext.getConfiguration()).thenReturn(configuration); var documentContext = spy(TestUtils.getDocumentContext(testFile.toUri(), getText(), serverContext)); @@ -135,5 +135,4 @@ private DocumentContext getDocumentContextWithUseFlag(UseMode useMode) { return documentContext; } - } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java index 60d460032e2..940cfb4b435 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java @@ -22,19 +22,16 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.mdclasses.Configuration; -import com.github._1c_syntax.mdclasses.mdo.children.Form; +import com.github._1c_syntax.bsl.mdclasses.CF; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.test.annotation.DirtiesContext; import java.nio.file.Paths; -import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; @@ -58,6 +55,7 @@ void setUp() { } @Test + @Disabled void testNoFormModule() { final var pathToManagedApplicationModuleFile = "/Ext/ManagedApplicationModule.bsl"; @@ -78,6 +76,7 @@ void testNoFormModule() { } @Test + @Disabled void testFormModule() { List diagnostics = getDiagnosticListForMockedFile(PATH_TO_ELEMENT_MODULE_FILE); @@ -89,6 +88,7 @@ void testFormModule() { } @Test + @Disabled void testDynamicListFormModule() { final var pathToDynamicListModuleFile = "/Catalogs/Справочник1/Forms/ФормаВыбора/Ext/Form/Module.bsl"; @@ -100,15 +100,15 @@ void testDynamicListFormModule() { } - private void fillConfigChildrenByFormsWithoutModule(Configuration configuration) { - final var childrenByMdoRefFromConfig = configuration.getChildrenByMdoRef(); - var childrenByMdoRef = childrenByMdoRefFromConfig.entrySet().stream() - .filter(entry -> entry.getValue() instanceof Form) - .collect(Collectors.toMap(Map.Entry::getKey, entry -> { - ((Form) entry.getValue()).setModules(Collections.emptyList()); - return entry.getValue(); - })); - when(configuration.getChildrenByMdoRef()).thenReturn(childrenByMdoRef); + private void fillConfigChildrenByFormsWithoutModule(CF configuration) { +// final var childrenByMdoRefFromConfig = configuration.getChildrenByMdoRef(); +// var childrenByMdoRef = childrenByMdoRefFromConfig.entrySet().stream() +// .filter(entry -> entry.getValue() instanceof Form) +// .collect(Collectors.toMap(Map.Entry::getKey, entry -> { +// ((Form) entry.getValue()).setModules(Collections.emptyList()); +// return entry.getValue(); +// })); +// when(configuration.getChildrenByMdoRef()).thenReturn(childrenByMdoRef); } private List getDiagnosticListForMockedFile(String pathToDynamicListModuleFile) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java index 41eb02f2126..7edcf4d2265 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java @@ -82,7 +82,9 @@ void getReferencesToLocalMethod() { @Test void getReferencesToLocalMethodFromFormModule() { // given - var documentContext = serverContext.getDocument("Catalog.Справочник1.Form.ФормаСписка", ModuleType.FormModule).orElseThrow(); + var documentContext = serverContext + .getDocument("Catalog.Справочник1.Form.ФормаСписка", ModuleType.FormModule) + .orElseThrow(); var method = documentContext.getSymbolTree().getMethodSymbol("ЛокальнаяПроцедура").orElseThrow(); var module = documentContext.getSymbolTree().getModule(); From fea6354bead676f377b9c51dc262c2ebdfddca11 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Sun, 8 Oct 2023 09:59:05 +0300 Subject: [PATCH 393/595] mdclass snapshot --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4e55df0dd2b..dc7d77d9991 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -83,7 +83,7 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("com.github.1c-syntax", "mdclasses", "0.12.0-rc.2") + api("com.github.1c-syntax", "mdclasses", "develop-SNAPSHOT") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") From 60d56fde610b7ac03315fe6797392bc4ff0b6334 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Mon, 18 Dec 2023 17:20:48 +0300 Subject: [PATCH 394/595] -set ver -fix diagdnostic --- build.gradle.kts | 4 ++-- .../PrivilegedModuleMethodCallDiagnostic.java | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index dc7d77d9991..c6dc7ec1c61 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ repositories { mavenLocal() mavenCentral() maven(url = "https://jitpack.io") - maven(url = "https://projectlombok.org/edge-releases") + maven(url = "https://projectlombok.org/edge-releases") } group = "io.github.1c-syntax" @@ -83,7 +83,7 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("com.github.1c-syntax", "mdclasses", "develop-SNAPSHOT") + api("io.github.1c-syntax", "mdclasses", "0.12.0-rc.5") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java index 078b8187e2e..ea463293767 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -30,8 +30,8 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.mdo.CommonModule; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.MDCommonModule; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.SymbolKind; @@ -64,10 +64,10 @@ public class PrivilegedModuleMethodCallDiagnostic extends AbstractDiagnostic { @Override protected void check() { - if (privilegedModuleSymbols.isEmpty()){ + if (privilegedModuleSymbols.isEmpty()) { privilegedModuleSymbols = getPrivilegedModuleSymbols(); } - if (privilegedModuleSymbols.isEmpty()){ + if (privilegedModuleSymbols.isEmpty()) { return; } @@ -78,20 +78,20 @@ protected void check() { private List getPrivilegedModuleSymbols() { return documentContext.getServerContext().getConfiguration().getCommonModules() - .values().stream() - .filter(MDCommonModule::isPrivileged) + .stream() + .filter(CommonModule::isPrivileged) .flatMap(mdCommonModule -> getPrivilegedModuleSymbol(mdCommonModule).stream()) .toList(); } - private Optional getPrivilegedModuleSymbol(MDCommonModule mdCommonModule) { + private Optional getPrivilegedModuleSymbol(CommonModule mdCommonModule) { return documentContext.getServerContext().getDocument( mdCommonModule.getMdoReference().getMdoRef(), ModuleType.CommonModule) .map(documentContext1 -> documentContext1.getSymbolTree().getModule()); } private boolean isReferenceToModules(Reference reference) { - if (!validateNestedCalls && reference.getUri().equals(documentContext.getUri())){ + if (!validateNestedCalls && reference.getUri().equals(documentContext.getUri())) { return false; } return reference.getSourceDefinedSymbol() From eccb841c127c14a1aeee2ab3d1fc34a080919233 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 18 Dec 2023 18:11:36 +0300 Subject: [PATCH 395/595] =?UTF-8?q?=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D0=B0=D0=BD=D1=82=D1=83?= =?UTF-8?q?=20MAX=5FYEAR=5FBY=5F1C=203999?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/diagnostics/MagicDateDiagnostic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index eb8df9b7e00..fa0cb641566 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -65,6 +65,7 @@ public class MagicDateDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern nonNumberPattern = CaseInsensitivePattern.compile( "\\D" ); + public static final int MAX_YEAR_BY_1C = 3999; @DiagnosticParameter( type = String.class, @@ -112,7 +113,7 @@ private static boolean isValidDate(BSLParser.StringContext ctx) { private static boolean isValidDate(String strDate) { var year = parseInt(strDate.substring(0, 4)); - if (year < 1 || year > 3999) { + if (year < 1 || year > MAX_YEAR_BY_1C) { return false; } var month = parseInt(strDate.substring(4, 6)); From 490c31e17021231ac43866b5e7d3abbebc6d29d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 09:24:44 +0000 Subject: [PATCH 396/595] build(deps): bump io.sentry:sentry-bom from 6.34.0 to 7.1.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 6.34.0 to 7.1.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/6.34.0...7.1.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c6dc7ec1c61..6f813ae4c20 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:6.34.0") + mavenBom("io.sentry:sentry-bom:7.1.0") } } From b7df65b14064c351c4b9c54bc01e13dd22197906 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 09:45:46 +0000 Subject: [PATCH 397/595] build(deps): bump org.springframework.boot from 3.1.5 to 3.2.1 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.1.5 to 3.2.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.5...v3.2.1) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c6dc7ec1c61..21edd9f3556 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.50.0" - id("org.springframework.boot") version "3.1.5" + id("org.springframework.boot") version "3.2.1" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" From 4d1a5f144008a6b28fa5c4ed816d5751f4966882 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 26 Dec 2023 09:33:11 +0300 Subject: [PATCH 398/595] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20mdclasses=20=D0=B8=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20#3215?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- ...rongDataPathForFormElementsDiagnostic.java | 27 +++++++---------- ...DataPathForFormElementsDiagnosticTest.java | 30 +++++++++---------- 3 files changed, 27 insertions(+), 32 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c6dc7ec1c61..04a388fe91c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -83,7 +83,7 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("io.github.1c-syntax", "mdclasses", "0.12.0-rc.5") + api("io.github.1c-syntax", "mdclasses", "0.12.0-rc.6") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index 77528c81a4c..42c8d16d4d1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -29,9 +29,9 @@ import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.mdo.Form; import com.github._1c_syntax.bsl.mdo.MD; +import com.github._1c_syntax.bsl.mdo.storage.form.FormItem; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.types.ModuleType; -import com.github._1c_syntax.mdclasses.mdo.children.form.FormItem; import org.eclipse.lsp4j.Range; import java.util.function.Predicate; @@ -57,16 +57,15 @@ public class WrongDataPathForFormElementsDiagnostic extends AbstractDiagnostic { @Override protected void check() { - var range = documentContext.getSymbolTree().getModule().getSelectionRange(); if (!Ranges.isEmpty(range)) { checkCurrentModule(range); } } -// private static boolean wrongDataPath(FormItem formItem) { -// return formItem.getDataPath().getSegment().startsWith("~"); -// } + private static boolean wrongDataPath(FormItem formItem) { + return formItem.getDataPath().getSegments().startsWith("~"); + } private static boolean haveFormModules(Form form) { return !form.getModules().isEmpty(); @@ -84,13 +83,11 @@ private void checkCurrentModule(Range range) { } private void checkAllFormsWithoutModules() { - // todo формы не доделаны -// checkMdoObjectStream(form -> !haveFormModules(form), -// documentContext.getServerContext().getConfiguration().getChildrenByMdoRef().values().stream()); + checkMdoObjectStream(form -> !haveFormModules(form), + documentContext.getServerContext().getConfiguration().getPlainChildren().stream()); } private void checkMdoObjectStream(Predicate formFilter, Stream stream) { - stream .filter(Form.class::isInstance) .map(Form.class::cast) @@ -99,17 +96,15 @@ private void checkMdoObjectStream(Predicate formFilter, Stream stream) } private void checkForm(Form form) { - var formData = form.getData(); if (formData.isEmpty()) { return; } -// todo формы не доделаны -// formData.getPlainChildren() -// .stream() -// .filter(WrongDataPathForFormElementsDiagnostic::wrongDataPath) -// .forEach(formItem -> diagnosticStorage.addDiagnostic(diagnosticRange, -// info.getMessage(formItem.getName(), getMdoRef(form)))); + formData.getPlainItems() + .stream() + .filter(WrongDataPathForFormElementsDiagnostic::wrongDataPath) + .forEach(formItem -> diagnosticStorage.addDiagnostic(diagnosticRange, + info.getMessage(formItem.getName(), getMdoRef(form)))); } private String getMdoRef(Form form) { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java index 940cfb4b435..9857fedd350 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java @@ -23,14 +23,15 @@ import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.mdclasses.CF; +import com.github._1c_syntax.bsl.mdo.Form; import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.test.annotation.DirtiesContext; import java.nio.file.Paths; +import java.util.Collections; import java.util.List; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -55,16 +56,14 @@ void setUp() { } @Test - @Disabled void testNoFormModule() { final var pathToManagedApplicationModuleFile = "/Ext/ManagedApplicationModule.bsl"; context = spy(context); final var configuration = spy(context.getConfiguration()); - when(context.getConfiguration()).thenReturn(configuration); - fillConfigChildrenByFormsWithoutModule(configuration); + when(context.getConfiguration()).thenReturn(configuration); List diagnostics = getDiagnosticListForMockedFile(pathToManagedApplicationModuleFile); @@ -76,7 +75,6 @@ void testNoFormModule() { } @Test - @Disabled void testFormModule() { List diagnostics = getDiagnosticListForMockedFile(PATH_TO_ELEMENT_MODULE_FILE); @@ -88,7 +86,6 @@ void testFormModule() { } @Test - @Disabled void testDynamicListFormModule() { final var pathToDynamicListModuleFile = "/Catalogs/Справочник1/Forms/ФормаВыбора/Ext/Form/Module.bsl"; @@ -101,20 +98,23 @@ void testDynamicListFormModule() { } private void fillConfigChildrenByFormsWithoutModule(CF configuration) { -// final var childrenByMdoRefFromConfig = configuration.getChildrenByMdoRef(); -// var childrenByMdoRef = childrenByMdoRefFromConfig.entrySet().stream() -// .filter(entry -> entry.getValue() instanceof Form) -// .collect(Collectors.toMap(Map.Entry::getKey, entry -> { -// ((Form) entry.getValue()).setModules(Collections.emptyList()); -// return entry.getValue(); -// })); -// when(configuration.getChildrenByMdoRef()).thenReturn(childrenByMdoRef); + var plainChildren = configuration.getPlainChildren().stream() + .filter(md -> md instanceof Form) + .map(md -> { + var mockMD = spy(md); + when(((Form) mockMD).getModules()).thenReturn(Collections.emptyList()); + return mockMD; + }) + .toList(); + + when(configuration.getPlainChildren()).thenReturn(plainChildren); } private List getDiagnosticListForMockedFile(String pathToDynamicListModuleFile) { var testFile = Paths.get(PATH_TO_METADATA + pathToDynamicListModuleFile).toAbsolutePath(); - var documentContext = TestUtils.getDocumentContext(testFile.toUri(), getText()); + var documentContext = spy(TestUtils.getDocumentContext(testFile.toUri(), getText())); + when(documentContext.getServerContext()).thenReturn(context); return getDiagnostics(documentContext); } From 1092d74e0e6be179b98e7a08781a967b6d70aebf Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 26 Dec 2023 12:45:04 +0300 Subject: [PATCH 399/595] stable mdclasses 0.12.0 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 04a388fe91c..563ae8b2b26 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -83,7 +83,7 @@ dependencies { exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.1") - api("io.github.1c-syntax", "mdclasses", "0.12.0-rc.6") + api("io.github.1c-syntax", "mdclasses", "0.12.0") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") From 2cba3fa7df8b66f521ee2999b5b7f8f2c943b68d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 26 Dec 2023 21:28:03 +0100 Subject: [PATCH 400/595] Fix compilation error --- .../bsl/languageserver/aop/sentry/SentryScopeConfigurer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index 5312e2a1339..a40f66a8823 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -21,7 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.aop.sentry; -import io.sentry.Scope; +import io.sentry.IScope; import io.sentry.Sentry; import io.sentry.protocol.User; import jakarta.annotation.PostConstruct; @@ -48,7 +48,7 @@ public class SentryScopeConfigurer { @PostConstruct public void init() { - Sentry.configureScope((Scope scope) -> { + Sentry.configureScope((IScope scope) -> { var user = new User(); user.setId(UUID.randomUUID().toString()); scope.setUser(user); From 1e5ca45c63a390c2ea42a7499b2d6ab3aeaef943 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 26 Dec 2023 21:41:31 +0100 Subject: [PATCH 401/595] =?UTF-8?q?=D0=A3=D0=BA=D0=B0=D0=B7=D0=B0=D0=BB,?= =?UTF-8?q?=20=D1=87=D1=82=D0=BE=20=D0=B1=D0=B8=D0=BD=D1=8B=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=84=D1=80=D0=B0=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=BD=D1=8B=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stringInterner инжектится внутрь DiagnosticBeanPostProcessor, поэтому во избежание ругани он должен быть инфраструктурным бином --- .../bsl/languageserver/infrastructure/UtilsConfiguration.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java index 55480c69a23..bf9314fc585 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java @@ -22,19 +22,23 @@ package com.github._1c_syntax.bsl.languageserver.infrastructure; import com.github._1c_syntax.utils.StringInterner; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Role; /** * Конфигурация бинов из 1c-syntax/utils. */ @Configuration +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) public class UtilsConfiguration { /** * @return Настроенный объект интернирователя строк. */ @Bean + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public StringInterner stringInterner() { return new StringInterner(); } From 5c35d4d588a0be36e5e80cc9039b61e0bbfae9ca Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 26 Dec 2023 21:53:07 +0100 Subject: [PATCH 402/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20spy=20=D0=BE=D1=82=20spy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DenyIncompleteValuesDiagnosticTest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index 4e56232c7d8..c2c2384ca84 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -86,17 +86,16 @@ private void checkMockHandler(ModuleType type, boolean noneModules) { var documentContext = spy(getDocumentContext()); when(documentContext.getModuleType()).thenReturn(type); - final var infoReg = spy(context.getConfiguration().findChild(MdoReference.create(MDOType.INFORMATION_REGISTER, - "РегистрСведений1")).get() + final var infoReg = spy((InformationRegister) context.getConfiguration().findChild(MdoReference.create(MDOType.INFORMATION_REGISTER, + "РегистрСведений1")).orElseThrow() ); - var spyMdo = spy((InformationRegister) infoReg); - when(documentContext.getMdObject()).thenReturn(Optional.of(spyMdo)); + when(documentContext.getMdObject()).thenReturn(Optional.of(infoReg)); if (noneModules) { - when(spyMdo.getModules()).thenReturn(Collections.emptyList()); + when(infoReg.getModules()).thenReturn(Collections.emptyList()); - List children = List.of(spyMdo); + List children = List.of(infoReg); var configuration = spy(context.getConfiguration()); when(configuration.getChildren()).thenReturn(children); From 654c64ee05d943de550defda931b10ad6067171d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 3 Jan 2024 21:27:11 +0100 Subject: [PATCH 403/595] Happy new year --- .../bsl/languageserver/context/symbol/VariableSymbolCreate.java | 2 +- .../_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java | 2 +- .../github/_1c_syntax/bsl/languageserver/AutoServerInfo.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLTextDocumentService.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLWorkspaceService.java | 2 +- .../_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/LanguageClientHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcher.java | 2 +- .../_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java | 2 +- .../aop/measures/ConditionalOnMeasuresEnabled.java | 2 +- .../aop/measures/DocumentContextLazyDataMeasurer.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollector.java | 2 +- .../bsl/languageserver/aop/measures/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/package-info.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallback.java | 2 +- .../bsl/languageserver/aop/sentry/SentryScopeConfigurer.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/sentry/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java | 2 +- .../bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphWalker.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConditionVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConstraints.java | 2 +- .../bsl/languageserver/cfg/StatementsBlockWriter.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java | 2 +- .../bsl/languageserver/cli/LanguageServerStartCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java | 2 +- .../bsl/languageserver/cli/lsp/FileAwarePrintWriter.java | 2 +- .../cli/lsp/LanguageServerLauncherConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/lsp/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/package-info.java | 2 +- .../languageserver/codeactions/AbstractQuickFixSupplier.java | 2 +- .../bsl/languageserver/codeactions/CodeActionSupplier.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplier.java | 2 +- .../codeactions/ExtractStructureConstructorSupplier.java | 2 +- .../languageserver/codeactions/FixAllCodeActionSupplier.java | 2 +- .../codeactions/GenerateStandardRegionsSupplier.java | 2 +- .../languageserver/codeactions/QuickFixCodeActionSupplier.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codeactions/package-info.java | 2 +- .../codelenses/AbstractMethodComplexityCodeLensSupplier.java | 2 +- .../codelenses/AbstractRunTestsCodeLensSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java | 2 +- .../bsl/languageserver/codelenses/CodeLensSupplier.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplier.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/DefaultCodeLensData.java | 2 +- .../languageserver/codelenses/RunAllTestsCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/RunTestCodeLensSupplier.java | 2 +- .../codelenses/infrastructure/CodeLensesConfiguration.java | 2 +- .../languageserver/codelenses/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/package-info.java | 2 +- .../languageserver/codelenses/testrunner/TestRunnerAdapter.java | 2 +- .../bsl/languageserver/codelenses/testrunner/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/BSLColor.java | 2 +- .../bsl/languageserver/color/ColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/ColorPresentationSupplier.java | 2 +- .../color/ConstructorColorInformationSupplier.java | 2 +- .../color/ConstructorColorPresentationSupplier.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/WebColor.java | 2 +- .../bsl/languageserver/color/WebColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/WebColorPresentationSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/color/package-info.java | 2 +- .../bsl/languageserver/commands/CommandArguments.java | 2 +- .../_1c_syntax/bsl/languageserver/commands/CommandSupplier.java | 2 +- .../bsl/languageserver/commands/DefaultCommandArguments.java | 2 +- .../ToggleCognitiveComplexityInlayHintsCommandSupplier.java | 2 +- .../ToggleCyclomaticComplexityInlayHintsCommandSupplier.java | 2 +- .../AbstractToggleComplexityInlayHintsCommandSupplier.java | 2 +- .../complexity/ToggleComplexityInlayHintsCommandArguments.java | 2 +- .../bsl/languageserver/commands/complexity/package-info.java | 2 +- .../commands/infrastructure/CommandsConfiguration.java | 2 +- .../languageserver/commands/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/commands/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/configuration/Language.java | 2 +- .../configuration/LanguageServerConfiguration.java | 2 +- .../bsl/languageserver/configuration/SendErrorsMode.java | 2 +- .../languageserver/configuration/codelens/CodeLensOptions.java | 2 +- .../configuration/codelens/TestRunnerAdapterOptions.java | 2 +- .../bsl/languageserver/configuration/codelens/package-info.java | 2 +- .../configuration/databind/ParametersDeserializer.java | 2 +- .../bsl/languageserver/configuration/databind/package-info.java | 2 +- .../configuration/diagnostics/ComputeTrigger.java | 2 +- .../configuration/diagnostics/DiagnosticsOptions.java | 2 +- .../bsl/languageserver/configuration/diagnostics/Mode.java | 2 +- .../languageserver/configuration/diagnostics/SkipSupport.java | 2 +- .../configuration/diagnostics/SubsystemFilter.java | 2 +- .../languageserver/configuration/diagnostics/package-info.java | 2 +- .../configuration/documentlink/DocumentLinkOptions.java | 2 +- .../languageserver/configuration/documentlink/package-info.java | 2 +- .../events/LanguageServerConfigurationChangedEvent.java | 2 +- .../bsl/languageserver/configuration/events/package-info.java | 2 +- .../configuration/formating/FormattingOptions.java | 2 +- .../languageserver/configuration/formating/package-info.java | 2 +- .../configuration/inlayhints/InlayHintOptions.java | 2 +- .../languageserver/configuration/inlayhints/package-info.java | 2 +- .../bsl/languageserver/configuration/package-info.java | 2 +- .../configuration/watcher/ConfigurationFileChangeListener.java | 2 +- .../configuration/watcher/ConfigurationFileSystemWatcher.java | 2 +- .../bsl/languageserver/configuration/watcher/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/DocumentContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/context/FileType.java | 2 +- .../_1c_syntax/bsl/languageserver/context/MetricStorage.java | 2 +- .../_1c_syntax/bsl/languageserver/context/ServerContext.java | 2 +- .../context/computer/CognitiveComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/ComplexityData.java | 2 +- .../context/computer/ComplexitySecondaryLocation.java | 2 +- .../bsl/languageserver/context/computer/Computer.java | 2 +- .../context/computer/CyclomaticComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/DiagnosticComputer.java | 2 +- .../context/computer/DiagnosticIgnoranceComputer.java | 2 +- .../languageserver/context/computer/MethodSymbolComputer.java | 2 +- .../languageserver/context/computer/ModuleSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/QueryComputer.java | 2 +- .../languageserver/context/computer/RegionSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/SymbolTreeComputer.java | 2 +- .../languageserver/context/computer/VariableSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/package-info.java | 2 +- .../context/events/DocumentContextContentChangedEvent.java | 2 +- .../context/events/ServerContextPopulatedEvent.java | 2 +- .../bsl/languageserver/context/events/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/package-info.java | 2 +- .../languageserver/context/symbol/AbstractVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/Describable.java | 2 +- .../bsl/languageserver/context/symbol/Exportable.java | 2 +- .../languageserver/context/symbol/IntBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/MethodSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ModuleSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ParameterDefinition.java | 2 +- .../bsl/languageserver/context/symbol/RegionSymbol.java | 2 +- .../languageserver/context/symbol/ShortBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/SourceDefinedSymbol.java | 2 +- .../_1c_syntax/bsl/languageserver/context/symbol/Symbol.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTree.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTreeVisitor.java | 2 +- .../bsl/languageserver/context/symbol/VariableSymbol.java | 2 +- .../languageserver/context/symbol/annotations/Annotation.java | 2 +- .../context/symbol/annotations/AnnotationKind.java | 2 +- .../symbol/annotations/AnnotationParameterDefinition.java | 2 +- .../context/symbol/annotations/CompilerDirectiveKind.java | 2 +- .../languageserver/context/symbol/annotations/package-info.java | 2 +- .../context/symbol/description/DescriptionReader.java | 2 +- .../context/symbol/description/MethodDescription.java | 2 +- .../context/symbol/description/ParameterDescription.java | 2 +- .../symbol/description/SourceDefinedSymbolDescription.java | 2 +- .../context/symbol/description/TypeDescription.java | 2 +- .../languageserver/context/symbol/description/package-info.java | 2 +- .../bsl/languageserver/context/symbol/package-info.java | 2 +- .../context/symbol/variable/VariableDescription.java | 2 +- .../languageserver/context/symbol/variable/VariableKind.java | 2 +- .../bsl/languageserver/databind/ObjectMapperConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java | 2 +- .../_1c_syntax/bsl/languageserver/databind/package-info.java | 2 +- .../diagnostics/AbstractCommonModuleNameDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnostic.java | 2 +- .../diagnostics/AbstractExecuteExternalCodeDiagnostic.java | 2 +- .../diagnostics/AbstractFindMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractListenerDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractMetadataDiagnostic.java | 2 +- .../diagnostics/AbstractMultilingualStringDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLListenerDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLVisitorDiagnostic.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractVisitorDiagnostic.java | 2 +- .../diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BSLDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnostic.java | 2 +- .../diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CachedPublicDiagnostic.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnostic.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnostic.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnostic.java | 2 +- .../languageserver/diagnostics/CodeOutOfRegionDiagnostic.java | 2 +- .../diagnostics/CognitiveComplexityDiagnostic.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java | 2 +- .../diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java | 2 +- .../diagnostics/CommonModuleAssignDiagnostic.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnostic.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnostic.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnostic.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnostic.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnostic.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnostic.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnostic.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnostic.java | 2 +- .../diagnostics/DenyIncompleteValuesDiagnostic.java | 2 +- .../diagnostics/DeprecatedAttributes8312Diagnostic.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedFindDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedMessageDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8310Diagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8317Diagnostic.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticStorage.java | 2 +- .../languageserver/diagnostics/DuplicateRegionDiagnostic.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnostic.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyCodeBlockDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyStatementDiagnostic.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnostic.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnostic.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnostic.java | 2 +- .../languageserver/diagnostics/ExportVariablesDiagnostic.java | 2 +- .../diagnostics/ExternalAppStartingDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java | 2 +- .../languageserver/diagnostics/FileSystemAccessDiagnostic.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnostic.java | 2 +- .../languageserver/diagnostics/FormDataToValueDiagnostic.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnostic.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnostic.java | 2 +- .../diagnostics/FunctionOutParameterDiagnostic.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java | 2 +- .../diagnostics/GlobalContextMethodCollision8312Diagnostic.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnostic.java | 2 +- .../diagnostics/IfConditionComplexityDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnostic.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnostic.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnostic.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnostic.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnostic.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnostic.java | 2 +- .../languageserver/diagnostics/IsInRoleMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/JoinWithSubQueryDiagnostic.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnostic.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/LineLengthDiagnostic.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicNumberDiagnostic.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MethodSizeDiagnostic.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnostic.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnostic.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnostic.java | 2 +- .../diagnostics/MissingEventSubscriptionHandlerDiagnostic.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnostic.java | 2 +- .../diagnostics/MissingReturnedValueDescriptionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnostic.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnostic.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnostic.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnostic.java | 2 +- .../MultilingualStringHasAllDeclaredLanguagesDiagnostic.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnostic.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnostic.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnostic.java | 2 +- .../languageserver/diagnostics/NestedStatementsDiagnostic.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnostic.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/NonStandardRegionDiagnostic.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnostic.java | 2 +- .../languageserver/diagnostics/NumberOfParamsDiagnostic.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java | 2 +- .../diagnostics/OneStatementPerLineDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnostic.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ParseErrorDiagnostic.java | 2 +- .../diagnostics/PrivilegedModuleMethodCallDiagnostic.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnostic.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnostic.java | 2 +- .../languageserver/diagnostics/QueryParseErrorDiagnostic.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/QuickFixProvider.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnostic.java | 2 +- .../diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnostic.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfAssignDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java | 2 +- .../languageserver/diagnostics/SemicolonPresenceDiagnostic.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnostic.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnostic.java | 2 +- .../languageserver/diagnostics/SetPrivilegedModeDiagnostic.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnostic.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnostic.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnostic.java | 2 +- .../languageserver/diagnostics/ThisObjectAssignDiagnostic.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnostic.java | 2 +- .../languageserver/diagnostics/TooManyReturnsDiagnostic.java | 2 +- .../TransferringParametersBetweenClientAndServerDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnostic.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnostic.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnostic.java | 2 +- .../languageserver/diagnostics/UnreachableCodeDiagnostic.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedLocalMethodDiagnostic.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedParametersDiagnostic.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnostic.java | 2 +- .../languageserver/diagnostics/UseLessForEachDiagnostic.java | 2 +- .../diagnostics/UseSystemInformationDiagnostic.java | 2 +- .../diagnostics/UsingCancelParameterDiagnostic.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnostic.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingHardcodePathDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeSecretInformationDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingLikeInQueryDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingModalWindowsDiagnostic.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingServiceTagDiagnostic.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java | 2 +- .../VirtualTableCallWithoutParametersDiagnostic.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnostic.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnostic.java | 2 +- .../diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnostic.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java | 2 +- .../diagnostics/infrastructure/DiagnosticBeanPostProcessor.java | 2 +- .../infrastructure/DiagnosticInfosConfiguration.java | 2 +- .../diagnostics/infrastructure/DiagnosticObjectProvider.java | 2 +- .../diagnostics/infrastructure/DiagnosticsConfiguration.java | 2 +- .../bsl/languageserver/diagnostics/infrastructure/Disabled.java | 2 +- .../languageserver/diagnostics/infrastructure/package-info.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticCode.java | 2 +- .../diagnostics/metadata/DiagnosticCompatibilityMode.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticMetadata.java | 2 +- .../diagnostics/metadata/DiagnosticParameter.java | 2 +- .../diagnostics/metadata/DiagnosticParameterInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticScope.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticSeverity.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticTag.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticType.java | 2 +- .../bsl/languageserver/diagnostics/metadata/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/package-info.java | 2 +- .../bsl/languageserver/diagnostics/typo/JLanguageToolPool.java | 2 +- .../documentlink/DiagnosticDescriptionDocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/DocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/package-info.java | 2 +- .../events/LanguageServerInitializeRequestReceivedEvent.java | 2 +- .../_1c_syntax/bsl/languageserver/events/package-info.java | 2 +- .../folding/AbstractCommentFoldingRangeSupplier.java | 2 +- .../languageserver/folding/CodeBlockFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/CommentFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/FoldingRangeSupplier.java | 2 +- .../languageserver/folding/PreprocIfFoldingRangeSupplier.java | 2 +- .../folding/QueryCommentFoldingRangeSupplier.java | 2 +- .../folding/QueryPackageFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/RegionFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/UseFoldingRangeSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/folding/package-info.java | 2 +- .../bsl/languageserver/hover/MarkupContentBuilder.java | 2 +- .../languageserver/hover/MarkupContentBuilderConfiguration.java | 2 +- .../languageserver/hover/MethodSymbolMarkupContentBuilder.java | 2 +- .../hover/VariableSymbolMarkupContentBuilder.java | 2 +- .../_1c_syntax/bsl/languageserver/hover/package-info.java | 2 +- .../infrastructure/LanguageClientAwareAppender.java | 2 +- .../bsl/languageserver/infrastructure/LogbackConfiguration.java | 2 +- .../languageserver/infrastructure/SchedulingConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/UtilsConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/package-info.java | 2 +- .../inlayhints/AbstractComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CognitiveComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CyclomaticComplexityInlayHintSupplier.java | 2 +- .../bsl/languageserver/inlayhints/InlayHintSupplier.java | 2 +- .../inlayhints/SourceDefinedMethodCallInlayHintSupplier.java | 2 +- .../inlayhints/infrastructure/InlayHintsConfiguration.java | 2 +- .../languageserver/inlayhints/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/inlayhints/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java | 2 +- .../bsl/languageserver/jsonrpc/ProtocolExtension.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/package-info.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/package-info.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProvider.java | 2 +- .../bsl/languageserver/providers/CodeActionProvider.java | 2 +- .../bsl/languageserver/providers/CodeLensProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/ColorProvider.java | 2 +- .../bsl/languageserver/providers/CommandProvider.java | 2 +- .../bsl/languageserver/providers/DefinitionProvider.java | 2 +- .../bsl/languageserver/providers/DiagnosticProvider.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProvider.java | 2 +- .../bsl/languageserver/providers/DocumentSymbolProvider.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/FormatProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/HoverProvider.java | 2 +- .../bsl/languageserver/providers/InlayHintProvider.java | 2 +- .../bsl/languageserver/providers/ReferencesProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/RenameProvider.java | 2 +- .../bsl/languageserver/providers/SelectionRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/SymbolProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/package-info.java | 2 +- .../bsl/languageserver/recognizer/AbstractDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetector.java | 2 +- .../bsl/languageserver/recognizer/CodeRecognizer.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetector.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetector.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetector.java | 2 +- .../bsl/languageserver/recognizer/LanguageFootprint.java | 2 +- .../bsl/languageserver/recognizer/PatternDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/package-info.java | 2 +- .../bsl/languageserver/references/ReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceIndex.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFiller.java | 2 +- .../references/ReferenceIndexReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceResolver.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinder.java | 2 +- .../bsl/languageserver/references/model/Location.java | 2 +- .../bsl/languageserver/references/model/LocationRepository.java | 2 +- .../bsl/languageserver/references/model/OccurrenceType.java | 2 +- .../bsl/languageserver/references/model/Reference.java | 2 +- .../_1c_syntax/bsl/languageserver/references/model/Symbol.java | 2 +- .../bsl/languageserver/references/model/SymbolOccurrence.java | 2 +- .../references/model/SymbolOccurrenceRepository.java | 2 +- .../bsl/languageserver/references/model/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/references/package-info.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporter.java | 2 +- .../bsl/languageserver/reporters/DiagnosticReporter.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReport.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReporter.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java | 2 +- .../bsl/languageserver/reporters/JUnitTestSuites.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JsonReporter.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregator.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/SarifReporter.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntry.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java | 2 +- .../bsl/languageserver/reporters/data/AnalysisInfo.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java | 2 +- .../bsl/languageserver/reporters/data/package-info.java | 2 +- .../reporters/databind/AnalysisInfoObjectMapper.java | 2 +- .../reporters/databind/DiagnosticCodeDeserializer.java | 2 +- .../reporters/databind/DiagnosticCodeSerializer.java | 2 +- .../bsl/languageserver/reporters/databind/DiagnosticMixIn.java | 2 +- .../bsl/languageserver/reporters/databind/package-info.java | 2 +- .../reporters/infrastructure/ReportersConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Keywords.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Methods.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Modules.java | 2 +- .../bsl/languageserver/utils/MultilingualStringAnalyser.java | 2 +- .../languageserver/utils/NamedForkJoinWorkerThreadFactory.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/NotifyDescription.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Regions.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/RelatedInformation.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Resources.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Strings.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Trees.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java | 2 +- .../languageserver/utils/expressiontree/AbstractCallNode.java | 2 +- .../utils/expressiontree/BinaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslExpression.java | 2 +- .../languageserver/utils/expressiontree/BslOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslOperator.java | 2 +- .../utils/expressiontree/ConstructorCallNode.java | 2 +- .../utils/expressiontree/DefaultNodeEqualityComparer.java | 2 +- .../languageserver/utils/expressiontree/ExpressionNodeType.java | 2 +- .../utils/expressiontree/ExpressionParseTreeRewriter.java | 2 +- .../utils/expressiontree/ExpressionTreeBuildingVisitor.java | 2 +- .../bsl/languageserver/utils/expressiontree/MethodCallNode.java | 2 +- .../utils/expressiontree/NodeEqualityComparer.java | 2 +- .../utils/expressiontree/SkippedCallArgumentNode.java | 2 +- .../languageserver/utils/expressiontree/TerminalSymbolNode.java | 2 +- .../utils/expressiontree/TernaryOperatorNode.java | 2 +- .../expressiontree/TransitiveOperationsIgnoringComparer.java | 2 +- .../languageserver/utils/expressiontree/UnaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/package-info.java | 2 +- .../bsl/languageserver/websocket/LSPWebSocketEndpoint.java | 2 +- .../bsl/languageserver/websocket/WebSocketConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/websocket/package-info.java | 2 +- .../bsl/languageserver/AnalyzeProjectOnStartTest.java | 2 +- .../_1c_syntax/bsl/languageserver/AutoServerInfoTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java | 2 +- .../bsl/languageserver/BSLTextDocumentServiceTest.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java | 2 +- .../bsl/languageserver/WorkDoneProgressHelperTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollectorTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasuresSubsystemTest.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallbackTest.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplierTest.java | 2 +- .../codeactions/ExtractStructureConstructorSupplierTest.java | 2 +- .../codeactions/GenerateStandardRegionsSupplierTest.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplierTest.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplierTest.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplierTest.java | 2 +- .../codelenses/RunAllTestsCodeLensSupplierTest.java | 2 +- .../languageserver/codelenses/RunTestCodeLensSupplierTest.java | 2 +- .../color/ConstructorColorInformationSupplierTest.java | 2 +- .../color/ConstructorColorPresentationSupplierTest.java | 2 +- .../languageserver/color/WebColorInformationSupplierTest.java | 2 +- .../languageserver/color/WebColorPresentationSupplierTest.java | 2 +- .../ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java | 2 +- ...ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java | 2 +- .../bsl/languageserver/configuration/ConfigurationTest.java | 2 +- .../languageserver/configuration/GlobalConfigurationTest.java | 2 +- .../configuration/LanguageServerConfigurationTest.java | 2 +- .../watcher/ConfigurationFileSystemWatcherTest.java | 2 +- .../bsl/languageserver/context/DocumentContextTest.java | 2 +- .../bsl/languageserver/context/ServerContextTest.java | 2 +- .../context/computer/CognitiveComplexityComputerTest.java | 2 +- .../context/computer/CyclomaticComplexityComputerTest.java | 2 +- .../context/computer/DiagnosticIgnoranceComputerTest.java | 2 +- .../context/computer/MethodSymbolComputerTest.java | 2 +- .../context/computer/ModuleSymbolComputerTest.java | 2 +- .../bsl/languageserver/context/computer/QueryComputerTest.java | 2 +- .../languageserver/context/computer/SymbolTreeComputerTest.java | 2 +- .../bsl/languageserver/context/computer/VariableSymbolTest.java | 2 +- .../context/symbol/description/MethodDescriptionTest.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnosticTest.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnosticTest.java | 2 +- .../AllFunctionPathMustHaveReturnDiagnosticTest.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java | 2 +- .../BeginTransactionBeforeTryCatchDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CachedPublicDiagnosticTest.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnosticTest.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnosticTest.java | 2 +- .../diagnostics/CodeOutOfRegionDiagnosticTest.java | 2 +- .../diagnostics/CognitiveComplexityDiagnosticTest.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CommentedCodeDiagnosticTest.java | 2 +- .../CommitTransactionOutsideTryCatchDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleAssignDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnosticTest.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnosticTest.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnosticTest.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnosticTest.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnosticTest.java | 2 +- .../diagnostics/DenyIncompleteValuesDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedAttributes8312DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedFindDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMessageDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8310DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8317DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticInfosTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticsTest.java | 2 +- .../diagnostics/DuplicateRegionDiagnosticTest.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnosticTest.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnosticTest.java | 2 +- .../diagnostics/EmptyCodeBlockDiagnosticTest.java | 2 +- .../languageserver/diagnostics/EmptyRegionDiagnosticTest.java | 2 +- .../diagnostics/EmptyStatementDiagnosticTest.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnosticTest.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnosticTest.java | 2 +- .../diagnostics/ExportVariablesDiagnosticTest.java | 2 +- .../diagnostics/ExternalAppStartingDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ExtraCommasDiagnosticTest.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java | 2 +- .../diagnostics/FileSystemAccessDiagnosticTest.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnosticTest.java | 2 +- .../diagnostics/FormDataToValueDiagnosticTest.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnosticTest.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnosticTest.java | 2 +- .../diagnostics/FunctionOutParameterDiagnosticTest.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnosticTest.java | 2 +- .../languageserver/diagnostics/GetFormMethodDiagnosticTest.java | 2 +- .../GlobalContextMethodCollision8312DiagnosticTest.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnosticTest.java | 2 +- .../diagnostics/IfConditionComplexityDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnosticTest.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnosticTest.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnosticTest.java | 2 +- .../diagnostics/IsInRoleMethodDiagnosticTest.java | 2 +- .../diagnostics/JoinWithSubQueryDiagnosticTest.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnosticTest.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java | 2 +- .../languageserver/diagnostics/LineLengthDiagnosticTest.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MagicNumberDiagnosticTest.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MethodSizeDiagnosticTest.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnosticTest.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnosticTest.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnosticTest.java | 2 +- .../MissingEventSubscriptionHandlerDiagnosticTest.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnosticTest.java | 2 +- .../MissingReturnedValueDescriptionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MissingSpaceDiagnosticTest.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnosticTest.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnosticTest.java | 2 +- ...MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnosticTest.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnosticTest.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnosticTest.java | 2 +- .../diagnostics/NestedStatementsDiagnosticTest.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnosticTest.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java | 2 +- .../diagnostics/NonStandardRegionDiagnosticTest.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnosticTest.java | 2 +- .../diagnostics/NumberOfParamsDiagnosticTest.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OSUsersMethodDiagnosticTest.java | 2 +- .../diagnostics/OneStatementPerLineDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OrderOfParamsDiagnosticTest.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnosticTest.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ParseErrorDiagnosticTest.java | 2 +- .../diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnosticTest.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnosticTest.java | 2 +- .../diagnostics/QueryParseErrorDiagnosticTest.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnosticTest.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnosticTest.java | 2 +- .../languageserver/diagnostics/RefOveruseDiagnosticTest.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnosticTest.java | 2 +- .../SameMetadataObjectAndChildNamesDiagnosticTest.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnosticTest.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfAssignDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfInsertionDiagnosticTest.java | 2 +- .../diagnostics/SemicolonPresenceDiagnosticTest.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnosticTest.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java | 2 +- .../diagnostics/SetPrivilegedModeDiagnosticTest.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnosticTest.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnosticTest.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/TempFilesDirDiagnosticTest.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnosticTest.java | 2 +- .../diagnostics/ThisObjectAssignDiagnosticTest.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java | 2 +- .../diagnostics/TooManyReturnsDiagnosticTest.java | 2 +- ...nsferringParametersBetweenClientAndServerDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnosticTest.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java | 2 +- .../diagnostics/UnreachableCodeDiagnosticTest.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalMethodDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnosticTest.java | 2 +- .../diagnostics/UnusedParametersDiagnosticTest.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnosticTest.java | 2 +- .../diagnostics/UseLessForEachDiagnosticTest.java | 2 +- .../diagnostics/UseSystemInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingCancelParameterDiagnosticTest.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnosticTest.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodePathDiagnosticTest.java | 2 +- .../UsingHardcodeSecretInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/UsingModalWindowsDiagnosticTest.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java | 2 +- .../diagnostics/UsingServiceTagDiagnosticTest.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/UsingThisFormDiagnosticTest.java | 2 +- .../VirtualTableCallWithoutParametersDiagnosticTest.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnosticTest.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnosticTest.java | 2 +- .../WrongUseFunctionProceedWithCallDiagnosticTest.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnosticTest.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnosticTest.java | 2 +- .../languageserver/diagnostics/YoLetterUsageDiagnosticTest.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticInfoTest.java | 2 +- .../DiagnosticDescriptionDocumentLinkSupplierTest.java | 2 +- .../folding/QueryCommentFoldingRangeSupplierTest.java | 2 +- .../folding/QueryPackageFoldingRangeSupplierTest.java | 2 +- .../hover/MethodSymbolMarkupContentBuilderTest.java | 2 +- .../hover/VariableSymbolMarkupContentBuilderTest.java | 2 +- .../inlayhints/CognitiveComplexityInlayHintSupplierTest.java | 2 +- .../inlayhints/CyclomaticComplexityInlayHintSupplierTest.java | 2 +- .../SourceDefinedMethodCallInlayHintSupplierTest.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeActionProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeLensProviderTest.java | 2 +- .../bsl/languageserver/providers/ColorProviderTest.java | 2 +- .../bsl/languageserver/providers/CommandProviderTest.java | 2 +- .../bsl/languageserver/providers/DefinitionProviderTest.java | 2 +- .../bsl/languageserver/providers/DiagnosticProviderTest.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProviderTest.java | 2 +- .../languageserver/providers/DocumentSymbolProviderTest.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/FormatProviderTest.java | 2 +- .../bsl/languageserver/providers/HoverProviderTest.java | 2 +- .../bsl/languageserver/providers/InlayHintProviderTest.java | 2 +- .../bsl/languageserver/providers/ReferencesProviderTest.java | 2 +- .../bsl/languageserver/providers/RenameProviderTest.java | 2 +- .../languageserver/providers/SelectionRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/SymbolProviderTest.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/PatternDetectorTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFillerTest.java | 2 +- .../references/ReferenceIndexReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexTest.java | 2 +- .../bsl/languageserver/references/ReferenceResolverTest.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/model/ReferenceTest.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporterTest.java | 2 +- .../bsl/languageserver/reporters/GenericReporterTest.java | 2 +- .../bsl/languageserver/reporters/JUnitReporterTest.java | 2 +- .../bsl/languageserver/reporters/JsonReporterTest.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregatorTest.java | 2 +- .../bsl/languageserver/reporters/SarifReporterTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntryTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReporterTest.java | 2 +- .../util/AbstractDirtyContextTestExecutionListener.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/Assertions.java | 2 +- .../util/CleanupContextBeforeClassAndAfterClass.java | 2 +- .../util/CleanupContextBeforeClassAndAfterEachTestMethod.java | 2 +- ...rtyContextBeforeClassAndAfterClassTestExecutionListener.java | 2 +- ...ntextBeforeClassAndAfterTestMethodTestExecutionListener.java | 2 +- .../util/RefreshContextTestExecutionListener.java | 2 +- .../bsl/languageserver/util/TestApplicationContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/TestUtils.java | 2 +- .../bsl/languageserver/util/assertions/CodeActionAssert.java | 2 +- .../languageserver/util/assertions/ColorInformationAssert.java | 2 +- .../util/assertions/ColorInformationAssertFactory.java | 2 +- .../languageserver/util/assertions/ColorInformationsAssert.java | 2 +- .../languageserver/util/assertions/ColorPresentationAssert.java | 2 +- .../util/assertions/ColorPresentationAssertFactory.java | 2 +- .../util/assertions/ColorPresentationsAssert.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticAssert.java | 2 +- .../languageserver/util/assertions/DiagnosticAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticsAssert.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangeAssert.java | 2 +- .../util/assertions/FoldingRangeAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangesAssert.java | 2 +- .../languageserver/util/assertions/SelectionRangeAssert.java | 2 +- .../util/assertions/SelectionRangeAssertFactory.java | 2 +- .../languageserver/util/assertions/SelectionRangesAssert.java | 2 +- .../bsl/languageserver/util/assertions/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/package-info.java | 2 +- .../languageserver/utils/ExpressionParseTreeRewriterTest.java | 2 +- .../bsl/languageserver/utils/ExpressionTreeComparersTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/RangesTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/StringsTest.java | 2 +- .../bsl/languageserver/websocket/WebsocketLauncherTest.java | 2 +- 816 files changed, 816 insertions(+), 816 deletions(-) diff --git a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java index 3b5a9e2d329..52a03b7ef1e 100644 --- a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java +++ b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java index 5283444a4f6..10310f35fcb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java index b3c0177b21c..69a3736c835 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java index cc3e40d152c..389198abccd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 0f6cfb922d6..5e67d295856 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 19ba3a0b523..2be3d0562e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 6dbca3ef889..b2e534bd14b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 2ed324237aa..0cdf596d6c8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java index 7992a306fb5..39913004743 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java index 5f179ab0f3e..45b6a3aaaf4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java index 5c7ced2a0e5..50e35d7f40d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java index c5d19f8a7a1..835890fbe24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java index 4b2b2435ab6..feb40b151ea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java index b2f265a1d93..8c38c404081 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java index bf5436ceeb1..38745564840 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java index 1285caca0a9..ae1c46cfcaa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java index 3b07903ac1b..f87f9cf88e7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java index 44fb92099b1..7c4adde9697 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java index f82356afbff..a19c9a2fa57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java index 87b274c09a8..006596e4d88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java index 3af96a17ddb..d131b505558 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java index e646d8a9ba5..2597ae3f002 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java index 15a3c4d835d..0e6d4d3866f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index a40f66a8823..0753d40ce13 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java index 17c0c356ec1..9e54ce5f89a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java index c1fb0bd2b52..46eb90351f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java index e3d5d72ffd7..1c28ce385bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java index de47fe605fc..0f1cec35cd4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java index 9f4b65e72e4..b739e1f1ba5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java index 5b99f4d9dfc..c4184513306 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java index 25adafc7be6..89baae8a99a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java index 6f6cddf1392..4e621e1d7e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java index 70b26a4431a..1c20e28010f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java index 73af51e6e56..6f3cb7e60d1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java index ed4d97f67c2..feda24b33d2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java index f7dced458e4..94407fdc387 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java index 98bec0a1932..9ba50bb6e5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java index b9b1a988f3c..17579cf1d41 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java index 5fa55c76c73..2c11dd87b5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java index 9212464e231..6fc53f87154 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java index 6e10a64f960..e9e5178117f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java index c0d78a9b8e4..f6f780424d4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java index b7f77846ed8..15f3cca56ec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java index 32a9fa5e74d..552a7c6a527 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java index 7fe1b979a27..056d3d6a1c1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index f31241320fd..4caf972cca8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java index 11345db9657..9be7ea72071 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java index 52d2d9b8949..76a5bf337e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java index d17e0baffa1..04cbe9a4225 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java index 7d97c8cec7c..76156230de9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java index 5a4392c293a..1cc604009e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java index d0457ca0831..a0574ab0e9d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java index ee164ce739b..e135db8dda8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java index f418478518d..f0323c8bdab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java index 41b06a99f20..10b92ea5e4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java index 7d23127aa46..d06a03a2894 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java index 5563997567b..723dbad7c4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index bee397e8149..c16201d4ed2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java index 6bb040d76d4..e0d2b5075c6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java index 368c161de7b..6993e357ede 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java index 48cee5f1f1e..1471721a81c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java index 3d12744d685..f1cdcf3a836 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java index b5da17dd824..3e97832ce87 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index a71cf923df7..231eb13df03 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 0c66055a232..3cbf5a209a3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java index c3c678afdcd..7938e8c442e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java index 12366d5af64..d05d61fbd01 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java index ab13f820e4f..88b2de2c385 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java index bdfbc4553a6..3e246981447 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java index 51cbb6f6920..b2c6a9bec44 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 8077915b378..10d7ca8ac74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index c9d754beedb..007c5b6ce08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java index cbcfc32480d..d02b788aed5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java index d9346663ff3..e7dc14afc23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java index 58586c08f71..3095e10fa2b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index 513894317e6..c853bb4b290 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java index 39ce288f548..78ab38cedfe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java index c8c94119635..f3c7b60fff2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java index 77554e359de..6f5fddc49c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java index e3e6f35fa95..1a9f7bd4f5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index 1c74bd6c233..58c8912d7d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java index 44cb4515b72..1a4921ea44f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java index 415b177453e..f13eaea4da3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java index 82204162629..a7a50e06f7e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java index 36bf95d8b58..1c42c9121dc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java index 3c5be816cc3..5034bf05f7a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java index 4e66dff0579..b6354ef8300 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 7a604f3b6b2..3de60bb2d92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java index 2b0fc89b5e5..3cbf1caf2c0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java index 8d32a87f321..7edfca092ba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java index 343b1989b06..6fe3782e439 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index 86f0a04f9d9..2796b1291d1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java index bd899446aa2..18607281671 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java index c910dca8805..a796282ec0c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java index a3c85772a78..654582c2230 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java index fc7a54028c1..32a3a7b7158 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java index 748bdbca505..a1f734f56b9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java index 7a05e0e4af8..b627d4fc834 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 307ac1986c4..a47ba6e0363 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java index 58aa3f340f2..6eff543e329 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java index 34ef851a01d..654f5fc094a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index e0e9c4ee133..c368f8872e5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java index 83d6eafb0c6..99bf2b19d92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java index 3697e933f98..8f94f39cbb6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java index 58b77385b71..8f152e1301f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java index 93091091cfe..fadb8ccaaf9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java index 040cb33f2ec..d445a027530 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java index 54bc8f0c477..41c8938a3d4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java index 67ffa7258ed..7570456eb14 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java index db07d116bd2..1e89e458003 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java index ac284d5e026..2ca9f5a44b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java index 7d92105e989..bec9d64f0dc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java index 0b3a1738e34..814184ee631 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java index 0cc0037e1ee..cd6cdd2e3bd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java index f05a9a9449d..4ffc46ddfe2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java index 8b75ba75e24..a6375c02e1f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java index 3a06871316d..c623a042804 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java index d102a695947..10f268d953f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java index 038ac7ca0cb..b2526efce46 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java index f8801f1699d..eb3be79b95c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java index 564d20a53fb..0736502ba52 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index d25734c2ded..c7175da391e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java index ccea8d07e41..dedf81ea2b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index 0d56d8ec736..7efe088443b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java index 1f9cce28965..55a924ac48d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java index 064aee78d0b..bc9eef0e6b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index dd273945d79..9835fc5cb1e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java index 615e71f3e92..6a863f28fbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java index de72240f2c9..030d9588758 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java index 9763b40963a..b942bb9cefc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java index 58b525ac782..d50f5015482 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java index ef248e2425d..9bee9783397 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index 32c092533d6..fccf771950b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index dc28b5f33ba..28ace78241f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index 22a0fd295fd..0fd1d55c87e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java index 432c50a3f22..695c4fcce05 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java index cb3f6765e67..5269748c21b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java index 9f49d7171a2..d099cd793c5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java index 66a14639305..17e4e3c0603 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java index 03665c3b20e..e902d03b770 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java index bdc801d11ef..81376e2e7e0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java index 8ce9ef55ff1..62c1535b1f6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java index f7fd2c6491c..d27ced1e733 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java index 9c717431fb4..2d133bd98c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java index 6210f93446f..5dc64df4c54 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java index ab41e8af344..51c641e636b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java index 7e50096a7d9..60079d66b3d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java index f95de417026..e94a0f24f5c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java index 36c2b64eeba..21ca99c4d5a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java index fb86a38a296..99ee4bca83a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java index 42e0a89997e..fa58f67e29a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java index be308284168..aa495748161 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java index 3bc6385a94a..acee636f1a9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java index df05f003cca..974469623db 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java index 2e306c61cb7..cd83b26db30 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java index bb66b9f77b0..8d14f7d625e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java index 3da895c08a0..640cfc02249 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java index 47757b28271..59ba6bb075c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java index a47e2321f4a..4d5c492459a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java index b45c4213908..bc5a302973f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java index b33cbf96db2..2d7f5cd24c0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java index a1a89948ff2..db4e17c9cc3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java index f12f2a2f0c6..1b228c48451 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java index 4cec16a53f4..85338488712 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java index 8a0882a888d..5aa2080a9a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java index 4a871e5ae14..2ba21694ef6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java index 843c794adca..1557265e322 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java index 69c589d68d8..8a50211432c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java index 335857ebd3a..416470cb082 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java index eaa798e0009..dd1bfa7bdef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java index c0806e5b864..bbeebf6b7ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java index 9c390277844..7d4e7b0a6e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java index a7cff3569c7..7838c9eb5b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java index 3e40bc52c03..3c4b8925020 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java index b62570d5aee..282a1ea1f3e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java index c5a502cf620..1b66b7ca64b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java index e20de3803f6..f18ca2d252a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java index d6bcdf7a833..2a1212388f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java index 03e50ad08a5..2ce6daa58b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java index 624b71d56a0..f6d638c83e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java index 03c853dcdee..2cfe9af1461 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index 2f87aa805bf..1e8eb6c4759 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java index 0c60e0b4f00..d644b28f050 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java index 1b52ec5aa73..1423b353211 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java index a859272ac25..b08643bd1a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java index 4169c4bed49..4b838e20baf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java index 854c626738b..7e6c57f0d7e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java index 550c3be7953..1bec5886e74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java index 5c5cba9a51a..c2dd0841bb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java index 8ba7530cfd7..1afdca40bb8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 68e3059be85..2ddf0211188 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java index 65e103f4b06..76d45e5c962 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java index 7e63ac9c73e..5138e87791e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java index c82a69ec8a5..ba9a385fe97 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java index 20a8e07f331..00453ac4ecd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java index adaffaa2247..14ac7bef009 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java index a55e3a4c228..6531354ce29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java index 92734d20c93..fadb587011d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java index 1f4a22c53bc..6f59bb13fd9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java index 98bc1581d9e..7cab5d3be81 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java index 332dbb50f79..801a91e70de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java index f1bc8d5d0b9..95b6e454c1a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java index 5265f557566..934772c6e1c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java index 0de2c03091e..cbeb0010087 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java index 0e1ee8c27c8..102086f27d0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java index e6bed8dfb9d..6e39db28b54 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java index a38c28cc652..f2c7fe62a45 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java index 2a66588b810..613a2aa0fb8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java index be210450e54..eeaaf0f84a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java index ef4d52ff035..7f92a0df203 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java index f2f4283bab2..b10e6f45d4c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java index 68273127991..0a670fcfba7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java index 1ad40cd9c14..2cd0fde4c4d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java index c916085d8ab..c5d2c450af8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java index e43981931ab..89a7abe0d8d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java index 5054e52a2d3..e539085f2e5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index 76ed4af40fb..0435a6c5f57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java index 094bad96e11..f9454294a40 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java index 3baa3fdefa0..072430f357c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java index 64ecc6a47cb..eeba497567f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index c6454558050..bb973858273 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java index a53ff889f00..1df38e8628a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java index 4453696ba64..24ecaf6a095 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java index c6f2816ccab..96a664ff493 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java index 9e2b0251156..144a7b94b7f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java index a2956c86e7e..e43afa828cf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java index c9037a66a34..f885bf66202 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java index 60adc5d849e..e74cc92c8d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java index 1489fc62fac..7cb9f486574 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java index d45b7fd9878..e0650d657ca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java index 89e89d223c0..8e8823f358a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java index 34c52920d73..2469ea938fe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 12f37bfcc85..41f12e4ed29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java index 53accb94018..9bad1d53d07 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java index 2fff5bf7c9d..78e2467a22b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java index de74e91b652..bab137ee836 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java index 58fddb1b00e..bf272609fc5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java index 39cb27ba695..bd693d1de93 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java index b66510b8f07..56a48a279b6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java index 7325bc1ac26..eff3f55deb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index d0255aae186..94e4cdbb2c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java index 4e917a8d1ff..97d3160bd8b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java index 552a62c9452..f7634bdc669 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index 8dca05a200f..a7c6a933b47 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index 445048c4d74..d23b4ecd614 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java index d9a35614b2f..da0a2bef9ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java index 89cb2e2e4ff..7e8f6b94b6a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java index a0e3f1e4d60..97e2d6b41d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java index 13c4e260155..894b1395d18 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java index 39ce0386192..f498af45d1d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java index f031925bd5b..449b1fb50a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java index e4e230e64f6..991c5903bd6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java index 9d920a3bef8..ee3882f8b7b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java index 118947e1cee..5b81dee5aa8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java index 5e9fa7365f9..7ba9a64aa14 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java index f64b2925466..451fedb93d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java index 4a24dc32a7c..54449cfcfd7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java index df75d461dc6..97428c28d41 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java index 57a68257470..855d0f05847 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java index e972b4f5ca7..3351ecd899f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java index 9c31b6db066..1d197d60398 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java index 462d81e1bab..4fa8170f271 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java index 79e13548ec3..8494808f4e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java index f675f363a65..54562abf2c5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java index 7aebf5a6c9e..a7a8b483693 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java index 725291e88bc..c55f5ef4ace 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java index 255da942530..214595b2fba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java index 05d73e1f9e8..949931ada16 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index ab216658a53..cf8edd376fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java index 7c733ebdafe..fe054f2e3cb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java index a744ab315b9..b21c94757eb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java index 7c9becccd91..079523c7a29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 26a464bffdd..8fc323b798f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java index d38bde0ac5e..73e3e5e87ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java index 74133a4a1cb..302750eb50c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java index be57d96f682..819042adc93 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java index 00699b1a29f..30fb86cd23a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java index f6c471c9848..8aadabcf3be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java index 9bdf174db6f..d8daff98504 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java index 4936abe1b49..183f6451deb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java index 7ba1565e992..834b7548515 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java index 7db66864215..1c339329c97 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java index 9d3ef00ed1a..a22b1945d0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java index 200fbebbbb6..4d0fee60d8e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java index 6a9141b7474..a4b1dfae901 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java index 9ccab85306c..01a01506768 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java index fab4d1142b2..3fb36458984 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java index 514df54dcdc..22a889c399b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java index 66cfefc41a3..f4d4e2fd839 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java index 7ca071eacd0..0c928698982 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java index 00946886e32..9e637f2f37c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java index 1087ffee4cf..f6e34cd651c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java index e2110602620..92a7c1d04be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java index 05e20485198..a3d6f0d5ea2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java index 6b25a7b9dc0..82c3e321ad0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java index a75ce4e5255..10d718191cf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java index 9ca55e4e4be..61b0ef713dd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java index d3f034fe08e..b8025fee139 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java index 5d6c3f30f5e..55201f69cef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java index 82e25478e0e..d79e7a38c3b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java index ea463293767..11204eebe64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java index d65c22476f7..85e250f9002 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java index aee6292c61a..3d04a8a2ebd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java index 0ccd2fe438d..f47e4b68894 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java index e0ee45f3b7f..fd3f1fd23bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java index f2258c27874..9fd8f840dd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java index cd17c1ba125..4a0306b2816 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index b5fbd371172..0371f8a5608 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java index 9949d5f4d25..278f49e2930 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java index 283f84447b3..ec4f6e51811 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java index f22bb6ddde3..283cc219c3e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java index 20233fa8792..7dd0fff364b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java index 0d773038121..d21b9c7023f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java index 9a6dd8f2657..36cf5e61d50 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java index 8dd58606281..99dddb44850 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java index c5de6bd7fac..6b142971a00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java index a317f2447e9..75719ee0f7e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java index 5107320a096..7e3ef02a411 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java index bb2035ee2be..7ce31cf2443 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java index 0e6cb6b984f..b33caa412fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java index c8e94f90236..192b3ed210b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java index 5dce0d1baa5..968c4fc6992 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java index 5ec3c096d23..e9379f68cfb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java index ff8462cdd93..4ede7ef7381 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java index e06d7039cd8..10ffa1aef88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java index b06fca52a31..d4f30b9910f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index a891f1804f9..8997f5bbf6a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java index 9e7741f7014..5df398eeb24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java index 804a7f72b3c..5183d00a53c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java index 119f93c5539..162872cff59 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java index 5a37399a69b..4c826bda573 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java index 47e4e98b408..6977413e068 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java index d62d5678398..a88bb85abab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java index 2f8b9976495..41e9eff42b9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java index 725c1958979..d0466095f57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java index 3e64d706021..f9308c3caf6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index 18c8a51ecaf..7b0b291e81b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 d8a1674db97..fcc14160600 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java index 953c7b9c046..b82df25e064 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java index 7290a126e12..83310f1d55d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java index 540b515d5f4..1f3d72eae1d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java index 4423c1336d3..0af1d03913c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java index a27e32a0bb4..23bd8100480 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java index 03b1105fb5d..8d9886ced66 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java index bb99b6e7df8..58864961406 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java index 0d9437367f4..30a235b71dd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java index bc0279b1e06..a4ff6f4e3f0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java index 7d17fcc5ec9..c86a2c15c95 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java index cc2bd2657f8..d32f2a5ebb6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java index 224b80f160b..c78604e5488 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java index d9ebe30ef31..e0d6a4e3af3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index c7f7185779c..3c65954060d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java index e6a0c62fa0a..0bc8af1032d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java index dbcc5b4cb34..d17047b1ae8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index 42c8d16d4d1..a0e573239a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java index c7ed0bdfd0d..7d183c65bdd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java index 78ba1a15060..148c68888f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java index 910e148f784..c7858842e24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java index 6f7aecc23e0..27ad40d53d4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java index c7fc53f89a7..fef6ed25a34 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java index d2a164f4fa1..66377600ec0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java index 3c98b8ac90f..99e0b47052a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java index 9892536bf70..865a2922549 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java index c2bd0a9cae8..a32fd4660b4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java index 2f7e686db05..4f561691eaa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java index 19e53bacee5..6a586b7b560 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java index d173a8ed321..781534ce0e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java index d1d5ee259d0..0fd0eef20f8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index eaf151b2d26..48d3e3fefe1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java index 6a452a6ffb0..6a568208e97 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java index 2e40852fb11..352ba9d873c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java index 5e27e578cdb..5b6f158346f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java index f904b2d69cc..72b527f8918 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java index e03c105e427..ec43834b3d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java index fa5b8632bf9..425889f655f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java index d71777dcf04..6683a18ecba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java index 0b737a92089..f9bf1dc673f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java index 7bfe61b4ecb..654e5fa820e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java index a01f15f9a23..b9ad3dc17b0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java index 9589179f3fa..84ace808869 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java index 39c4f6f7d88..feaebeaa226 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java index 59a2af69363..4c0519b3089 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java index 1f87425c6b9..6cb369704dd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java index ec8a9b42b85..f598ee19660 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java index c45369b98a7..c8a87144fab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java index 4ff5ba8dcaf..d688e6cc1bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java index ce3e7481fe5..bd2159a6a67 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java index d629a73bbe3..b68a01c7984 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java index cb5fbcbf073..5ba1970ac53 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java index 69f638d44ad..27d6db1a44d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java index c6a9986ad92..584a1a9fb1c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java index dacc939481b..8b9adcf449d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java index 1fc6e3271e7..3744d77b5fc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java index 8df58ac0838..899cf0674cf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java index 406ab49e871..8ef2864767f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java index 568845cbb1d..4b50b69af67 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index da940f2a04d..de16d79d37f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java index 045a4a45c32..0b442a85e0f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java index b571bd8bac6..80fc3773041 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java index 56a77678a51..3e69be06eef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java index eee439b6cbc..b7b74bd053c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java index 96c4766b3ff..125d10ea026 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java index bf9314fc585..fb0f8ffe8be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java index 156128d9b20..6167f32c836 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java index 636e8c83ceb..e6a3021aa9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java index 9acef3ce5f5..e1236c620f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java index 4706d4fce7a..f1441f59a6a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index 8895dbea30c..d35ffc8e9e4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index b3bce437605..f070af2e03d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index 181d6b04aea..a0263e25abc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java index cc7b3a31dd7..43e3dce9c92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java index 1ad5dcd5c05..6599b40b255 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java index de5d73e81c6..228ca4d1d0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java index a502eff4d95..c4a00fb8de4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java index f62865bb5e8..3add486d78b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java index 5c1cf9b61d1..5265e568191 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java index 99ec344bb67..46fd58beb90 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java index af6b69fe572..b91f98ce9f7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java index 3abbd9ea9ea..f201d532b3a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index 6b3b3ec770f..203c96b51d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java index a57a62ceebd..30e84fb7b4f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index c2e3efc1991..6d32e0c3354 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java index fea2b496e00..2e4c0692d2d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java index c16f84abd4b..109e4b8fcc6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java index e4c5f2d0f59..6c95d73f5b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java index 797b8aad309..7a0b3311d64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java index 50537585acb..437fc0a4996 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java index e95699fe35b..b9885a6743b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java index 3b3e46e08bf..2d180202559 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index 14c96421732..79b02e1d628 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java index 9c58fb4c817..c0b9817079b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java index 7a094a0df46..1317c304edf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java index 6b2cdec75ef..b0fc5f5daa6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java index e7a9335a812..84000bc5c49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java index 204fc864b46..d56e9e6cd1d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java index 50e85ce9704..5e72e243350 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java index 0b7dd1087f2..ff703abe1cb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java index a17e374ec24..757f4dd19a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java index ce553aa4e15..ff76aca4726 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java index 12ebee5f621..eb4ac983445 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java index 1b6ad826a3d..5ab5e4debd3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java index 1a810929b86..45d2d739a51 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java index 98a379446a3..d010ab2ab6c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java index 236deae155d..ec3ab0dae67 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java index 142a14ffb7c..6df616c5823 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java index fe4fefa42a8..e07e337d254 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java index 30d43cdfba6..0b478d6daea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index d0b43899cc2..bb5b458925a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java index 044519450d6..6e8729921ea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java index 62897b040b1..135eb31b0f3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java index 36e64b6ae8a..019ee801830 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java index 3329ec3c49f..e18daea9bc4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java index bff5d9d50e9..94edd7731b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java index 87de3b37f08..d98f9e34826 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java index e1d28da00de..17c635eb77a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java index e5120da2def..d85b8f92ef8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java index b8e3fce3ab1..31c0a66f4e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java index 99b381dca96..14a69a5bd9c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java index c00a0c05a74..da0744a332f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java index 911569047c6..6a0266df503 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java index 84dc37bdc44..1ffe7984e87 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java index ffc3c2bf459..affc0644f98 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java index 39e343837b8..2cb1c6f2570 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java index ebe2583200d..c3635c34576 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java index fab1b44e366..c7227bf2131 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java index b774aaebc63..dbf76b24e5a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java index 53544254f5f..dcca6412307 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java index 3a22b3a8084..1562bcaa0c5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java index 0dd62e607e9..5e14005d3a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java index ffb737e89ef..83319222290 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java index d2ab6b0c11c..58950dac3da 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java index ff7375ba0e6..3fae749ff08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java index 41efc437f78..f4e3a42c536 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java index 776f3975799..b896ce9f2b6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java index e1a53e3b26a..1182c70306b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java index 18446eb8a89..d343841a80b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java index 82831e76796..f0ad27db949 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java index 990ebd9232c..79314e45d07 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java index cc77b43841c..cde1586e405 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java index e14469d2603..a8d5db65388 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java index b6fbe7c01d6..fc82caeb936 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java index 35d3af9beff..9f48513a747 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java index 7a5b02cbe41..5a6209a0112 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java index 29e5f8ca7a0..2d87b377fe4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index 6ee253642bd..007b348d6f0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java index 8c17482d43d..f223a5aa390 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java index 705c0c91225..2c09c0aeafe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java index caa6b340534..6976dfb507d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java index b4532d52506..7252a453fff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java index ae9bf17825a..3e28e762282 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java index 58241c3e033..95f30eda4db 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java index e06c54f55ae..652808b9ffc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java index 0a83fc79413..922d16ded88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java index 19ac1d45586..ee1d47f94d8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java index 295bac0c684..1061b85061a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java index 99456d0d2f7..c5fb715def3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index b9bebdb6bfa..78a452f3e68 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java index 9e2368ddfd6..11bded401df 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java index 247af3aaa0e..0b784f73465 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java index 836b73ab6b5..9d3200f42be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java index 5543234072c..acde5b6f19b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java index e7500ce359e..76bc9dc1da0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java index c5a357ba09d..8afabd15956 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java index 357ef3e9414..0c4543e280d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java index 6d6a864ad7f..8c86c700cab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java index b4ffad22e03..9151c7a27e1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java index 00437d885fb..4b30ce90048 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java index 06ed47d2b19..c580191eb8d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 6bdeeb7eb50..d388f57b4d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java index d123d62a555..60301c54dd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java index 688d6c15756..65321d07391 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java index b05bb7536c2..2a1fe6d79ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java index 5a055956b3b..dae120ca7b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java index 8377e73b609..ef87a7c77be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java index 90c3beba624..debce8b1ff2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java index 8f64cb2388f..940390ee30e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java index ad07a9a2e5d..ddf92da990a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java index bff49a2a359..a29b3af73b0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java index 2209ae56feb..95bbc0c6fde 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java index 1b2063d41d2..5e83ecd58ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java index f4795d58598..0bc11c0ffc9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java index 4c5d1e882b8..faa9c05a617 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java index b5df4634f19..8ff90150ecd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java index 119253d190d..6f9e2223ca0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java index 981389545a7..d762921c85b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java index ae784f112cd..479b4ddcebb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java index df50c97734c..7023f3ad0fe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java index ed7d7331ded..a0198eb1127 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java index 05731571403..d1eb2080b81 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java index 8916e4eebda..ea66470a16e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java index 85117b98e2a..e46250e938a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java index 10ccb19d507..8bcb1bc6d62 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java index 3d0ccf616a6..440c586df2f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java index a888849b919..cb10c67e30d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java index 7f71b446785..fe7c95416b2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java index bb19756f59e..8a7ec6a89a9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java index 750d3fcb453..a33fed7fd2d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java index 7904ed1d50e..70101561795 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java index a739ca44aa5..e37eb8c450c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java index 5c9c6ab94f4..afeafa61a62 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java index b972498a354..77dc1a5b1a7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java index 2ba9080ebfa..cb61f676b29 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index 5fd85954142..342a126f3d1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java index 4a6532aac74..476774f6998 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java index 1b5accc5e12..4a04aa643d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java index 7cb08ff6412..eb98f7210c3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java index 21731fd2528..eedc84270a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java index 865ed9d3444..54faa284ec9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java index 563addeca9d..fe1cd55467d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java index 82ffca4531e..bab11690a6c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java index 95bb4e94e51..59e841a769c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java index 0dbb67436c4..5dbd499e544 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java index f44891e1dbd..5b697d42d03 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java index 1591129271b..954cf595913 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java index 8ad4e0b87c7..9d6830cd05e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java index 8e97a797fb0..842a15d7e28 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java index 12a6882ec27..3512108c9a3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java index 86800f523a5..fe8e646bfe9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java index f60dc4caa92..eea9fb8ee96 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java index 32f287a85ba..0dd8dc64d43 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java index 277f2ab2a17..9a373864721 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java index cc5fc179125..8dee44842cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java index 76fd6968938..152daa91ce3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index a5659ac4cdc..2858b3807f8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index c290e46bdee..8d845642a63 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java index 29be15c329f..565457a6583 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java index b5383e51261..b574ce34fbd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java index c472aed0c70..0204d6cfcc7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java index d68ba5ff425..3b9c4cf0dba 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java index 27298972aad..7bf06ddcf88 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java index 4e5d35e476b..53f02b9a8e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java index 96898574b0c..412dfac96aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java index b9756dd6769..3675dd3711e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java index 25ea00e934e..96f4521ddd9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java index 7ea280a1294..30aa6aeedd4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java index 8d36f50ed91..1755f5abd74 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java index 4dcf748f2a6..b88029236cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java index c73ee483385..f02cbaaeb12 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java index 26a50825a01..43cceea2ca5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java index 1bfae007369..94aa6a5ac8f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java index e2f02b69869..d1c2ea451b6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java index 3d811744c73..0b28bc5ceaa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java index c3a75033440..6236d1c0883 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java index ca9457c17d4..b4ef16846c5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java index 784b31ddb15..489831eef7e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java index 76862f56442..825ce51b1c4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java index 7f8daeb53ce..62902d5fec0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java index 477ccf7fa02..3695b89580e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java index 67ce6deb6e1..f3c798ce133 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java index 61e6d6d01c1..dd5aebbe8b9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java index 369b2985677..ea5b1e6d662 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java index 4f21cccaba3..a216029eede 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java index 1ddc6f55a9e..87914f04ed9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java index 11d240543fc..6f33f4e5b2c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java index e4a4664fc65..6929a034b34 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java index 8d75f8bed7e..a035a178b84 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java index ef7203304c2..9f3c7ca7891 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java index a9fb13ae451..eb49f69fb01 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index c2c2384ca84..efde9a9261d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java index 7b880107aac..459d47696b3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java index 643dfd6bea7..518d661afc6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java index 389c3d1f503..aa0fe683ab6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java index 919b16501c0..d3d35e7304a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java index 22d6b760ebe..eea589a8668 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java index d19ff3f6acf..579eb69bbf1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java index b2fb755f3d2..2aa288f0b69 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java index 4c7b028ace1..d632417a708 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java index d1ca8416670..1743b216a44 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java index ffcc4d7d9ee..c5a4d44924f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java index fa3b12432be..0fa8db5a6cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java index db26c69bffb..7e74cb73ddb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index 5c2edb7e55b..e67ff242a71 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java index 8e722c6c36d..37e895376af 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java index bc59cb98a4e..f09133aa9a7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java index cc3c8707815..00d149c39ba 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java index 60dc835db00..78a63257d3d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java index c236d8f0236..9f30ededbb7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java index f47358e3a59..5242b163580 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java index d1d9b690967..d15b84df1f0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index 0c281f9fc7d..ad6aeabdce5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java index 20ad1121acc..33144d5b0a3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java index defd71ba23f..c420c11f817 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java index e12905ee47f..d72d0de9dfe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java index c9b9e2692f0..7d5b049bcb6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java index d345003af77..a74a04ff7f8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java index cffeb655235..175278208af 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java index 9b4bdc58472..d537f86bbed 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java index 89f12421c5c..5eb8a421e50 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java index c5f82b5ec61..addf83b391b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java index b1dced0ea3f..5e21ef15c8d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java index 8e9f186abbc..de3b7b1b409 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java index e415ad405d1..3bfc79e0afc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java index 04d9077b9dc..ccac516e579 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java index 01af898263a..95e91b839a1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java index f98ad309a26..35edbddc43c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java index 95bc5f63135..d5cd0f4a87a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java index 69713617c33..efd26ca8c52 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java index fa45619aae2..72b7170bb24 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java index f7b3b2910ce..5b0a1446c5d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java index 4078c6bd8ba..ebaef933392 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java index 968d088ad12..2e0166fb37d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java index 5dac8f51502..625460905ee 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java index b00c2c513e9..62d5f3b978e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java index 3d141cfbcbd..e0a2a0cc1bc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java index efe6981af42..19d38500574 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java index 06a2846b8b2..c93ee2f908c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java index c02eda43ece..bd58feaa109 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 353c823612a..74ea173a554 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java index 4256e280aa8..8883d91a698 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java index 12da0d0e116..240d37b3bac 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java index a9c83d5316e..85eca3c7b35 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 893f558e7b9..9a069e9e6ec 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java index 5d53697876b..13d1bb7d4da 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java index b7d8484c08b..1340b3c106b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java index 581aad5e26a..8bdc47ac188 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java index 9d8942816e9..e2150a2fd37 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java index 55659bc6057..1ea8452c645 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java index a31c590031c..c4d909aee64 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java index 748826a77cf..055a83239a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java index b4f61ba0925..ba39a7c3741 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java index 73a7018fa03..aeffac15871 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java index c0a5e9e7aeb..63fc6ceaed7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java index 7f931f159e0..f15662ffcca 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java index 67aae2a0224..868c7dec6c4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java index 27ae347cfcb..1473ee36600 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java index 96ee1415b91..c1b440eb4cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java index bebab9dd4d7..be33707d6d2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java index 082bbc358c1..bcb545ebdac 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java index 600efb5ad23..4cb8433335c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java index 94b16cd4a01..af5ba534150 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java index 93d7f7cf155..5d3c64d23e5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java index f7845704109..18c90d03b31 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java index bb386f4c5ee..5810515e82f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java index de47a3fc16d..a24832d55ef 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java index 751023eccda..fbcf9eb209a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java index cd7de3c68d5..ffd96e5cc15 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java index 44b4af35293..93510c29631 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java index 692a9784a63..e77bce9c021 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java index b1575566981..b7e72773beb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java index e1323becebb..3ea86d9376a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java index 83c088a1926..232d6e3d4cb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java index afe70e8e526..41a6af8777e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java index 9f942545ac5..a45661f5c39 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java index f64bbdcefbd..14eb0150085 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java index d15c3a00c4b..0153c0fe57f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java index 9747deb6c47..b151c79dc2a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java index 16a6c6e2047..503d0c4cbb0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java index 24afc083036..b87c7c4dc62 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java index 9f04f2cc6f6..fc31dc182d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java index 20515a0c4e2..5e779913ee8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java index 299231d7987..8fb98f8369c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java index 55e2786862c..8e179e382d0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java index c9b4a084b4e..0cc447d61b5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java index a367fe89ed2..235af7ee9c1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java index 8ff86bf1f25..86822dccb56 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java index b98005b192d..6329fedabd3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java index f5a8d1c6151..18eafc4e606 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java index 9188319ec95..a60b36b3fe2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java index e7c24fd7b9a..908c42d49fb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java index a97906a67e7..f8a30423389 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java index 229ee0c698d..bc519a98463 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java index b553e9c6332..795ca4e431e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java index 9500c2b7977..1382c8b68eb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java index 68122baf275..57f982e1c76 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java index a229f9cebd7..22fb8523588 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java index 7bbab1e4d24..e5af57f977d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java index 0693f650638..8a297d06376 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java index 802a57b140c..cd7c74d41ee 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java index 190ec801545..ad77a7d903e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java index 5cc18454d52..30f8c6955fd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java index a7247f05f6a..c5c1877c582 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java index fe132ed2f58..7dd72bba081 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java index 6f64dc50a3f..de422ac7761 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java index e33809679a9..8c4d11227f0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java index c36838fee18..8c61095685c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java index 3be7e52bc83..629abe62dae 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 9c2aadb8cdc..55fc6306e0b 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java index a88cdcff6b0..ffece868557 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java index 80cc76b6110..7d8de6bdc89 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java index 634ee0a731f..2f957b638aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java index 8f6b86178ea..f0b295d7a6f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java index 414745dfb23..e31696a1ffb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java index 56eeead3d87..846fa3574db 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java index 3fecb5c4c35..fbb9b3c428f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java index 397e2c5705f..a490ccc1d98 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java index a8e0c065178..a139a13ec7f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java index ae31c68300f..5981fbab684 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java index deac420bc5b..3b0b902cf92 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java index a034ce6c4af..85a923aad00 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java index 54e1edb8e53..f98c5d73bd3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java index 7d549160e90..6afaa9194aa 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java index 6dbabf8d58c..132abca9734 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java index 991046308fc..f5955b37502 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java index 9857fedd350..dfb7077d122 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java index 88dea8cc172..4e6014399f8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java index dbbac77d2a2..456f545d057 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java index 24c298b245b..d6ee17a7775 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java index 5c14ca22284..70824ba16a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java index 13604aa5a6b..6039a031912 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java index fd3026a5802..6ff2f9c521c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index d5bd0c672ad..9a0da59293a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java index 8c12ffb3496..9c371868882 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java index ae2c64937fc..3336b6584cb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java index 6b806066aca..df660218bb3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java index 66ab7b5e4c4..a2da46d498d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java index 07461f8c334..50382b7cc02 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java index 41d9159582b..9bd8183c3fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java index d4dcfd89d26..125d5875e71 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java index a883237c6c2..5138aa28389 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java index 452aaaeffb9..d3d6a3fc3a8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java index c9705bc4b4b..f0e1508bff1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java index c4ad181a211..bf3cdabd3a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java index 57529f1cdd6..fac98c343c6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java index 2757fc207d4..65174720c63 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java index 851dd471ee0..98c60a42cd3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java index 7c2faf8f71f..432f6e3edc9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java index 6f5169ec0a9..a65d315d4ae 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java index 99e3d3040be..3dc86b95a28 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index 7b4316d6990..b6032b018f4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java index 867131115ac..8797a8b35f4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index 261cb9b8e38..655222ba63b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java index 84d93ebb31e..68b92f76b85 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java index cbeda44ea2f..d5dde16cf24 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java index c3b47788891..f711f153482 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java index 9d4c02bde52..71df84d6e0a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java index 758fe576b6f..f72d7b4c3a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java index 45490f9d654..a24e9797576 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java index 7ea8423e9c8..9bdd05c3032 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java index b0af654828c..97048c58bea 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java index 508caa5bce4..6c4ae4d292e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java index 53889897000..be6915a60fd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java index cb902d6ce24..9ed49ea2175 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java index 7edcf4d2265..d4180b561c6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java index ba405e9804d..9b9cde8ef6c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java index 6ca826ff843..0345b70c08e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java index aae599e33a0..77777fc8797 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java index eace9708d02..c2f70da74d7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java index dff134193a5..8f72749c7ce 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java index bb8456d2bca..439e2b572b4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java index 30de1d0d099..924bcb74043 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java index 8ab17dd1c6e..90169623e5b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java index 6c9ff4c8fd0..70fa787d47e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java index 42101bcf05e..91d7e339012 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java index 2f9342ff53d..8d8cc4bc123 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java index 3c2eb9a41aa..4da82e3c194 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java index 79e6a89eb61..486f16ca10a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java index e8e0f9ef596..08547ba17af 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java index 0ab17962c00..9f2b7d96113 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java index 60ffa65f10b..077e097a991 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java index b5f6c92cc04..11bba48de60 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java index 8d267472c2f..eb2f08a9cab 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java index 0a447d60b5c..a47395e793c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java index f5472365863..196c7672c2c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java index 404bbd7b48c..d3f86bdbfa4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java index acdcc737773..0a373c378a8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java index 8194c9cc324..7e8871341bc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java index 97c849857c0..73020d05ae5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java index f4379dc0dbf..6afed5f52a1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java index 2832c2d8c13..524bb8858f5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java index 0894114c60b..646f347c635 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java index 674f04d4e59..e9e9bd4fcad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java index a74ee69dc3a..ce51fde1a2a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java index 3bd6d855d87..6f6402d5a08 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java index ed4a9d02b54..2006c2a7353 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java index 205ed9a837c..a9b94372c2a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java index 7ee19c149fb..7bd38c250b1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java index df57277a099..03d93e1b59d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java index 94aa3f13b0f..b1fd50de182 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java index 12d9509a642..fef0f9b29d3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java index d5a1c0c10e6..bbcf6275af2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java index 51178e30325..f31ea669672 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index 76bf6182105..a7ac606bc1d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java index dce5c977097..0a654d5fdb9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java index 505838b082c..17c02f539d2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java index c500fd88498..aadc9eb7c87 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java index 14db896fb42..b7759bf2684 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 476f106a4105aa5ea36341e2bef6b31bb54e6cb4 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 5 Jan 2024 09:00:26 +0100 Subject: [PATCH 404/595] =?UTF-8?q?Fix=20#2996.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4ebbb23be83..dfdb1b76f17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,7 @@ dependencies { exclude("org.antlr", "antlr-runtime") exclude("org.glassfish", "javax.json") } - api("com.github.1c-syntax", "utils", "0.5.1") + api("com.github.1c-syntax", "utils", "0.5.w") api("io.github.1c-syntax", "mdclasses", "0.12.0") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") From 31f3ac36a18bbb13a43308018c1660244f8301d7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 5 Jan 2024 09:02:17 +0100 Subject: [PATCH 405/595] fix up --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index dfdb1b76f17..9644fb060b2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,7 @@ dependencies { exclude("org.antlr", "antlr-runtime") exclude("org.glassfish", "javax.json") } - api("com.github.1c-syntax", "utils", "0.5.w") + api("com.github.1c-syntax", "utils", "0.5.2") api("io.github.1c-syntax", "mdclasses", "0.12.0") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") From 631fd2d4a0840df984138b26a83a0b322546805b Mon Sep 17 00:00:00 2001 From: theshadowco Date: Sun, 7 Jan 2024 08:04:47 +0300 Subject: [PATCH 406/595] new bsl-parser ver --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9644fb060b2..bcce57b08b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,18 +74,18 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.21.0") // 1c-syntax - api("io.github.1c-syntax", "bsl-parser", "0.23.3") { + api("io.github.1c-syntax", "bsl-parser", "0.24.0") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") exclude("org.abego.treelayout", "org.abego.treelayout.core") exclude("org.antlr", "antlr-runtime") - exclude("org.glassfish", "javax.json") } api("com.github.1c-syntax", "utils", "0.5.2") api("io.github.1c-syntax", "mdclasses", "0.12.0") api("io.github.1c-syntax", "bsl-common-library", "0.5.0") api("io.github.1c-syntax", "supportconf", "0.12.1") + api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") // JLanguageTool implementation("org.languagetool", "languagetool-core", languageToolVersion){ From 4313b07bfb0bfa68d919121c9b745b75e71a0eb3 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Thu, 11 Jan 2024 09:31:17 +0300 Subject: [PATCH 407/595] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B8=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 0371f8a5608..0029f2548c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -248,6 +248,7 @@ private List getTabularSectionNames(SDBLParser.MdoContext mdo) { .map(configuration::findChild) .filter(Optional::isPresent) .map(Optional::get) + .filter(TabularSectionOwner.class::isInstance) .map(TabularSectionOwner.class::cast) .flatMap(RefOveruseDiagnostic::getTabularSectionNames) .collect(Collectors.toList()); From 7c6631253e8f0f9bc05759044fb17f8f1c800591 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Thu, 11 Jan 2024 10:26:59 +0300 Subject: [PATCH 408/595] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B5=20=D0=BF=D1=80=D0=B8=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D0=BA,=20=D1=87=D1=82=D0=BE=20=D0=B5=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=BE=D0=B3?= =?UTF-8?q?=D1=83=D1=82=20=D0=B1=D1=8B=D1=82=D1=8C=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=20=D1=83?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/DenyIncompleteValues.md | 2 +- docs/en/diagnostics/DeprecatedCurrentDate.md | 5 +- ...ferringParametersBetweenClientAndServer.md | 7 +-- .../diagnostics/UsingFindElementByString.md | 2 +- .../DenyIncompleteValuesDiagnostic.java | 3 +- .../ForbiddenMetadataNameDiagnostic.java | 3 +- .../MetadataObjectNameLengthDiagnostic.java | 3 +- ...MetadataObjectAndChildNamesDiagnostic.java | 4 +- .../ScheduledJobHandlerDiagnostic.java | 3 +- .../diagnostics/metadata/DiagnosticInfo.java | 4 ++ .../metadata/DiagnosticMetadata.java | 29 ++++++++++ .../configuration/parameters-schema.json | 20 ++++++- .../languageserver/configuration/schema.json | 9 +++ .../metadata/DiagnosticInfoTest.java | 57 ++++++++++++------- 14 files changed, 113 insertions(+), 38 deletions(-) diff --git a/docs/diagnostics/DenyIncompleteValues.md b/docs/diagnostics/DenyIncompleteValues.md index bd69b8cc1fe..9c2a9bc3864 100644 --- a/docs/diagnostics/DenyIncompleteValues.md +++ b/docs/diagnostics/DenyIncompleteValues.md @@ -1,4 +1,4 @@ -# Запрет незаполненных значений (DenyIncompleteValues) +# Запрет незаполненных значений у измерений регистров (DenyIncompleteValues) ## Описание диагностики diff --git a/docs/en/diagnostics/DeprecatedCurrentDate.md b/docs/en/diagnostics/DeprecatedCurrentDate.md index 62b65410d66..4673c51026b 100644 --- a/docs/en/diagnostics/DeprecatedCurrentDate.md +++ b/docs/en/diagnostics/DeprecatedCurrentDate.md @@ -1,7 +1,8 @@ # Using of the deprecated method "CurrentDate" (DeprecatedCurrentDate) - -## Diagnostic description + +## Description + The configurations must be designed to work in conditions where the time zone on the server computer does not match the real time zone of the infobase users. For example, employees of a company from Vladivostok work with a server located in Moscow, and all operations in the system must be performed in local time (Vladivostok). Such a work scenario is often in demand in client-server infobases and in applied solutions in the service model (SaaS). diff --git a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md index d0045c5c7fa..d6eaf85bcee 100644 --- a/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md +++ b/docs/en/diagnostics/TransferringParametersBetweenClientAndServer.md @@ -1,8 +1,7 @@ -# Transferring parameters between client and server (TransferringParametersBetweenClientAndServer) +# Transferring parameters between the client and the server (TransferringParametersBetweenClientAndServer) - -## Diagnostic description - + +## Description When transferring control from the client to the server (and vice versa), copies of the parameters are always transferred. diff --git a/docs/en/diagnostics/UsingFindElementByString.md b/docs/en/diagnostics/UsingFindElementByString.md index 5f7d1f1064f..2b5abd56ba4 100644 --- a/docs/en/diagnostics/UsingFindElementByString.md +++ b/docs/en/diagnostics/UsingFindElementByString.md @@ -1,4 +1,4 @@ -# Using FindByName, FindByCode and FindByNumber (UsingFindElementByString) +# Using FindByName, FindByCode and FindByNumber (UsingFindElementByString) ## Description diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index bb973858273..e7a16a2dba2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -42,7 +42,8 @@ tags = { DiagnosticTag.BADPRACTICE }, - scope = DiagnosticScope.BSL + scope = DiagnosticScope.BSL, + canLocateOnProject = true ) public class DenyIncompleteValuesDiagnostic extends AbstractMetadataDiagnostic { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index d23b4ecd614..a2584b18eb2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -52,7 +52,8 @@ ModuleType.ValueManagerModule, ModuleType.SessionModule }, - scope = DiagnosticScope.BSL + scope = DiagnosticScope.BSL, + canLocateOnProject = true ) @RequiredArgsConstructor public class ForbiddenMetadataNameDiagnostic extends AbstractMetadataDiagnostic { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java index b21c94757eb..21f26f99a26 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java @@ -42,7 +42,8 @@ scope = DiagnosticScope.BSL, tags = { DiagnosticTag.STANDARD - } + }, + canLocateOnProject = true ) public class MetadataObjectNameLengthDiagnostic extends AbstractMetadataDiagnostic { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java index ec4f6e51811..54dda675e11 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java @@ -54,8 +54,8 @@ ModuleType.ObjectModule, ModuleType.SessionModule }, - scope = DiagnosticScope.BSL - + scope = DiagnosticScope.BSL, + canLocateOnProject = true ) public class SameMetadataObjectAndChildNamesDiagnostic extends AbstractMetadataDiagnostic { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java index 283cc219c3e..23723598af1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java @@ -48,7 +48,8 @@ tags = { DiagnosticTag.ERROR }, - scope = DiagnosticScope.BSL + scope = DiagnosticScope.BSL, + canLocateOnProject = true ) public class ScheduledJobHandlerDiagnostic extends AbstractMetadataDiagnostic { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index 48d3e3fefe1..49960d4cb61 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -194,6 +194,10 @@ public Optional getParameter(String parameterName) { return diagnosticParameters.stream().filter(param -> param.getName().equals(parameterName)).findAny(); } + public boolean canLocateOnProject() { + return diagnosticMetadata.canLocateOnProject(); + } + public Map getDefaultConfiguration() { return diagnosticParameters.stream() .collect(Collectors.toMap(DiagnosticParameterInfo::getName, DiagnosticParameterInfo::getDefaultValue)); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java index 6a568208e97..934d7aac59b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java @@ -39,19 +39,48 @@ @Primary @Scope("prototype") public @interface DiagnosticMetadata { + /** + * Тип диагностики + */ DiagnosticType type() default DiagnosticType.ERROR; + /** + * Серьезность замечания + */ DiagnosticSeverity severity() default DiagnosticSeverity.MINOR; + /** + * Область применения диагностики по диалекту языка (bsl или oscript) + */ DiagnosticScope scope() default DiagnosticScope.ALL; + /** + * Типы модулей, анализируемых диагностикой + */ ModuleType[] modules() default {}; + /** + * Время, необходимое для исправления замечания + */ int minutesToFix() default 0; + /** + * Признак включения диагностики в профиле по умолчанию + */ boolean activatedByDefault() default true; + /** + * Версия платформы 1С:Предприятие, с которой диагностика применяется + */ DiagnosticCompatibilityMode compatibilityMode() default DiagnosticCompatibilityMode.UNDEFINED; + /** + * Перечень меток (тегов) диагностики + */ DiagnosticTag[] tags() default {}; + + /** + * Замечания диагностики могут быть прикреплены на уровень анализируемого проекта (в частности в SonarQube) + */ + boolean canLocateOnProject() default false; } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 2dc96f59925..de990507318 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -704,12 +704,26 @@ }, "FileSystemAccess": { "description": "FileSystemAccess", - "default": true, + "default": false, "type": [ "boolean", "object" ], "title": "FileSystemAccess", + "properties": { + "globalMethods": { + "description": "Global methods pattern (regex)", + "default": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0412\u0424\u0430\u0439\u043b|ValueToFile|\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0424\u0430\u0439\u043b|FileCopy|\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0424\u0430\u0439\u043b\u044b|MergeFiles|\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0424\u0430\u0439\u043b|MoveFile|\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c\u0424\u0430\u0439\u043b|SplitFile|\u0421\u043e\u0437\u0434\u0430\u0442\u044c\u041a\u0430\u0442\u0430\u043b\u043e\u0433|CreateDirectory|\u0423\u0434\u0430\u043b\u0438\u0442\u044c\u0424\u0430\u0439\u043b\u044b|DeleteFiles|\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b|BinDir|\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\u0424\u0430\u0439\u043b\u043e\u0432|TempFilesDir|\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432|DocumentsDir|\u0420\u0430\u0431\u043e\u0447\u0438\u0439\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0414\u0430\u043d\u043d\u044b\u0445\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f|UserDataWorkDir|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0420\u0430\u0431\u043e\u0442\u044b\u0421\u0424\u0430\u0439\u043b\u0430\u043c\u0438|BeginAttachingFileSystemExtension|\u041d\u0430\u0447\u0430\u0442\u044c\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0420\u0430\u0431\u043e\u0442\u044b\u0421\u0424\u0430\u0439\u043b\u0430\u043c\u0438|BeginInstallFileSystemExtension|\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u0420\u0430\u0431\u043e\u0442\u044b\u0421\u0424\u0430\u0439\u043b\u0430\u043c\u0438|InstallFileSystemExtension|\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u0420\u0430\u0431\u043e\u0442\u044b\u0421\u0424\u0430\u0439\u043b\u0430\u043c\u0438\u0410\u0441\u0438\u043d\u0445|InstallFileSystemExtensionAsync|\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u0420\u0430\u0431\u043e\u0442\u044b\u0421\u0424\u0430\u0439\u043b\u0430\u043c\u0438\u0410\u0441\u0438\u043d\u0445|AttachFileSystemExtensionAsync|\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\u0424\u0430\u0439\u043b\u043e\u0432\u0410\u0441\u0438\u043d\u0445|TempFilesDirAsync|\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u0410\u0441\u0438\u043d\u0445|DocumentsDirAsync|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\u0424\u0430\u0439\u043b\u043e\u0432|BeginGettingTempFilesDir|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432|BeginGettingDocumentsDir|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u0420\u0430\u0431\u043e\u0447\u0435\u0433\u043e\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u0414\u0430\u043d\u043d\u044b\u0445\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f|BeginGettingUserDataWorkDir|\u0420\u0430\u0431\u043e\u0447\u0438\u0439\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0414\u0430\u043d\u043d\u044b\u0445\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u0410\u0441\u0438\u043d\u0445|UserDataWorkDirAsync|\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0424\u0430\u0439\u043b\u0410\u0441\u0438\u043d\u0445|CopyFileAsync|\u041d\u0430\u0439\u0442\u0438\u0424\u0430\u0439\u043b\u044b\u0410\u0441\u0438\u043d\u0445|FindFilesAsync|\u041d\u0430\u0447\u0430\u0442\u044c\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u0424\u0430\u0439\u043b\u0430|BeginCopyingFile|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u0424\u0430\u0439\u043b\u0430|BeginMovingFile|\u041d\u0430\u0447\u0430\u0442\u044c\u041f\u043e\u0438\u0441\u043a\u0424\u0430\u0439\u043b\u043e\u0432|BeginFindingFiles|\u041d\u0430\u0447\u0430\u0442\u044c\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0445\u0414\u0430\u043d\u043d\u044b\u0445\u0418\u0437\u0424\u0430\u0439\u043b\u0430|BeginCreateBinaryDataFromFile|\u041d\u0430\u0447\u0430\u0442\u044c\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430|BeginCreatingDirectory|\u041d\u0430\u0447\u0430\u0442\u044c\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u0424\u0430\u0439\u043b\u043e\u0432|BeginDeletingFiles|\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0424\u0430\u0439\u043b\u0410\u0441\u0438\u043d\u0445|MoveFileAsync|\u0421\u043e\u0437\u0434\u0430\u0442\u044c\u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0435\u0414\u0430\u043d\u043d\u044b\u0435\u0418\u0437\u0424\u0430\u0439\u043b\u0430\u0410\u0441\u0438\u043d\u0445|CreateBinaryDataFromFileAsync|\u0421\u043e\u0437\u0434\u0430\u0442\u044c\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0410\u0441\u0438\u043d\u0445|CreateDirectoryAsync|\u0423\u0434\u0430\u043b\u0438\u0442\u044c\u0424\u0430\u0439\u043b\u044b\u0410\u0441\u0438\u043d\u0445|DeleteFilesAsync", + "type": "string", + "title": "Global methods pattern (regex)" + }, + "newExpression": { + "description": "Class names pattern (regex)", + "default": "File|\u0424\u0430\u0439\u043b|xBase|HTMLWriter|\u0417\u0430\u043f\u0438\u0441\u044cHTML|HTMLReader|\u0427\u0442\u0435\u043d\u0438\u0435HTML|FastInfosetReader|\u0427\u0442\u0435\u043d\u0438\u0435FastInfoset|FastInfosetWriter|\u0417\u0430\u043f\u0438\u0441\u044cFastInfoset|XSLTransform|\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435XSL|ZipFileWriter|\u0417\u0430\u043f\u0438\u0441\u044cZip\u0424\u0430\u0439\u043b\u0430|ZipFileReader|\u0427\u0442\u0435\u043d\u0438\u0435Zip\u0424\u0430\u0439\u043b\u0430|TextReader|\u0427\u0442\u0435\u043d\u0438\u0435\u0422\u0435\u043a\u0441\u0442\u0430|TextWriter|\u0417\u0430\u043f\u0438\u0441\u044c\u0422\u0435\u043a\u0441\u0442\u0430|TextExtraction|\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435\u0422\u0435\u043a\u0441\u0442\u0430|BinaryData|\u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0435\u0414\u0430\u043d\u043d\u044b\u0435|FileStream|\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439\u041f\u043e\u0442\u043e\u043a|FileStreamsManager|\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0445\u041f\u043e\u0442\u043e\u043a\u043e\u0432|DataWriter|\u0417\u0430\u043f\u0438\u0441\u044c\u0414\u0430\u043d\u043d\u044b\u0445|DataReader|\u0427\u0442\u0435\u043d\u0438\u0435\u0414\u0430\u043d\u043d\u044b\u0445", + "type": "string", + "title": "Class names pattern (regex)" + } + }, "$id": "#/definitions/FileSystemAccess" }, "ForbiddenMetadataName": { @@ -2041,13 +2055,13 @@ "$id": "#/definitions/UsingExternalCodeTools" }, "UsingFindElementByString": { - "description": "Using FindByName, FindByCode and FindByNumber", + "description": "Using FindByName, FindByCode and FindByNumber", "default": true, "type": [ "boolean", "object" ], - "title": "Using FindByName, FindByCode and FindByNumber", + "title": "Using FindByName, FindByCode and FindByNumber", "$id": "#/definitions/UsingFindElementByString" }, "UsingGoto": { diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 3626e6d94e2..bac7b3f6eed 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -176,12 +176,18 @@ "ExportVariables": { "$ref": "parameters-schema.json#/definitions/ExportVariables" }, + "ExternalAppStarting": { + "$ref": "parameters-schema.json#/definitions/ExternalAppStarting" + }, "ExtraCommas": { "$ref": "parameters-schema.json#/definitions/ExtraCommas" }, "FieldsFromJoinsWithoutIsNull": { "$ref": "parameters-schema.json#/definitions/FieldsFromJoinsWithoutIsNull" }, + "FileSystemAccess": { + "$ref": "parameters-schema.json#/definitions/FileSystemAccess" + }, "ForbiddenMetadataName": { "$ref": "parameters-schema.json#/definitions/ForbiddenMetadataName" }, @@ -350,6 +356,9 @@ "ParseError": { "$ref": "parameters-schema.json#/definitions/ParseError" }, + "PrivilegedModuleMethodCall": { + "$ref": "parameters-schema.json#/definitions/PrivilegedModuleMethodCall" + }, "ProcedureReturnsValue": { "$ref": "parameters-schema.json#/definitions/ProcedureReturnsValue" }, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java index 6ff2f9c521c..ad7c945b9a3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.diagnostics.DeprecatedAttributes8312Diagnostic; import com.github._1c_syntax.bsl.languageserver.diagnostics.EmptyCodeBlockDiagnostic; +import com.github._1c_syntax.bsl.languageserver.diagnostics.ForbiddenMetadataNameDiagnostic; import com.github._1c_syntax.bsl.languageserver.diagnostics.MultilingualStringHasAllDeclaredLanguagesDiagnostic; import com.github._1c_syntax.bsl.languageserver.diagnostics.UnusedLocalMethodDiagnostic; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; @@ -36,8 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import java.util.Optional; - import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @SpringBootTest @@ -52,7 +51,7 @@ class DiagnosticInfoTest { @Test void testParameter() { - DiagnosticInfo diagnosticInfo = new DiagnosticInfo(EmptyCodeBlockDiagnostic.class, configuration, stringInterner); + var diagnosticInfo = new DiagnosticInfo(EmptyCodeBlockDiagnostic.class, configuration, stringInterner); Assertions.assertThat(diagnosticInfo.getCode()).isEqualTo(Either.forLeft("EmptyCodeBlock")); Assertions.assertThat(diagnosticInfo.getName()).isNotEmpty(); @@ -66,25 +65,25 @@ void testParameter() { Assertions.assertThat(diagnosticInfo.getScope()).isEqualTo(DiagnosticScope.ALL); Assertions.assertThat(diagnosticInfo.getMinutesToFix()).isEqualTo(5); Assertions.assertThat(diagnosticInfo.isActivatedByDefault()).isTrue(); - Assertions.assertThat(diagnosticInfo.getTags().size()).isPositive(); + Assertions.assertThat(diagnosticInfo.getTags()).isNotEmpty(); Assertions.assertThat(diagnosticInfo.getLSPTags()).isEmpty(); + Assertions.assertThat(diagnosticInfo.canLocateOnProject()).isFalse(); - Assertions.assertThat(diagnosticInfo.getDefaultConfiguration().size()).isPositive(); - + Assertions.assertThat(diagnosticInfo.getDefaultConfiguration()).isNotEmpty(); - DiagnosticParameterInfo parameter = diagnosticInfo.getParameters().get(0); + var parameter = diagnosticInfo.getParameters().get(0); assertThat(parameter.getDescription()) .isEqualTo("Считать комментарий в блоке кодом"); assertThat(parameter.getDefaultValue()).isEqualTo(false); assertThat(parameter.getType()).isEqualTo(Boolean.class); - Optional maybeParameter = diagnosticInfo.getParameter(parameter.getName()); + var maybeParameter = diagnosticInfo.getParameter(parameter.getName()); assertThat(maybeParameter) .isPresent() .hasValue(parameter); - Optional maybeFakeParameter = diagnosticInfo.getParameter("fakeParameterName"); + var maybeFakeParameter = diagnosticInfo.getParameter("fakeParameterName"); assertThat(maybeFakeParameter).isEmpty(); } @@ -102,10 +101,11 @@ void testLSPTags() { // then assertThat(diagnosticInfo.getLSPTags()).contains(DiagnosticTag.Deprecated); } + @Test void testParameterSuper() { - DiagnosticInfo diagnosticInfo = new DiagnosticInfo(MultilingualStringHasAllDeclaredLanguagesDiagnostic.class, configuration, stringInterner); + var diagnosticInfo = new DiagnosticInfo(MultilingualStringHasAllDeclaredLanguagesDiagnostic.class, configuration, stringInterner); Assertions.assertThat(diagnosticInfo.getCode()).isEqualTo(Either.forLeft("MultilingualStringHasAllDeclaredLanguages")); Assertions.assertThat(diagnosticInfo.getName()).isNotEmpty(); @@ -118,28 +118,45 @@ void testParameterSuper() { Assertions.assertThat(diagnosticInfo.getScope()).isEqualTo(DiagnosticScope.BSL); Assertions.assertThat(diagnosticInfo.getMinutesToFix()).isEqualTo(2); Assertions.assertThat(diagnosticInfo.isActivatedByDefault()).isTrue(); - Assertions.assertThat(diagnosticInfo.getTags().size()).isNotZero(); - - Assertions.assertThat(diagnosticInfo.getDefaultConfiguration().size()).isNotZero(); - Assertions.assertThat(diagnosticInfo.getParameters().size()).isEqualTo(1); + Assertions.assertThat(diagnosticInfo.getTags()).isNotEmpty(); + Assertions.assertThat(diagnosticInfo.getDefaultConfiguration()).isNotEmpty(); + Assertions.assertThat(diagnosticInfo.getParameters()).hasSize(1); + Assertions.assertThat(diagnosticInfo.canLocateOnProject()).isFalse(); - DiagnosticParameterInfo parameter = diagnosticInfo.getParameters().get(0); + var parameter = diagnosticInfo.getParameters().get(0); assertThat(parameter.getDescription()) .isEqualTo("Заявленные языки"); assertThat(parameter.getDefaultValue()).isEqualTo("ru"); assertThat(parameter.getType()).isEqualTo(String.class); - Optional maybeParameter = diagnosticInfo.getParameter(parameter.getName()); + var maybeParameter = diagnosticInfo.getParameter(parameter.getName()); assertThat(maybeParameter) .isPresent() .hasValue(parameter); - Optional maybeFakeParameter = diagnosticInfo.getParameter("fakeParameterName"); + var maybeFakeParameter = diagnosticInfo.getParameter("fakeParameterName"); assertThat(maybeFakeParameter).isEmpty(); } + @Test + void testCanLocateOnProject() { + var diagnosticInfo = new DiagnosticInfo(ForbiddenMetadataNameDiagnostic.class, configuration, stringInterner); + Assertions.assertThat(diagnosticInfo.getCode()).isEqualTo(Either.forLeft("ForbiddenMetadataName")); + Assertions.assertThat(diagnosticInfo.getName()).isNotEmpty(); + Assertions.assertThat(diagnosticInfo.getMessage()).isNotEmpty(); + Assertions.assertThat(diagnosticInfo.getType()).isEqualTo(DiagnosticType.ERROR); + Assertions.assertThat(diagnosticInfo.getSeverity()).isEqualTo(DiagnosticSeverity.BLOCKER); + Assertions.assertThat(diagnosticInfo.getLSPSeverity()).isEqualTo(org.eclipse.lsp4j.DiagnosticSeverity.Error); + Assertions.assertThat(diagnosticInfo.getCompatibilityMode()).isEqualTo(DiagnosticCompatibilityMode.UNDEFINED); + Assertions.assertThat(diagnosticInfo.getScope()).isEqualTo(DiagnosticScope.BSL); + Assertions.assertThat(diagnosticInfo.getMinutesToFix()).isEqualTo(30); + Assertions.assertThat(diagnosticInfo.isActivatedByDefault()).isTrue(); + Assertions.assertThat(diagnosticInfo.getTags()).isNotEmpty(); + Assertions.assertThat(diagnosticInfo.canLocateOnProject()).isTrue(); + } + @Test void testParameterEn() { @@ -147,12 +164,10 @@ void testParameterEn() { configuration.setLanguage(Language.EN); // when - DiagnosticInfo diagnosticEnInfo = new DiagnosticInfo(EmptyCodeBlockDiagnostic.class, configuration, stringInterner); + var diagnosticEnInfo = new DiagnosticInfo(EmptyCodeBlockDiagnostic.class, configuration, stringInterner); // then assertThat(diagnosticEnInfo.getParameters().get(0).getDescription()) .isEqualTo("Comment as code"); - } - -} \ No newline at end of file +} From dd09dcc3318488be5fc2585d7263194d3577985f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 12 Jan 2024 07:38:45 +0100 Subject: [PATCH 409/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B4=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=20=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B5=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/providers/DocumentSymbolProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java index 7a0b3311d64..e62aecb7f8b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java @@ -45,6 +45,7 @@ public final class DocumentSymbolProvider { private static final Set supportedVariableKinds = EnumSet.of( VariableKind.MODULE, + VariableKind.LOCAL, VariableKind.GLOBAL ); @@ -64,6 +65,7 @@ private static DocumentSymbol toDocumentSymbol(SourceDefinedSymbol symbol) { ); List children = symbol.getChildren().stream() + .filter(DocumentSymbolProvider::isSupported) .map(DocumentSymbolProvider::toDocumentSymbol) .collect(Collectors.toList()); From 16575174a764f17e3f0b2c366b16311d7f7864ce Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 12 Jan 2024 07:39:34 +0100 Subject: [PATCH 410/595] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=BE=20?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=D0=B3=D0=B4=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=D0=B5=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85,=20=D0=BE=D0=BF=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=D0=BE=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BC=D1=8F=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../symbol/AbstractVariableSymbol.java | 19 ++++++------------- .../symbol/IntBasedVariableSymbol.java | 4 +--- .../symbol/ShortBasedVariableSymbol.java | 4 +--- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java index 51c641e636b..529b33fb768 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java @@ -46,7 +46,7 @@ @NonFinal @Builder(builderClassName = "Builder") @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@ToString(exclude = {"children", "parent"}) +@ToString(exclude = {"parent"}) public abstract class AbstractVariableSymbol implements VariableSymbol { /** @@ -74,12 +74,6 @@ public abstract class AbstractVariableSymbol implements VariableSymbol { @NonFinal Optional parent; - /** - * Список "детей" символа - символов, которые располагаются внутри данного символа. - */ - @Getter - List children; - /** * Тип переменной. */ @@ -95,6 +89,11 @@ public abstract class AbstractVariableSymbol implements VariableSymbol { */ Optional description; + @Override + public List getChildren() { + return Collections.emptyList(); + } + @Override public SymbolKind getSymbolKind() { return SymbolKind.Variable; @@ -129,10 +128,6 @@ public static class Builder { @Accessors(fluent = true, chain = true) Optional parent = Optional.empty(); - @Setter - @Accessors(fluent = true, chain = true) - List children = Collections.emptyList(); - private int startLine; private int startCharacter; private int endLine; @@ -179,7 +174,6 @@ public VariableSymbol build() { scope, owner, parent, - children, (byte) kind.ordinal(), export, description, @@ -197,7 +191,6 @@ public VariableSymbol build() { scope, owner, parent, - children, (byte) kind.ordinal(), export, description, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java index 21ca99c4d5a..977d18ba6eb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java @@ -32,7 +32,6 @@ import lombok.experimental.NonFinal; import org.eclipse.lsp4j.Range; -import java.util.List; import java.util.Optional; /** @@ -65,7 +64,6 @@ public IntBasedVariableSymbol( SourceDefinedSymbol scope, DocumentContext owner, Optional parent, - List children, byte kind, boolean export, Optional description, @@ -77,7 +75,7 @@ public IntBasedVariableSymbol( int variableNameStartCharacter, int variableNameEndCharacter ) { - super(name, scope, owner, parent, children, kind, export, description); + super(name, scope, owner, parent, kind, export, description); this.startLine = startLine; this.startCharacter = startCharacter; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java index 974469623db..854661b50b8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java @@ -32,7 +32,6 @@ import lombok.experimental.NonFinal; import org.eclipse.lsp4j.Range; -import java.util.List; import java.util.Optional; /** @@ -65,7 +64,6 @@ public ShortBasedVariableSymbol( SourceDefinedSymbol scope, DocumentContext owner, Optional parent, - List children, byte kind, boolean export, Optional description, @@ -77,7 +75,7 @@ public ShortBasedVariableSymbol( short variableNameStartCharacter, short variableNameEndCharacter ) { - super(name, scope, owner, parent, children, kind, export, description); + super(name, scope, owner, parent, kind, export, description); this.startLine = startLine; this.startCharacter = startCharacter; From 15299b6c6de4f858d3aa31b78afdf0acf2ba8654 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Fri, 12 Jan 2024 17:03:19 +0300 Subject: [PATCH 411/595] =?UTF-8?q?-=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B0=D1=86=D0=B5?= =?UTF-8?q?=D0=BD=D0=BA=D1=83=20=D0=B7=D0=B0=20=D1=81=D0=BB=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B2=20=D0=B4=D0=B8=D0=B0?= =?UTF-8?q?=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B0=D1=85=20--=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B8=D0=BB=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BD=D0=B3=D0=BD=D0=B8=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=D0=B9=20=D0=B8=20=D1=86=D0=B8=D0=BA=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=20-=20=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/contributing/DiagnosticStructure.md | 12 +++++++-- .../CognitiveComplexityDiagnostic.java | 25 ++----------------- .../CyclomaticComplexityDiagnostic.java | 3 ++- .../diagnostics/DiagnosticStorage.java | 9 +++---- ...etersBetweenClientAndServerDiagnostic.java | 10 +++++--- .../diagnostics/metadata/DiagnosticInfo.java | 7 ++++++ .../metadata/DiagnosticMetadata.java | 5 ++++ .../CyclomaticComplexityDiagnosticTest.java | 3 ++- .../metadata/DiagnosticInfoTest.java | 1 + 9 files changed, 39 insertions(+), 36 deletions(-) diff --git a/docs/contributing/DiagnosticStructure.md b/docs/contributing/DiagnosticStructure.md index a312a01d2a2..f98512c41f9 100644 --- a/docs/contributing/DiagnosticStructure.md +++ b/docs/contributing/DiagnosticStructure.md @@ -45,11 +45,13 @@ - Тип диагностики `type` и ее важность `severity`, для каждой диагностики обязательно их определение. Для того, чтобы правильно выбрать тип и важность диагностики, можно обратиться к [статье](DiagnosticTypeAndSeverity.md). - Время на исправление замечания `minutesToFix` (по умолчанию 0). Данное значение используется при расчете общего техдолга проекта в трудозатрах на исправление всех замечаний (сумма времени на исправление по всем обнаруженным замечаниям). Стоит указывать время, максимально реалистичное, которое разработчик должен потратить на исправление. +- С помощью параметра `extraMinForComplexity` можно динамически увеличивать время на исправление замечания для диагностик, в которых учитывается несколько нарушающих правило мест, например при расчете сложности метода. - Набор тэгов `tag` диагностики, указывающих группы, к котором она относится. Подробнее о тэга в [статье](DiagnosticTag.md). - Границы применимости `scope` (по умолчанию `ALL`, т.е. без ограничения). BSL LS поддерживает несколько языков (oscript и bsl) и диагностики могут применяться как к одному конкретному языку, так и ко всем сразу. - Активность правила по-умолчанию `activatedByDefault` (по умолчанию `Истина`). При разработке экспериментальных, спорных либо не применимых в большинстве проектов, стоит по умолчанию отключать диагностику, активацию выполнит конечный пользователь решения. - Режим совместимости `compatibilityMode`, по которому фильтруются диагностики при использовании метаданных. По умолчанию `UNDEFINED`. - +- Список типов модулей `modules` для возможности ограничить анализируемую диагностикой область +- Признак возможности установить замечания на весь проект `canLocateOnProject`. Используется для диагностик не связанных с модулем исходного кода. На данный момент опция воспринимается только SonarQube, остальные инструменты игнорируют. Последние два могут быть опущены. Пример аннотации @@ -64,8 +66,14 @@ compatibilityMode = DiagnosticCompatibilityMode.COMPATIBILITY_MODE_8_3_3, // Режим проверки совместимости с 8.3.3 tags = { DiagnosticTag.STANDARD // Относится к диагностикам нарушения стандарта 1С - } + }, + modules = { + ModuleType.CommonModule // Анализируются только общие модули + }, + canLocateOnProject = false, // Замечание будет размещено только в привязке к модулю + extraMinForComplexity = 1 // За каждую дополнительную позицию замечания (`DiagnosticRelatedInformation`) будет добавлено по одной минуте ) + ``` Класс должен реализовывать интерфейс `BSLDiagnostic`. Если диагностика основывается на AST дереве, то класс реализации должен быть унаследован от одного из классов ниже, реализующих `BSLDiagnostic`: diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java index fadb587011d..f7d9bd1bfc9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java @@ -46,7 +46,8 @@ minutesToFix = 15, tags = { DiagnosticTag.BRAINOVERLOAD - } + }, + extraMinForComplexity = 1 ) public class CognitiveComplexityDiagnostic extends AbstractVisitorDiagnostic { @@ -99,28 +100,6 @@ public ParseTree visitSub(BSLParser.SubContext ctx) { Integer methodComplexity = documentContext.getCognitiveComplexityData().getMethodsComplexity().get(methodSymbol); if (methodComplexity > complexityThreshold) { - - List relatedInformation = new ArrayList<>(); - - relatedInformation.add(RelatedInformation.create( - documentContext.getUri(), - methodSymbol.getSubNameRange(), - info.getMessage(methodSymbol.getName(), methodComplexity, complexityThreshold) - )); - - List secondaryLocations = - documentContext.getCognitiveComplexityData().getMethodsComplexitySecondaryLocations().get(methodSymbol); - - secondaryLocations.stream() - .map((ComplexitySecondaryLocation secondaryLocation) -> - RelatedInformation.create( - documentContext.getUri(), - secondaryLocation.getRange(), - secondaryLocation.getMessage() - ) - ) - .collect(Collectors.toCollection(() -> relatedInformation)); - diagnosticStorage.addDiagnostic( methodSymbol.getSubNameRange(), info.getMessage(methodSymbol.getName(), methodComplexity, complexityThreshold), diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java index f9454294a40..569d96ddbb9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java @@ -46,7 +46,8 @@ minutesToFix = 25, tags = { DiagnosticTag.BRAINOVERLOAD - } + }, + extraMinForComplexity = 1 ) public class CyclomaticComplexityDiagnostic extends AbstractVisitorDiagnostic { private static final int COMPLEXITY_THRESHOLD = 20; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java index e0650d657ca..34f7f982e84 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java @@ -209,10 +209,10 @@ public void addDiagnostic( } public void addDiagnostic(ParseTree tree) { - if (tree instanceof BSLParserRuleContext) { - addDiagnostic((BSLParserRuleContext) tree); - } else if (tree instanceof TerminalNode) { - addDiagnostic((TerminalNode) tree); + if (tree instanceof BSLParserRuleContext parserRuleContext) { + addDiagnostic(parserRuleContext); + } else if (tree instanceof TerminalNode terminalNode) { + addDiagnostic(terminalNode); } else { throw new IllegalArgumentException("Unsupported parameter type " + tree); } @@ -253,5 +253,4 @@ private static Diagnostic createDiagnostic( } return diagnostic; } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 8997f5bbf6a..0faad5af051 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -106,10 +106,11 @@ private List calcNotAssignedParams(MethodSymbol method) { return calcNotAssignedParams(method, parameterDefinitions); } - private List calcNotAssignedParams(MethodSymbol method, List parameterDefinitions) { + private List calcNotAssignedParams(MethodSymbol method, + List parameterDefinitions) { return parameterDefinitions.stream() .filter(parameterDefinition -> isAssignedParam(method, parameterDefinition)) - .collect(Collectors.toUnmodifiableList()); + .toList(); } private boolean isAssignedParam(MethodSymbol method, ParameterDefinition parameterDefinition) { @@ -118,7 +119,8 @@ private boolean isAssignedParam(MethodSymbol method, ParameterDefinition paramet .anyMatch(ref -> ref.getOccurrenceType() == OccurrenceType.DEFINITION)); } - private static Stream getVariableByParameter(MethodSymbol method, ParameterDefinition parameterDefinition) { + private static Stream getVariableByParameter(MethodSymbol method, + ParameterDefinition parameterDefinition) { return method.getChildren().stream() // в будущем могут появиться и другие символы, подчиненные методам .filter(sourceDefinedSymbol -> sourceDefinedSymbol.getSymbolKind() == SymbolKind.Variable) @@ -159,7 +161,7 @@ private static boolean isEqualCompilerDirective(MethodSymbol method) { private static List getMethodParamsByRef(MethodSymbol methodSymbol) { return methodSymbol.getParameters().stream() .filter(parameterDefinition -> !parameterDefinition.isByValue()) - .collect(Collectors.toUnmodifiableList()); + .toList(); } private static List getRelatedInformation(List references) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index 49960d4cb61..9bf390db885 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -198,6 +198,13 @@ public boolean canLocateOnProject() { return diagnosticMetadata.canLocateOnProject(); } + public double getExtraMinForComplexity() { + if (diagnosticMetadata.extraMinForComplexity() > 0) { + return diagnosticMetadata.extraMinForComplexity(); + } + return 0; + } + public Map getDefaultConfiguration() { return diagnosticParameters.stream() .collect(Collectors.toMap(DiagnosticParameterInfo::getName, DiagnosticParameterInfo::getDefaultValue)); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java index 934d7aac59b..ad4c2979aa3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java @@ -83,4 +83,9 @@ * Замечания диагностики могут быть прикреплены на уровень анализируемого проекта (в частности в SonarQube) */ boolean canLocateOnProject() default false; + + /** + * Надбавка ко времени исправления замечания за повышенную сложность + */ + double extraMinForComplexity() default 0; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java index a035a178b84..7f7673f2ea5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java @@ -37,6 +37,8 @@ class CyclomaticComplexityDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); @@ -45,7 +47,6 @@ void test() { assertThat(diagnostics, true) .hasRange(0, 8, 0, 32); assertThat(diagnostics.get(0).getRelatedInformation()).hasSize(21); - } @Test diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java index ad7c945b9a3..be97c5ec967 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java @@ -155,6 +155,7 @@ void testCanLocateOnProject() { Assertions.assertThat(diagnosticInfo.isActivatedByDefault()).isTrue(); Assertions.assertThat(diagnosticInfo.getTags()).isNotEmpty(); Assertions.assertThat(diagnosticInfo.canLocateOnProject()).isTrue(); + Assertions.assertThat(diagnosticInfo.getExtraMinForComplexity()).isZero(); } @Test From 9503336354875dff7a0a27ba977de52457609b10 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Sat, 13 Jan 2024 05:48:42 +0300 Subject: [PATCH 412/595] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D1=8B=D0=BC=D0=BE=D0=B2=D0=BE=D0=B9=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB=D1=8F=20extraMinForComplexity?= =?UTF-8?q?=20>=3D=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/metadata/DiagnosticInfo.java | 5 +---- .../bsl/languageserver/diagnostics/SmokyTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index 9bf390db885..85b36f0d3f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -199,10 +199,7 @@ public boolean canLocateOnProject() { } public double getExtraMinForComplexity() { - if (diagnosticMetadata.extraMinForComplexity() > 0) { - return diagnosticMetadata.extraMinForComplexity(); - } - return 0; + return diagnosticMetadata.extraMinForComplexity(); } public Map getDefaultConfiguration() { diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java index a60b36b3fe2..f2c792b75a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java @@ -143,4 +143,13 @@ void testIAllDiagnostics() { assertThat(diagnosticErrors).isEmpty(); } + @Test + void testExtraMinForComplexity() { + // нельзя ставить отрицательное значение + diagnosticInfos.forEach(diagnosticInfo -> + assertThat(diagnosticInfo.getExtraMinForComplexity()) + .as(diagnosticInfo.getCode().getStringValue()) + .isNotNegative() + ); + } } From 091f6f0b27348870c3ef835da72d4588f8283c88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 09:55:44 +0000 Subject: [PATCH 413/595] build(deps): bump io.sentry:sentry-bom from 7.1.0 to 7.2.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.1.0 to 7.2.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.1.0...7.2.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index bcce57b08b4..d3670f5e58e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.1.0") + mavenBom("io.sentry:sentry-bom:7.2.0") } } From ae33c7db53a8a5297e163d7cc51bc650b71168e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:00:18 +0000 Subject: [PATCH 414/595] build(deps): bump org.springframework.boot from 3.2.1 to 3.2.2 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.2.1...v3.2.2) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d3670f5e58e..17955655803 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.50.0" - id("org.springframework.boot") version "3.2.1" + id("org.springframework.boot") version "3.2.2" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" From 47352e3197a224be34248c02d9b244b8c740cb5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 09:23:15 +0000 Subject: [PATCH 415/595] build(deps): bump JetBrains/qodana-action from 2023.3.0 to 2023.3.1 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.3.0 to 2023.3.1. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.3.0...v2023.3.1) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 7b7ab7f595a..908ce314015 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.3.0 + uses: JetBrains/qodana-action@v2023.3.1 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From a7e6e666f3eff9caee4ca788e8fef9600a22fea8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 09:28:36 +0000 Subject: [PATCH 416/595] build(deps): bump com.github.ben-manes.versions from 0.50.0 to 0.51.0 Bumps com.github.ben-manes.versions from 0.50.0 to 0.51.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 17955655803..ee0cac9362c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { id("io.freefair.aspectj.post-compile-weaving") version "8.4" id("io.freefair.maven-central.validate-poms") version "8.4" id("me.qoomon.git-versioning") version "6.4.3" - id("com.github.ben-manes.versions") version "0.50.0" + id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.2" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" From fcfad2373723169d27db727dc084723201f25ff2 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 23 Jan 2024 18:15:06 +0300 Subject: [PATCH 417/595] =?UTF-8?q?-=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20-=20sq=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 6 +- .../cfg/CfgBuildingParseTreeVisitor.java | 60 +++---- .../languageserver/cfg/ControlFlowGraph.java | 3 +- .../cfg/StatementsBlockWriter.java | 7 +- .../languageserver/cli/AnalyzeCommand.java | 6 +- .../ExtractStructureConstructorSupplier.java | 15 +- .../codelenses/RunTestCodeLensSupplier.java | 4 - .../ConstructorColorInformationSupplier.java | 2 +- .../configuration/Language.java | 3 +- .../LanguageServerConfiguration.java | 10 +- .../computer/CognitiveComplexityComputer.java | 19 +-- .../CyclomaticComplexityComputer.java | 15 +- .../symbol/description/DescriptionReader.java | 4 +- .../AbstractFindMethodDiagnostic.java | 8 +- .../AbstractMultilingualStringDiagnostic.java | 2 +- ...lFunctionPathMustHaveReturnDiagnostic.java | 32 ++-- .../CodeAfterAsyncCallDiagnostic.java | 4 +- .../diagnostics/CommentedCodeDiagnostic.java | 32 ++-- .../CreateQueryInCycleDiagnostic.java | 20 +-- ...atedInsertionIntoCollectionDiagnostic.java | 29 ++-- .../diagnostics/EmptyCodeBlockDiagnostic.java | 7 +- .../FunctionOutParameterDiagnostic.java | 11 +- .../IfElseDuplicatedCodeBlockDiagnostic.java | 12 +- .../IfElseDuplicatedConditionDiagnostic.java | 12 +- .../IncorrectLineBreakDiagnostic.java | 4 +- ...atinAndCyrillicSymbolInWordDiagnostic.java | 2 +- .../diagnostics/MagicDateDiagnostic.java | 11 +- .../diagnostics/MagicNumberDiagnostic.java | 2 +- .../diagnostics/MissingSpaceDiagnostic.java | 21 +-- ...issingTemporaryFileDeletionDiagnostic.java | 19 +-- .../diagnostics/RefOveruseDiagnostic.java | 7 +- .../RewriteMethodParameterDiagnostic.java | 5 +- ...SetPermissionsForNewObjectsDiagnostic.java | 2 +- .../SpaceAtStartCommentDiagnostic.java | 4 +- ...etersBetweenClientAndServerDiagnostic.java | 8 +- .../UnusedLocalMethodDiagnostic.java | 6 +- .../UnusedParametersDiagnostic.java | 17 +- .../UsingServiceTagDiagnostic.java | 5 +- ...OfRollbackTransactionMethodDiagnostic.java | 4 +- .../DiagnosticBeanPostProcessor.java | 2 +- .../metadata/DiagnosticCompatibilityMode.java | 12 +- .../diagnostics/metadata/DiagnosticInfo.java | 15 +- .../metadata/DiagnosticParameterInfo.java | 24 +-- .../diagnostics/metadata/DiagnosticTag.java | 9 +- .../CodeBlockFoldingRangeSupplier.java | 4 +- ...rceDefinedMethodCallInlayHintSupplier.java | 6 +- .../providers/SelectionRangeProvider.java | 12 +- .../providers/SymbolProvider.java | 15 +- .../references/model/Symbol.java | 3 +- .../references/model/SymbolOccurrence.java | 10 +- .../reporters/GenericIssueReport.java | 14 +- .../reporters/JUnitTestSuites.java | 16 +- .../reporters/TSLintReportEntry.java | 26 ++- .../bsl/languageserver/utils/Trees.java | 67 +++----- .../DefaultNodeEqualityComparer.java | 39 ++--- .../ExpressionTreeBuildingVisitor.java | 71 +++----- .../cfg/ControlFlowGraphBuilderTest.java | 156 +++++++++--------- .../context/DocumentContextTest.java | 2 +- .../context/ServerContextTest.java | 1 - .../description/MethodDescriptionTest.java | 26 +-- ...ctionPathMustHaveReturnDiagnosticTest.java | 42 ++--- .../CommentedCodeDiagnosticTest.java | 6 +- .../ConsecutiveEmptyLinesDiagnosticTest.java | 90 +++++----- .../diagnostics/DiagnosticInfosTest.java | 2 +- .../IdenticalExpressionsDiagnosticTest.java | 25 +-- .../InvalidCharacterInFileDiagnosticTest.java | 28 ++-- ...singTempStorageDeletionDiagnosticTest.java | 62 +++---- .../MethodSymbolMarkupContentBuilderTest.java | 95 ++++++----- ...ariableSymbolMarkupContentBuilderTest.java | 92 +++++++---- .../providers/FormatProviderTest.java | 3 +- .../references/ReferenceResolverTest.java | 3 +- .../ExpressionParseTreeRewriterTest.java | 7 +- 72 files changed, 678 insertions(+), 747 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 17955655803..aef049ec0cc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,9 +82,9 @@ dependencies { exclude("org.antlr", "antlr-runtime") } api("com.github.1c-syntax", "utils", "0.5.2") - api("io.github.1c-syntax", "mdclasses", "0.12.0") - api("io.github.1c-syntax", "bsl-common-library", "0.5.0") - api("io.github.1c-syntax", "supportconf", "0.12.1") + api("io.github.1c-syntax", "mdclasses", "0.13.0-rc.1") + api("io.github.1c-syntax", "bsl-common-library", "0.5.1") + api("io.github.1c-syntax", "supportconf", "0.13.1") api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") // JLanguageTool diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java index b739e1f1ba5..63db55f1d30 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java @@ -29,7 +29,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.stream.Collectors; public class CfgBuildingParseTreeVisitor extends BSLParserBaseVisitor { @@ -148,12 +147,12 @@ public ParseTree visitIfStatement(BSLParser.IfStatementContext ctx) { while (!currentLevelBlock.getBuildParts().isEmpty()) { var blockTail = currentLevelBlock.getBuildParts().pop(); - if (hasNoSignificantEdges(blockTail) && blockTail instanceof BasicBlockVertex) { - // это мертвый код. Он может быть пустым блоком - // тогда он не нужен сам по себе - var basicBlock = (BasicBlockVertex) blockTail; - if (basicBlock.statements().isEmpty()) - continue; + // это мертвый код. Он может быть пустым блоком + // тогда он не нужен сам по себе + if (hasNoSignificantEdges(blockTail) + && blockTail instanceof BasicBlockVertex basicBlock + && basicBlock.statements().isEmpty()) { + continue; } graph.addEdge(blockTail, upperBlock.end()); } @@ -163,7 +162,9 @@ public ParseTree visitIfStatement(BSLParser.IfStatementContext ctx) { private boolean hasNoSignificantEdges(CfgVertex blockTail) { var edges = graph.incomingEdgesOf(blockTail); - return edges.isEmpty() || (adjacentDeadCodeEnabled && edges.stream().allMatch(x -> x.getType() == CfgEdgeType.ADJACENT_CODE)); + return edges.isEmpty() + || (adjacentDeadCodeEnabled + && edges.stream().allMatch(x -> x.getType() == CfgEdgeType.ADJACENT_CODE)); } @Override @@ -372,8 +373,9 @@ public ParseTree visitPreproc_if(BSLParser.Preproc_ifContext ctx) { return ctx; } - if (!isStatementLevelPreproc(ctx)) + if (!isStatementLevelPreproc(ctx)) { return super.visitPreproc_if(ctx); + } var node = new PreprocessorConditionVertex(ctx); graph.addVertex(node); @@ -477,14 +479,15 @@ public ParseTree visitPreproc_endif(BSLParser.Preproc_endifContext ctx) { // присоединяем все прямые выходы из тел условий while (!mainIf.getBuildParts().isEmpty()) { var blockTail = mainIf.getBuildParts().pop(); - if (hasNoSignificantEdges(blockTail) && blockTail instanceof BasicBlockVertex) { - // это мертвый код. Он может быть пустым блоком - // тогда он не нужен сам по себе - var basicBlock = (BasicBlockVertex) blockTail; - if (basicBlock.statements().isEmpty()) { - graph.removeVertex(basicBlock); - continue; - } + + // это мертвый код. Он может быть пустым блоком + // тогда он не нужен сам по себе + if (hasNoSignificantEdges(blockTail) + && blockTail instanceof BasicBlockVertex basicBlock + && basicBlock.statements().isEmpty()) { + + graph.removeVertex(basicBlock); + continue; } graph.addVertex(blockTail); graph.addEdge(blockTail, upperBlock.end()); @@ -493,15 +496,15 @@ public ParseTree visitPreproc_endif(BSLParser.Preproc_endifContext ctx) { return ctx; } - private boolean isStatementLevelPreproc(BSLParserRuleContext ctx) { + private static boolean isStatementLevelPreproc(BSLParserRuleContext ctx) { return ctx.getParent().getParent().getRuleIndex() == BSLParser.RULE_statement; } private PreprocessorConditionVertex popPreprocCondition() { var node = blocks.getCurrentBlock().getBuildParts().peek(); - if (node instanceof PreprocessorConditionVertex) { + if (node instanceof PreprocessorConditionVertex preprocessorConditionVertex) { blocks.getCurrentBlock().getBuildParts().pop(); - return (PreprocessorConditionVertex) node; + return preprocessorConditionVertex; } return null; } @@ -545,12 +548,11 @@ private void buildLoopSubgraph(BSLParser.CodeBlockContext ctx, LoopVertex loopSt private void connectGraphTail(StatementsBlockWriter.StatementsBlockRecord currentBlock, CfgVertex vertex) { - if (!(currentBlock.end() instanceof BasicBlockVertex)) { + if (!(currentBlock.end() instanceof BasicBlockVertex currentTail)) { graph.addEdge(currentBlock.end(), vertex); return; } - var currentTail = (BasicBlockVertex) currentBlock.end(); if (currentTail.statements().isEmpty()) { // перевести все связи на новую вершину var incoming = graph.incomingEdgesOf(currentTail); @@ -575,17 +577,17 @@ private void connectGraphTail(StatementsBlockWriter.StatementsBlockRecord curren private void removeOrphanedNodes() { var orphans = graph.vertexSet().stream() .filter(vertex -> !(vertex instanceof ExitVertex)) - .filter(vertex -> { + .filter((CfgVertex vertex) -> { var edges = new ArrayList<>(graph.edgesOf(vertex)); - return edges.isEmpty() || - adjacentDeadCodeEnabled && - edges.size() == 1 - && edges.get(0).getType() == CfgEdgeType.ADJACENT_CODE - && graph.getEdgeTarget(edges.get(0)) == vertex; + return edges.isEmpty() + || (adjacentDeadCodeEnabled + && edges.size() == 1 + && edges.get(0).getType() == CfgEdgeType.ADJACENT_CODE + && graph.getEdgeTarget(edges.get(0)) == vertex); }) - .collect(Collectors.toList()); + .toList(); // в одном стриме бывает ConcurrentModificationException // делаем через другую коллекцию diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java index 6f3cb7e60d1..af2e91499b0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java @@ -25,13 +25,12 @@ import lombok.Setter; import org.jgrapht.graph.DefaultDirectedGraph; +@Getter public class ControlFlowGraph extends DefaultDirectedGraph { - @Getter @Setter private CfgVertex entryPoint; - @Getter private ExitVertex exitPoint; ControlFlowGraph() { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java index 15f3cca56ec..87ef438a26e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.cfg; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; +import lombok.Getter; import java.util.ArrayDeque; import java.util.Deque; @@ -42,6 +43,8 @@ static class StatementsBlockRecord { private BasicBlockVertex statements = new BasicBlockVertex(); private final Deque buildStack = new ArrayDeque<>(); + + @Getter private final JumpInformationRecord jumpContext; public StatementsBlockRecord() { @@ -62,10 +65,6 @@ public Deque getBuildParts() { return buildStack; } - public JumpInformationRecord getJumpContext() { - return jumpContext; - } - public void split() { if (subgraphBegin instanceof BasicBlockVertex && subgraphBegin == subgraphEnd) { subgraphBegin = statements; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index 4caf972cca8..376965cefda 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.cli; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; -import com.github._1c_syntax.bsl.languageserver.context.MetricStorage; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.reporters.ReportersAggregator; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; @@ -37,7 +36,6 @@ import me.tongfei.progressbar.ProgressBarBuilder; import me.tongfei.progressbar.ProgressBarStyle; import org.apache.commons.io.FileUtils; -import org.eclipse.lsp4j.Diagnostic; import org.springframework.stereotype.Component; import picocli.CommandLine.Command; @@ -205,8 +203,8 @@ private FileInfo getFileInfoFromFile(Path srcDir, File file) { context.rebuildDocument(documentContext); var filePath = srcDir.relativize(Absolute.path(file)); - List diagnostics = documentContext.getDiagnostics(); - MetricStorage metrics = documentContext.getMetrics(); + var diagnostics = documentContext.getDiagnostics(); + var metrics = documentContext.getMetrics(); var mdoRef = documentContext.getMdObject() .map(MD::getMdoReference) .map(MdoReference::getMdoRef) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index c16201d4ed2..6135f35e83f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -32,7 +32,6 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import lombok.RequiredArgsConstructor; -import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.tree.TerminalNode; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionKind; @@ -49,7 +48,6 @@ import java.util.List; import java.util.Map; import java.util.function.Predicate; -import java.util.stream.Collectors; @Component @RequiredArgsConstructor @@ -80,16 +78,14 @@ public List getCodeActions(CodeActionParams params, DocumentContext return Collections.emptyList(); } - var doCall = maybeDoCall.get(); - - List parameters = maybeDoCall + var parameters = maybeDoCall .map(BSLParser.DoCallContext::callParamList) .map(callParamListContext -> callParamListContext.children) .stream() .flatMap(Collection::stream) .filter(Predicate.not(TerminalNode.class::isInstance)) .map(BSLParser.CallParamContext.class::cast) - .collect(Collectors.toList()); + .toList(); if (parameters.isEmpty()) { return Collections.emptyList(); @@ -105,6 +101,7 @@ public List getCodeActions(CodeActionParams params, DocumentContext return Collections.emptyList(); } + var doCall = maybeDoCall.get(); var assignment = (BSLParser.AssignmentContext) Trees.getAncestorByRuleIndex(doCall, BSLParser.RULE_assignment); if (assignment == null || isParentAssignment(doCall, assignment)) { return Collections.emptyList(); @@ -118,14 +115,14 @@ public List getCodeActions(CodeActionParams params, DocumentContext var lValueName = lValue.getText(); var insert = Resources.getResourceString(configuration.getLanguage(), getClass(), "insert"); - String[] keys = Strings.trimQuotes(firstToken.getText()).split(","); + var keys = Strings.trimQuotes(firstToken.getText()).split(","); var workspaceEdit = new WorkspaceEdit(); var changes = new ArrayList(); var constructorEdit = new TextEdit(Ranges.create(doCall), "()"); changes.add(constructorEdit); - int intendSize = Ranges.create(lValue).getStart().getCharacter(); + var intendSize = Ranges.create(lValue).getStart().getCharacter(); var rparenRange = Ranges.create(doCall.RPAREN()); var constructorLine = rparenRange.getEnd().getLine(); @@ -135,7 +132,7 @@ public List getCodeActions(CodeActionParams params, DocumentContext var indent = documentContext.getContentList()[constructorLine].substring(0, intendSize); for (var i = 0; i < keys.length; i++) { - String key = keys[i].trim(); + var key = keys[i].trim(); var value = ""; var separator = ""; if (parameters.size() > i + 1) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index 007c5b6ce08..10edb38b9c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -26,18 +26,14 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent; import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; import lombok.ToString; import lombok.Value; import lombok.extern.slf4j.Slf4j; -import org.eclipse.lsp4j.ClientInfo; import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.Command; -import org.eclipse.lsp4j.InitializeParams; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.beans.ConstructorProperties; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index 58c8912d7d7..11c2ed98c5e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -22,9 +22,9 @@ package com.github._1c_syntax.bsl.languageserver.color; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.languageserver.utils.bsl.Constructors; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.Token; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java index b627d4fc834..f403380fa7b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java @@ -29,6 +29,7 @@ * Язык для сообщений, ресурсов и прочих взаимодействий между * BSL Language Server и пользователем. */ +@Getter public enum Language { /** @@ -49,13 +50,11 @@ public enum Language { /** * Код языка в соответствии с {@link java.util.Locale#getLanguage()}. */ - @Getter private final String languageCode; /** * Локаль языка. */ - @Getter private final Locale locale; /** diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index a47ba6e0363..b35dac566fc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -56,7 +56,6 @@ import java.util.List; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; import static com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS; @@ -147,7 +146,7 @@ public void reset() { public static Path getCustomConfigurationRoot(LanguageServerConfiguration configuration, Path srcDir) { Path rootPath = null; - Path pathFromConfiguration = configuration.getConfigurationRoot(); + var pathFromConfiguration = configuration.getConfigurationRoot(); if (pathFromConfiguration == null) { rootPath = Absolute.path(srcDir); @@ -161,7 +160,7 @@ public static Path getCustomConfigurationRoot(LanguageServerConfiguration config } if (rootPath != null) { - File fileConfiguration = getConfigurationFile(rootPath); + var fileConfiguration = getConfigurationFile(rootPath); if (fileConfiguration != null) { if (fileConfiguration.getAbsolutePath().endsWith(".mdo")) { rootPath = Optional.of(fileConfiguration.toPath()) @@ -178,7 +177,6 @@ public static Path getCustomConfigurationRoot(LanguageServerConfiguration config } return rootPath; - } @SuppressFBWarnings( @@ -190,7 +188,7 @@ private static File getConfigurationFile(Path rootPath) { List listPath = new ArrayList<>(); try (Stream stream = Files.find(rootPath, 50, (path, basicFileAttributes) -> basicFileAttributes.isRegularFile() && searchConfiguration.matcher(path.getFileName().toString()).find())) { - listPath = stream.collect(Collectors.toList()); + listPath = stream.toList(); } catch (IOException e) { LOGGER.error("Error on read configuration file", e); } @@ -219,7 +217,6 @@ private void loadConfigurationFile(File configurationFile) { } this.configurationFile = configurationFile; - copyPropertiesFrom(configuration); } @@ -233,5 +230,4 @@ private void copyPropertiesFrom(LanguageServerConfiguration configuration) { PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); PropertyUtils.copyProperties(this.formattingOptions, configuration.formattingOptions); } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java index 6a863f28fbc..51c4ef89747 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java @@ -97,7 +97,7 @@ public ComplexityData compute() { methodsComplexity.clear(); ignoredContexts.clear(); - ParseTreeWalker walker = new ParseTreeWalker(); + var walker = new ParseTreeWalker(); walker.walk(this, documentContext.getAst()); return new ComplexityData( @@ -265,7 +265,7 @@ public void enterGotoStatement(BSLParser.GotoStatementContext ctx) { @Override public void enterGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - BSLParser.MethodNameContext methodNameContext = ctx.methodName(); + var methodNameContext = ctx.methodName(); if (methodNameContext != null && currentMethod != null) { String calledMethodName = methodNameContext.getText(); if (currentMethod.getName().equalsIgnoreCase(calledMethodName)) { @@ -286,7 +286,7 @@ public void enterExpression(BSLParser.ExpressionContext ctx) { final List flattenExpression = flattenExpression(ctx); int emptyTokenType = -1; - AtomicInteger lastOperationType = new AtomicInteger(emptyTokenType); + var lastOperationType = new AtomicInteger(emptyTokenType); flattenExpression.forEach((Token token) -> { int currentOperationType = token.getType(); @@ -309,15 +309,14 @@ private List flattenExpression(BSLParser.ExpressionContext ctx) { final List children = Trees.getChildren(ctx); for (Tree tree : children) { - if (!(tree instanceof BSLParserRuleContext)) { + if (!(tree instanceof BSLParserRuleContext parserRule)) { continue; } - BSLParserRuleContext parserRule = ((BSLParserRuleContext) tree); - if (parserRule instanceof BSLParser.MemberContext) { - flattenMember(result, (BSLParser.MemberContext) parserRule); - } else if (parserRule instanceof BSLParser.OperationContext) { - flattenOperation(result, (BSLParser.OperationContext) parserRule); + if (parserRule instanceof BSLParser.MemberContext memberContext) { + flattenMember(result, memberContext); + } else if (parserRule instanceof BSLParser.OperationContext operationContext) { + flattenOperation(result, operationContext); } } @@ -339,7 +338,7 @@ private void flattenMember(List result, BSLParser.MemberContext member) { final BSLParser.UnaryModifierContext unaryModifier = member.unaryModifier(); if (unaryModifier != null && unaryModifier.NOT_KEYWORD() != null) { - final CommonToken splitter = new CommonToken(-1); + final var splitter = new CommonToken(-1); result.add(splitter); result.addAll(nestedTokens); result.add(splitter); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java index 9bee9783397..26cb9e3423b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java @@ -201,7 +201,7 @@ public void enterExceptCodeBlock(BSLParser.ExceptCodeBlockContext ctx) { @Override public void enterGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - BSLParser.MethodNameContext methodNameContext = ctx.methodName(); + var methodNameContext = ctx.methodName(); if (methodNameContext != null && currentMethod != null) { String calledMethodName = methodNameContext.getText(); if (currentMethod.getName().equalsIgnoreCase(calledMethodName)) { @@ -234,15 +234,14 @@ private static List flattenExpression(BSLParser.ExpressionContext ctx) { final List children = Trees.getChildren(ctx); for (Tree tree : children) { - if (!(tree instanceof BSLParserRuleContext)) { + if (!(tree instanceof BSLParserRuleContext parserRule)) { continue; } - BSLParserRuleContext parserRule = ((BSLParserRuleContext) tree); - if (parserRule instanceof BSLParser.MemberContext) { - flattenMember(result, (BSLParser.MemberContext) parserRule); - } else if (parserRule instanceof BSLParser.OperationContext) { - flattenOperation(result, (BSLParser.OperationContext) parserRule); + if (parserRule instanceof BSLParser.MemberContext memberContext) { + flattenMember(result, memberContext); + } else if (parserRule instanceof BSLParser.OperationContext operationContext) { + flattenOperation(result, operationContext); } } @@ -264,7 +263,7 @@ private static void flattenMember(List result, BSLParser.MemberContext me final BSLParser.UnaryModifierContext unaryModifier = member.unaryModifier(); if (unaryModifier != null && unaryModifier.NOT_KEYWORD() != null) { - final CommonToken splitter = new CommonToken(-1); + final var splitter = new CommonToken(-1); result.add(splitter); result.addAll(nestedTokens); result.add(splitter); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java index 5aa2080a9a8..dd9247ddef8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java @@ -236,7 +236,9 @@ private String getDescriptionString(BSLParserRuleContext ctx) { return strings.toString().strip(); } - private List getParametersStrings(List strings) { + private List getParametersStrings( + List strings) { + List result = new ArrayList<>(); var current = new TempParameterData(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java index f6d638c83e6..99f454b8908 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java @@ -83,10 +83,10 @@ protected boolean checkMethodCall(BSLParser.MethodCallContext ctx) { */ protected String getMessage(BSLParserRuleContext ctx) { - if (ctx instanceof BSLParser.GlobalMethodCallContext) { - return info.getMessage(((BSLParser.GlobalMethodCallContext) ctx).methodName().getText()); - } else if (ctx instanceof BSLParser.MethodCallContext) { - return info.getMessage(((BSLParser.MethodCallContext) ctx).methodName().getText()); + if (ctx instanceof BSLParser.GlobalMethodCallContext globalMethodCallContext) { + return info.getMessage(globalMethodCallContext.methodName().getText()); + } else if (ctx instanceof BSLParser.MethodCallContext methodCallContext) { + return info.getMessage(methodCallContext.methodName().getText()); } else { return info.getMessage(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java index d644b28f050..bb982a47384 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java @@ -34,7 +34,7 @@ public abstract class AbstractMultilingualStringDiagnostic extends AbstractVisit @DiagnosticParameter( type = String.class, - defaultValue = "" + DECLARED_LANGUAGES_DEFAULT + defaultValue = DECLARED_LANGUAGES_DEFAULT ) private String declaredLanguages = DECLARED_LANGUAGES_DEFAULT; protected MultilingualStringAnalyser parser = new MultilingualStringAnalyser(DECLARED_LANGUAGES_DEFAULT); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java index 1bec5886e74..230e856b569 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java @@ -58,7 +58,6 @@ DiagnosticTag.BADPRACTICE, DiagnosticTag.SUSPICIOUS } - ) public class AllFunctionPathMustHaveReturnDiagnostic extends AbstractVisitorDiagnostic { @@ -114,7 +113,7 @@ private void checkAllPathsHaveReturns(BSLParser.FunctionContext ctx) { .map(graph::getEdgeSource) .map(vertex -> nonExplicitReturnNode(vertex, graph)) .flatMap(Optional::stream) - .collect(Collectors.toList()); + .toList(); if (incomingVertices.isEmpty()) { return; @@ -136,12 +135,12 @@ private void checkAllPathsHaveReturns(BSLParser.FunctionContext ctx) { } private Optional nonExplicitReturnNode(CfgVertex v, ControlFlowGraph graph) { - if (v instanceof BasicBlockVertex) { - return checkBasicBlockExitingNode((BasicBlockVertex) v); - } else if (v instanceof LoopVertex) { - return checkLoopExitingNode((LoopVertex) v); - } else if (v instanceof ConditionalVertex) { - return checkElseIfClauseExitingNode((ConditionalVertex) v, graph); + if (v instanceof BasicBlockVertex basicBlock) { + return checkBasicBlockExitingNode(basicBlock); + } else if (v instanceof LoopVertex loop) { + return checkLoopExitingNode(loop); + } else if (v instanceof ConditionalVertex conditional) { + return checkElseIfClauseExitingNode(conditional, graph); } return v.getAst(); @@ -158,14 +157,14 @@ private Optional checkElseIfClauseExitingNode(ConditionalV } var expression = v.getExpression(); - if (expression.getParent() instanceof BSLParser.ElsifBranchContext && !ignoreMissingElseOnExit) { - return Optional.of((BSLParser.ElsifBranchContext) expression.getParent()); + if (expression.getParent() instanceof BSLParser.ElsifBranchContext elsifBranch && !ignoreMissingElseOnExit) { + return Optional.of(elsifBranch.getParent()); } return Optional.empty(); } - private Optional checkBasicBlockExitingNode(BasicBlockVertex block) { + private static Optional checkBasicBlockExitingNode(BasicBlockVertex block) { if (!block.statements().isEmpty()) { var lastStatement = block.statements().get(block.statements().size() - 1); @@ -178,22 +177,19 @@ private Optional checkBasicBlockExitingNode(BasicBlockVert } private Optional checkLoopExitingNode(LoopVertex v) { - if (v instanceof WhileLoopVertex) { - var whileLoop = (WhileLoopVertex) v; - if (isEndlessLoop(whileLoop)) { - return Optional.empty(); - } + if (v instanceof WhileLoopVertex whileLoop && isEndlessLoop(whileLoop)) { + return Optional.empty(); } if (loopsExecutedAtLeastOnce) { - // из цикла в exit может придти только falseBranch или пустое тело цикла + // из цикла в exit может прийти только falseBranch или пустое тело цикла // и то и другое не нужно нам в рамках диагностики return Optional.empty(); } return v.getAst(); } - private boolean isEndlessLoop(WhileLoopVertex whileLoop) { + private static boolean isEndlessLoop(WhileLoopVertex whileLoop) { var expression = whileLoop.getExpression(); return expression.getChildCount() == 1 && expression.member(0).constValue() != null diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java index 00453ac4ecd..adb11f9885c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java @@ -36,7 +36,6 @@ import java.util.List; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Collectors; import static com.github._1c_syntax.bsl.parser.BSLParser.RULE_codeBlock; import static com.github._1c_syntax.bsl.parser.BSLParser.RULE_statement; @@ -56,7 +55,6 @@ ModuleType.FormModule, ModuleType.ManagedApplicationModule } - ) public class CodeAfterAsyncCallDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern ASYNC_METHODS = CaseInsensitivePattern.compile( @@ -90,7 +88,7 @@ private static boolean checkNextBlocks(BSLParser.StatementContext statement) { final var statements = codeBlock.statement().stream() .filter(statementContext -> statementContext != statement && statementContext.getStart().getLine() > asyncLine) - .collect(Collectors.toList()); + .toList(); final var compoundCtx = statements.stream() .findFirst() .map(BSLParser.StatementContext::compoundStatement); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java index 7cab5d3be81..b3cb9999794 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java @@ -87,7 +87,7 @@ public void configure(Map configuration) { threshold = ((Number) configuration.getOrDefault("threshold", threshold)).floatValue(); codeRecognizer = new CodeRecognizer(threshold, new BSLFootprint()); - String excludePrefixesString = (String) configuration.getOrDefault("exclusionPrefixes", ""); + var excludePrefixesString = (String) configuration.getOrDefault("exclusionPrefixes", ""); exclusionPrefixes = Arrays.stream(excludePrefixesString.split(",")) .map(String::trim) .filter(s -> !s.isEmpty()) @@ -138,11 +138,9 @@ private static List initNewGroup(Token comment) { } private boolean isAdjacent(Token comment, List currentGroup) { - - Token last = currentGroup.get(currentGroup.size() - 1); + var last = currentGroup.get(currentGroup.size() - 1); return last.getLine() + 1 == comment.getLine() && onlyEmptyDelimiters(last.getTokenIndex(), comment.getTokenIndex()); - } private boolean onlyEmptyDelimiters(int firstTokenIndex, int lastTokenIndex) { @@ -165,17 +163,17 @@ private boolean isCommentGroupNotMethodDescription(List commentGroup) { return true; } - final Token first = commentGroup.get(0); - final Token last = commentGroup.get(commentGroup.size() - 1); + final var first = commentGroup.get(0); + final var last = commentGroup.get(commentGroup.size() - 1); return methodDescriptions.stream().noneMatch(methodDescription -> methodDescription.contains(first, last)); } private void checkCommentGroup(List commentGroup) { - Token firstComment = commentGroup.get(0); - Token lastComment = commentGroup.get(commentGroup.size() - 1); + var firstComment = commentGroup.get(0); + var lastComment = commentGroup.get(commentGroup.size() - 1); - for (Token comment : commentGroup) { + for (var comment : commentGroup) { if (isTextParsedAsCode(comment.getText())) { diagnosticStorage.addDiagnostic(firstComment, lastComment); return; @@ -184,9 +182,9 @@ private void checkCommentGroup(List commentGroup) { } private boolean isTextParsedAsCode(String text) { - String uncommented = uncomment(text); + var uncommented = uncomment(text); - for (String prefix : exclusionPrefixes) { + for (var prefix : exclusionPrefixes) { if (uncommented.startsWith(prefix)) { return false; } @@ -195,16 +193,16 @@ private boolean isTextParsedAsCode(String text) { return false; } - BSLTokenizer tokenizer = new BSLTokenizer(uncommented); - final List tokens = tokenizer.getTokens(); + var tokenizer = new BSLTokenizer(uncommented); + final var tokens = tokenizer.getTokens(); // Если меньше двух токенов нет смысла анализировать - это код if (tokens.size() >= MINIMAL_TOKEN_COUNT) { - List tokenTypes = tokens.stream() + var tokenTypes = tokens.stream() .map(Token::getType) .filter(t -> t != BSLParser.WHITE_SPACE) - .collect(Collectors.toList()); + .toList(); // Если два идентификатора идут подряд - это не код for (int i = 0; i < tokenTypes.size() - 1; i++) { @@ -229,10 +227,10 @@ public List getQuickFixes( List diagnostics, CodeActionParams params, DocumentContext documentContext ) { - List textEdits = diagnostics.stream() + var textEdits = diagnostics.stream() .map(Diagnostic::getRange) .map(range -> new TextEdit(range, "")) - .collect(Collectors.toList()); + .toList(); return CodeActionProvider.createCodeActions( textEdits, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index 0435a6c5f57..cc307657ca0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -31,6 +31,7 @@ import com.github._1c_syntax.bsl.parser.BSLParserRuleContext; import com.github._1c_syntax.utils.CaseInsensitivePattern; import edu.umd.cs.findbugs.annotations.Nullable; +import lombok.Getter; import lombok.ToString; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.RuleContext; @@ -119,10 +120,9 @@ private static String getVariableNameFromCallStatementContext(BSLParser.CallStat private static String getVariableNameFromModifierContext(BSLParser.ModifierContext modifier) { ParserRuleContext parent = modifier.getParent(); - if (parent instanceof BSLParser.ComplexIdentifierContext) { - return getComplexPathName(((BSLParser.ComplexIdentifierContext) parent), modifier); - } else if (parent instanceof BSLParser.CallStatementContext) { - BSLParser.CallStatementContext parentCall = (BSLParser.CallStatementContext) parent; + if (parent instanceof BSLParser.ComplexIdentifierContext complexIdentifierContext) { + return getComplexPathName(complexIdentifierContext, modifier); + } else if (parent instanceof BSLParser.CallStatementContext parentCall) { return parentCall.modifier().stream() .takeWhile(e -> !e.equals(modifier)) @@ -235,11 +235,10 @@ public ParseTree visitAccessCall(BSLParser.AccessCallContext ctx) { String variableName = null; BSLParserRuleContext errorContext = null; BSLParserRuleContext parent = ctx.getParent(); - if (parent instanceof BSLParser.CallStatementContext) { + if (parent instanceof BSLParser.CallStatementContext callStatementContext) { errorContext = parent; - variableName = getVariableNameFromCallStatementContext((BSLParser.CallStatementContext) parent); - } else if (parent instanceof BSLParser.ModifierContext) { - BSLParser.ModifierContext callModifier = (BSLParser.ModifierContext) parent; + variableName = getVariableNameFromCallStatementContext(callStatementContext); + } else if (parent instanceof BSLParser.ModifierContext callModifier) { errorContext = callModifier.getParent(); variableName = getVariableNameFromModifierContext(callModifier); } @@ -320,6 +319,7 @@ public void addDeclaration(ParseTree firstDeclaration) { } private static class Scope { + @Getter private final String name; private final HashMap variables = new HashMap<>(); @@ -341,10 +341,6 @@ public void addVariable(VariableDefinition variableDefinition, boolean typesMerg return key; }); } - - public String getName() { - return name; - } } private static class VariableScope extends ArrayDeque { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 41f12e4ed29..16d08ab5a41 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -60,10 +60,10 @@ DiagnosticTag.SUSPICIOUS, DiagnosticTag.BADPRACTICE } - ) public class DuplicatedInsertionIntoCollectionDiagnostic extends AbstractVisitorDiagnostic { - private static final Pattern INSERT_ADD_METHOD_PATTERN = CaseInsensitivePattern.compile("вставить|добавить|insert|add"); + private static final Pattern INSERT_ADD_METHOD_PATTERN = + CaseInsensitivePattern.compile("вставить|добавить|insert|add"); private static final Pattern INSERT_METHOD_PATTERN = CaseInsensitivePattern.compile("вставить|insert"); private static final Pattern IGNORED_BSL_VALUES_PATTERN = CaseInsensitivePattern.compile( "неопределено|undefined|0|символы\\.[\\wа-яё]+|chars\\.[\\wа-яё]+"); @@ -106,7 +106,7 @@ private static class GroupingData { public void configure(Map configuration) { super.configure(configuration); - if (!isAllowedMethodADD){ + if (!isAllowedMethodADD) { methodPattern = INSERT_METHOD_PATTERN; } } @@ -114,7 +114,7 @@ public void configure(Map configuration) { @Override public ParseTree visitCodeBlock(BSLParser.CodeBlockContext codeBlock) { this.codeBlock = codeBlock; - final List possibleDuplicateStatements = getPossibleDuplicates(); + final var possibleDuplicateStatements = getPossibleDuplicates(); if (!possibleDuplicateStatements.isEmpty()) { blockRange = Ranges.create(codeBlock); @@ -135,11 +135,11 @@ private List getPossibleDuplicates() { .collect(Collectors.toList()); } - private @Nullable - GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLParser.AccessCallContext accessCallContext) { + private @Nullable GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, + BSLParser.AccessCallContext accessCallContext) { final var methodCallContext = accessCallContext.methodCall(); final var callParams = methodCallContext.doCall().callParamList().callParam(); - final CallParamContext firstParamContext = callParams.get(0); + final var firstParamContext = callParams.get(0); if (firstParamContext.getChildCount() == 0) { return null; } @@ -153,7 +153,7 @@ GroupingData groupingCalls(BSLParser.CallStatementContext callStatement, BSLPars } final TerminalNode identifierContext; final String parens; - if (callStatement.IDENTIFIER() != null){ + if (callStatement.IDENTIFIER() != null) { identifierContext = callStatement.IDENTIFIER(); parens = ""; } else { @@ -204,7 +204,6 @@ private Stream> explorePossibleDuplicateStatements(List excludeValidChanges(List duplicates) { - var result = new ArrayList(); for (var i = 0; i < duplicates.size(); i++) { if (!excludeValidElements(duplicates, i, result)) { @@ -257,8 +256,8 @@ private boolean usedIdentifiers(String expression, GroupingData groupingData) { } return getAllInnerIdentifiersWithDot(groupingData.firstParamContext).stream() .anyMatch(identifierWithDot -> - startWithIgnoreCase(identifierWithDot, expressionWithDot) - || startWithIgnoreCase(expressionWithDot, identifierWithDot) + startWithIgnoreCase(identifierWithDot, expressionWithDot) + || startWithIgnoreCase(expressionWithDot, identifierWithDot) ); } @@ -352,7 +351,7 @@ private List getAllInnerIdentifiersWithDot(CallParamContext param) { final var identifiers = Trees.findAllRuleNodes(param, BSLParser.RULE_complexIdentifier).stream() .map(BSLParser.ComplexIdentifierContext.class::cast) .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) - .collect(Collectors.toList()); + .toList(); final var reducedIdentifiers = new ArrayList(); for (BSLParser.ComplexIdentifierContext identifier : identifiers) { final List modifiers = identifier.modifier(); @@ -361,9 +360,9 @@ private List getAllInnerIdentifiersWithDot(CallParamContext param) { reducedIdentifiers.add(fullIdentifier); var reducedIdentifier = firstIdentifier; - for (BSLParser.ModifierContext modifier : modifiers) { - var modfifier = modifier.getText(); - reducedIdentifier = reducedIdentifier.concat(".").concat(modfifier); + for (var modifier : modifiers) { + var text = modifier.getText(); + reducedIdentifier = reducedIdentifier.concat(".").concat(text); reducedIdentifiers.add(reducedIdentifier); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java index 9bad1d53d07..a677faf1f75 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java @@ -32,10 +32,7 @@ import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; -import org.antlr.v4.runtime.tree.Tree; -import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; @DiagnosticMetadata( @@ -84,10 +81,10 @@ public ParseTree visitCodeBlock(BSLParser.CodeBlockContext ctx) { int lineOfStop = ctx.getStop().getLine(); - List list = Trees.getChildren(ctx.getParent()).stream() + var list = Trees.getChildren(ctx.getParent()).stream() .filter(TerminalNode.class::isInstance) .filter(node -> ((TerminalNode) node).getSymbol().getLine() == lineOfStop) - .collect(Collectors.toList()); + .toList(); if (!list.isEmpty()) { TerminalNode first = (TerminalNode) list.get(0); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java index 894b1395d18..e502a4ca206 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java @@ -22,7 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -34,8 +33,6 @@ import org.apache.commons.collections4.map.CaseInsensitiveMap; import java.util.Collection; -import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -47,28 +44,26 @@ tags = { DiagnosticTag.DESIGN } - ) public class FunctionOutParameterDiagnostic extends AbstractVisitorDiagnostic { @Override public ParseTree visitFunction(BSLParser.FunctionContext ctx) { - List parameters = documentContext + var parameters = documentContext .getSymbolTree() .getMethodSymbol(ctx.getParent()) .stream() .map(MethodSymbol::getParameters) .flatMap(Collection::stream) .filter(param -> !param.isByValue()) - .collect(Collectors.toList()); + .toList(); if (parameters.isEmpty()) { return ctx; } - Map lvalues = Trees - .findAllRuleNodes(ctx.subCodeBlock(), BSLParser.RULE_lValue) + var lvalues = Trees.findAllRuleNodes(ctx.subCodeBlock(), BSLParser.RULE_lValue) .stream() .collect( Collectors.toMap( diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java index 451fedb93d9..aeb97826cce 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java @@ -72,7 +72,7 @@ public ParseTree visitIfStatement(BSLParser.IfStatementContext ctx) { .collect(Collectors.toCollection(() -> codeBlocks)); - BSLParser.ElseBranchContext elseBranch = ctx.elseBranch(); + var elseBranch = ctx.elseBranch(); if (elseBranch != null) { codeBlocks.add(elseBranch.codeBlock()); } @@ -90,23 +90,21 @@ private void findDuplicatedCodeBlock(List codeBlockC } private void checkCodeBlock(List codeBlockContexts, int i) { - BSLParser.CodeBlockContext currentCodeBlock = codeBlockContexts.get(i); + var currentCodeBlock = codeBlockContexts.get(i); - List identicalCodeBlocks = codeBlockContexts.stream() + var identicalCodeBlocks = codeBlockContexts.stream() .skip(i) .filter(codeBlockContext -> !codeBlockContext.equals(currentCodeBlock) && !(currentCodeBlock.children == null && codeBlockContext.children == null) && DiagnosticHelper.equalNodes(currentCodeBlock, codeBlockContext)) - .collect(Collectors.toList()); + .toList(); if (identicalCodeBlocks.isEmpty()) { return; } - identicalCodeBlocks.stream() - .collect(Collectors.toCollection(() -> checkedBlocks)); - + identicalCodeBlocks.stream().collect(Collectors.toCollection(() -> checkedBlocks)); List relatedInformation = new ArrayList<>(); relatedInformation.add(RelatedInformation.create( diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java index 54449cfcfd7..3cff8eb3ebc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java @@ -85,22 +85,20 @@ private void findDuplicatedExpression(List expressi } private void checkExpression(List expressionContexts, int i) { - BSLParser.ExpressionContext currentExpression = expressionContexts.get(i); + var currentExpression = expressionContexts.get(i); - List identicalExpressions = expressionContexts.stream() + var identicalExpressions = expressionContexts.stream() .skip(i) .filter(expressionContext -> !expressionContext.equals(currentExpression) && DiagnosticHelper.equalNodes(currentExpression, expressionContext)) - .collect(Collectors.toList()); + .toList(); if (identicalExpressions.isEmpty()) { return; } - identicalExpressions.stream() - .collect(Collectors.toCollection(() -> checkedConditions)); - + identicalExpressions.stream().collect(Collectors.toCollection(() -> checkedConditions)); List relatedInformation = new ArrayList<>(); relatedInformation.add(RelatedInformation.create( @@ -121,6 +119,4 @@ private void checkExpression(List expressionContext diagnosticStorage.addDiagnostic(currentExpression, relatedInformation); } - } - diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java index 855d0f05847..283e1628c7a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java @@ -71,7 +71,7 @@ public class IncorrectLineBreakDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_LIST_FOR_CHECK_START + defaultValue = DEFAULT_LIST_FOR_CHECK_START ) private Pattern listOfIncorrectFirstSymbol = createPatternIncorrectStartLine(DEFAULT_LIST_FOR_CHECK_START); @@ -83,7 +83,7 @@ public class IncorrectLineBreakDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_LIST_FOR_CHECK_END + defaultValue = DEFAULT_LIST_FOR_CHECK_END ) private Pattern listOfIncorrectLastSymbol = createPatternIncorrectEndLine(DEFAULT_LIST_FOR_CHECK_END); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java index c55f5ef4ace..451ace6cfd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java @@ -86,7 +86,7 @@ public class LatinAndCyrillicSymbolInWordDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_EXCLUDE_WORDS + defaultValue = DEFAULT_EXCLUDE_WORDS ) private Pattern excludeWords = createExcludeWordPattern(DEFAULT_EXCLUDE_WORDS); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index cf8edd376fd..815b93ebe21 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -69,7 +69,7 @@ public class MagicDateDiagnostic extends AbstractVisitorDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_AUTHORIZED_DATES + defaultValue = DEFAULT_AUTHORIZED_DATES ) private final Set authorizedDates = new HashSet<>(Arrays.asList(DEFAULT_AUTHORIZED_DATES.split(","))); @@ -105,17 +105,17 @@ public ParseTree visitConstValue(BSLParser.ConstValueContext ctx) { return ctx; } - private void checkExclAddDiagnostic(BSLParserRuleContext ctx){ + private void checkExclAddDiagnostic(BSLParserRuleContext ctx) { String checked = ctx.getText(); if (checked != null && !isExcluded(checked)) { ParserRuleContext expression; - if (ctx instanceof BSLParser.CallParamListContext){ + if (ctx instanceof BSLParser.CallParamListContext) { expression = ctx.getParent().getParent().getParent().getParent().getParent(); } else { expression = ctx.getParent().getParent(); } - if (expression instanceof BSLParser.ExpressionContext - && (!isAssignExpression((BSLParser.ExpressionContext) expression))) { + if (expression instanceof BSLParser.ExpressionContext expressionContext + && (!isAssignExpression(expressionContext))) { diagnosticStorage.addDiagnostic(ctx.stop, info.getMessage(checked)); } } @@ -129,5 +129,4 @@ private boolean isExcluded(String sIn) { private static boolean isAssignExpression(BSLParser.ExpressionContext expression) { return (expression.getChildCount() <= 1); } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java index fe054f2e3cb..1718d8795af 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java @@ -52,7 +52,7 @@ public class MagicNumberDiagnostic extends AbstractVisitorDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_AUTHORIZED_NUMBERS + defaultValue = DEFAULT_AUTHORIZED_NUMBERS ) private final List authorizedNumbers = new ArrayList<>(Arrays.asList(DEFAULT_AUTHORIZED_NUMBERS.split(","))); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java index d8daff98504..c522fb3a041 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java @@ -85,19 +85,19 @@ public class MissingSpaceDiagnostic extends AbstractDiagnostic implements QuickF @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_LIST_FOR_CHECK_LEFT + defaultValue = DEFAULT_LIST_FOR_CHECK_LEFT ) private String listForCheckLeft = DEFAULT_LIST_FOR_CHECK_LEFT; @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_LIST_FOR_CHECK_RIGHT + defaultValue = DEFAULT_LIST_FOR_CHECK_RIGHT ) private String listForCheckRight = DEFAULT_LIST_FOR_CHECK_RIGHT; @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_LIST_FOR_CHECK_LEFT_AND_RIGHT + defaultValue = DEFAULT_LIST_FOR_CHECK_LEFT_AND_RIGHT ) private String listForCheckLeftAndRight = DEFAULT_LIST_FOR_CHECK_LEFT_AND_RIGHT; @@ -169,9 +169,7 @@ public void check() { } addDiagnosticLeftRight(token, noSpaceLeft, noSpaceRight); } - } - } @Override @@ -196,21 +194,17 @@ public List getQuickFixes( String diagnosticMessage = diagnostic.getMessage().toLowerCase(Locale.ENGLISH); // TODO @YanSergey. Переделать после выполнения issue #371 'Доработки ядра. Хранение информации для квикфиксов' - boolean missedLeft = diagnosticMessage.contains("слева") || diagnosticMessage.contains("left"); - boolean missedRight = diagnosticMessage.contains("справа") || diagnosticMessage.contains("right"); + var missedLeft = diagnosticMessage.contains("слева") || diagnosticMessage.contains("left"); + var missedRight = diagnosticMessage.contains("справа") || diagnosticMessage.contains("right"); var range = diagnostic.getRange(); if (missedLeft) { - var textEdit = new TextEdit( - new Range(range.getStart(), range.getStart()), - " "); + var textEdit = new TextEdit(new Range(range.getStart(), range.getStart()), " "); textEdits.add(textEdit); } if (missedRight) { - var textEdit = new TextEdit( - new Range(range.getEnd(), range.getEnd()), - " "); + var textEdit = new TextEdit(new Range(range.getEnd(), range.getEnd()), " "); textEdits.add(textEdit); } }); @@ -243,7 +237,6 @@ private void addDiagnosticLeftRight(Token token, boolean noSpaceLeft, boolean no } private static boolean noSpaceLeft(List tokens, Token t) { - var previousToken = tokens.get(t.getTokenIndex() - 1); return previousToken.getType() != BSLParser.LPAREN && !StringUtils.isWhitespace(previousToken.getText()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java index 834b7548515..2894bd97cdf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java @@ -120,15 +120,15 @@ private boolean foundDeleteFile(BSLParser.CodeBlockContext codeBlockContext, Str .stream() .map(BSLParserRuleContext.class::cast) .filter((BSLParserRuleContext node) -> node.getStart().getLine() > filterLine) - .collect(Collectors.toList()); + .toList(); for (var node : listCallStatements) { String fullCallMethod; BSLParser.DoCallContext doCallContext; - if (node instanceof BSLParser.GlobalMethodCallContext) { - fullCallMethod = ((BSLParser.GlobalMethodCallContext) node).methodName().getText(); - doCallContext = ((BSLParser.GlobalMethodCallContext) node).doCall(); + if (node instanceof BSLParser.GlobalMethodCallContext globalMethodCallContext) { + fullCallMethod = globalMethodCallContext.methodName().getText(); + doCallContext = globalMethodCallContext.doCall(); } else { fullCallMethod = getFullMethodName((BSLParser.AccessCallContext) node); doCallContext = ((BSLParser.AccessCallContext) node).methodCall().doCall(); @@ -136,7 +136,7 @@ private boolean foundDeleteFile(BSLParser.CodeBlockContext codeBlockContext, Str if (doCallContext != null) { var matcher = searchDeleteFileMethod.matcher(fullCallMethod); - if (matcher.matches() && fullCallMethod.length() > 0 + if (matcher.matches() && !fullCallMethod.isEmpty() && foundVariableInCallParams(doCallContext, variableName)) { result = true; break; @@ -191,11 +191,9 @@ private static String getFullMethodName(BSLParser.AccessCallContext ctx) { var prefix = ""; List modifiers; - if (parent instanceof BSLParser.CallStatementContext) { + if (parent instanceof BSLParser.CallStatementContext callStatement) { - var callStatement = (BSLParser.CallStatementContext) parent; - - modifiers =callStatement.modifier(); + modifiers = callStatement.modifier(); if (callStatement.globalMethodCall() != null) { prefix = callStatement.globalMethodCall().methodName().IDENTIFIER().getText(); } else { @@ -203,9 +201,8 @@ private static String getFullMethodName(BSLParser.AccessCallContext ctx) { } } else if (parent instanceof BSLParser.ModifierContext - && parent.getParent() instanceof BSLParser.ComplexIdentifierContext) { + && parent.getParent() instanceof BSLParser.ComplexIdentifierContext root) { - var root = (BSLParser.ComplexIdentifierContext) parent.getParent(); modifiers = root.modifier(); var terminalNode = root.IDENTIFIER(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 0029f2548c9..b220a1b35ea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -188,12 +188,12 @@ private static Collection getInnerDataSource( var joinDataSources = dataSourceContext.joinPart().stream() .map(SDBLParser.JoinPartContext::dataSource) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); result.addAll(joinDataSources); var dataSourcesFromJoins = joinDataSources.stream() .flatMap(dataSourceContext1 -> getInnerDataSource(dataSourceContext1).stream()) - .collect(Collectors.toList()); + .toList(); result.addAll(dataSourcesFromJoins); return result; @@ -212,7 +212,6 @@ private static String getTableNameOrAlias(SDBLParser.DataSourceContext dataSourc .map(tableContext -> (ParseTree) tableContext.parameter())) .map(ParseTree::getText) .orElse(""); - } private List getTabularSectionNames(SDBLParser.DataSourceContext dataSourceContext) { @@ -287,7 +286,7 @@ private boolean isOveruse(SDBLParser.ColumnContext ctx) { var children = extractFirstMetadataTypeName(ctx); var refIndex = findLastRef(children); - final int childCount = children.size(); + final var childCount = children.size(); final var lastIndex = childCount - 1; if (refIndex == lastIndex) { var penultimateIdentifierName = children.get(lastIndex - LAST_INDEX_OF_TABLE_DOT_REF).getText(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java index 278f49e2930..d7a1ede5933 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java @@ -84,7 +84,8 @@ private static Stream> getParametersByVa .map(parameterDefinition -> Pair.of(methodSymbol, parameterDefinition)); } - private static Stream getVariableByParameter(MethodSymbol method, ParameterDefinition parameterDefinition) { + private static Stream getVariableByParameter(MethodSymbol method, + ParameterDefinition parameterDefinition) { return method.getChildren().stream() // в будущем могут появиться и другие символы, подчиненные методам .filter(sourceDefinedSymbol -> sourceDefinedSymbol.getSymbolKind() == SymbolKind.Variable) @@ -181,7 +182,7 @@ private void fireIssue(VariableSymbol variable, Reference nodeForIssue, List(); resultRefs.add(RelatedInformation.create( documentContext.getUri(), diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java index 75719ee0f7e..a1e1198f04b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java @@ -55,7 +55,7 @@ public class SetPermissionsForNewObjectsDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + NAMES_FULL_ACCESS_ROLE + defaultValue = NAMES_FULL_ACCESS_ROLE ) private Set namesFullAccessRole = getSetFromString(NAMES_FULL_ACCESS_ROLE); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java index b33caa412fb..e7341928a72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java @@ -72,7 +72,7 @@ public class SpaceAtStartCommentDiagnostic extends AbstractDiagnostic implements @DiagnosticParameter( type = String.class, - defaultValue = "" + DEFAULT_COMMENTS_ANNOTATION + defaultValue = DEFAULT_COMMENTS_ANNOTATION ) private Pattern commentsAnnotation = DiagnosticHelper.createPatternFromString(DEFAULT_COMMENTS_ANNOTATION); @@ -116,7 +116,7 @@ public List getQuickFixes( diagnostics.forEach((Diagnostic diagnostic) -> { var range = diagnostic.getRange(); - String currentText = documentContext.getText(range); + var currentText = documentContext.getText(range); var textEdit = new TextEdit( range, diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 0faad5af051..99e6b35144b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -58,13 +58,13 @@ DiagnosticTag.STANDARD } ) - @RequiredArgsConstructor public class TransferringParametersBetweenClientAndServerDiagnostic extends AbstractDiagnostic { private static final Set SERVER_COMPILER_DIRECTIVE_KINDS = EnumSet.of( CompilerDirectiveKind.AT_SERVER, CompilerDirectiveKind.AT_SERVER_NO_CONTEXT ); + private final ReferenceIndex referenceIndex; // Не учитываются вложенные вызовы. Только прямые - клиентский метод вызывает серверный метод напрямую @@ -86,7 +86,7 @@ private Stream calcIssues() { } private Optional getParamReference(MethodSymbol method) { - List parameterDefinitions = calcNotAssignedParams(method); + var parameterDefinitions = calcNotAssignedParams(method); if (parameterDefinitions.isEmpty()) { return Optional.empty(); } @@ -99,7 +99,7 @@ private Optional getParamReference(MethodSymbol method) { } private List calcNotAssignedParams(MethodSymbol method) { - List parameterDefinitions = getMethodParamsByRef(method); + var parameterDefinitions = getMethodParamsByRef(method); if (parameterDefinitions.isEmpty()) { return Collections.emptyList(); } @@ -135,7 +135,7 @@ private List getRefsFromClientCalls(MethodSymbol method) { // в будущем могут появиться и другие виды ссылок .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE) .filter(TransferringParametersBetweenClientAndServerDiagnostic::isClientCall) - .collect(Collectors.toUnmodifiableList()); + .toList(); } private static boolean isClientCall(Reference ref) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java index d0466095f57..b04114a518e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java @@ -37,12 +37,10 @@ import org.antlr.v4.runtime.tree.Trees; import java.util.EnumSet; -import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; -import java.util.stream.Collectors; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -119,11 +117,11 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { return ctx; } - List collect = Trees.findAllRuleNodes(ctx, BSLParser.RULE_globalMethodCall) + var collect = Trees.findAllRuleNodes(ctx, BSLParser.RULE_globalMethodCall) .stream() .map(parseTree -> ((BSLParser.GlobalMethodCallContext) parseTree).methodName().getText().toLowerCase(Locale.ENGLISH)) - .collect(Collectors.toList()); + .toList(); documentContext.getSymbolTree().getMethods() .stream() diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index 7b0b291e81b..a3d6a21abcc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -30,12 +30,9 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.runtime.tree.TerminalNode; -import java.util.List; import java.util.Locale; import java.util.Objects; -import java.util.Optional; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -63,14 +60,14 @@ public ParseTree visitSubCodeBlock(BSLParser.SubCodeBlockContext ctx) { return ctx; } - List params = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) + var params = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_param) .stream() .map(BSLParser.ParamContext.class::cast) .map(BSLParser.ParamContext::IDENTIFIER) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); - List paramsNames = params + var paramsNames = params .stream() .map(ind -> ind.getText().toLowerCase(Locale.getDefault())) .collect(Collectors.toList()); @@ -93,15 +90,11 @@ public ParseTree visitSubCodeBlock(BSLParser.SubCodeBlockContext ctx) { } private static boolean itsHandler(BSLParser.SubCodeBlockContext ctx) { - - Optional subNames = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_subName).stream().findFirst(); - - String subName = ""; + var subNames = Trees.findAllRuleNodes(ctx.getParent(), BSLParser.RULE_subName).stream().findFirst(); + var subName = ""; if (subNames.isPresent()) { subName = subNames.get().getText(); } - return HANDLER_PATTERN.matcher(subName).matches(); } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java index e0d6a4e3af3..e5f27ace558 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java @@ -29,7 +29,6 @@ import org.antlr.v4.runtime.Token; import java.util.Map; -import java.util.regex.Matcher; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -49,7 +48,7 @@ public class UsingServiceTagDiagnostic extends AbstractDiagnostic { @DiagnosticParameter( type = String.class, - defaultValue = "" + SERVICE_TAGS_DEFAULT + defaultValue = SERVICE_TAGS_DEFAULT ) private String serviceTags = SERVICE_TAGS_DEFAULT; private Pattern pattern = getPatternSearch(SERVICE_TAGS_DEFAULT); @@ -71,7 +70,7 @@ public void check() { documentContext.getComments() .parallelStream() .forEach((Token token) -> { - Matcher matcher = pattern.matcher(token.getText()); + var matcher = pattern.matcher(token.getText()); if (!matcher.find()) { return; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java index c7858842e24..2ee8488594a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java @@ -31,7 +31,6 @@ import com.github._1c_syntax.utils.CaseInsensitivePattern; import java.util.regex.Pattern; -import java.util.stream.Collectors; @DiagnosticMetadata( type = DiagnosticType.ERROR, @@ -41,7 +40,6 @@ tags = { DiagnosticTag.STANDARD } - ) public class WrongUseOfRollbackTransactionMethodDiagnostic extends AbstractFindMethodDiagnostic { @@ -65,7 +63,7 @@ protected boolean checkGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { var methodsList = Trees.findAllRuleNodes(parentNode, BSLParser.RULE_globalMethodCall).stream() .map(BSLParser.GlobalMethodCallContext.class::cast) .map(e -> e.methodName().getText()) - .collect(Collectors.toList()); + .toList(); if (MESSAGE_PATTERN.matcher(ctx.methodName().getText()).matches()) { return methodsList.indexOf(ctx.methodName().getText()) != 0; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java index 66377600ec0..3663d0453b6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java @@ -44,7 +44,7 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) { return bean; } - BSLDiagnostic diagnostic = (BSLDiagnostic) bean; + var diagnostic = (BSLDiagnostic) bean; var info = diagnosticInfos.get(diagnostic.getClass()); diagnostic.setInfo(info); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java index 0fd0eef20f8..d33f1d93bbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics.metadata; import com.github._1c_syntax.bsl.support.CompatibilityMode; +import lombok.Getter; public enum DiagnosticCompatibilityMode { UNDEFINED(0, 0), @@ -48,16 +49,15 @@ public enum DiagnosticCompatibilityMode { COMPATIBILITY_MODE_8_3_18(3, 18), COMPATIBILITY_MODE_8_3_19(3, 19), COMPATIBILITY_MODE_8_3_20(3, 20), - COMPATIBILITY_MODE_8_3_21(3, 21) - ; + COMPATIBILITY_MODE_8_3_21(3, 21), + COMPATIBILITY_MODE_8_3_22(3, 22), + COMPATIBILITY_MODE_8_3_23(3, 23), + COMPATIBILITY_MODE_8_3_24(3, 24); + @Getter private final CompatibilityMode compatibilityMode; DiagnosticCompatibilityMode(int minor, int version) { this.compatibilityMode = new CompatibilityMode(minor, version); } - - public CompatibilityMode getCompatibilityMode() { - return compatibilityMode; - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index 85b36f0d3f5..7c0d2c2aff7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -27,11 +27,11 @@ import com.github._1c_syntax.bsl.languageserver.utils.Resources; import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.utils.StringInterner; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import java.io.IOException; -import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; @@ -49,6 +49,7 @@ public class DiagnosticInfo { = createSeverityToLSPSeverityMap(); private static final Map diagnosticTagMap = createDiagnosticTagMap(); + @Getter private final Class diagnosticClass; private final LanguageServerConfiguration configuration; private final StringInterner stringInterner; @@ -71,17 +72,13 @@ public DiagnosticInfo( diagnosticParameters = DiagnosticParameterInfo.createDiagnosticParameters(this); } - public Class getDiagnosticClass() { - return diagnosticClass; - } - public DiagnosticCode getCode() { return diagnosticCode; } public String getDiagnosticCodeDescriptionHref() { var language = configuration.getLanguage(); - boolean useDevSite = configuration.isUseDevSite(); + var useDevSite = configuration.isUseDevSite(); var siteRoot = configuration.getSiteRoot(); var devSuffix = useDevSite ? "/dev" : ""; @@ -102,10 +99,10 @@ public String getName() { } public String getDescription() { - String langCode = configuration.getLanguage().getLanguageCode(); + var langCode = configuration.getLanguage().getLanguageCode(); - String resourceName = langCode + "/" + diagnosticCode.getStringValue() + ".md"; - InputStream descriptionStream = diagnosticClass.getResourceAsStream(resourceName); + var resourceName = langCode + "/" + diagnosticCode.getStringValue() + ".md"; + var descriptionStream = diagnosticClass.getResourceAsStream(resourceName); if (descriptionStream == null) { LOGGER.error("Can't find resource {}", resourceName); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java index 5b6f158346f..ffd1b2f76ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java @@ -21,11 +21,17 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics.metadata; +import lombok.Getter; + import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +/** + * Описание параметров диагностики + */ +@Getter public final class DiagnosticParameterInfo { private final Class type; @@ -34,29 +40,11 @@ public final class DiagnosticParameterInfo { private final Object defaultValue; private DiagnosticParameterInfo(Field field, String description) { - DiagnosticParameter diagnosticParameter = field.getAnnotation(DiagnosticParameter.class); this.type = diagnosticParameter.type(); this.name = field.getName(); this.description = description; this.defaultValue = castDiagnosticParameterValue(diagnosticParameter.defaultValue()); - - } - - public Class getType() { - return type; - } - - public String getName() { - return name; - } - - public String getDescription() { - return this.description; - } - - public Object getDefaultValue() { - return this.defaultValue; } private Object castDiagnosticParameterValue(String valueToCast) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java index 425889f655f..471ed773fb7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java @@ -21,6 +21,11 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics.metadata; +import lombok.Getter; + +/** + * Варианты тегов диагностик + */ public enum DiagnosticTag { STANDARD("Нарушение стандартов 1С"), LOCKINOS("Не будет работать в другой ОС"), @@ -37,13 +42,11 @@ public enum DiagnosticTag { ERROR("Ошибочная конструкция"), LOCALIZE("Проблемы локализации"); + @Getter private final String description; DiagnosticTag(String descriptionRu) { this.description = descriptionRu; } - public String getDescription() { - return description; - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java index d688e6cc1bf..d8f5c44b154 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java @@ -43,7 +43,7 @@ public class CodeBlockFoldingRangeSupplier implements FoldingRangeSupplier { @Override public List getFoldingRanges(DocumentContext documentContext) { - CodeBlockVisitor codeBlockVisitor = new CodeBlockVisitor(); + var codeBlockVisitor = new CodeBlockVisitor(); codeBlockVisitor.visitFile(documentContext.getAst()); return codeBlockVisitor.getRegionRanges(); } @@ -104,7 +104,7 @@ private void addRegionRange(@Nullable TerminalNode start, @Nullable TerminalNode int stopLine = stop.getSymbol().getLine(); if (stopLine > startLine) { - FoldingRange foldingRange = new FoldingRange(startLine - 1, stopLine - 1); + var foldingRange = new FoldingRange(startLine - 1, stopLine - 1); foldingRange.setKind(FoldingRangeKind.Region); regionRanges.add(foldingRange); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index f070af2e03d..d47e73023be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -197,11 +197,9 @@ private boolean showDefaultValues() { private static boolean isRightMethod(BSLParserRuleContext doCallParent, Reference reference) { var selectionRange = reference.getSelectionRange(); - if (doCallParent instanceof BSLParser.MethodCallContext) { - var methodCallContext = (BSLParser.MethodCallContext) doCallParent; + if (doCallParent instanceof BSLParser.MethodCallContext methodCallContext) { return selectionRange.equals(Ranges.create(methodCallContext.methodName())); - } else if (doCallParent instanceof BSLParser.GlobalMethodCallContext) { - var globalMethodCallContext = (BSLParser.GlobalMethodCallContext) doCallParent; + } else if (doCallParent instanceof BSLParser.GlobalMethodCallContext globalMethodCallContext) { return selectionRange.equals(Ranges.create(globalMethodCallContext.methodName())); } else { return false; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java index b0fc5f5daa6..2be3cd77170 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java @@ -75,7 +75,7 @@ public class SelectionRangeProvider { * Получение данных о {@link SelectionRange} по позиции в документе. * * @param documentContext контекст документа. - * @param params параметры вызова. + * @param params параметры вызова. * @return список найденных диапазонов. */ public List getSelectionRange(DocumentContext documentContext, SelectionRangeParams params) { @@ -129,8 +129,8 @@ private static Optional nextParentWithDifferentRange(ParseTree ctx) { } private static BSLParserRuleContext getParentContext(ParseTree ctx) { - if (ctx instanceof BSLParser.StatementContext) { - return getStatementParent((BSLParser.StatementContext) ctx); + if (ctx instanceof BSLParser.StatementContext statementContext) { + return getStatementParent(statementContext); } return getDefaultParent(ctx); @@ -138,7 +138,7 @@ private static BSLParserRuleContext getParentContext(ParseTree ctx) { @Nullable private static BSLParserRuleContext getDefaultParent(ParseTree ctx) { - return (BSLParserRuleContext) ctx.getParent(); + return (BSLParserRuleContext) ctx.getParent(); } private static BSLParserRuleContext getStatementParent(BSLParser.StatementContext statement) { @@ -201,13 +201,11 @@ private static BSLParserRuleContext getStatementParent(BSLParser.StatementContex } private static boolean ifBranchMatchesIfStatement(BSLParserRuleContext ctx) { - if (!(ctx instanceof BSLParser.IfBranchContext)) { + if (!(ctx instanceof BSLParser.IfBranchContext ifBranch)) { return false; } - var ifBranch = (BSLParser.IfBranchContext) ctx; var ifStatement = (BSLParser.IfStatementContext) ifBranch.getParent(); return ifStatement.elseBranch() == null && ifStatement.elsifBranch().isEmpty(); } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java index 84000bc5c49..598ef476300 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java @@ -55,7 +55,7 @@ public class SymbolProvider { private final ServerContext context; - private static final Set supportedVariableKinds = EnumSet.of( + private static final Set SUPPORTED_VARIABLE_KINDS = EnumSet.of( VariableKind.MODULE, VariableKind.GLOBAL ); @@ -87,14 +87,11 @@ private static Stream> getSymbolPairs(DocumentCon private static boolean isSupported(Symbol symbol) { var symbolKind = symbol.getSymbolKind(); - switch (symbolKind) { - case Method: - return true; - case Variable: - return supportedVariableKinds.contains(((VariableSymbol) symbol).getKind()); - default: - return false; - } + return switch (symbolKind) { + case Method -> true; + case Variable -> SUPPORTED_VARIABLE_KINDS.contains(((VariableSymbol) symbol).getKind()); + default -> false; + }; } private static WorkspaceSymbol createWorkspaceSymbol(Pair symbolPair) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java index d85b8f92ef8..ca8c494d4a6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java @@ -41,7 +41,7 @@ public class Symbol implements Comparable { private static GenericInterner interner = new GenericInterner<>(); /** - * Cсылка на объект метаданных в формате ВидОбъектаМетаданных.ИмяОбъекта, в котором расположен символ. + * Ссылка на объект метаданных в формате ВидОбъектаМетаданных.ИмяОбъекта, в котором расположен символ. */ String mdoRef; @@ -98,5 +98,4 @@ public int compareTo(Symbol o) { compareResult = symbolName.compareTo(o.symbolName); return compareResult; } - } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java index 31c0a66f4e6..744ebbc06a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java @@ -55,16 +55,16 @@ public int compareTo(SymbolOccurrence o) { return 0; } final var uriCompare = location.getUri().compareTo(o.location.getUri()); - if (uriCompare != 0){ + if (uriCompare != 0) { return uriCompare; } final var rangesCompare = Ranges.compare(location.getRange(), o.location.getRange()); - if (rangesCompare != 0){ + if (rangesCompare != 0) { return rangesCompare; } - final var occurenceCompare = occurrenceType.compareTo(o.occurrenceType); - if (occurenceCompare != 0){ - return occurenceCompare; + final var occurrenceCompare = occurrenceType.compareTo(o.occurrenceType); + if (occurrenceCompare != 0) { + return occurrenceCompare; } return symbol.compareTo(o.symbol); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java index 2cb1c6f2570..da17546c9d2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java @@ -26,12 +26,10 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.languageserver.reporters.data.AnalysisInfo; -import com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo; import lombok.Getter; import lombok.Value; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticRelatedInformation; -import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; import java.net.URI; @@ -62,9 +60,9 @@ public GenericIssueReport( public GenericIssueReport(AnalysisInfo analysisInfo, Map diagnosticInfos) { issues = new ArrayList<>(); - for (FileInfo fileInfo : analysisInfo.getFileinfos()) { - for (Diagnostic diagnostic : fileInfo.getDiagnostics()) { - GenericIssueEntry entry = new GenericIssueEntry( + for (var fileInfo : analysisInfo.getFileinfos()) { + for (var diagnostic : fileInfo.getDiagnostics()) { + var entry = new GenericIssueEntry( fileInfo.getPath().toString(), diagnostic, diagnosticInfos.get(DiagnosticCode.getStringValue(diagnostic.getCode())) @@ -111,7 +109,7 @@ public GenericIssueEntry(String fileName, Diagnostic diagnostic, DiagnosticInfo primaryLocation = new Location(fileName, diagnostic); effortMinutes = diagnosticInfo.getMinutesToFix(); - List relatedInformation = diagnostic.getRelatedInformation(); + var relatedInformation = diagnostic.getRelatedInformation(); if (relatedInformation == null) { secondaryLocations = new ArrayList<>(); } else { @@ -172,8 +170,8 @@ public TextRange( } public TextRange(Range range) { - Position startPosition = range.getStart(); - Position endPosition = range.getEnd(); + var startPosition = range.getStart(); + var endPosition = range.getEnd(); startLine = startPosition.getLine() + 1; startColumn = startPosition.getCharacter(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java index dbf76b24e5a..5cc881ed74f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java @@ -39,13 +39,11 @@ import lombok.Value; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.jsonrpc.messages.Either; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.stream.Collectors; @JacksonXmlRootElement(localName = "testsuites") @@ -66,7 +64,7 @@ public JUnitTestSuites(AnalysisInfo analysisInfo) { testsuite = analysisInfo.getFileinfos().stream() .filter(fileInfo -> !fileInfo.getDiagnostics().isEmpty()) .map(JUnitTestSuite::new) - .collect(Collectors.toList()); + .toList(); } public JUnitTestSuites( @@ -91,7 +89,7 @@ public JUnitTestSuite(FileInfo fileInfo) { this.testcase = new ArrayList<>(); List diagnostics = fileInfo.getDiagnostics(); - Map, List> groupedDiagnostics = diagnostics.stream() + var groupedDiagnostics = diagnostics.stream() .collect(Collectors.groupingBy( Diagnostic::getCode, Collectors.toList()) @@ -128,8 +126,8 @@ public JUnitTestCase(List diagnostics, String name, String classname this.classname = classname; List value = new ArrayList<>(); - String type = ""; - String message = ""; + var type = ""; + var message = ""; for (Diagnostic diagnostic : diagnostics) { type = diagnostic.getSeverity().toString().toLowerCase(Locale.ENGLISH); @@ -178,9 +176,9 @@ static class JUnitFailureDeserializer extends JsonDeserializer { public JUnitFailure deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonNode node = jp.getCodec().readTree(jp); - String type = node.get("type").asText(""); - String message = node.get("message").asText(""); - String value = node.get("").asText(""); + var type = node.get("type").asText(""); + var message = node.get("message").asText(""); + var value = node.get("").asText(""); return new JUnitFailure(type, message, value); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java index 83319222290..5fb32be3521 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java @@ -30,27 +30,23 @@ import java.util.EnumMap; import java.util.Map; +@Getter class TSLintReportEntry { - @Getter + + private static final Map SEVERITY_MAP = new EnumMap<>(DiagnosticSeverity.class); + private final EntryPosition startPosition; - @Getter private final EntryPosition endPosition; - @Getter private final String failure; - @Getter private final String name; - @Getter private final String ruleName; - @Getter private final String ruleSeverity; - private static final Map severityMap = new EnumMap<>(DiagnosticSeverity.class); - static { - severityMap.put(DiagnosticSeverity.Error, "error"); - severityMap.put(DiagnosticSeverity.Hint, "warn"); - severityMap.put(DiagnosticSeverity.Information, "warn"); - severityMap.put(DiagnosticSeverity.Warning, "warn"); + SEVERITY_MAP.put(DiagnosticSeverity.Error, "error"); + SEVERITY_MAP.put(DiagnosticSeverity.Hint, "warn"); + SEVERITY_MAP.put(DiagnosticSeverity.Information, "warn"); + SEVERITY_MAP.put(DiagnosticSeverity.Warning, "warn"); } TSLintReportEntry(String fileName, Diagnostic diagnostic) { @@ -58,7 +54,7 @@ class TSLintReportEntry { failure = diagnostic.getMessage(); name = fileName; ruleName = DiagnosticCode.getStringValue(diagnostic.getCode()); - ruleSeverity = severityMap.get(diagnostic.getSeverity()); + ruleSeverity = SEVERITY_MAP.get(diagnostic.getSeverity()); startPosition = new EntryPosition(diagnostic.getRange().getStart()); } @@ -78,12 +74,10 @@ public TSLintReportEntry( this.ruleSeverity = ruleSeverity; } + @Getter static class EntryPosition { - @Getter private final int character; - @Getter private final int line; - @Getter private final int position; EntryPosition(org.eclipse.lsp4j.Position position) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index 78a452f3e68..e57dfa3a772 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -82,12 +82,11 @@ public static List getChildren(Tree t) { * @return Список токенов */ public static List getTokens(ParseTree tree) { - if (tree instanceof BSLParserRuleContext) { - return ((BSLParserRuleContext) tree).getTokens(); + if (tree instanceof BSLParserRuleContext parserRuleContext) { + return parserRuleContext.getTokens(); } - if (tree instanceof TerminalNode) { - TerminalNode node = (TerminalNode) tree; + if (tree instanceof TerminalNode node) { var token = node.getSymbol(); return List.of(token); } @@ -104,8 +103,7 @@ public static List getTokens(ParseTree tree) { private static void getTokensFromParseTree(ParseTree tree, List tokens) { for (var i = 0; i < tree.getChildCount(); i++) { ParseTree child = tree.getChild(i); - if (child instanceof TerminalNode) { - TerminalNode node = (TerminalNode) child; + if (child instanceof TerminalNode node) { var token = node.getSymbol(); tokens.add(token); } else { @@ -138,8 +136,8 @@ private static void flatten(ParseTree t, List flatList) { */ private static int getRuleIndex(ParseTree node) { - if (node instanceof TerminalNode) { - return ((TerminalNode) node).getSymbol().getType(); + if (node instanceof TerminalNode terminalNode) { + return terminalNode.getSymbol().getType(); } else { return ((BSLParserRuleContext) node).getRuleIndex(); } @@ -153,9 +151,8 @@ private static List getDescendantsWithFilter(ParseTree parent, ParseT descendants = org.antlr.v4.runtime.tree.Trees.getDescendants(parent) .stream() .filter(BSLParserRuleContext.class::isInstance) - .filter(node -> (node.equals(tnc) - || getRuleIndex(node) == ruleindex)) - .collect(Collectors.toList()); + .filter(node -> (node.equals(tnc) || getRuleIndex(node) == ruleindex)) + .toList(); } return descendants; } @@ -204,14 +201,11 @@ public static boolean nodeContainsErrors(ParseTree tnc) { * @return tnc - если предыдущая нода не найдена, вернет текущую */ public static ParseTree getPreviousNode(ParseTree parent, ParseTree tnc, int ruleindex) { - List descendants = getDescendantsWithFilter(parent, tnc, ruleindex); - int pos = descendants.indexOf(tnc); if (pos > 0) { return descendants.get(pos - 1); } - return tnc; } @@ -266,14 +260,11 @@ public static Optional getPreviousTokenFromDefaultChannel(List tok * @return tnc - если следующая нода не найдена, вернет текущую */ public static ParseTree getNextNode(ParseTree parent, ParseTree tnc, int ruleindex) { - List descendants = getDescendantsWithFilter(parent, tnc, ruleindex); - int pos = descendants.indexOf(tnc); if (pos + 1 < descendants.size()) { return descendants.get(pos + 1); } - return tnc; } @@ -284,7 +275,6 @@ public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc) { if (tnc.getParent() != null) { return getRootParent(tnc.getParent()); } - return tnc; } @@ -354,9 +344,7 @@ private static Stream getChildrenStream(Tree t, Integer[] List indexes = Arrays.asList(ruleIndex); return IntStream.range(0, t.getChildCount()) .mapToObj(t::getChild) - .filter((Tree child) -> - child instanceof BSLParserRuleContext - && indexes.contains(((BSLParserRuleContext) child).getRuleIndex())) + .filter(child -> child instanceof BSLParserRuleContext rule && indexes.contains(rule.getRuleIndex())) .map(BSLParserRuleContext.class::cast); } @@ -373,8 +361,7 @@ public static Collection findAllRuleNodes(ParseTree t, Intege public static Collection findAllRuleNodes(ParseTree t, Collection indexes) { List nodes = new ArrayList<>(); - if (t instanceof ParserRuleContext - && indexes.contains(((ParserRuleContext) t).getRuleIndex())) { + if (t instanceof ParserRuleContext parserRuleContext && indexes.contains(parserRuleContext.getRuleIndex())) { nodes.add((ParserRuleContext) t); } @@ -388,29 +375,27 @@ public static Collection findAllRuleNodes(ParseTree t, Collec /** * Получает "первые" дочерние ноды с нужными типами * ВАЖНО: поиск вглубь найденной ноды с нужными индексами не выполняется - * Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все вложенные найдены не будут + * Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все + * вложенные найдены не будут * ВАЖНО: начальная нода не проверяется на условие, т.к. тогда она единственная и вернется в результате * - * @param root - начальный узел дерева + * @param root - начальный узел дерева * @param indexes - коллекция индексов * @return найденные узлы */ public static Collection findAllTopLevelDescendantNodes(ParserRuleContext root, Collection indexes) { var result = new ArrayList(); - root.children.stream() .map(node -> findAllTopLevelDescendantNodesInner(node, indexes)) .forEach(result::addAll); - return result; } private static Collection findAllTopLevelDescendantNodesInner(ParseTree root, Collection indexes) { - if (root instanceof ParserRuleContext - && indexes.contains(((ParserRuleContext) root).getRuleIndex())) { - return List.of((ParserRuleContext) root); + if (root instanceof ParserRuleContext rule && indexes.contains(rule.getRuleIndex())) { + return List.of(rule); } List result = new ArrayList<>(); @@ -427,8 +412,7 @@ private static Collection findAllTopLevelDescendantNodesInner public static boolean nodeContains(ParseTree t, Integer... index) { Set indexes = new HashSet<>(Arrays.asList(index)); - if (t instanceof ParserRuleContext - && indexes.contains(((ParserRuleContext) t).getRuleIndex())) { + if (t instanceof ParserRuleContext rule && indexes.contains(rule.getRuleIndex())) { return true; } @@ -442,9 +426,7 @@ public static boolean nodeContains(ParseTree t, Integer... index) { public static boolean nodeContains(ParseTree t, ParseTree exclude, Integer... index) { Set indexes = new HashSet<>(Arrays.asList(index)); - if (t instanceof ParserRuleContext - && !t.equals(exclude) - && indexes.contains(((ParserRuleContext) t).getRuleIndex())) { + if (t instanceof ParserRuleContext rule && !t.equals(exclude) && indexes.contains(rule.getRuleIndex())) { return true; } @@ -455,11 +437,12 @@ public static boolean nodeContains(ParseTree t, ParseTree exclude, Integer... in /** * Получение ноды в дереве по позиции в документе. * - * @param tree - дерево, в котором ищем + * @param tree - дерево, в котором ищем * @param position - искомая позиция * @return терминальная нода на указанной позиции, если есть */ - public static Optional findTerminalNodeContainsPosition(BSLParserRuleContext tree, Position position) { + public static Optional findTerminalNodeContainsPosition(BSLParserRuleContext tree, + Position position) { if (tree.getTokens().isEmpty()) { return Optional.empty(); @@ -475,8 +458,7 @@ public static Optional findTerminalNodeContainsPosition(BSLParserR var children = Trees.getChildren(tree); for (Tree child : children) { - if (child instanceof TerminalNode) { - var terminalNode = (TerminalNode) child; + if (child instanceof TerminalNode terminalNode) { var token = terminalNode.getSymbol(); if (tokenContainsPosition(token, position)) { return Optional.of(terminalNode); @@ -532,15 +514,12 @@ public static List getComments(List tokens, Token token) { } private static void fillCommentsCollection(List tokens, Token currentToken, List lines) { - int index = currentToken.getTokenIndex(); - if (index == 0) { return; } var previousToken = tokens.get(index - 1); - if (abortSearchComments(previousToken, currentToken)) { return; } @@ -564,12 +543,10 @@ private static boolean isBlankLine(Token previousToken, Token currentToken) { } private static boolean treeContainsErrors(ParseTree tnc, boolean recursive) { - if (!(tnc instanceof BSLParserRuleContext)) { + if (!(tnc instanceof BSLParserRuleContext ruleContext)) { return false; } - BSLParserRuleContext ruleContext = (BSLParserRuleContext) tnc; - if (ruleContext.exception != null) { return true; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java index 9151c7a27e1..2adecca8171 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java @@ -40,30 +40,22 @@ public boolean areEqual(BslExpression first, BslExpression second) { return false; } - switch (first.getNodeType()) { - case LITERAL: - return literalsEqual((TerminalSymbolNode) first, (TerminalSymbolNode) second); - case IDENTIFIER: - return identifiersEqual((TerminalSymbolNode) first, (TerminalSymbolNode) second); - case BINARY_OP: - return binaryOperationsEqual((BinaryOperationNode) first, (BinaryOperationNode) second); - case UNARY_OP: - return unaryOperationsEqual((UnaryOperationNode) first, (UnaryOperationNode) second); - case TERNARY_OP: - return ternaryOperatorsEqual((TernaryOperatorNode) first, (TernaryOperatorNode) second); - case SKIPPED_CALL_ARG: - return true; - case CALL: - return callStatementsEqual((AbstractCallNode) first, (AbstractCallNode) second); - default: - throw new IllegalStateException(); - } + return switch (first.getNodeType()) { + case LITERAL -> literalsEqual((TerminalSymbolNode) first, (TerminalSymbolNode) second); + case IDENTIFIER -> identifiersEqual((TerminalSymbolNode) first, (TerminalSymbolNode) second); + case BINARY_OP -> binaryOperationsEqual((BinaryOperationNode) first, (BinaryOperationNode) second); + case UNARY_OP -> unaryOperationsEqual((UnaryOperationNode) first, (UnaryOperationNode) second); + case TERNARY_OP -> ternaryOperatorsEqual((TernaryOperatorNode) first, (TernaryOperatorNode) second); + case SKIPPED_CALL_ARG -> true; + case CALL -> callStatementsEqual((AbstractCallNode) first, (AbstractCallNode) second); + default -> throw new IllegalStateException(); + }; } protected boolean callStatementsEqual(AbstractCallNode first, AbstractCallNode second) { - if (first instanceof MethodCallNode) { - return methodCallsEqual((MethodCallNode) first, (MethodCallNode) second); + if (first instanceof MethodCallNode methodCallNode) { + return methodCallsEqual(methodCallNode, (MethodCallNode) second); } else { return constructorCallsEqual((ConstructorCallNode) first, (ConstructorCallNode) second); } @@ -94,9 +86,9 @@ protected boolean methodCallsEqual(MethodCallNode first, MethodCallNode second) } protected boolean ternaryOperatorsEqual(TernaryOperatorNode first, TernaryOperatorNode second) { - return areEqual(first.getCondition(), second.getCondition()) && - areEqual(first.getTruePart(), second.getTruePart()) && - areEqual(first.getFalsePart(), second.getFalsePart()); + return areEqual(first.getCondition(), second.getCondition()) + && areEqual(first.getTruePart(), second.getTruePart()) + && areEqual(first.getFalsePart(), second.getFalsePart()); } protected boolean unaryOperationsEqual(UnaryOperationNode first, UnaryOperationNode second) { @@ -117,7 +109,6 @@ protected boolean binaryOperationsEqual(BinaryOperationNode first, BinaryOperati } return areEqual(first.getLeft(), second.getLeft()) && areEqual(first.getRight(), second.getRight()); - } protected boolean identifiersEqual(TerminalSymbolNode first, TerminalSymbolNode second) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index d388f57b4d6..178e5d79883 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -20,6 +20,7 @@ * License along with BSL Language Server. */ package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; + import com.github._1c_syntax.bsl.parser.BSLLexer; import com.github._1c_syntax.bsl.parser.BSLParser; import com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor; @@ -31,6 +32,7 @@ import java.util.Collections; import java.util.Deque; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @@ -129,8 +131,8 @@ public ParseTree visitMember(BSLParser.MemberContext ctx) { } var dispatchChild = ctx.getChild(childIndex); - if (dispatchChild instanceof TerminalNode) { - var token = ((TerminalNode) dispatchChild).getSymbol().getType(); + if (dispatchChild instanceof TerminalNode terminalNode) { + var token = terminalNode.getSymbol().getType(); // ручная диспетчеризация switch (token) { @@ -143,7 +145,6 @@ public ParseTree visitMember(BSLParser.MemberContext ctx) { default: throw new IllegalStateException("Unexpected rule " + dispatchChild); } - } else { dispatchChild.accept(this); } @@ -155,7 +156,8 @@ public ParseTree visitMember(BSLParser.MemberContext ctx) { return ctx; } - private void visitParenthesis(BSLParser.ExpressionContext expression, List modifiers) { + private void visitParenthesis(BSLParser.ExpressionContext expression, + List modifiers) { var subExpr = makeSubexpression(expression); operands.push(subExpr); @@ -163,7 +165,6 @@ private void visitParenthesis(BSLParser.ExpressionContext expression, List BslOperator.UNARY_PLUS; + case BSLLexer.MINUS -> BslOperator.UNARY_MINUS; + case BSLLexer.NOT_KEYWORD -> BslOperator.NOT; + default -> throw new IllegalArgumentException(); + }; operatorsInFly.push(new OperatorInCode(operator, child)); @@ -287,7 +275,6 @@ public ParseTree visitComplexIdentifier(BSLParser.ComplexIdentifierContext ctx) @Override public ParseTree visitGlobalMethodCall(BSLParser.GlobalMethodCallContext ctx) { - var name = ctx.methodName().IDENTIFIER(); var callNode = MethodCallNode.create(name); callNode.setRepresentingAst(ctx); @@ -323,9 +310,7 @@ public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { } callNode.setRepresentingAst(ctx); - addCallArguments(callNode, args); - operands.push(callNode); return ctx; } @@ -345,9 +330,7 @@ public ParseTree visitAccessProperty(BSLParser.AccessPropertyContext ctx) { @Override public ParseTree visitAccessIndex(BSLParser.AccessIndexContext ctx) { var target = operands.pop(); - var expressionArg = makeSubexpression(ctx.expression()); - var indexOperation = BinaryOperationNode.create(BslOperator.INDEX_ACCESS, target, expressionArg, ctx); operands.push(indexOperation); return ctx; @@ -366,7 +349,6 @@ public ParseTree visitAccessCall(BSLParser.AccessCallContext ctx) { @Override public ParseTree visitTernaryOperator(BSLParser.TernaryOperatorContext ctx) { - var ternary = TernaryOperatorNode.create( makeSubexpression(ctx.expression(0)), makeSubexpression(ctx.expression(1)), @@ -384,7 +366,7 @@ private static BslExpression makeSubexpression(BSLParser.ExpressionContext ctx) } private static void addCallArguments(AbstractCallNode callNode, List args) { - for (BSLParser.CallParamContext parameter : args) { + for (var parameter : args) { if (parameter.expression() == null) { callNode.addArgument(new SkippedCallArgumentNode()); } else { @@ -399,19 +381,18 @@ private void buildOperation() { } var operator = operatorsInFly.pop(); - switch (operator.getOperator()) { - case UNARY_MINUS: - case UNARY_PLUS: - case NOT: - var operand = operands.pop(); - var operation = UnaryOperationNode.create(operator.getOperator(), operand, operator.getActualSourceCode()); - operands.push(operation); - break; - default: - var right = operands.pop(); - var left = operands.pop(); - var binaryOp = BinaryOperationNode.create(operator.getOperator(), left, right, operator.getActualSourceCode()); - operands.push(binaryOp); + if (Objects.requireNonNull(operator.getOperator()) == BslOperator.UNARY_MINUS + || operator.getOperator() == BslOperator.NOT + || operator.getOperator() == BslOperator.UNARY_PLUS) { + + var operand = operands.pop(); + var operation = UnaryOperationNode.create(operator.getOperator(), operand, operator.getActualSourceCode()); + operands.push(operation); + } else { + var right = operands.pop(); + var left = operands.pop(); + var binaryOp = BinaryOperationNode.create(operator.getOperator(), left, right, operator.getActualSourceCode()); + operands.push(binaryOp); } } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java index 440c586df2f..955140d760b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java @@ -62,10 +62,11 @@ void linearBlockCanBeBuilt() { @Test void branchingWithOneBranch() { - var code = "А = 1;\n" + - "Если Б = 2 Тогда\n" + - " В = 4;\n" + - "КонецЕсли;"; + var code = """ + А = 1; + Если Б = 2 Тогда + В = 4; + КонецЕсли;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -97,12 +98,12 @@ void branchingWithOneBranch() { @Test void conditionWithElse() { - var code = "А = 1;\n" + - "Если Б = 2 Тогда\n" + - " В = 4;\n" + - "Иначе\n" + - " В = 5;" + - "КонецЕсли;"; + var code = """ + А = 1; + Если Б = 2 Тогда + В = 4; + Иначе + В = 5;КонецЕсли;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -129,15 +130,14 @@ void conditionWithElse() { @Test void multipleConditionsTest() { - var code = "Если Б = 1 Тогда\n" + - " В = 1;\n" + - "ИначеЕсли Б = 2 Тогда\n" + - " В = 2;\n" + - "ИначеЕсли Б = 3 Тогда\n" + - " В = 3;" + - "Иначе\n" + - " В = 4;" + - "КонецЕсли;"; + var code = """ + Если Б = 1 Тогда + В = 1; + ИначеЕсли Б = 2 Тогда + В = 2; + ИначеЕсли Б = 3 Тогда + В = 3;Иначе + В = 4;КонецЕсли;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -181,10 +181,11 @@ void multipleConditionsTest() { @Test void whileLoopTest() { - var code = "А = 1;\n" + - "Пока Б = 1 Цикл\n" + - " В = 1;\n" + - "КонецЦикла;"; + var code = """ + А = 1; + Пока Б = 1 Цикл + В = 1; + КонецЦикла;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -218,19 +219,20 @@ void whileLoopTest() { @Test void testInnerLoops() { - var code = "А = 1;\n" + - "Пока Б = 1 Цикл\n" + - " В = 1;\n" + - " Если А = 1 Тогда\n" + - " Продолжить;\n" + - " КонецЕсли;\n" + - " Для Сч = 1 По 5 Цикл\n" + - " Б = 1;\n" + - " Прервать;\n" + - " В = 2;\n" + - " КонецЦикла;\n" + - " Прервано = Истина;\n" + - "КонецЦикла;"; + var code = """ + А = 1; + Пока Б = 1 Цикл + В = 1; + Если А = 1 Тогда + Продолжить; + КонецЕсли; + Для Сч = 1 По 5 Цикл + Б = 1; + Прервать; + В = 2; + КонецЦикла; + Прервано = Истина; + КонецЦикла;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -288,11 +290,12 @@ void testInnerLoops() { @Test void tryHandlerFlowTest() { - var code = "Попытка\n" + - " А = 1;\n" + - "Исключение\n" + - " Б = 1;\n" + - "КонецПопытки"; + var code = """ + Попытка + А = 1; + Исключение + Б = 1; + КонецПопытки"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -315,10 +318,11 @@ void tryHandlerFlowTest() { @Test void linearBlockWithLabel() { - var code = "А = 1;\n" + - "Б = 2;\n" + - "~Прыг:\n" + - "В = 4;"; + var code = """ + А = 1; + Б = 2; + ~Прыг: + В = 4;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -339,12 +343,13 @@ void linearBlockWithLabel() { @Test void linearBlockWithJumpToLabel() { - var code = "А = 1;\n" + - "Б = 2;\n" + - "~Прыг:\n" + - "В = 4;\n" + - "Перейти ~Прыг;\n" + - "МертвыйКод = Истина;"; + var code = """ + А = 1; + Б = 2; + ~Прыг: + В = 4; + Перейти ~Прыг; + МертвыйКод = Истина;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -376,7 +381,7 @@ void hardcoreCrazyJumpingTest() { var list = graph.vertexSet().stream() .filter(x -> x instanceof BasicBlockVertex) - .filter(x -> ((BasicBlockVertex) x).statements().size() == 0) + .filter(x -> ((BasicBlockVertex) x).statements().isEmpty()) .collect(Collectors.toList()); assertThat(list).isEmpty(); @@ -385,11 +390,12 @@ void hardcoreCrazyJumpingTest() { @Test void preprocessorSingleIfBranching() { - var code = "А = 1;\n" + - "#Если Сервер Тогда\n" + - " Б = 2;\n" + - "#КонецЕсли\n" + - "В = 3;"; + var code = """ + А = 1; + #Если Сервер Тогда + Б = 2; + #КонецЕсли + В = 3;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -414,13 +420,13 @@ void preprocessorSingleIfBranching() { @Test void preprocessorIfWithElseBranching() { - var code = "А = 1;\n" + - "#Если Сервер Тогда\n" + - " Б = 2;\n" + - "#Иначе\n" + - " Б = 3;" + - "#КонецЕсли\n" + - "В = 3;"; + var code = """ + А = 1; + #Если Сервер Тогда + Б = 2; + #Иначе + Б = 3;#КонецЕсли + В = 3;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); @@ -447,17 +453,17 @@ void preprocessorIfWithElseBranching() { @Test void preprocessorIfWithElseIfBranching() { - var code = "А = 1;\n" + - "#Если Сервер Тогда\n" + - " Б = 2;\n" + - "#ИначеЕсли ВебКлиент Тогда\n" + - " Б = 3;\n" + - "#ИначеЕсли МобильныйКлиент Тогда\n" + - " Б = 4;\n" + - "#Иначе\n" + - " Б = 5;" + - "#КонецЕсли\n" + - "В = 3;"; + var code = """ + А = 1; + #Если Сервер Тогда + Б = 2; + #ИначеЕсли ВебКлиент Тогда + Б = 3; + #ИначеЕсли МобильныйКлиент Тогда + Б = 4; + #Иначе + Б = 5;#КонецЕсли + В = 3;"""; var parseTree = parse(code); var builder = new CfgBuildingParseTreeVisitor(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java index 954cf595913..10cea84790d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java @@ -137,7 +137,7 @@ void testRegionsAdjustingCompute() { List regions = documentContext.getSymbolTree().getModuleLevelRegions(); // then - assertThat(regions).anyMatch(regionSymbol -> regionSymbol.getMethods().size() > 0); + assertThat(regions).anyMatch(regionSymbol -> !regionSymbol.getMethods().isEmpty()); } @Test diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java index 9d6830cd05e..460211b86fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java @@ -31,7 +31,6 @@ import org.springframework.boot.test.context.SpringBootTest; import java.io.File; -import java.io.IOException; import java.nio.file.Path; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 2858b3807f8..339f8f752af 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -59,9 +59,11 @@ void prepare() { @Test void testMethod13() { var method = methodsWithDescription.get(12); - assertThat(method.getPurposeDescription()).isEqualTo("Значения реквизитов, прочитанные из информационной базы для нескольких объектов.\n" + - "\nЕсли необходимо зачитать реквизит независимо от прав текущего пользователя,\n" + - "то следует использовать предварительный переход в привилегированный режим."); + assertThat(method.getPurposeDescription()).isEqualTo(""" + Значения реквизитов, прочитанные из информационной базы для нескольких объектов. + + Если необходимо зачитать реквизит независимо от прав текущего пользователя, + то следует использовать предварительный переход в привилегированный режим."""); assertThat(method.isDeprecated()).isFalse(); assertThat(method.getDeprecationInfo()).isEmpty(); assertThat(method.getExamples()).isEmpty(); @@ -74,9 +76,10 @@ void testMethod13() { assertThat(param.getName()).isEqualTo("Ссылки"); assertThat(param.getTypes()).hasSize(1); assertThat(param.getTypes().get(0).getName()).isEqualTo("Массив"); - assertThat(param.getTypes().get(0).getDescription()).isEqualTo("массив ссылок на объекты одного типа.\n" + - "Значения массива должны быть ссылками на объекты одного типа.\n" + - "если массив пуст, то результатом будет пустое соответствие."); + assertThat(param.getTypes().get(0).getDescription()).isEqualTo(""" + массив ссылок на объекты одного типа. + Значения массива должны быть ссылками на объекты одного типа. + если массив пуст, то результатом будет пустое соответствие."""); assertThat(param.isHyperlink()).isFalse(); param = method.getParameters().get(1); @@ -93,11 +96,12 @@ void testMethod13() { assertThat(param.getTypes()).hasSize(1); assertThat(param.getTypes().get(0).getName()).isEqualTo("Булево"); assertThat(param.getTypes().get(0).getDescription()).isEqualTo( - "если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае,\n" + - "- если какой-либо объект будет исключен из выборки по правам, то этот объект\n" + - "будет исключен и из результата;\n" + - "- если Ложь, то возникнет исключение при отсутствии прав на таблицу\n" + - "или любой из реквизитов."); + """ + если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае, + - если какой-либо объект будет исключен из выборки по правам, то этот объект + будет исключен и из результата; + - если Ложь, то возникнет исключение при отсутствии прав на таблицу + или любой из реквизитов."""); assertThat(param.isHyperlink()).isFalse(); var type = method.getReturnedValue().get(0); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java index b574ce34fbd..ffb3d88ed29 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java @@ -83,15 +83,16 @@ void testElsIfClausesWithoutElse() { @Test void testEmptyIfBodies() { - var sample = "Функция Тест()\n" + - " Список = Новый СписокЗначений;\n" + - " #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда\n" + - " Если Условие Тогда\n" + - " Иначе\n" + - " КонецЕсли;\n" + - " #КонецЕсли\n" + - " Возврат Список;\n" + - "КонецФункции"; + var sample = """ + Функция Тест() + Список = Новый СписокЗначений; + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Условие Тогда + Иначе + КонецЕсли; + #КонецЕсли + Возврат Список; + КонецФункции"""; var documentContext = TestUtils.getDocumentContext(sample); var diagnostics = getDiagnostics(documentContext); @@ -103,17 +104,18 @@ void testEmptyIfBodies() { @Test void testExitByRaiseException() { var sample = - "Функция Тест()\n" + - "Если Не ВебКлиент Тогда\n" + - " Массив = Новый Массив;\n" + - " Если Условие Тогда\n" + - " Возврат Массив;\n" + - " КонецЕсли;\n" + - " Возврат ПустойМассив;\n" + - "#Иначе\n" + - " ВызватьИсключение \"Упс\";\n" + - "#КонецЕсли\n" + - "КонецФункции"; + """ + Функция Тест() + Если Не ВебКлиент Тогда + Массив = Новый Массив; + Если Условие Тогда + Возврат Массив; + КонецЕсли; + Возврат ПустойМассив; + #Иначе + ВызватьИсключение "Упс"; + #КонецЕсли + КонецФункции"""; var documentContext = TestUtils.getDocumentContext(sample); var diagnostics = getDiagnostics(documentContext); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java index f02cbaaeb12..a3c68def6e0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java @@ -81,9 +81,9 @@ void testConfigure() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); List thresholdVariants = new ArrayList<>(); - thresholdVariants.add(Float.valueOf(1f)); - thresholdVariants.add(Double.valueOf(1)); - thresholdVariants.add(Integer.valueOf(1)); + thresholdVariants.add(1f); + thresholdVariants.add(1.0); + thresholdVariants.add(1); for (Object threshold : thresholdVariants){ configuration.put("threshold", threshold); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java index 87914f04ed9..57b025766e6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java @@ -39,9 +39,10 @@ class ConsecutiveEmptyLinesDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnosticsForText(module); @@ -53,10 +54,11 @@ void test_EmptyTwoFirstLines() { @Test void test_EmptyThreeFirstLines() { - String module = " \n" + - "\n" + - "\n" + - "КонецПроцедуры"; + String module = """ + \s + + + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -68,10 +70,11 @@ void test_EmptyThreeFirstLines() { @Test void test_EmptyTwoInnerLines() { - String module = "Процедура Первая()\n" + - "\n" + - "\n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() + + + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -83,10 +86,11 @@ void test_EmptyTwoInnerLines() { @Test void test_EmptyTwoInnerLinesWithSpaces() { - String module = "Процедура Первая() \n" + - " \n" + - " \n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() \s + \s + \s + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -98,12 +102,13 @@ void test_EmptyTwoInnerLinesWithSpaces() { @Test void test_WorseEmptyTwoInnerLines() { - String module = "Процедура Первая() \n" + - " \n" + - " Метод1(); //комментарии \n" + - "\n" + - " \n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() \s + \s + Метод1(); //комментарии \s + + \s + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -115,11 +120,12 @@ void test_WorseEmptyTwoInnerLines() { @Test void test_EmptyThreeInnerLines() { - String module = "Процедура Первая()\n" + - "\n" + - "\n" + - "\n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() + + + + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -131,8 +137,10 @@ void test_EmptyThreeInnerLines() { @Test void test_EmptyLastLines() { - String module = "Перем А;\n" + - "\n"; + String module = """ + Перем А; + + """; List diagnostics = getDiagnosticsForText(module); @@ -182,11 +190,12 @@ void test_EmptyLinePlusOneFilledLine() { void test_ConfigureEmptyLineParam() { setTwoForAllowedEmptyLinesCount(); - String module = "Процедура Первая()\n" + - "\n" + - "\n" + - "\n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() + + + + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -200,10 +209,11 @@ void test_ConfigureEmptyLineParam() { void test_ConfigureEmptyLineParamNoIssue() { setTwoForAllowedEmptyLinesCount(); - String module = "Процедура Первая()\n" + - "\n" + - "\n" + - "КонецПроцедуры"; + String module = """ + Процедура Первая() + + + КонецПроцедуры"""; List diagnostics = getDiagnosticsForText(module); @@ -267,8 +277,10 @@ private void checkQuickFixes(String module, boolean haveFix) { @Test void testQuickFixLastLines() { - String module = "Перем А;\n" + - "\n"; + String module = """ + Перем А; + + """; checkQuickFixes(module, true); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java index 1743b216a44..403bec0c3ef 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java @@ -84,7 +84,7 @@ void testAllDiagnosticsHaveDescriptionResource() { void testAllDiagnosticsHaveTags() { assertThatCode(() -> diagnosticInfos.values().forEach(diagnosticInfo -> assertThat( - diagnosticInfo.getTags().size() > 0 + !diagnosticInfo.getTags().isEmpty() && diagnosticInfo.getTags().size() <= 3) .isTrue())) .doesNotThrowAnyException(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java index ccac516e579..be1875892df 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java @@ -67,11 +67,12 @@ void runTest() { @Test void checkMessage() { - var code = "А = ТипДокумента = Тип(\"ДокументСсылка.ПриходнаяНакладная\")\n" + - "Или ТипДокумента = Тип(\"ДокументСсылка.СчетНаОплатуПоставщика\")\n" + - "Или ТипДокумента = Тип(\"ДокументСсылка.КорректировкаПоступления\")\n" + - "Или ТипДокумента = Тип(\"ДокументСсылка.ЗаказПоставщику\")\n" + - "Или ТипДокумента = Тип(\"ДокументСсылка.СчетНаОплатуПоставщика\")"; + var code = """ + А = ТипДокумента = Тип("ДокументСсылка.ПриходнаяНакладная") + Или ТипДокумента = Тип("ДокументСсылка.СчетНаОплатуПоставщика") + Или ТипДокумента = Тип("ДокументСсылка.КорректировкаПоступления") + Или ТипДокумента = Тип("ДокументСсылка.ЗаказПоставщику") + Или ТипДокумента = Тип("ДокументСсылка.СчетНаОплатуПоставщика")"""; var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); @@ -81,9 +82,10 @@ void checkMessage() { @Test void testThatPopularQuantificationSkipped() { - var code = "А = Байты / 1024 / 1024;\n" + - "В = Время / 24 / 60 / 60;\n" + - "Б = Байты = 1024 / \"1024\""; + var code = """ + А = Байты / 1024 / 1024; + В = Время / 24 / 60 / 60; + Б = Байты = 1024 / "1024\""""; var context = TestUtils.getDocumentContext(code); var diagnostics = getDiagnostics(context); @@ -93,9 +95,10 @@ void testThatPopularQuantificationSkipped() { @Test void testThatConfiguredPopularQuantificationSkipped() { - var code = "А = Байты / 1024 / 1024;\n" + - "В = Время / 24 / 60 / 60;\n" + - "Б = Байты = 1024 / \"1024\""; + var code = """ + А = Байты / 1024 / 1024; + В = Время / 24 / 60 / 60; + Б = Байты = 1024 / "1024\""""; // получение текущей конфигурации диагностики var configuration = diagnosticInstance.getInfo().getDefaultConfiguration(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java index 2e0166fb37d..3fcb35eec8b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java @@ -64,19 +64,21 @@ void test() { @Test void testMultiString() { - String module = "//в строке ниже неразрывный пробел\n" + - "А = \" \n" + - "|// минусы с ошибками\n" + - "|//СреднееТире = \n" + - "|–;\n" + - "|//ЦифровоеТире = \n" + - "|‒;\n" + - "|//ДлинноеТире = \n" + - "|—;\n" + - "|//ГоризонтальнаяЛиния = \n" + - "|―;\n" + - "|//НеправильныйМинус = \n" + - "|−;\";\n"; + String module = """ + //в строке ниже неразрывный пробел + А = "  + |// минусы с ошибками + |//СреднееТире =\s + |–; + |//ЦифровоеТире =\s + |‒; + |//ДлинноеТире =\s + |—; + |//ГоризонтальнаяЛиния =\s + |―; + |//НеправильныйМинус =\s + |−;"; + """; var documentContext = TestUtils.getDocumentContext(module); var diagnostics = getDiagnostics(documentContext); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java index 055a83239a6..63e8731127c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java @@ -66,9 +66,10 @@ void testFileCodeBlock() { void testFileCodeBlockWithoutError() { var diagnostics = getDiagnosticList( - "ПодобранныеТоварыТело2 = ПолучитьИзВременногоХранилища(АдресТоваровВХранилищеТело2); // не ошибка\n" + - "Объект.Товары.Загрузить(ПодобранныеТоварыТело2);\n" + - "УдалитьИзВременногоХранилища(АдресТоваровВХранилищеТело2)"); + """ + ПодобранныеТоварыТело2 = ПолучитьИзВременногоХранилища(АдресТоваровВХранилищеТело2); // не ошибка + Объект.Товары.Загрузить(ПодобранныеТоварыТело2); + УдалитьИзВременногоХранилища(АдресТоваровВХранилищеТело2)"""); assertThat(diagnostics).isEmpty(); @@ -78,21 +79,22 @@ void testFileCodeBlockWithoutError() { void testTryBlockWithoutError() { var diagnostics = getDiagnosticList( - "&НаСервере\n" + - "Процедура ПолучитьТоварыИзХранилища_Успешно1()\n" + - "\n" + - " Адрес = \"\";\n" + - " Попытка\n" + - " ОбщийМодуль.ПолучитьАдрес(Адрес);\n" + - "\n" + - " ПодобранныеТовары = ПолучитьИзВременногоХранилища(Адрес); // не ошибка\n" + - " Результат = ПодобранныеТовары.ВыгрузитьКолонку(\"Наименование\");\n" + - "\n" + - " УдалитьИзВременногоХранилища(Адрес);\n" + - " Исключение\n" + - " КонецПопытки;\n" + - "\n" + - "КонецПроцедуры"); + """ + &НаСервере + Процедура ПолучитьТоварыИзХранилища_Успешно1() + + Адрес = ""; + Попытка + ОбщийМодуль.ПолучитьАдрес(Адрес); + + ПодобранныеТовары = ПолучитьИзВременногоХранилища(Адрес); // не ошибка + Результат = ПодобранныеТовары.ВыгрузитьКолонку("Наименование"); + + УдалитьИзВременногоХранилища(Адрес); + Исключение + КонецПопытки; + + КонецПроцедуры"""); assertThat(diagnostics).isEmpty(); @@ -102,11 +104,12 @@ void testTryBlockWithoutError() { void testFileBlockBeforeSubForTester() { var diagnostics = getDiagnosticList( - "Данные = ПолучитьИзВременногоХранилища( тут.Адрес );\n" + - "Данные.Записать ( \"c:\\mydata.txt\" );\n" + - "&НаСервере\n" + - "Процедура Обработать ()\n" + - "КонецПроцедуры"); + """ + Данные = ПолучитьИзВременногоХранилища( тут.Адрес ); + Данные.Записать ( "c:\\mydata.txt" ); + &НаСервере + Процедура Обработать () + КонецПроцедуры"""); assertThat(diagnostics, true) .hasRange(0, 9, 51) @@ -119,12 +122,13 @@ void testFileBlockBeforeSubForTester() { void testTryFileBlockBeforeSubForTesterWithoutError() { var diagnostics = getDiagnosticList( - "Данные = ПолучитьИзВременногоХранилища( тут.Адрес );\n" + - "Данные.Записать ( \"c:\\mydata.txt\" );\n" + - "УдалитьИзВременногоХранилища( тут.Адрес );\n" + - "&НаСервере\n" + - "Процедура Обработать ()\n" + - "КонецПроцедуры"); + """ + Данные = ПолучитьИзВременногоХранилища( тут.Адрес ); + Данные.Записать ( "c:\\mydata.txt" ); + УдалитьИзВременногоХранилища( тут.Адрес ); + &НаСервере + Процедура Обработать () + КонецПроцедуры"""); assertThat(diagnostics).isEmpty(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java index df660218bb3..da295eb3092 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java @@ -68,43 +68,52 @@ void testContentFromDirectFile() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(5); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Функция ИмяФункции(Знач П1: Дата | Число, П2: Число = -10, П2_5, Знач П3: Структура = \"\", " + - "П4: Массив | СписокЗначений, ПДата: См. ОбщийМодуль.СуперМетод() = '20100101', ПДатаВремя = '20110101121212', " + - "П6 = Ложь, П7 = Истина, П8 = Неопределено, П9 = NULL) Экспорт: Строка | Структура\n```\n\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Функция ИмяФункции(Знач П1: Дата | Число, П2: Число = -10, П2_5, Знач П3: Структура = "", П4: Массив | СписокЗначений, ПДата: См. ОбщийМодуль.СуперМетод() = '20100101', ПДатаВремя = '20110101121212', П6 = Ложь, П7 = Истина, П8 = Неопределено, П9 = NULL) Экспорт: Строка | Структура + ``` + + """); assertThat(blocks.get(1)).matches("\\[file://.*/src/test/resources/hover/methodSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/methodSymbolMarkupContentBuilder.bsl#\\d+\\)\n\n"); assertThat(blocks.get(2)).isEqualTo("Описание функции.\nМногострочное.\n\n"); - assertThat(blocks.get(3)).isEqualTo("**Параметры:**\n\n" + - "* **П1**: `Дата` | `Число` - Описание даты/числа \n" + - "* **П2**: `Число` - Описание числа \n" + - "* **П2_5**: \n" + - "* **П3**: `Структура` - Описание строки
  продолжается на следующей строкке: \n" + - " * **Поле1**: `Число` - Описание поле1 \n" + - " * **Поле2**: `Строка` - Описание поле2 \n" + - " * **Поле3**: `Структура` : \n" + - " * **Поле31**: `строка` \n" + - " * **Поле32**: `Структура` : \n" + - " * **Поле321**: `Число` - Описание поля 321 \n" + - " * **Поле33**: `строка` \n" + - " * **Поле4**: `строка` \n" + - "* **П4**: \n" + - "  `Массив` - Описание Массива \n" + - "  `СписокЗначений` - Описание списка \n" + - "* **ПДата**: [См. ОбщийМодуль.СуперМетод()](ОбщийМодуль.СуперМетод()) \n" + - "* **ПДатаВремя**: \n" + - "* **П6**: \n" + - "* **П7**: \n" + - "* **П8**: \n" + - "* **П9**: \n" + - "\n"); - assertThat(blocks.get(4)).isEqualTo("**Возвращаемое значение:**\n\n" + - "  `Строка` - вернувшаяся строка \n" + - "  `Структура` - Описание строки
  продолжается на следующей строкке: \n" + - " * **Поле1**: `Число` - Описание поле1 \n" + - " * **Поле2**: `Строка` - Описание поле2 \n" + - " * **Поле3**: `Структура` : \n" + - " * **Поле31**: `строка` \n" + - " * **Поле32**: `Структура`\n\n"); + assertThat(blocks.get(3)).isEqualTo(""" + **Параметры:** + + * **П1**: `Дата` | `Число` - Описание даты/числа \s + * **П2**: `Число` - Описание числа \s + * **П2_5**: \s + * **П3**: `Структура` - Описание строки
  продолжается на следующей строкке: \s + * **Поле1**: `Число` - Описание поле1 \s + * **Поле2**: `Строка` - Описание поле2 \s + * **Поле3**: `Структура` : \s + * **Поле31**: `строка` \s + * **Поле32**: `Структура` : \s + * **Поле321**: `Число` - Описание поля 321 \s + * **Поле33**: `строка` \s + * **Поле4**: `строка` \s + * **П4**: \s +   `Массив` - Описание Массива \s +   `СписокЗначений` - Описание списка \s + * **ПДата**: [См. ОбщийМодуль.СуперМетод()](ОбщийМодуль.СуперМетод()) \s + * **ПДатаВремя**: \s + * **П6**: \s + * **П7**: \s + * **П8**: \s + * **П9**:\s + + """); + assertThat(blocks.get(4)).isEqualTo(""" + **Возвращаемое значение:** + +   `Строка` - вернувшаяся строка \s +   `Структура` - Описание строки
  продолжается на следующей строкке: \s + * **Поле1**: `Число` - Описание поле1 \s + * **Поле2**: `Строка` - Описание поле2 \s + * **Поле3**: `Структура` : \s + * **Поле31**: `строка` \s + * **Поле32**: `Структура` + + """); } @Test @@ -123,8 +132,12 @@ void testContentFromManagerModule() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(2); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Процедура ТестЭкспортная() Экспорт\n```\n\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Процедура ТестЭкспортная() Экспорт + ``` + + """); assertThat(blocks.get(1)).matches("\\[Catalog.Справочник1]\\(.*Catalogs/.*/Ext/ManagerModule.bsl#\\d+\\)\n\n"); } @@ -143,8 +156,12 @@ void testMethodsFromCommonModule() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(3); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Процедура УстаревшаяПроцедура() Экспорт\n```\n\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Процедура УстаревшаяПроцедура() Экспорт + ``` + + """); assertThat(blocks.get(1)).matches("\\[CommonModule.ПервыйОбщийМодуль]\\(.*CommonModules/.*/Ext/Module.bsl#\\d+\\)\n\n"); assertThat(blocks.get(2)).isEqualTo("Процедура - Устаревшая процедура\n\n"); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java index a2da46d498d..b8ade4cb595 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java @@ -69,12 +69,16 @@ void testFileVarContentFromDirectFile_NoComments() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(2); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Перем ИмяБезОписания\n" + - "```\n" + - "\n"); - assertThat(blocks.get(1)).matches("\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)\n" + - "\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Перем ИмяБезОписания + ``` + + """); + assertThat(blocks.get(1)).matches(""" + \\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\) + + """); } @Test @@ -92,14 +96,20 @@ void testFileVarContentFromDirectFile_OneCommentsStringFromRight() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(3); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Перем Имя_ОписаниеСправаОднойСтрокой\n" + - "```\n" + - "\n"); - assertThat(blocks.get(1)).matches("\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)\n" + - "\n"); - assertThat(blocks.get(2)).matches("описание\n" + - "\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Перем Имя_ОписаниеСправаОднойСтрокой + ``` + + """); + assertThat(blocks.get(1)).matches(""" + \\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\) + + """); + assertThat(blocks.get(2)).matches(""" + описание + + """); } @Test @@ -118,15 +128,22 @@ void testMethodVarContentFromDirectFile_2_comments_strings() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(3); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Перем Имя_ОписаниеСверхуДвеСтроки_Функция\n" + - "```\n" + - "\n"); - assertThat(blocks.get(1)).matches("\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)\n" + - "\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Перем Имя_ОписаниеСверхуДвеСтроки_Функция + ``` + + """); + assertThat(blocks.get(1)).matches(""" + \\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\) + + """); // TODO баг - нет \n для многострочного описания переменной - assertThat(blocks.get(2)).matches("описание 1 строка\n2 строка\n" + - "\n"); + assertThat(blocks.get(2)).matches(""" + описание 1 строка + 2 строка + + """); } @Test @@ -145,14 +162,21 @@ void testMethodVarContentFromDirectFile_3_comments_strings() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(3); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Перем Имя_ОписаниеСверхуТриСтрокиПоследняяПустая_Функция\n" + - "```\n" + - "\n"); - assertThat(blocks.get(1)).matches("\\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\)\n" + - "\n"); - assertThat(blocks.get(2)).matches("описание 1 строка\n2 строка\n" + - "\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Перем Имя_ОписаниеСверхуТриСтрокиПоследняяПустая_Функция + ``` + + """); + assertThat(blocks.get(1)).matches(""" + \\[file://.*/src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl.ИмяФункции]\\(.*src/test/resources/hover/variableSymbolMarkupContentBuilder.bsl#\\d+\\) + + """); + assertThat(blocks.get(2)).matches(""" + описание 1 строка + 2 строка + + """); } @Test @@ -172,8 +196,12 @@ void testContentFromObjectModule() { var blocks = Arrays.asList(content.split("---\n?")); assertThat(blocks).hasSize(2); - assertThat(blocks.get(0)).isEqualTo("```bsl\n" + - "Перем ВалютаУчета\n```\n\n"); + assertThat(blocks.get(0)).isEqualTo(""" + ```bsl + Перем ВалютаУчета + ``` + + """); assertThat(blocks.get(1)).matches("\\[Catalog.Справочник1]\\(.*Catalogs/.*/Ext/ObjectModule.bsl#\\d+\\)\n\n"); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index b6032b018f4..6e8bc70e423 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -31,7 +31,6 @@ import org.eclipse.lsp4j.DocumentRangeFormattingParams; import org.eclipse.lsp4j.FormattingOptions; import org.eclipse.lsp4j.TextDocumentIdentifier; -import org.eclipse.lsp4j.TextDocumentItem; import org.eclipse.lsp4j.TextEdit; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -216,7 +215,7 @@ void testFormatEngKeywords() throws IOException { URI.create(params.getTextDocument().getUri()), fileContent ); - + var configuration = new LanguageServerConfiguration(); configuration.setLanguage(Language.EN); documentContext.setConfiguration(configuration); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java index 9b9cde8ef6c..9ef76818c36 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java @@ -90,8 +90,7 @@ ReferenceResolver referenceResolver( ReferenceFinder zeroLineReferenceFinder, ReferenceFinder firstLineReferenceFinder ) { - var referenceResolver = new ReferenceResolver(List.of(zeroLineReferenceFinder, firstLineReferenceFinder)); - return referenceResolver; + return new ReferenceResolver(List.of(zeroLineReferenceFinder, firstLineReferenceFinder)); } @Bean diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index a7ac606bc1d..01b2415ae2d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -295,9 +295,10 @@ BSLParser.ExpressionContext parse(String code) { @Test void realLifeHardExpression() { - var code = "СодержитПоля = ВложенныеЭлементы.Количество() > 0\n" + - "И Не (ВложенныеЭлементы.Количество() = 1\n" + - "И ТипЗнч(ВложенныеЭлементы[0]) = Тип(\"АвтоВыбранноеПолеКомпоновкиДанных\"));"; + var code = """ + СодержитПоля = ВложенныеЭлементы.Количество() > 0 + И Не (ВложенныеЭлементы.Количество() = 1 + И ТипЗнч(ВложенныеЭлементы[0]) = Тип("АвтоВыбранноеПолеКомпоновкиДанных"));"""; var expressionTree = getExpressionTree(code); var binary = (BinaryOperationNode) expressionTree; From cf1a82198bdd4920994870a224f33aa20db3cc53 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 23 Jan 2024 22:09:53 +0300 Subject: [PATCH 418/595] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC=20=D0=BA=D1=80=D0=BE=D0=BB=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20(=D1=81=D0=BC=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B5=D1=81=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codeactions/ExtractStructureConstructorSupplier.java | 3 +-- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 6135f35e83f..895a890482e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -43,7 +43,6 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -81,8 +80,8 @@ public List getCodeActions(CodeActionParams params, DocumentContext var parameters = maybeDoCall .map(BSLParser.DoCallContext::callParamList) .map(callParamListContext -> callParamListContext.children) + .orElse(Collections.emptyList()) .stream() - .flatMap(Collection::stream) .filter(Predicate.not(TerminalNode.class::isInstance)) .map(BSLParser.CallParamContext.class::cast) .toList(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index b220a1b35ea..0ddb0d606ac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -286,8 +286,7 @@ private boolean isOveruse(SDBLParser.ColumnContext ctx) { var children = extractFirstMetadataTypeName(ctx); var refIndex = findLastRef(children); - final var childCount = children.size(); - final var lastIndex = childCount - 1; + final var lastIndex = children.size() - 1; if (refIndex == lastIndex) { var penultimateIdentifierName = children.get(lastIndex - LAST_INDEX_OF_TABLE_DOT_REF).getText(); return dataSourceWithTabularSectionNames.get(penultimateIdentifierName) == null; From 0d08d8c63705e70d12d24fd8780e2f29d9f9698e Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Wed, 24 Jan 2024 07:25:13 +0300 Subject: [PATCH 419/595] review fix --- .../codeactions/ExtractStructureConstructorSupplier.java | 4 ++-- .../diagnostics/FunctionOutParameterDiagnostic.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 895a890482e..3afcc32cd63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -121,14 +121,14 @@ public List getCodeActions(CodeActionParams params, DocumentContext var constructorEdit = new TextEdit(Ranges.create(doCall), "()"); changes.add(constructorEdit); - var intendSize = Ranges.create(lValue).getStart().getCharacter(); + var indentSize = Ranges.create(lValue).getStart().getCharacter(); var rparenRange = Ranges.create(doCall.RPAREN()); var constructorLine = rparenRange.getEnd().getLine(); var position = new Position(constructorLine + 1, 0); var range = new Range(position, position); - var indent = documentContext.getContentList()[constructorLine].substring(0, intendSize); + var indent = documentContext.getContentList()[constructorLine].substring(0, indentSize); for (var i = 0; i < keys.length; i++) { var key = keys[i].trim(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java index e502a4ca206..6cf2a4d8371 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; @@ -33,6 +34,7 @@ import org.apache.commons.collections4.map.CaseInsensitiveMap; import java.util.Collection; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -50,7 +52,7 @@ public class FunctionOutParameterDiagnostic extends AbstractVisitorDiagnostic { @Override public ParseTree visitFunction(BSLParser.FunctionContext ctx) { - var parameters = documentContext + List parameters = documentContext .getSymbolTree() .getMethodSymbol(ctx.getParent()) .stream() From caf865afea54390c150385fe1a94d63b849761a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 09:32:03 +0000 Subject: [PATCH 420/595] build(deps): bump io.sentry:sentry-bom from 7.2.0 to 7.3.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.2.0 to 7.3.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.2.0...7.3.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7bcbff6705e..4402390ee17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.2.0") + mavenBom("io.sentry:sentry-bom:7.3.0") } } From b96c7d0a7f451baf05d20ba6ec484bc937460763 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 12 Feb 2024 23:20:47 +0100 Subject: [PATCH 421/595] Create update-gradle.yml --- .github/workflows/update-gradle.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/update-gradle.yml diff --git a/.github/workflows/update-gradle.yml b/.github/workflows/update-gradle.yml new file mode 100644 index 00000000000..6581d282ecd --- /dev/null +++ b/.github/workflows/update-gradle.yml @@ -0,0 +1,19 @@ +name: Update Gradle Wrapper + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * 0" + +jobs: + update-gradle-wrapper: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Update Gradle Wrapper + uses: gradle-update/update-gradle-wrapper-action@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + set-distribution-checksum: false From 0ffc35fb2a0135966f2f915986b426dc50a64a58 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 12 Feb 2024 23:26:17 +0100 Subject: [PATCH 422/595] Update update-gradle.yml --- .github/workflows/update-gradle.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-gradle.yml b/.github/workflows/update-gradle.yml index 6581d282ecd..11542359b70 100644 --- a/.github/workflows/update-gradle.yml +++ b/.github/workflows/update-gradle.yml @@ -10,7 +10,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'temurin' - name: Update Gradle Wrapper uses: gradle-update/update-gradle-wrapper-action@v1 From f1c6ff8c40273e3336e06f13cb528a67cbb0bbd9 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Mon, 12 Feb 2024 22:28:21 +0000 Subject: [PATCH 423/595] Update Gradle Wrapper from 8.1.1 to 8.6. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 3 ++- gradlew | 29 +++++++++++++---------- gradlew.bat | 20 ++++++++-------- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 zcma&NWl&^owk(X(xVyW%ySuwf;qI=D6|RlDJ2cR^yEKh!@I- zp9QeisK*rlxC>+~7Dk4IxIRsKBHqdR9b3+fyL=ynHmIDe&|>O*VlvO+%z5;9Z$|DJ zb4dO}-R=MKr^6EKJiOrJdLnCJn>np?~vU-1sSFgPu;pthGwf}bG z(1db%xwr#x)r+`4AGu$j7~u2MpVs3VpLp|mx&;>`0p0vH6kF+D2CY0fVdQOZ@h;A` z{infNyvmFUiu*XG}RNMNwXrbec_*a3N=2zJ|Wh5z* z5rAX$JJR{#zP>KY**>xHTuw?|-Rg|o24V)74HcfVT;WtQHXlE+_4iPE8QE#DUm%x0 zEKr75ur~W%w#-My3Tj`hH6EuEW+8K-^5P62$7Sc5OK+22qj&Pd1;)1#4tKihi=~8C zHiQSst0cpri6%OeaR`PY>HH_;CPaRNty%WTm4{wDK8V6gCZlG@U3$~JQZ;HPvDJcT1V{ z?>H@13MJcCNe#5z+MecYNi@VT5|&UiN1D4ATT+%M+h4c$t;C#UAs3O_q=GxK0}8%8 z8J(_M9bayxN}69ex4dzM_P3oh@ZGREjVvn%%r7=xjkqxJP4kj}5tlf;QosR=%4L5y zWhgejO=vao5oX%mOHbhJ8V+SG&K5dABn6!WiKl{|oPkq(9z8l&Mm%(=qGcFzI=eLu zWc_oCLyf;hVlB@dnwY98?75B20=n$>u3b|NB28H0u-6Rpl((%KWEBOfElVWJx+5yg z#SGqwza7f}$z;n~g%4HDU{;V{gXIhft*q2=4zSezGK~nBgu9-Q*rZ#2f=Q}i2|qOp z!!y4p)4o=LVUNhlkp#JL{tfkhXNbB=Ox>M=n6soptJw-IDI|_$is2w}(XY>a=H52d z3zE$tjPUhWWS+5h=KVH&uqQS=$v3nRs&p$%11b%5qtF}S2#Pc`IiyBIF4%A!;AVoI zXU8-Rpv!DQNcF~(qQnyyMy=-AN~U>#&X1j5BLDP{?K!%h!;hfJI>$mdLSvktEr*89 zdJHvby^$xEX0^l9g$xW-d?J;L0#(`UT~zpL&*cEh$L|HPAu=P8`OQZV!-}l`noSp_ zQ-1$q$R-gDL)?6YaM!=8H=QGW$NT2SeZlb8PKJdc=F-cT@j7Xags+Pr*jPtlHFnf- zh?q<6;)27IdPc^Wdy-mX%2s84C1xZq9Xms+==F4);O`VUASmu3(RlgE#0+#giLh-& zcxm3_e}n4{%|X zJp{G_j+%`j_q5}k{eW&TlP}J2wtZ2^<^E(O)4OQX8FDp6RJq!F{(6eHWSD3=f~(h} zJXCf7=r<16X{pHkm%yzYI_=VDP&9bmI1*)YXZeB}F? z(%QsB5fo*FUZxK$oX~X^69;x~j7ms8xlzpt-T15e9}$4T-pC z6PFg@;B-j|Ywajpe4~bk#S6(fO^|mm1hKOPfA%8-_iGCfICE|=P_~e;Wz6my&)h_~ zkv&_xSAw7AZ%ThYF(4jADW4vg=oEdJGVOs>FqamoL3Np8>?!W#!R-0%2Bg4h?kz5I zKV-rKN2n(vUL%D<4oj@|`eJ>0i#TmYBtYmfla;c!ATW%;xGQ0*TW@PTlGG><@dxUI zg>+3SiGdZ%?5N=8uoLA|$4isK$aJ%i{hECP$bK{J#0W2gQ3YEa zZQ50Stn6hqdfxJ*9#NuSLwKFCUGk@c=(igyVL;;2^wi4o30YXSIb2g_ud$ zgpCr@H0qWtk2hK8Q|&wx)}4+hTYlf;$a4#oUM=V@Cw#!$(nOFFpZ;0lc!qd=c$S}Z zGGI-0jg~S~cgVT=4Vo)b)|4phjStD49*EqC)IPwyeKBLcN;Wu@Aeph;emROAwJ-0< z_#>wVm$)ygH|qyxZaet&(Vf%pVdnvKWJn9`%DAxj3ot;v>S$I}jJ$FLBF*~iZ!ZXE zkvui&p}fI0Y=IDX)mm0@tAd|fEHl~J&K}ZX(Mm3cm1UAuwJ42+AO5@HwYfDH7ipIc zmI;1J;J@+aCNG1M`Btf>YT>~c&3j~Qi@Py5JT6;zjx$cvOQW@3oQ>|}GH?TW-E z1R;q^QFjm5W~7f}c3Ww|awg1BAJ^slEV~Pk`Kd`PS$7;SqJZNj->it4DW2l15}xP6 zoCl$kyEF%yJni0(L!Z&14m!1urXh6Btj_5JYt1{#+H8w?5QI%% zo-$KYWNMJVH?Hh@1n7OSu~QhSswL8x0=$<8QG_zepi_`y_79=nK=_ZP_`Em2UI*tyQoB+r{1QYZCpb?2OrgUw#oRH$?^Tj!Req>XiE#~B|~ z+%HB;=ic+R@px4Ld8mwpY;W^A%8%l8$@B@1m5n`TlKI6bz2mp*^^^1mK$COW$HOfp zUGTz-cN9?BGEp}5A!mDFjaiWa2_J2Iq8qj0mXzk; z66JBKRP{p%wN7XobR0YjhAuW9T1Gw3FDvR5dWJ8ElNYF94eF3ebu+QwKjtvVu4L zI9ip#mQ@4uqVdkl-TUQMb^XBJVLW(-$s;Nq;@5gr4`UfLgF$adIhd?rHOa%D);whv z=;krPp~@I+-Z|r#s3yCH+c1US?dnm+C*)r{m+86sTJusLdNu^sqLrfWed^ndHXH`m zd3#cOe3>w-ga(Dus_^ppG9AC>Iq{y%%CK+Cro_sqLCs{VLuK=dev>OL1dis4(PQ5R zcz)>DjEkfV+MO;~>VUlYF00SgfUo~@(&9$Iy2|G0T9BSP?&T22>K46D zL*~j#yJ?)^*%J3!16f)@Y2Z^kS*BzwfAQ7K96rFRIh>#$*$_Io;z>ux@}G98!fWR@ zGTFxv4r~v)Gsd|pF91*-eaZ3Qw1MH$K^7JhWIdX%o$2kCbvGDXy)a?@8T&1dY4`;L z4Kn+f%SSFWE_rpEpL9bnlmYq`D!6F%di<&Hh=+!VI~j)2mfil03T#jJ_s?}VV0_hp z7T9bWxc>Jm2Z0WMU?`Z$xE74Gu~%s{mW!d4uvKCx@WD+gPUQ zV0vQS(Ig++z=EHN)BR44*EDSWIyT~R4$FcF*VEY*8@l=218Q05D2$|fXKFhRgBIEE zdDFB}1dKkoO^7}{5crKX!p?dZWNz$m>1icsXG2N+((x0OIST9Zo^DW_tytvlwXGpn zs8?pJXjEG;T@qrZi%#h93?FP$!&P4JA(&H61tqQi=opRzNpm zkrG}$^t9&XduK*Qa1?355wd8G2CI6QEh@Ua>AsD;7oRUNLPb76m4HG3K?)wF~IyS3`fXuNM>${?wmB zpVz;?6_(Fiadfd{vUCBM*_kt$+F3J+IojI;9L(gc9n3{sEZyzR9o!_mOwFC#tQ{Q~ zP3-`#uK#tP3Q7~Q;4H|wjZHO8h7e4IuBxl&vz2w~D8)w=Wtg31zpZhz%+kzSzL*dV zwp@{WU4i;hJ7c2f1O;7Mz6qRKeASoIv0_bV=i@NMG*l<#+;INk-^`5w@}Dj~;k=|}qM1vq_P z|GpBGe_IKq|LNy9SJhKOQ$c=5L{Dv|Q_lZl=-ky*BFBJLW9&y_C|!vyM~rQx=!vun z?rZJQB5t}Dctmui5i31C_;_}CEn}_W%>oSXtt>@kE1=JW*4*v4tPp;O6 zmAk{)m!)}34pTWg8{i>($%NQ(Tl;QC@J@FfBoc%Gr&m560^kgSfodAFrIjF}aIw)X zoXZ`@IsMkc8_=w%-7`D6Y4e*CG8k%Ud=GXhsTR50jUnm+R*0A(O3UKFg0`K;qp1bl z7``HN=?39ic_kR|^R^~w-*pa?Vj#7|e9F1iRx{GN2?wK!xR1GW!qa=~pjJb-#u1K8 zeR?Y2i-pt}yJq;SCiVHODIvQJX|ZJaT8nO+(?HXbLefulKKgM^B(UIO1r+S=7;kLJ zcH}1J=Px2jsh3Tec&v8Jcbng8;V-`#*UHt?hB(pmOipKwf3Lz8rG$heEB30Sg*2rx zV<|KN86$soN(I!BwO`1n^^uF2*x&vJ$2d$>+`(romzHP|)K_KkO6Hc>_dwMW-M(#S zK(~SiXT1@fvc#U+?|?PniDRm01)f^#55;nhM|wi?oG>yBsa?~?^xTU|fX-R(sTA+5 zaq}-8Tx7zrOy#3*JLIIVsBmHYLdD}!0NP!+ITW+Thn0)8SS!$@)HXwB3tY!fMxc#1 zMp3H?q3eD?u&Njx4;KQ5G>32+GRp1Ee5qMO0lZjaRRu&{W<&~DoJNGkcYF<5(Ab+J zgO>VhBl{okDPn78<%&e2mR{jwVCz5Og;*Z;;3%VvoGo_;HaGLWYF7q#jDX=Z#Ml`H z858YVV$%J|e<1n`%6Vsvq7GmnAV0wW4$5qQ3uR@1i>tW{xrl|ExywIc?fNgYlA?C5 zh$ezAFb5{rQu6i7BSS5*J-|9DQ{6^BVQ{b*lq`xS@RyrsJN?-t=MTMPY;WYeKBCNg z^2|pN!Q^WPJuuO4!|P@jzt&tY1Y8d%FNK5xK(!@`jO2aEA*4 zkO6b|UVBipci?){-Ke=+1;mGlND8)6+P;8sq}UXw2hn;fc7nM>g}GSMWu&v&fqh

iViYT=fZ(|3Ox^$aWPp4a8h24tD<|8-!aK0lHgL$N7Efw}J zVIB!7=T$U`ao1?upi5V4Et*-lTG0XvExbf!ya{cua==$WJyVG(CmA6Of*8E@DSE%L z`V^$qz&RU$7G5mg;8;=#`@rRG`-uS18$0WPN@!v2d{H2sOqP|!(cQ@ zUHo!d>>yFArLPf1q`uBvY32miqShLT1B@gDL4XoVTK&@owOoD)OIHXrYK-a1d$B{v zF^}8D3Y^g%^cnvScOSJR5QNH+BI%d|;J;wWM3~l>${fb8DNPg)wrf|GBP8p%LNGN# z3EaIiItgwtGgT&iYCFy9-LG}bMI|4LdmmJt@V@% zb6B)1kc=T)(|L@0;wr<>=?r04N;E&ef+7C^`wPWtyQe(*pD1pI_&XHy|0gIGHMekd zF_*M4yi6J&Z4LQj65)S zXwdM{SwUo%3SbPwFsHgqF@V|6afT|R6?&S;lw=8% z3}@9B=#JI3@B*#4s!O))~z zc>2_4Q_#&+5V`GFd?88^;c1i7;Vv_I*qt!_Yx*n=;rj!82rrR2rQ8u5(Ejlo{15P% zs~!{%XJ>FmJ})H^I9bn^Re&38H{xA!0l3^89k(oU;bZWXM@kn$#aoS&Y4l^-WEn-fH39Jb9lA%s*WsKJQl?n9B7_~P z-XM&WL7Z!PcoF6_D>V@$CvUIEy=+Z&0kt{szMk=f1|M+r*a43^$$B^MidrT0J;RI` z(?f!O<8UZkm$_Ny$Hth1J#^4ni+im8M9mr&k|3cIgwvjAgjH z8`N&h25xV#v*d$qBX5jkI|xOhQn!>IYZK7l5#^P4M&twe9&Ey@@GxYMxBZq2e7?`q z$~Szs0!g{2fGcp9PZEt|rdQ6bhAgpcLHPz?f-vB?$dc*!9OL?Q8mn7->bFD2Si60* z!O%y)fCdMSV|lkF9w%x~J*A&srMyYY3{=&$}H zGQ4VG_?$2X(0|vT0{=;W$~icCI{b6W{B!Q8xdGhF|D{25G_5_+%s(46lhvNLkik~R z>nr(&C#5wwOzJZQo9m|U<;&Wk!_#q|V>fsmj1g<6%hB{jGoNUPjgJslld>xmODzGjYc?7JSuA?A_QzjDw5AsRgi@Y|Z0{F{!1=!NES-#*f^s4l0Hu zz468))2IY5dmD9pa*(yT5{EyP^G>@ZWumealS-*WeRcZ}B%gxq{MiJ|RyX-^C1V=0 z@iKdrGi1jTe8Ya^x7yyH$kBNvM4R~`fbPq$BzHum-3Zo8C6=KW@||>zsA8-Y9uV5V z#oq-f5L5}V<&wF4@X@<3^C%ptp6+Ce)~hGl`kwj)bsAjmo_GU^r940Z-|`<)oGnh7 zFF0Tde3>ui?8Yj{sF-Z@)yQd~CGZ*w-6p2U<8}JO-sRsVI5dBji`01W8A&3$?}lxBaC&vn0E$c5tW* zX>5(zzZ=qn&!J~KdsPl;P@bmA-Pr8T*)eh_+Dv5=Ma|XSle6t(k8qcgNyar{*ReQ8 zTXwi=8vr>!3Ywr+BhggHDw8ke==NTQVMCK`$69fhzEFB*4+H9LIvdt-#IbhZvpS}} zO3lz;P?zr0*0$%-Rq_y^k(?I{Mk}h@w}cZpMUp|ucs55bcloL2)($u%mXQw({Wzc~ z;6nu5MkjP)0C(@%6Q_I_vsWrfhl7Zpoxw#WoE~r&GOSCz;_ro6i(^hM>I$8y>`!wW z*U^@?B!MMmb89I}2(hcE4zN2G^kwyWCZp5JG>$Ez7zP~D=J^LMjSM)27_0B_X^C(M z`fFT+%DcKlu?^)FCK>QzSnV%IsXVcUFhFdBP!6~se&xxrIxsvySAWu++IrH;FbcY$ z2DWTvSBRfLwdhr0nMx+URA$j3i7_*6BWv#DXfym?ZRDcX9C?cY9sD3q)uBDR3uWg= z(lUIzB)G$Hr!){>E{s4Dew+tb9kvToZp-1&c?y2wn@Z~(VBhqz`cB;{E4(P3N2*nJ z_>~g@;UF2iG{Kt(<1PyePTKahF8<)pozZ*xH~U-kfoAayCwJViIrnqwqO}7{0pHw$ zs2Kx?s#vQr7XZ264>5RNKSL8|Ty^=PsIx^}QqOOcfpGUU4tRkUc|kc7-!Ae6!+B{o~7nFpm3|G5^=0#Bnm6`V}oSQlrX(u%OWnC zoLPy&Q;1Jui&7ST0~#+}I^&?vcE*t47~Xq#YwvA^6^} z`WkC)$AkNub|t@S!$8CBlwbV~?yp&@9h{D|3z-vJXgzRC5^nYm+PyPcgRzAnEi6Q^gslXYRv4nycsy-SJu?lMps-? zV`U*#WnFsdPLL)Q$AmD|0`UaC4ND07+&UmOu!eHruzV|OUox<+Jl|Mr@6~C`T@P%s zW7sgXLF2SSe9Fl^O(I*{9wsFSYb2l%-;&Pi^dpv!{)C3d0AlNY6!4fgmSgj_wQ*7Am7&$z;Jg&wgR-Ih;lUvWS|KTSg!&s_E9_bXBkZvGiC6bFKDWZxsD$*NZ#_8bl zG1P-#@?OQzED7@jlMJTH@V!6k;W>auvft)}g zhoV{7$q=*;=l{O>Q4a@ ziMjf_u*o^PsO)#BjC%0^h>Xp@;5$p{JSYDt)zbb}s{Kbt!T*I@Pk@X0zds6wsefuU zW$XY%yyRGC94=6mf?x+bbA5CDQ2AgW1T-jVAJbm7K(gp+;v6E0WI#kuACgV$r}6L? zd|Tj?^%^*N&b>Dd{Wr$FS2qI#Ucs1yd4N+RBUQiSZGujH`#I)mG&VKoDh=KKFl4=G z&MagXl6*<)$6P}*Tiebpz5L=oMaPrN+caUXRJ`D?=K9!e0f{@D&cZLKN?iNP@X0aF zE(^pl+;*T5qt?1jRC=5PMgV!XNITRLS_=9{CJExaQj;lt!&pdzpK?8p>%Mb+D z?yO*uSung=-`QQ@yX@Hyd4@CI^r{2oiu`%^bNkz+Nkk!IunjwNC|WcqvX~k=><-I3 zDQdbdb|!v+Iz01$w@aMl!R)koD77Xp;eZwzSl-AT zr@Vu{=xvgfq9akRrrM)}=!=xcs+U1JO}{t(avgz`6RqiiX<|hGG1pmop8k6Q+G_mv zJv|RfDheUp2L3=^C=4aCBMBn0aRCU(DQwX-W(RkRwmLeuJYF<0urcaf(=7)JPg<3P zQs!~G)9CT18o!J4{zX{_e}4eS)U-E)0FAt}wEI(c0%HkxgggW;(1E=>J17_hsH^sP z%lT0LGgbUXHx-K*CI-MCrP66UP0PvGqM$MkeLyqHdbgP|_Cm!7te~b8p+e6sQ_3k| zVcwTh6d83ltdnR>D^)BYQpDKlLk3g0Hdcgz2}%qUs9~~Rie)A-BV1mS&naYai#xcZ z(d{8=-LVpTp}2*y)|gR~;qc7fp26}lPcLZ#=JpYcn3AT9(UIdOyg+d(P5T7D&*P}# zQCYplZO5|7+r19%9e`v^vfSS1sbX1c%=w1;oyruXB%Kl$ACgKQ6=qNWLsc=28xJjg zwvsI5-%SGU|3p>&zXVl^vVtQT3o-#$UT9LI@Npz~6=4!>mc431VRNN8od&Ul^+G_kHC`G=6WVWM z%9eWNyy(FTO|A+@x}Ou3CH)oi;t#7rAxdIXfNFwOj_@Y&TGz6P_sqiB`Q6Lxy|Q{`|fgmRG(k+!#b*M+Z9zFce)f-7;?Km5O=LHV9f9_87; zF7%R2B+$?@sH&&-$@tzaPYkw0;=i|;vWdI|Wl3q_Zu>l;XdIw2FjV=;Mq5t1Q0|f< zs08j54Bp`3RzqE=2enlkZxmX6OF+@|2<)A^RNQpBd6o@OXl+i)zO%D4iGiQNuXd+zIR{_lb96{lc~bxsBveIw6umhShTX+3@ZJ=YHh@ zWY3(d0azg;7oHn>H<>?4@*RQbi>SmM=JrHvIG(~BrvI)#W(EAeO6fS+}mxxcc+X~W6&YVl86W9WFSS}Vz-f9vS?XUDBk)3TcF z8V?$4Q)`uKFq>xT=)Y9mMFVTUk*NIA!0$?RP6Ig0TBmUFrq*Q-Agq~DzxjStQyJ({ zBeZ;o5qUUKg=4Hypm|}>>L=XKsZ!F$yNTDO)jt4H0gdQ5$f|d&bnVCMMXhNh)~mN z@_UV6D7MVlsWz+zM+inZZp&P4fj=tm6fX)SG5H>OsQf_I8c~uGCig$GzuwViK54bcgL;VN|FnyQl>Ed7(@>=8$a_UKIz|V6CeVSd2(P z0Uu>A8A+muM%HLFJQ9UZ5c)BSAv_zH#1f02x?h9C}@pN@6{>UiAp>({Fn(T9Q8B z^`zB;kJ5b`>%dLm+Ol}ty!3;8f1XDSVX0AUe5P#@I+FQ-`$(a;zNgz)4x5hz$Hfbg z!Q(z26wHLXko(1`;(BAOg_wShpX0ixfWq3ponndY+u%1gyX)_h=v1zR#V}#q{au6; z!3K=7fQwnRfg6FXtNQmP>`<;!N137paFS%y?;lb1@BEdbvQHYC{976l`cLqn;b8lp zIDY>~m{gDj(wfnK!lpW6pli)HyLEiUrNc%eXTil|F2s(AY+LW5hkKb>TQ3|Q4S9rr zpDs4uK_co6XPsn_z$LeS{K4jFF`2>U`tbgKdyDne`xmR<@6AA+_hPNKCOR-Zqv;xk zu5!HsBUb^!4uJ7v0RuH-7?l?}b=w5lzzXJ~gZcxRKOovSk@|#V+MuX%Y+=;14i*%{)_gSW9(#4%)AV#3__kac1|qUy!uyP{>?U#5wYNq}y$S9pCc zFc~4mgSC*G~j0u#qqp9 z${>3HV~@->GqEhr_Xwoxq?Hjn#=s2;i~g^&Hn|aDKpA>Oc%HlW(KA1?BXqpxB;Ydx)w;2z^MpjJ(Qi(X!$5RC z*P{~%JGDQqojV>2JbEeCE*OEu!$XJ>bWA9Oa_Hd;y)F%MhBRi*LPcdqR8X`NQ&1L# z5#9L*@qxrx8n}LfeB^J{%-?SU{FCwiWyHp682F+|pa+CQa3ZLzBqN1{)h4d6+vBbV zC#NEbQLC;}me3eeYnOG*nXOJZEU$xLZ1<1Y=7r0(-U0P6-AqwMAM`a(Ed#7vJkn6plb4eI4?2y3yOTGmmDQ!z9`wzbf z_OY#0@5=bnep;MV0X_;;SJJWEf^E6Bd^tVJ9znWx&Ks8t*B>AM@?;D4oWUGc z!H*`6d7Cxo6VuyS4Eye&L1ZRhrRmN6Lr`{NL(wDbif|y&z)JN>Fl5#Wi&mMIr5i;x zBx}3YfF>>8EC(fYnmpu~)CYHuHCyr5*`ECap%t@y=jD>!_%3iiE|LN$mK9>- zHdtpy8fGZtkZF?%TW~29JIAfi2jZT8>OA7=h;8T{{k?c2`nCEx9$r zS+*&vt~2o^^J+}RDG@+9&M^K*z4p{5#IEVbz`1%`m5c2};aGt=V?~vIM}ZdPECDI)47|CWBCfDWUbxBCnmYivQ*0Nu_xb*C>~C9(VjHM zxe<*D<#dQ8TlpMX2c@M<9$w!RP$hpG4cs%AI){jp*Sj|*`m)5(Bw*A0$*i-(CA5#%>a)$+jI2C9r6|(>J8InryENI z$NohnxDUB;wAYDwrb*!N3noBTKPpPN}~09SEL18tkG zxgz(RYU_;DPT{l?Q$+eaZaxnsWCA^ds^0PVRkIM%bOd|G2IEBBiz{&^JtNsODs;5z zICt_Zj8wo^KT$7Bg4H+y!Df#3mbl%%?|EXe!&(Vmac1DJ*y~3+kRKAD=Ovde4^^%~ zw<9av18HLyrf*_>Slp;^i`Uy~`mvBjZ|?Ad63yQa#YK`4+c6;pW4?XIY9G1(Xh9WO8{F-Aju+nS9Vmv=$Ac0ienZ+p9*O%NG zMZKy5?%Z6TAJTE?o5vEr0r>f>hb#2w2U3DL64*au_@P!J!TL`oH2r*{>ffu6|A7tv zL4juf$DZ1MW5ZPsG!5)`k8d8c$J$o;%EIL0va9&GzWvkS%ZsGb#S(?{!UFOZ9<$a| zY|a+5kmD5N&{vRqkgY>aHsBT&`rg|&kezoD)gP0fsNYHsO#TRc_$n6Lf1Z{?+DLziXlHrq4sf(!>O{?Tj;Eh@%)+nRE_2VxbN&&%%caU#JDU%vL3}Cb zsb4AazPI{>8H&d=jUaZDS$-0^AxE@utGs;-Ez_F(qC9T=UZX=>ok2k2 ziTn{K?y~a5reD2A)P${NoI^>JXn>`IeArow(41c-Wm~)wiryEP(OS{YXWi7;%dG9v zI?mwu1MxD{yp_rrk!j^cKM)dc4@p4Ezyo%lRN|XyD}}>v=Xoib0gOcdXrQ^*61HNj z=NP|pd>@yfvr-=m{8$3A8TQGMTE7g=z!%yt`8`Bk-0MMwW~h^++;qyUP!J~ykh1GO z(FZ59xuFR$(WE;F@UUyE@Sp>`aVNjyj=Ty>_Vo}xf`e7`F;j-IgL5`1~-#70$9_=uBMq!2&1l zomRgpD58@)YYfvLtPW}{C5B35R;ZVvB<<#)x%srmc_S=A7F@DW8>QOEGwD6suhwCg z>Pa+YyULhmw%BA*4yjDp|2{!T98~<6Yfd(wo1mQ!KWwq0eg+6)o1>W~f~kL<-S+P@$wx*zeI|1t7z#Sxr5 zt6w+;YblPQNplq4Z#T$GLX#j6yldXAqj>4gAnnWtBICUnA&-dtnlh=t0Ho_vEKwV` z)DlJi#!@nkYV#$!)@>udAU*hF?V`2$Hf=V&6PP_|r#Iv*J$9)pF@X3`k;5})9^o4y z&)~?EjX5yX12O(BsFy-l6}nYeuKkiq`u9145&3Ssg^y{5G3Pse z9w(YVa0)N-fLaBq1`P!_#>SS(8fh_5!f{UrgZ~uEdeMJIz7DzI5!NHHqQtm~#CPij z?=N|J>nPR6_sL7!f4hD_|KH`vf8(Wpnj-(gPWH+ZvID}%?~68SwhPTC3u1_cB`otq z)U?6qo!ZLi5b>*KnYHWW=3F!p%h1;h{L&(Q&{qY6)_qxNfbP6E3yYpW!EO+IW3?@J z);4>g4gnl^8klu7uA>eGF6rIGSynacogr)KUwE_R4E5Xzi*Qir@b-jy55-JPC8c~( zo!W8y9OGZ&`xmc8;=4-U9=h{vCqfCNzYirONmGbRQlR`WWlgnY+1wCXbMz&NT~9*| z6@FrzP!LX&{no2!Ln_3|I==_4`@}V?4a;YZKTdw;vT<+K+z=uWbW(&bXEaWJ^W8Td z-3&1bY^Z*oM<=M}LVt>_j+p=2Iu7pZmbXrhQ_k)ysE9yXKygFNw$5hwDn(M>H+e1&9BM5!|81vd%r%vEm zqxY3?F@fb6O#5UunwgAHR9jp_W2zZ}NGp2%mTW@(hz7$^+a`A?mb8|_G*GNMJ) zjqegXQio=i@AINre&%ofexAr95aop5C+0MZ0m-l=MeO8m3epm7U%vZB8+I+C*iNFM z#T3l`gknX;D$-`2XT^Cg*vrv=RH+P;_dfF++cP?B_msQI4j+lt&rX2)3GaJx%W*Nn zkML%D{z5tpHH=dksQ*gzc|}gzW;lwAbxoR07VNgS*-c3d&8J|;@3t^ zVUz*J*&r7DFRuFVDCJDK8V9NN5hvpgGjwx+5n)qa;YCKe8TKtdnh{I7NU9BCN!0dq zczrBk8pE{{@vJa9ywR@mq*J=v+PG;?fwqlJVhijG!3VmIKs>9T6r7MJpC)m!Tc#>g zMtVsU>wbwFJEfwZ{vB|ZlttNe83)$iz`~#8UJ^r)lJ@HA&G#}W&ZH*;k{=TavpjWE z7hdyLZPf*X%Gm}i`Y{OGeeu^~nB8=`{r#TUrM-`;1cBvEd#d!kPqIgYySYhN-*1;L z^byj%Yi}Gx)Wnkosi337BKs}+5H5dth1JA{Ir-JKN$7zC)*}hqeoD(WfaUDPT>0`- z(6sa0AoIqASwF`>hP}^|)a_j2s^PQn*qVC{Q}htR z5-)duBFXT_V56-+UohKXlq~^6uf!6sA#ttk1o~*QEy_Y-S$gAvq47J9Vtk$5oA$Ct zYhYJ@8{hsC^98${!#Ho?4y5MCa7iGnfz}b9jE~h%EAAv~Qxu)_rAV;^cygV~5r_~?l=B`zObj7S=H=~$W zPtI_m%g$`kL_fVUk9J@>EiBH zOO&jtn~&`hIFMS5S`g8w94R4H40mdNUH4W@@XQk1sr17b{@y|JB*G9z1|CrQjd+GX z6+KyURG3;!*BQrentw{B2R&@2&`2}n(z-2&X7#r!{yg@Soy}cRD~j zj9@UBW+N|4HW4AWapy4wfUI- zZ`gSL6DUlgj*f1hSOGXG0IVH8HxK?o2|3HZ;KW{K+yPAlxtb)NV_2AwJm|E)FRs&& z=c^e7bvUsztY|+f^k7NXs$o1EUq>cR7C0$UKi6IooHWlK_#?IWDkvywnzg&ThWo^? z2O_N{5X39#?eV9l)xI(>@!vSB{DLt*oY!K1R8}_?%+0^C{d9a%N4 zoxHVT1&Lm|uDX%$QrBun5e-F`HJ^T$ zmzv)p@4ZHd_w9!%Hf9UYNvGCw2TTTbrj9pl+T9%-_-}L(tES>Or-}Z4F*{##n3~L~TuxjirGuIY#H7{%$E${?p{Q01 zi6T`n;rbK1yIB9jmQNycD~yZq&mbIsFWHo|ZAChSFPQa<(%d8mGw*V3fh|yFoxOOiWJd(qvVb!Z$b88cg->N=qO*4k~6;R==|9ihg&riu#P~s4Oap9O7f%crSr^rljeIfXDEg>wi)&v*a%7zpz<9w z*r!3q9J|390x`Zk;g$&OeN&ctp)VKRpDSV@kU2Q>jtok($Y-*x8_$2piTxun81@vt z!Vj?COa0fg2RPXMSIo26T=~0d`{oGP*eV+$!0I<(4azk&Vj3SiG=Q!6mX0p$z7I}; z9BJUFgT-K9MQQ-0@Z=^7R<{bn2Fm48endsSs`V7_@%8?Bxkqv>BDoVcj?K#dV#uUP zL1ND~?D-|VGKe3Rw_7-Idpht>H6XRLh*U7epS6byiGvJpr%d}XwfusjH9g;Z98H`x zyde%%5mhGOiL4wljCaWCk-&uE4_OOccb9c!ZaWt4B(wYl!?vyzl%7n~QepN&eFUrw zFIOl9c({``6~QD+43*_tzP{f2x41h(?b43^y6=iwyB)2os5hBE!@YUS5?N_tXd=h( z)WE286Fbd>R4M^P{!G)f;h<3Q>Fipuy+d2q-)!RyTgt;wr$(?9ox3;q+{E*ZQHhOn;lM`cjnu9 zXa48ks-v(~b*;MAI<>YZH(^NV8vjb34beE<_cwKlJoR;k6lJNSP6v}uiyRD?|0w+X@o1ONrH8a$fCxXpf? z?$DL0)7|X}Oc%h^zrMKWc-NS9I0Utu@>*j}b@tJ=ixQSJ={4@854wzW@E>VSL+Y{i z#0b=WpbCZS>kUCO_iQz)LoE>P5LIG-hv9E+oG}DtlIDF>$tJ1aw9^LuhLEHt?BCj& z(O4I8v1s#HUi5A>nIS-JK{v!7dJx)^Yg%XjNmlkWAq2*cv#tHgz`Y(bETc6CuO1VkN^L-L3j_x<4NqYb5rzrLC-7uOv z!5e`GZt%B782C5-fGnn*GhDF$%(qP<74Z}3xx+{$4cYKy2ikxI7B2N+2r07DN;|-T->nU&!=Cm#rZt%O_5c&1Z%nlWq3TKAW0w zQqemZw_ue--2uKQsx+niCUou?HjD`xhEjjQd3%rrBi82crq*~#uA4+>vR<_S{~5ce z-2EIl?~s z1=GVL{NxP1N3%=AOaC}j_Fv=ur&THz zyO!d9kHq|c73kpq`$+t+8Bw7MgeR5~`d7ChYyGCBWSteTB>8WAU(NPYt2Dk`@#+}= zI4SvLlyk#pBgVigEe`?NG*vl7V6m+<}%FwPV=~PvvA)=#ths==DRTDEYh4V5}Cf$z@#;< zyWfLY_5sP$gc3LLl2x+Ii)#b2nhNXJ{R~vk`s5U7Nyu^3yFg&D%Txwj6QezMX`V(x z=C`{76*mNb!qHHs)#GgGZ_7|vkt9izl_&PBrsu@}L`X{95-2jf99K)0=*N)VxBX2q z((vkpP2RneSIiIUEnGb?VqbMb=Zia+rF~+iqslydE34cSLJ&BJW^3knX@M;t*b=EA zNvGzv41Ld_T+WT#XjDB840vovUU^FtN_)G}7v)1lPetgpEK9YS^OWFkPoE{ovj^=@ zO9N$S=G$1ecndT_=5ehth2Lmd1II-PuT~C9`XVePw$y8J#dpZ?Tss<6wtVglm(Ok7 z3?^oi@pPio6l&!z8JY(pJvG=*pI?GIOu}e^EB6QYk$#FJQ%^AIK$I4epJ+9t?KjqA+bkj&PQ*|vLttme+`9G=L% ziadyMw_7-M)hS(3E$QGNCu|o23|%O+VN7;Qggp?PB3K-iSeBa2b}V4_wY`G1Jsfz4 z9|SdB^;|I8E8gWqHKx!vj_@SMY^hLEIbSMCuE?WKq=c2mJK z8LoG-pnY!uhqFv&L?yEuxo{dpMTsmCn)95xanqBrNPTgXP((H$9N${Ow~Is-FBg%h z53;|Y5$MUN)9W2HBe2TD`ct^LHI<(xWrw}$qSoei?}s)&w$;&!14w6B6>Yr6Y8b)S z0r71`WmAvJJ`1h&poLftLUS6Ir zC$bG9!Im_4Zjse)#K=oJM9mHW1{%l8sz$1o?ltdKlLTxWWPB>Vk22czVt|1%^wnN@*!l)}?EgtvhC>vlHm^t+ogpgHI1_$1ox9e;>0!+b(tBrmXRB`PY1vp-R**8N7 zGP|QqI$m(Rdu#=(?!(N}G9QhQ%o!aXE=aN{&wtGP8|_qh+7a_j_sU5|J^)vxq;# zjvzLn%_QPHZZIWu1&mRAj;Sa_97p_lLq_{~j!M9N^1yp3U_SxRqK&JnR%6VI#^E12 z>CdOVI^_9aPK2eZ4h&^{pQs}xsijXgFYRIxJ~N7&BB9jUR1fm!(xl)mvy|3e6-B3j zJn#ajL;bFTYJ2+Q)tDjx=3IklO@Q+FFM}6UJr6km7hj7th9n_&JR7fnqC!hTZoM~T zBeaVFp%)0cbPhejX<8pf5HyRUj2>aXnXBqDJe73~J%P(2C?-RT{c3NjE`)om! zl$uewSgWkE66$Kb34+QZZvRn`fob~Cl9=cRk@Es}KQm=?E~CE%spXaMO6YmrMl%9Q zlA3Q$3|L1QJ4?->UjT&CBd!~ru{Ih^in&JXO=|<6J!&qp zRe*OZ*cj5bHYlz!!~iEKcuE|;U4vN1rk$xq6>bUWD*u(V@8sG^7>kVuo(QL@Ki;yL zWC!FT(q{E8#on>%1iAS0HMZDJg{Z{^!De(vSIq&;1$+b)oRMwA3nc3mdTSG#3uYO_ z>+x;7p4I;uHz?ZB>dA-BKl+t-3IB!jBRgdvAbW!aJ(Q{aT>+iz?91`C-xbe)IBoND z9_Xth{6?(y3rddwY$GD65IT#f3<(0o#`di{sh2gm{dw*#-Vnc3r=4==&PU^hCv$qd zjw;>i&?L*Wq#TxG$mFIUf>eK+170KG;~+o&1;Tom9}}mKo23KwdEM6UonXgc z!6N(@k8q@HPw{O8O!lAyi{rZv|DpgfU{py+j(X_cwpKqcalcqKIr0kM^%Br3SdeD> zHSKV94Yxw;pjzDHo!Q?8^0bb%L|wC;4U^9I#pd5O&eexX+Im{ z?jKnCcsE|H?{uGMqVie_C~w7GX)kYGWAg%-?8|N_1#W-|4F)3YTDC+QSq1s!DnOML3@d`mG%o2YbYd#jww|jD$gotpa)kntakp#K;+yo-_ZF9qrNZw<%#C zuPE@#3RocLgPyiBZ+R_-FJ_$xP!RzWm|aN)S+{$LY9vvN+IW~Kf3TsEIvP+B9Mtm! zpfNNxObWQpLoaO&cJh5>%slZnHl_Q~(-Tfh!DMz(dTWld@LG1VRF`9`DYKhyNv z2pU|UZ$#_yUx_B_|MxUq^glT}O5Xt(Vm4Mr02><%C)@v;vPb@pT$*yzJ4aPc_FZ3z z3}PLoMBIM>q_9U2rl^sGhk1VUJ89=*?7|v`{!Z{6bqFMq(mYiA?%KbsI~JwuqVA9$H5vDE+VocjX+G^%bieqx->s;XWlKcuv(s%y%D5Xbc9+ zc(_2nYS1&^yL*ey664&4`IoOeDIig}y-E~_GS?m;D!xv5-xwz+G`5l6V+}CpeJDi^ z%4ed$qowm88=iYG+(`ld5Uh&>Dgs4uPHSJ^TngXP_V6fPyl~>2bhi20QB%lSd#yYn zO05?KT1z@?^-bqO8Cg`;ft>ilejsw@2%RR7;`$Vs;FmO(Yr3Fp`pHGr@P2hC%QcA|X&N2Dn zYf`MqXdHi%cGR@%y7Rg7?d3?an){s$zA{!H;Ie5exE#c~@NhQUFG8V=SQh%UxUeiV zd7#UcYqD=lk-}sEwlpu&H^T_V0{#G?lZMxL7ih_&{(g)MWBnCZxtXg znr#}>U^6!jA%e}@Gj49LWG@*&t0V>Cxc3?oO7LSG%~)Y5}f7vqUUnQ;STjdDU}P9IF9d9<$;=QaXc zL1^X7>fa^jHBu_}9}J~#-oz3Oq^JmGR#?GO7b9a(=R@fw@}Q{{@`Wy1vIQ#Bw?>@X z-_RGG@wt|%u`XUc%W{J z>iSeiz8C3H7@St3mOr_mU+&bL#Uif;+Xw-aZdNYUpdf>Rvu0i0t6k*}vwU`XNO2he z%miH|1tQ8~ZK!zmL&wa3E;l?!!XzgV#%PMVU!0xrDsNNZUWKlbiOjzH-1Uoxm8E#r`#2Sz;-o&qcqB zC-O_R{QGuynW14@)7&@yw1U}uP(1cov)twxeLus0s|7ayrtT8c#`&2~Fiu2=R;1_4bCaD=*E@cYI>7YSnt)nQc zohw5CsK%m?8Ack)qNx`W0_v$5S}nO|(V|RZKBD+btO?JXe|~^Qqur%@eO~<8-L^9d z=GA3-V14ng9L29~XJ>a5k~xT2152zLhM*@zlp2P5Eu}bywkcqR;ISbas&#T#;HZSf z2m69qTV(V@EkY(1Dk3`}j)JMo%ZVJ*5eB zYOjIisi+igK0#yW*gBGj?@I{~mUOvRFQR^pJbEbzFxTubnrw(Muk%}jI+vXmJ;{Q6 zrSobKD>T%}jV4Ub?L1+MGOD~0Ir%-`iTnWZN^~YPrcP5y3VMAzQ+&en^VzKEb$K!Q z<7Dbg&DNXuow*eD5yMr+#08nF!;%4vGrJI++5HdCFcGLfMW!KS*Oi@=7hFwDG!h2< zPunUEAF+HncQkbfFj&pbzp|MU*~60Z(|Ik%Tn{BXMN!hZOosNIseT?R;A`W?=d?5X zK(FB=9mZusYahp|K-wyb={rOpdn=@;4YI2W0EcbMKyo~-#^?h`BA9~o285%oY zfifCh5Lk$SY@|2A@a!T2V+{^!psQkx4?x0HSV`(w9{l75QxMk!)U52Lbhn{8ol?S) zCKo*7R(z!uk<6*qO=wh!Pul{(qq6g6xW;X68GI_CXp`XwO zxuSgPRAtM8K7}5E#-GM!*ydOOG_{A{)hkCII<|2=ma*71ci_-}VPARm3crFQjLYV! z9zbz82$|l01mv`$WahE2$=fAGWkd^X2kY(J7iz}WGS z@%MyBEO=A?HB9=^?nX`@nh;7;laAjs+fbo!|K^mE!tOB>$2a_O0y-*uaIn8k^6Y zSbuv;5~##*4Y~+y7Z5O*3w4qgI5V^17u*ZeupVGH^nM&$qmAk|anf*>r zWc5CV;-JY-Z@Uq1Irpb^O`L_7AGiqd*YpGUShb==os$uN3yYvb`wm6d=?T*it&pDk zo`vhw)RZX|91^^Wa_ti2zBFyWy4cJu#g)_S6~jT}CC{DJ_kKpT`$oAL%b^!2M;JgT zM3ZNbUB?}kP(*YYvXDIH8^7LUxz5oE%kMhF!rnPqv!GiY0o}NR$OD=ITDo9r%4E>E0Y^R(rS^~XjWyVI6 zMOR5rPXhTp*G*M&X#NTL`Hu*R+u*QNoiOKg4CtNPrjgH>c?Hi4MUG#I917fx**+pJfOo!zFM&*da&G_x)L(`k&TPI*t3e^{crd zX<4I$5nBQ8Ax_lmNRa~E*zS-R0sxkz`|>7q_?*e%7bxqNm3_eRG#1ae3gtV9!fQpY z+!^a38o4ZGy9!J5sylDxZTx$JmG!wg7;>&5H1)>f4dXj;B+@6tMlL=)cLl={jLMxY zbbf1ax3S4>bwB9-$;SN2?+GULu;UA-35;VY*^9Blx)Jwyb$=U!D>HhB&=jSsd^6yw zL)?a|>GxU!W}ocTC(?-%z3!IUhw^uzc`Vz_g>-tv)(XA#JK^)ZnC|l1`@CdX1@|!| z_9gQ)7uOf?cR@KDp97*>6X|;t@Y`k_N@)aH7gY27)COv^P3ya9I{4z~vUjLR9~z1Z z5=G{mVtKH*&$*t0@}-i_v|3B$AHHYale7>E+jP`ClqG%L{u;*ff_h@)al?RuL7tOO z->;I}>%WI{;vbLP3VIQ^iA$4wl6@0sDj|~112Y4OFjMs`13!$JGkp%b&E8QzJw_L5 zOnw9joc0^;O%OpF$Qp)W1HI!$4BaXX84`%@#^dk^hFp^pQ@rx4g(8Xjy#!X%+X5Jd@fs3amGT`}mhq#L97R>OwT5-m|h#yT_-v@(k$q7P*9X~T*3)LTdzP!*B} z+SldbVWrrwQo9wX*%FyK+sRXTa@O?WM^FGWOE?S`R(0P{<6p#f?0NJvnBia?k^fX2 zNQs7K-?EijgHJY}&zsr;qJ<*PCZUd*x|dD=IQPUK_nn)@X4KWtqoJNHkT?ZWL_hF? zS8lp2(q>;RXR|F;1O}EE#}gCrY~#n^O`_I&?&z5~7N;zL0)3Tup`%)oHMK-^r$NT% zbFg|o?b9w(q@)6w5V%si<$!U<#}s#x@0aX-hP>zwS#9*75VXA4K*%gUc>+yzupTDBOKH8WR4V0pM(HrfbQ&eJ79>HdCvE=F z|J>s;;iDLB^3(9}?biKbxf1$lI!*Z%*0&8UUq}wMyPs_hclyQQi4;NUY+x2qy|0J; zhn8;5)4ED1oHwg+VZF|80<4MrL97tGGXc5Sw$wAI#|2*cvQ=jB5+{AjMiDHmhUC*a zlmiZ`LAuAn_}hftXh;`Kq0zblDk8?O-`tnilIh|;3lZp@F_osJUV9`*R29M?7H{Fy z`nfVEIDIWXmU&YW;NjU8)EJpXhxe5t+scf|VXM!^bBlwNh)~7|3?fWwo_~ZFk(22% zTMesYw+LNx3J-_|DM~`v93yXe=jPD{q;li;5PD?Dyk+b? zo21|XpT@)$BM$%F=P9J19Vi&1#{jM3!^Y&fr&_`toi`XB1!n>sbL%U9I5<7!@?t)~ z;&H%z>bAaQ4f$wIzkjH70;<8tpUoxzKrPhn#IQfS%9l5=Iu))^XC<58D!-O z{B+o5R^Z21H0T9JQ5gNJnqh#qH^na|z92=hONIM~@_iuOi|F>jBh-?aA20}Qx~EpDGElELNn~|7WRXRFnw+Wdo`|# zBpU=Cz3z%cUJ0mx_1($X<40XEIYz(`noWeO+x#yb_pwj6)R(__%@_Cf>txOQ74wSJ z0#F3(zWWaR-jMEY$7C*3HJrohc79>MCUu26mfYN)f4M~4gD`}EX4e}A!U}QV8!S47 z6y-U-%+h`1n`*pQuKE%Av0@)+wBZr9mH}@vH@i{v(m-6QK7Ncf17x_D=)32`FOjjo zg|^VPf5c6-!FxN{25dvVh#fog=NNpXz zfB$o+0jbRkHH{!TKhE709f+jI^$3#v1Nmf80w`@7-5$1Iv_`)W^px8P-({xwb;D0y z7LKDAHgX<84?l!I*Dvi2#D@oAE^J|g$3!)x1Ua;_;<@#l1fD}lqU2_tS^6Ht$1Wl} zBESo7o^)9-Tjuz$8YQSGhfs{BQV6zW7dA?0b(Dbt=UnQs&4zHfe_sj{RJ4uS-vQpC zX;Bbsuju4%!o8?&m4UZU@~ZZjeFF6ex2ss5_60_JS_|iNc+R0GIjH1@Z z=rLT9%B|WWgOrR7IiIwr2=T;Ne?30M!@{%Qf8o`!>=s<2CBpCK_TWc(DX51>e^xh8 z&@$^b6CgOd7KXQV&Y4%}_#uN*mbanXq(2=Nj`L7H7*k(6F8s6{FOw@(DzU`4-*77{ zF+dxpv}%mFpYK?>N_2*#Y?oB*qEKB}VoQ@bzm>ptmVS_EC(#}Lxxx730trt0G)#$b zE=wVvtqOct1%*9}U{q<)2?{+0TzZzP0jgf9*)arV)*e!f`|jgT{7_9iS@e)recI#z zbzolURQ+TOzE!ymqvBY7+5NnAbWxvMLsLTwEbFqW=CPyCsmJ}P1^V30|D5E|p3BC5 z)3|qgw@ra7aXb-wsa|l^in~1_fm{7bS9jhVRkYVO#U{qMp z)Wce+|DJ}4<2gp8r0_xfZpMo#{Hl2MfjLcZdRB9(B(A(f;+4s*FxV{1F|4d`*sRNd zp4#@sEY|?^FIJ;tmH{@keZ$P(sLh5IdOk@k^0uB^BWr@pk6mHy$qf&~rI>P*a;h0C{%oA*i!VjWn&D~O#MxN&f@1Po# zKN+ zrGrkSjcr?^R#nGl<#Q722^wbYcgW@{+6CBS<1@%dPA8HC!~a`jTz<`g_l5N1M@9wn9GOAZ>nqNgq!yOCbZ@1z`U_N`Z>}+1HIZxk*5RDc&rd5{3qjRh8QmT$VyS;jK z;AF+r6XnnCp=wQYoG|rT2@8&IvKq*IB_WvS%nt%e{MCFm`&W*#LXc|HrD?nVBo=(8*=Aq?u$sDA_sC_RPDUiQ+wnIJET8vx$&fxkW~kP9qXKt zozR)@xGC!P)CTkjeWvXW5&@2?)qt)jiYWWBU?AUtzAN}{JE1I)dfz~7$;}~BmQF`k zpn11qmObXwRB8&rnEG*#4Xax3XBkKlw(;tb?Np^i+H8m(Wyz9k{~ogba@laiEk;2! zV*QV^6g6(QG%vX5Um#^sT&_e`B1pBW5yVth~xUs#0}nv?~C#l?W+9Lsb_5)!71rirGvY zTIJ$OPOY516Y|_014sNv+Z8cc5t_V=i>lWV=vNu#!58y9Zl&GsMEW#pPYPYGHQ|;vFvd*9eM==$_=vc7xnyz0~ zY}r??$<`wAO?JQk@?RGvkWVJlq2dk9vB(yV^vm{=NVI8dhsX<)O(#nr9YD?I?(VmQ z^r7VfUBn<~p3()8yOBjm$#KWx!5hRW)5Jl7wY@ky9lNM^jaT##8QGVsYeaVywmpv>X|Xj7gWE1Ezai&wVLt3p)k4w~yrskT-!PR!kiyQlaxl(( zXhF%Q9x}1TMt3~u@|#wWm-Vq?ZerK={8@~&@9r5JW}r#45#rWii};t`{5#&3$W)|@ zbAf2yDNe0q}NEUvq_Quq3cTjcw z@H_;$hu&xllCI9CFDLuScEMg|x{S7GdV8<&Mq=ezDnRZAyX-8gv97YTm0bg=d)(>N z+B2FcqvI9>jGtnK%eO%y zoBPkJTk%y`8TLf4)IXPBn`U|9>O~WL2C~C$z~9|0m*YH<-vg2CD^SX#&)B4ngOSG$ zV^wmy_iQk>dfN@Pv(ckfy&#ak@MLC7&Q6Ro#!ezM*VEh`+b3Jt%m(^T&p&WJ2Oqvj zs-4nq0TW6cv~(YI$n0UkfwN}kg3_fp?(ijSV#tR9L0}l2qjc7W?i*q01=St0eZ=4h zyGQbEw`9OEH>NMuIe)hVwYHsGERWOD;JxEiO7cQv%pFCeR+IyhwQ|y@&^24k+|8fD zLiOWFNJ2&vu2&`Jv96_z-Cd5RLgmeY3*4rDOQo?Jm`;I_(+ejsPM03!ly!*Cu}Cco zrQSrEDHNyzT(D5s1rZq!8#?f6@v6dB7a-aWs(Qk>N?UGAo{gytlh$%_IhyL7h?DLXDGx zgxGEBQoCAWo-$LRvM=F5MTle`M})t3vVv;2j0HZY&G z22^iGhV@uaJh(XyyY%} zd4iH_UfdV#T=3n}(Lj^|n;O4|$;xhu*8T3hR1mc_A}fK}jfZ7LX~*n5+`8N2q#rI$ z@<_2VANlYF$vIH$ zl<)+*tIWW78IIINA7Rr7i{<;#^yzxoLNkXL)eSs=%|P>$YQIh+ea_3k z_s7r4%j7%&*NHSl?R4k%1>Z=M9o#zxY!n8sL5>BO-ZP;T3Gut>iLS@U%IBrX6BA3k z)&@q}V8a{X<5B}K5s(c(LQ=%v1ocr`t$EqqY0EqVjr65usa=0bkf|O#ky{j3)WBR(((L^wmyHRzoWuL2~WTC=`yZ zn%VX`L=|Ok0v7?s>IHg?yArBcync5rG#^+u)>a%qjES%dRZoIyA8gQ;StH z1Ao7{<&}6U=5}4v<)1T7t!J_CL%U}CKNs-0xWoTTeqj{5{?Be$L0_tk>M9o8 zo371}S#30rKZFM{`H_(L`EM9DGp+Mifk&IP|C2Zu_)Ghr4Qtpmkm1osCf@%Z$%t+7 zYH$Cr)Ro@3-QDeQJ8m+x6%;?YYT;k6Z0E-?kr>x33`H%*ueBD7Zx~3&HtWn0?2Wt} zTG}*|v?{$ajzt}xPzV%lL1t-URi8*Zn)YljXNGDb>;!905Td|mpa@mHjIH%VIiGx- zd@MqhpYFu4_?y5N4xiHn3vX&|e6r~Xt> zZG`aGq|yTNjv;9E+Txuoa@A(9V7g?1_T5FzRI;!=NP1Kqou1z5?%X~Wwb{trRfd>i z8&y^H)8YnKyA_Fyx>}RNmQIczT?w2J4SNvI{5J&}Wto|8FR(W;Qw#b1G<1%#tmYzQ zQ2mZA-PAdi%RQOhkHy9Ea#TPSw?WxwL@H@cbkZwIq0B!@ns}niALidmn&W?!Vd4Gj zO7FiuV4*6Mr^2xlFSvM;Cp_#r8UaqIzHJQg_z^rEJw&OMm_8NGAY2)rKvki|o1bH~ z$2IbfVeY2L(^*rMRU1lM5Y_sgrDS`Z??nR2lX;zyR=c%UyGb*%TC-Dil?SihkjrQy~TMv6;BMs7P8il`H7DmpVm@rJ;b)hW)BL)GjS154b*xq-NXq2cwE z^;VP7ua2pxvCmxrnqUYQMH%a%nHmwmI33nJM(>4LznvY*k&C0{8f*%?zggpDgkuz&JBx{9mfb@wegEl2v!=}Sq2Gaty0<)UrOT0{MZtZ~j5y&w zXlYa_jY)I_+VA-^#mEox#+G>UgvM!Ac8zI<%JRXM_73Q!#i3O|)lOP*qBeJG#BST0 zqohi)O!|$|2SeJQo(w6w7%*92S})XfnhrH_Z8qe!G5>CglP=nI7JAOW?(Z29;pXJ9 zR9`KzQ=WEhy*)WH>$;7Cdz|>*i>=##0bB)oU0OR>>N<21e4rMCHDemNi2LD>Nc$;& zQRFthpWniC1J6@Zh~iJCoLOxN`oCKD5Q4r%ynwgUKPlIEd#?QViIqovY|czyK8>6B zSP%{2-<;%;1`#0mG^B(8KbtXF;Nf>K#Di72UWE4gQ%(_26Koiad)q$xRL~?pN71ZZ zujaaCx~jXjygw;rI!WB=xrOJO6HJ!!w}7eiivtCg5K|F6$EXa)=xUC za^JXSX98W`7g-tm@uo|BKj39Dl;sg5ta;4qjo^pCh~{-HdLl6qI9Ix6f$+qiZ$}s= zNguKrU;u+T@ko(Vr1>)Q%h$?UKXCY>3se%&;h2osl2D zE4A9bd7_|^njDd)6cI*FupHpE3){4NQ*$k*cOWZ_?CZ>Z4_fl@n(mMnYK62Q1d@+I zr&O))G4hMihgBqRIAJkLdk(p(D~X{-oBUA+If@B}j& zsHbeJ3RzTq96lB7d($h$xTeZ^gP0c{t!Y0c)aQE;$FY2!mACg!GDEMKXFOPI^)nHZ z`aSPJpvV0|bbrzhWWkuPURlDeN%VT8tndV8?d)eN*i4I@u zVKl^6{?}A?P)Fsy?3oi#clf}L18t;TjNI2>eI&(ezDK7RyqFxcv%>?oxUlonv(px) z$vnPzRH`y5A(x!yOIfL0bmgeMQB$H5wenx~!ujQK*nUBW;@Em&6Xv2%s(~H5WcU2R z;%Nw<$tI)a`Ve!>x+qegJnQsN2N7HaKzrFqM>`6R*gvh%O*-%THt zrB$Nk;lE;z{s{r^PPm5qz(&lM{sO*g+W{sK+m3M_z=4=&CC>T`{X}1Vg2PEfSj2x_ zmT*(x;ov%3F?qoEeeM>dUn$a*?SIGyO8m806J1W1o+4HRhc2`9$s6hM#qAm zChQ87b~GEw{ADfs+5}FJ8+|bIlIv(jT$Ap#hSHoXdd9#w<#cA<1Rkq^*EEkknUd4& zoIWIY)sAswy6fSERVm&!SO~#iN$OgOX*{9@_BWFyJTvC%S++ilSfCrO(?u=Dc?CXZ zzCG&0yVR{Z`|ZF0eEApWEo#s9osV>F{uK{QA@BES#&;#KsScf>y zvs?vIbI>VrT<*!;XmQS=bhq%46-aambZ(8KU-wOO2=en~D}MCToB_u;Yz{)1ySrPZ z@=$}EvjTdzTWU7c0ZI6L8=yP+YRD_eMMos}b5vY^S*~VZysrkq<`cK3>>v%uy7jgq z0ilW9KjVDHLv0b<1K_`1IkbTOINs0=m-22c%M~l=^S}%hbli-3?BnNq?b`hx^HX2J zIe6ECljRL0uBWb`%{EA=%!i^4sMcj+U_TaTZRb+~GOk z^ZW!nky0n*Wb*r+Q|9H@ml@Z5gU&W`(z4-j!OzC1wOke`TRAYGZVl$PmQ16{3196( zO*?`--I}Qf(2HIwb2&1FB^!faPA2=sLg(@6P4mN)>Dc3i(B0;@O-y2;lM4akD>@^v z=u>*|!s&9zem70g7zfw9FXl1bpJW(C#5w#uy5!V?Q(U35A~$dR%LDVnq@}kQm13{} zd53q3N(s$Eu{R}k2esbftfjfOITCL;jWa$}(mmm}d(&7JZ6d3%IABCapFFYjdEjdK z&4Edqf$G^MNAtL=uCDRs&Fu@FXRgX{*0<(@c3|PNHa>L%zvxWS={L8%qw`STm+=Rd zA}FLspESSIpE_^41~#5yI2bJ=9`oc;GIL!JuW&7YetZ?0H}$$%8rW@*J37L-~Rsx!)8($nI4 zZhcZ2^=Y+p4YPl%j!nFJA|*M^gc(0o$i3nlphe+~-_m}jVkRN{spFs(o0ajW@f3K{ zDV!#BwL322CET$}Y}^0ixYj2w>&Xh12|R8&yEw|wLDvF!lZ#dOTHM9pK6@Nm-@9Lnng4ZHBgBSrr7KI8YCC9DX5Kg|`HsiwJHg2(7#nS;A{b3tVO?Z% za{m5b3rFV6EpX;=;n#wltDv1LE*|g5pQ+OY&*6qCJZc5oDS6Z6JD#6F)bWxZSF@q% z+1WV;m!lRB!n^PC>RgQCI#D1br_o^#iPk>;K2hB~0^<~)?p}LG%kigm@moD#q3PE+ zA^Qca)(xnqw6x>XFhV6ku9r$E>bWNrVH9fum0?4s?Rn2LG{Vm_+QJHse6xa%nzQ?k zKug4PW~#Gtb;#5+9!QBgyB@q=sk9=$S{4T>wjFICStOM?__fr+Kei1 z3j~xPqW;W@YkiUM;HngG!;>@AITg}vAE`M2Pj9Irl4w1fo4w<|Bu!%rh%a(Ai^Zhi zs92>v5;@Y(Zi#RI*ua*h`d_7;byQSa*v9E{2x$<-_=5Z<7{%)}4XExANcz@rK69T0x3%H<@frW>RA8^swA+^a(FxK| zFl3LD*ImHN=XDUkrRhp6RY5$rQ{bRgSO*(vEHYV)3Mo6Jy3puiLmU&g82p{qr0F?ohmbz)f2r{X2|T2 z$4fdQ=>0BeKbiVM!e-lIIs8wVTuC_m7}y4A_%ikI;Wm5$9j(^Y z(cD%U%k)X>_>9~t8;pGzL6L-fmQO@K; zo&vQzMlgY95;1BSkngY)e{`n0!NfVgf}2mB3t}D9@*N;FQ{HZ3Pb%BK6;5#-O|WI( zb6h@qTLU~AbVW#_6?c!?Dj65Now7*pU{h!1+eCV^KCuPAGs28~3k@ueL5+u|Z-7}t z9|lskE`4B7W8wMs@xJa{#bsCGDFoRSNSnmNYB&U7 zVGKWe%+kFB6kb)e;TyHfqtU6~fRg)f|>=5(N36)0+C z`hv65J<$B}WUc!wFAb^QtY31yNleq4dzmG`1wHTj=c*=hay9iD071Hc?oYoUk|M*_ zU1GihAMBsM@5rUJ(qS?9ZYJ6@{bNqJ`2Mr+5#hKf?doa?F|+^IR!8lq9)wS3tF_9n zW_?hm)G(M+MYb?V9YoX^_mu5h-LP^TL^!Q9Z7|@sO(rg_4+@=PdI)WL(B7`!K^ND- z-uIuVDCVEdH_C@c71YGYT^_Scf_dhB8Z2Xy6vGtBSlYud9vggOqv^L~F{BraSE_t} zIkP+Hp2&nH^-MNEs}^`oMLy11`PQW$T|K(`Bu*(f@)mv1-qY(_YG&J2M2<7k;;RK~ zL{Fqj9yCz8(S{}@c)S!65aF<=&eLI{hAMErCx&>i7OeDN>okvegO87OaG{Jmi<|}D zaT@b|0X{d@OIJ7zvT>r+eTzgLq~|Dpu)Z&db-P4z*`M$UL51lf>FLlq6rfG)%doyp z)3kk_YIM!03eQ8Vu_2fg{+osaEJPtJ-s36R+5_AEG12`NG)IQ#TF9c@$99%0iye+ zUzZ57=m2)$D(5Nx!n)=5Au&O0BBgwxIBaeI(mro$#&UGCr<;C{UjJVAbVi%|+WP(a zL$U@TYCxJ=1{Z~}rnW;7UVb7+ZnzgmrogDxhjLGo>c~MiJAWs&&;AGg@%U?Y^0JhL ze(x6Z74JG6FlOFK(T}SXQfhr}RIFl@QXKnIcXYF)5|V~e-}suHILKT-k|<*~Ij|VF zC;t@=uj=hot~*!C68G8hTA%8SzOfETOXQ|3FSaIEjvBJp(A)7SWUi5!Eu#yWgY+;n zlm<$+UDou*V+246_o#V4kMdto8hF%%Lki#zPh}KYXmMf?hrN0;>Mv%`@{0Qn`Ujp) z=lZe+13>^Q!9zT);H<(#bIeRWz%#*}sgUX9P|9($kexOyKIOc`dLux}c$7It4u|Rl z6SSkY*V~g_B-hMPo_ak>>z@AVQ(_N)VY2kB3IZ0G(iDUYw+2d7W^~(Jq}KY=JnWS( z#rzEa&0uNhJ>QE8iiyz;n2H|SV#Og+wEZv=f2%1ELX!SX-(d3tEj$5$1}70Mp<&eI zCkfbByL7af=qQE@5vDVxx1}FSGt_a1DoE3SDI+G)mBAna)KBG4p8Epxl9QZ4BfdAN zFnF|Y(umr;gRgG6NLQ$?ZWgllEeeq~z^ZS7L?<(~O&$5|y)Al^iMKy}&W+eMm1W z7EMU)u^ke(A1#XCV>CZ71}P}0x)4wtHO8#JRG3MA-6g=`ZM!FcICCZ{IEw8Dm2&LQ z1|r)BUG^0GzI6f946RrBlfB1Vs)~8toZf~7)+G;pv&XiUO(%5bm)pl=p>nV^o*;&T z;}@oZSibzto$arQgfkp|z4Z($P>dTXE{4O=vY0!)kDO* zGF8a4wq#VaFpLfK!iELy@?-SeRrdz%F*}hjKcA*y@mj~VD3!it9lhRhX}5YOaR9$} z3mS%$2Be7{l(+MVx3 z(4?h;P!jnRmX9J9sYN#7i=iyj_5q7n#X(!cdqI2lnr8T$IfOW<_v`eB!d9xY1P=2q&WtOXY=D9QYteP)De?S4}FK6#6Ma z=E*V+#s8>L;8aVroK^6iKo=MH{4yEZ_>N-N z`(|;aOATba1^asjxlILk<4}f~`39dBFlxj>Dw(hMYKPO3EEt1@S`1lxFNM+J@uB7T zZ8WKjz7HF1-5&2=l=fqF-*@>n5J}jIxdDwpT?oKM3s8Nr`x8JnN-kCE?~aM1H!hAE z%%w(3kHfGwMnMmNj(SU(w42OrC-euI>Dsjk&jz3ts}WHqmMpzQ3vZrsXrZ|}+MHA7 z068obeXZTsO*6RS@o3x80E4ok``rV^Y3hr&C1;|ZZ0|*EKO`$lECUYG2gVFtUTw)R z4Um<0ZzlON`zTdvVdL#KFoMFQX*a5wM0Czp%wTtfK4Sjs)P**RW&?lP$(<}q%r68Z zS53Y!d@&~ne9O)A^tNrXHhXBkj~$8j%pT1%%mypa9AW5E&s9)rjF4@O3ytH{0z6riz|@< zB~UPh*wRFg2^7EbQrHf0y?E~dHlkOxof_a?M{LqQ^C!i2dawHTPYUE=X@2(3<=OOxs8qn_(y>pU>u^}3y&df{JarR0@VJn0f+U%UiF=$Wyq zQvnVHESil@d|8&R<%}uidGh7@u^(%?$#|&J$pvFC-n8&A>utA=n3#)yMkz+qnG3wd zP7xCnF|$9Dif@N~L)Vde3hW8W!UY0BgT2v(wzp;tlLmyk2%N|0jfG$%<;A&IVrOI< z!L)o>j>;dFaqA3pL}b-Je(bB@VJ4%!JeX@3x!i{yIeIso^=n?fDX`3bU=eG7sTc%g%ye8$v8P@yKE^XD=NYxTb zbf!Mk=h|otpqjFaA-vs5YOF-*GwWPc7VbaOW&stlANnCN8iftFMMrUdYNJ_Bnn5Vt zxfz@Ah|+4&P;reZxp;MmEI7C|FOv8NKUm8njF7Wb6Gi7DeODLl&G~}G4be&*Hi0Qw z5}77vL0P+7-B%UL@3n1&JPxW^d@vVwp?u#gVcJqY9#@-3X{ok#UfW3<1fb%FT`|)V~ggq z(3AUoUS-;7)^hCjdT0Kf{i}h)mBg4qhtHHBti=~h^n^OTH5U*XMgDLIR@sre`AaB$ zg)IGBET_4??m@cx&c~bA80O7B8CHR7(LX7%HThkeC*@vi{-pL%e)yXp!B2InafbDF zjPXf1mko3h59{lT6EEbxKO1Z5GF71)WwowO6kY|6tjSVSWdQ}NsK2x{>i|MKZK8%Q zfu&_0D;CO-Jg0#YmyfctyJ!mRJp)e#@O0mYdp|8x;G1%OZQ3Q847YWTyy|%^cpA;m zze0(5p{tMu^lDkpe?HynyO?a1$_LJl2L&mpeKu%8YvgRNr=%2z${%WThHG=vrWY@4 zsA`OP#O&)TetZ>s%h!=+CE15lOOls&nvC~$Qz0Ph7tHiP;O$i|eDwpT{cp>+)0-|; zY$|bB+Gbel>5aRN3>c0x)4U=|X+z+{ zn*_p*EQoquRL+=+p;=lm`d71&1NqBz&_ph)MXu(Nv6&XE7(RsS)^MGj5Q?Fwude-(sq zjJ>aOq!7!EN>@(fK7EE#;i_BGvli`5U;r!YA{JRodLBc6-`n8K+Fjgwb%sX;j=qHQ z7&Tr!)!{HXoO<2BQrV9Sw?JRaLXV8HrsNevvnf>Y-6|{T!pYLl7jp$-nEE z#X!4G4L#K0qG_4Z;Cj6=;b|Be$hi4JvMH!-voxqx^@8cXp`B??eFBz2lLD8RRaRGh zn7kUfy!YV~p(R|p7iC1Rdgt$_24i0cd-S8HpG|`@my70g^y`gu%#Tf_L21-k?sRRZHK&at(*ED0P8iw{7?R$9~OF$Ko;Iu5)ur5<->x!m93Eb zFYpIx60s=Wxxw=`$aS-O&dCO_9?b1yKiPCQmSQb>T)963`*U+Ydj5kI(B(B?HNP8r z*bfSBpSu)w(Z3j7HQoRjUG(+d=IaE~tv}y14zHHs|0UcN52fT8V_<@2ep_ee{QgZG zmgp8iv4V{k;~8@I%M3<#B;2R>Ef(Gg_cQM7%}0s*^)SK6!Ym+~P^58*wnwV1BW@eG z4sZLqsUvBbFsr#8u7S1r4teQ;t)Y@jnn_m5jS$CsW1um!p&PqAcc8!zyiXHVta9QC zY~wCwCF0U%xiQPD_INKtTb;A|Zf29(mu9NI;E zc-e>*1%(LSXB`g}kd`#}O;veb<(sk~RWL|f3ljxCnEZDdNSTDV6#Td({6l&y4IjKF z^}lIUq*ZUqgTPumD)RrCN{M^jhY>E~1pn|KOZ5((%F)G|*ZQ|r4zIbrEiV%42hJV8 z3xS)=!X1+=olbdGJ=yZil?oXLct8FM{(6ikLL3E%=q#O6(H$p~gQu6T8N!plf!96| z&Q3=`L~>U0zZh;z(pGR2^S^{#PrPxTRHD1RQOON&f)Siaf`GLj#UOk&(|@0?zm;Sx ztsGt8=29-MZs5CSf1l1jNFtNt5rFNZxJPvkNu~2}7*9468TWm>nN9TP&^!;J{-h)_ z7WsHH9|F%I`Pb!>KAS3jQWKfGivTVkMJLO-HUGM_a4UQ_%RgL6WZvrW+Z4ujZn;y@ zz9$=oO!7qVTaQAA^BhX&ZxS*|5dj803M=k&2%QrXda`-Q#IoZL6E(g+tN!6CA!CP* zCpWtCujIea)ENl0liwVfj)Nc<9mV%+e@=d`haoZ*`B7+PNjEbXBkv=B+Pi^~L#EO$D$ZqTiD8f<5$eyb54-(=3 zh)6i8i|jp(@OnRrY5B8t|LFXFQVQ895n*P16cEKTrT*~yLH6Z4e*bZ5otpRDri&+A zfNbK1D5@O=sm`fN=WzWyse!za5n%^+6dHPGX#8DyIK>?9qyX}2XvBWVqbP%%D)7$= z=#$WulZlZR<{m#gU7lwqK4WS1Ne$#_P{b17qe$~UOXCl>5b|6WVh;5vVnR<%d+Lnp z$uEmML38}U4vaW8>shm6CzB(Wei3s#NAWE3)a2)z@i{4jTn;;aQS)O@l{rUM`J@K& l00vQ5JBs~;vo!vr%%-k{2_Fq1Mn4QF81S)AQ99zk{{c4yR+0b! literal 61574 zcmb6AV{~QRwml9f72CFLyJFk6ZKq;e729@pY}>YNR8p1vbMJH7ubt# zZR`2@zJD1Ad^Oa6Hk1{VlN1wGR-u;_dyt)+kddaNpM#U8qn@6eX;fldWZ6BspQIa= zoRXcQk)#ENJ`XiXJuK3q0$`Ap92QXrW00Yv7NOrc-8ljOOOIcj{J&cR{W`aIGXJ-` z`ez%Mf7qBi8JgIb{-35Oe>Zh^GIVe-b^5nULQhxRDZa)^4+98@`hUJe{J%R>|LYHA z4K3~Hjcp8_owGF{d~lZVKJ;kc48^OQ+`_2migWY?JqgW&))70RgSB6KY9+&wm<*8 z_{<;(c;5H|u}3{Y>y_<0Z59a)MIGK7wRMX0Nvo>feeJs+U?bt-++E8bu7 zh#_cwz0(4#RaT@xy14c7d<92q-Dd}Dt<*RS+$r0a^=LGCM{ny?rMFjhgxIG4>Hc~r zC$L?-FW0FZ((8@dsowXlQq}ja%DM{z&0kia*w7B*PQ`gLvPGS7M}$T&EPl8mew3In z0U$u}+bk?Vei{E$6dAYI8Tsze6A5wah?d(+fyP_5t4ytRXNktK&*JB!hRl07G62m_ zAt1nj(37{1p~L|m(Bsz3vE*usD`78QTgYIk zQ6BF14KLzsJTCqx&E!h>XP4)bya|{*G7&T$^hR0(bOWjUs2p0uw7xEjbz1FNSBCDb@^NIA z$qaq^0it^(#pFEmuGVS4&-r4(7HLmtT%_~Xhr-k8yp0`$N|y>#$Ao#zibzGi*UKzi zhaV#@e1{2@1Vn2iq}4J{1-ox;7K(-;Sk{3G2_EtV-D<)^Pk-G<6-vP{W}Yd>GLL zuOVrmN@KlD4f5sVMTs7c{ATcIGrv4@2umVI$r!xI8a?GN(R;?32n0NS(g@B8S00-=zzLn z%^Agl9eV(q&8UrK^~&$}{S(6-nEXnI8%|hoQ47P?I0Kd=woZ-pH==;jEg+QOfMSq~ zOu>&DkHsc{?o&M5`jyJBWbfoPBv9Y#70qvoHbZXOj*qRM(CQV=uX5KN+b>SQf-~a8 ziZg}@&XHHXkAUqr)Q{y`jNd7`1F8nm6}n}+_She>KO`VNlnu(&??!(i#$mKOpWpi1 z#WfWxi3L)bNRodhPM~~?!5{TrrBY_+nD?CIUupkwAPGz-P;QYc-DcUoCe`w(7)}|S zRvN)9ru8b)MoullmASwsgKQo1U6nsVAvo8iKnbaWydto4y?#-|kP^%e6m@L`88KyDrLH`=EDx*6>?r5~7Iv~I zr__%SximG(izLKSnbTlXa-ksH@R6rvBrBavt4)>o3$dgztLt4W=!3=O(*w7I+pHY2(P0QbTma+g#dXoD7N#?FaXNQ^I0*;jzvjM}%=+km`YtC%O#Alm| zqgORKSqk!#^~6whtLQASqiJ7*nq?38OJ3$u=Tp%Y`x^eYJtOqTzVkJ60b2t>TzdQ{I}!lEBxm}JSy7sy8DpDb zIqdT%PKf&Zy--T^c-;%mbDCxLrMWTVLW}c=DP2>Td74)-mLl|70)8hU??(2)I@Zyo z2i`q5oyA!!(2xV~gahuKl&L(@_3SP012#x(7P!1}6vNFFK5f*A1xF({JwxSFwA|TM z&1z}!*mZKcUA-v4QzLz&5wS$7=5{M@RAlx@RkJaA4nWVqsuuaW(eDh^LNPPkmM~Al zwxCe@*-^4!ky#iNv2NIIU$CS+UW%ziW0q@6HN3{eCYOUe;2P)C*M`Bt{~-mC%T3%# zEaf)lATO1;uF33x>Hr~YD0Ju*Syi!Jz+x3myVvU^-O>C*lFCKS&=Tuz@>&o?68aF& zBv<^ziPywPu#;WSlTkzdZ9`GWe7D8h<1-v0M*R@oYgS5jlPbgHcx)n2*+!+VcGlYh?;9Ngkg% z=MPD+`pXryN1T|%I7c?ZPLb3bqWr7 zU4bfG1y+?!bw)5Iq#8IqWN@G=Ru%Thxf)#=yL>^wZXSCC8we@>$hu=yrU;2=7>h;5 zvj_pYgKg2lKvNggl1ALnsz2IlcvL;q79buN5T3IhXuJvy@^crqWpB-5NOm{7UVfxmPJ>`?;Tn@qHzF+W!5W{8Z&ZAnDOquw6r4$bv*jM#5lc%3v|c~^ zdqo4LuxzkKhK4Q+JTK8tR_|i6O(x#N2N0Fy5)!_trK&cn9odQu#Vlh1K~7q|rE z61#!ZPZ+G&Y7hqmY;`{XeDbQexC2@oFWY)Nzg@lL3GeEVRxWQlx@0?Zt`PcP0iq@6 zLgc)p&s$;*K_;q0L(mQ8mKqOJSrq$aQYO-Hbssf3P=wC6CvTVHudzJH-Jgm&foBSy zx0=qu$w477lIHk);XhaUR!R-tQOZ;tjLXFH6;%0)8^IAc*MO>Q;J={We(0OHaogG0 zE_C@bXic&m?F7slFAB~x|n#>a^@u8lu;=!sqE*?vq zu4`(x!Jb4F#&3+jQ|ygldPjyYn#uCjNWR)%M3(L!?3C`miKT;~iv_)dll>Q6b+I&c zrlB04k&>mSYLR7-k{Od+lARt~3}Bv!LWY4>igJl!L5@;V21H6dNHIGr+qV551e@yL z`*SdKGPE^yF?FJ|`#L)RQ?LJ;8+={+|Cl<$*ZF@j^?$H%V;jqVqt#2B0yVr}Nry5R z5D?S9n+qB_yEqvdy9nFc+8WxK$XME$3ftSceLb+L(_id5MMc*hSrC;E1SaZYow%jh zPgo#1PKjE+1QB`Of|aNmX?}3TP;y6~0iN}TKi3b+yvGk;)X&i3mTnf9M zuv3qvhErosfZ%Pb-Q>|BEm5(j-RV6Zf^$icM=sC-5^6MnAvcE9xzH@FwnDeG0YU{J zi~Fq?=bi0;Ir=hfOJu8PxC)qjYW~cv^+74Hs#GmU%Cw6?3LUUHh|Yab`spoqh8F@_ zm4bCyiXPx-Cp4!JpI~w!ShPfJOXsy>f*|$@P8L8(oeh#~w z-2a4IOeckn6}_TQ+rgl_gLArS3|Ml(i<`*Lqv6rWh$(Z5ycTYD#Z*&-5mpa}a_zHt z6E`Ty-^L9RK-M*mN5AasoBhc|XWZ7=YRQSvG)3$v zgr&U_X`Ny0)IOZtX}e$wNUzTpD%iF7Rgf?nWoG2J@PsS-qK4OD!kJ?UfO+1|F*|Bo z1KU`qDA^;$0*4mUJ#{EPOm7)t#EdX=Yx1R2T&xlzzThfRC7eq@pX&%MO&2AZVO%zw zS;A{HtJiL=rfXDigS=NcWL-s>Rbv|=)7eDoOVnVI>DI_8x>{E>msC$kXsS}z?R6*x zi(yO`$WN)_F1$=18cbA^5|f`pZA+9DG_Zu8uW?rA9IxUXx^QCAp3Gk1MSdq zBZv;_$W>*-zLL)F>Vn`}ti1k!%6{Q=g!g1J*`KONL#)M{ZC*%QzsNRaL|uJcGB7jD zTbUe%T(_x`UtlM!Ntp&-qu!v|mPZGcJw$mdnanY3Uo>5{oiFOjDr!ZznKz}iWT#x& z?*#;H$`M0VC|a~1u_<(}WD>ogx(EvF6A6S8l0%9U<( zH||OBbh8Tnzz*#bV8&$d#AZNF$xF9F2{_B`^(zWNC}af(V~J+EZAbeC2%hjKz3V1C zj#%d%Gf(uyQ@0Y6CcP^CWkq`n+YR^W0`_qkDw333O<0FoO9()vP^!tZ{`0zsNQx~E zb&BcBU>GTP2svE2Tmd;~73mj!_*V8uL?ZLbx}{^l9+yvR5fas+w&0EpA?_g?i9@A$j*?LnmctPDQG|zJ`=EF}Vx8aMD^LrtMvpNIR*|RHA`ctK*sbG= zjN7Q)(|dGpC}$+nt~bupuKSyaiU}Ws{?Tha@$q}cJ;tvH>+MuPih+B4d$Zbq9$Y*U z)iA(-dK?Ov@uCDq48Zm%%t5uw1GrnxDm7*ITGCEF!2UjA`BqPRiUR`yNq^zz|A3wU zG(8DAnY-GW+PR2&7@In{Sla(XnMz5Rk^*5u4UvCiDQs@hvZXoiziv{6*i?fihVI|( zPrY8SOcOIh9-AzyJ*wF4hq%ojB&Abrf;4kX@^-p$mmhr}xxn#fVU?ydmD=21&S)s*v*^3E96(K1}J$6bi8pyUr-IU)p zcwa$&EAF$0Aj?4OYPcOwb-#qB=kCEDIV8%^0oa567_u6`9+XRhKaBup z2gwj*m#(}=5m24fBB#9cC?A$4CCBj7kanaYM&v754(b%Vl!gg&N)ZN_gO0mv(jM0# z>FC|FHi=FGlEt6Hk6H3!Yc|7+q{&t%(>3n#>#yx@*aS+bw)(2!WK#M0AUD~wID>yG z?&{p66jLvP1;!T7^^*_9F322wJB*O%TY2oek=sA%AUQT75VQ_iY9`H;ZNKFQELpZd z$~M`wm^Y>lZ8+F0_WCJ0T2td`bM+b`)h3YOV%&@o{C#|t&7haQfq#uJJP;81|2e+$ z|K#e~YTE87s+e0zCE2X$df`o$`8tQhmO?nqO?lOuTJ%GDv&-m_kP9X<5GCo1=?+LY z?!O^AUrRb~3F!k=H7Aae5W0V1{KlgH379eAPTwq=2+MlNcJ6NM+4ztXFTwI)g+)&Q7G4H%KH_(}1rq%+eIJ*3$?WwnZxPZ;EC=@`QS@|-I zyl+NYh&G>k%}GL}1;ap8buvF>x^yfR*d+4Vkg7S!aQ++_oNx6hLz6kKWi>pjWGO5k zlUZ45MbA=v(xf>Oeqhg8ctl56y{;uDG?A9Ga5aEzZB80BW6vo2Bz&O-}WAq>(PaV;*SX0=xXgI_SJ< zYR&5HyeY%IW}I>yKu^?W2$~S!pw?)wd4(#6;V|dVoa}13Oiz5Hs6zA zgICc;aoUt$>AjDmr0nCzeCReTuvdD1{NzD1wr*q@QqVW*Wi1zn;Yw1dSwLvTUwg#7 zpp~Czra7U~nSZZTjieZxiu~=}!xgV68(!UmQz@#w9#$0Vf@y%!{uN~w^~U_d_Aa&r zt2l>)H8-+gA;3xBk?ZV2Cq!L71;-tb%7A0FWziYwMT|#s_Ze_B>orZQWqDOZuT{|@ zX04D%y&8u@>bur&*<2??1KnaA7M%%gXV@C3YjipS4|cQH68OSYxC`P#ncvtB%gnEI z%fxRuH=d{L70?vHMi>~_lhJ@MC^u#H66=tx?8{HG;G2j$9@}ZDYUuTetwpvuqy}vW)kDmj^a|A%z(xs7yY2mU0#X2$un&MCirr|7 z%m?8+9aekm0x5hvBQ2J+>XeAdel$cy>J<6R3}*O^j{ObSk_Ucv$8a3_WPTd5I4HRT z(PKP5!{l*{lk_19@&{5C>TRV8_D~v*StN~Pm*(qRP+`1N12y{#w_fsXrtSt={0hJw zQ(PyWgA;;tBBDql#^2J(pnuv;fPn(H>^d<6BlI%00ylJZ?Evkh%=j2n+|VqTM~EUh zTx|IY)W;3{%x(O{X|$PS&x0?z#S2q-kW&G}7#D?p7!Q4V&NtA_DbF~v?cz6_l+t8e zoh1`dk;P-%$m(Ud?wnoZn0R=Ka$`tnZ|yQ-FN!?!9Wmb^b(R!s#b)oj9hs3$p%XX9DgQcZJE7B_dz0OEF6C zx|%jlqj0WG5K4`cVw!19doNY+(;SrR_txAlXxf#C`uz5H6#0D>SzG*t9!Fn|^8Z8; z1w$uiQzufUzvPCHXhGma>+O327SitsB1?Rn6|^F198AOx}! zfXg22Lm0x%=gRvXXx%WU2&R!p_{_1H^R`+fRO2LT%;He@yiekCz3%coJ=8+Xbc$mN zJ;J7*ED|yKWDK3CrD?v#VFj|l-cTgtn&lL`@;sMYaM1;d)VUHa1KSB5(I54sBErYp z>~4Jz41?Vt{`o7T`j=Se{-kgJBJG^MTJ}hT00H%U)pY-dy!M|6$v+-d(CkZH5wmo1 zc2RaU`p3_IJ^hf{g&c|^;)k3zXC0kF1>rUljSxd}Af$!@@R1fJWa4g5vF?S?8rg=Z z4_I!$dap>3l+o|fyYy(sX}f@Br4~%&&#Z~bEca!nMKV zgQSCVC!zw^j<61!7#T!RxC6KdoMNONcM5^Q;<#~K!Q?-#6SE16F*dZ;qv=`5 z(kF|n!QIVd*6BqRR8b8H>d~N@ab+1+{3dDVPVAo>{mAB#m&jX{usKkCg^a9Fef`tR z?M79j7hH*;iC$XM)#IVm&tUoDv!(#f=XsTA$)(ZE37!iu3Gkih5~^Vlx#<(M25gr@ zOkSw4{l}6xI(b0Gy#ywglot$GnF)P<FQt~9ge1>qp8Q^k;_Dm1X@Tc^{CwYb4v_ld}k5I$&u}avIDQ-D(_EP zhgdc{)5r_iTFiZ;Q)5Uq=U73lW%uYN=JLo#OS;B0B=;j>APk?|!t{f3grv0nv}Z%` zM%XJk^#R69iNm&*^0SV0s9&>cl1BroIw*t3R0()^ldAsq)kWcI=>~4!6fM#0!K%TS ziZH=H%7-f=#-2G_XmF$~Wl~Um%^9%AeNSk)*`RDl##y+s)$V`oDlnK@{y+#LNUJp1^(e89sed@BB z^W)sHm;A^9*RgQ;f(~MHK~bJRvzezWGr#@jYAlXIrCk_iiUfC_FBWyvKj2mBF=FI;9|?0_~=E<)qnjLg9k*Qd!_ zl}VuSJB%#M>`iZm*1U^SP1}rkkI};91IRpZw%Hb$tKmr6&H5~m?A7?+uFOSnf)j14 zJCYLOYdaRu>zO%5d+VeXa-Ai7{7Z}iTn%yyz7hsmo7E|{ z@+g9cBcI-MT~2f@WrY0dpaC=v{*lDPBDX}OXtJ|niu$xyit;tyX5N&3pgmCxq>7TP zcOb9%(TyvOSxtw%Y2+O&jg39&YuOtgzn`uk{INC}^Na_-V;63b#+*@NOBnU{lG5TS zbC+N-qt)u26lggGPcdrTn@m+m>bcrh?sG4b(BrtdIKq3W<%?WuQtEW0Z)#?c_Lzqj*DlZ zVUpEV3~mG#DN$I#JJp3xc8`9ex)1%Il7xKwrpJt)qtpq}DXqI=5~~N}N?0g*YwETZ z(NKJO5kzh?Os`BQ7HYaTl>sXVr!b8>(Wd&PU*3ivSn{;q`|@n*J~-3tbm;4WK>j3&}AEZ*`_!gJ3F4w~4{{PyLZklDqWo|X}D zbZU_{2E6^VTCg#+6yJt{QUhu}uMITs@sRwH0z5OqM>taO^(_+w1c ztQ?gvVPj<_F_=(ISaB~qML59HT;#c9x(;0vkCi2#Zp`;_r@+8QOV1Ey2RWm6{*J&9 zG(Dt$zF^7qYpo9Ne}ce5re^j|rvDo*DQ&1Be#Fvo#?m4mfFrNZb1#D4f`Lf(t_Fib zwxL3lx(Zp(XVRjo_ocElY#yS$LHb6yl;9;Ycm1|5y_praEcGUZxLhS%7?b&es2skI z9l!O)b%D=cXBa@v9;64f^Q9IV$xOkl;%cG6WLQ`_a7I`woHbEX&?6NJ9Yn&z+#^#! zc8;5=jt~Unn7!cQa$=a7xSp}zuz#Lc#Q3-e7*i`Xk5tx_+^M~!DlyBOwVEq3c(?`@ zZ_3qlTN{eHOwvNTCLOHjwg0%niFYm({LEfAieI+k;U2&uTD4J;Zg#s`k?lxyJN<$mK6>j?J4eOM@T*o?&l@LFG$Gs5f4R*p*V1RkTdCfv9KUfa< z{k;#JfA3XA5NQJziGd%DchDR*Dkld&t;6i9e2t7{hQPIG_uDXN1q0T;IFCmCcua-e z`o#=uS2_en206(TuB4g-!#=rziBTs%(-b1N%(Bl}ea#xKK9zzZGCo@<*i1ZoETjeC zJ)ll{$mpX7Eldxnjb1&cB6S=7v@EDCsmIOBWc$p^W*;C0i^Hc{q(_iaWtE{0qbLjxWlqBe%Y|A z>I|4)(5mx3VtwRBrano|P))JWybOHUyOY67zRst259tx;l(hbY@%Z`v8Pz^0Sw$?= zwSd^HLyL+$l&R+TDnbV_u+h{Z>n$)PMf*YGQ}1Df@Nr{#Gr+@|gKlnv?`s1rm^$1+ zic`WeKSH?{+E}0^#T<&@P;dFf;P5zCbuCOijADb}n^{k=>mBehDD6PtCrn5ZBhh2L zjF$TbzvnwT#AzGEG_Rg>W1NS{PxmL9Mf69*?YDeB*pK!&2PQ7!u6eJEHk5e(H~cnG zZQ?X_rtws!;Tod88j=aMaylLNJbgDoyzlBv0g{2VYRXObL=pn!n8+s1s2uTwtZc

YH!Z*ZaR%>WTVy8-(^h5J^1%NZ$@&_ZQ)3AeHlhL~=X9=fKPzFbZ;~cS**=W-LF1 z5F82SZ zG8QZAet|10U*jK*GVOA(iULStsUDMjhT$g5MRIc4b8)5q_a?ma-G+@xyNDk{pR*YH zjCXynm-fV`*;}%3=+zMj**wlCo6a{}*?;`*j%fU`t+3Korws%dsCXAANKkmVby*eJ z6`2%GB{+&`g2;snG`LM9S~>#^G|nZ|JMnWLgSmJ4!kB->uAEF0sVn6km@s=#_=d)y zzld%;gJY>ypQuE z!wgqqTSPxaUPoG%FQ()1hz(VHN@5sfnE68of>9BgGsQP|9$7j zGqN{nxZx4CD6ICwmXSv6&RD<-etQmbyTHIXn!Q+0{18=!p))>To8df$nCjycnW07Q zsma_}$tY#Xc&?#OK}-N`wPm)+2|&)9=9>YOXQYfaCI*cV1=TUl5({a@1wn#V?y0Yn z(3;3-@(QF|0PA}|w4hBWQbTItc$(^snj$36kz{pOx*f`l7V8`rZK}82pPRuy zxwE=~MlCwOLRC`y%q8SMh>3BUCjxLa;v{pFSdAc7m*7!}dtH`MuMLB)QC4B^Uh2_? zApl6z_VHU}=MAA9*g4v-P=7~3?Lu#ig)cRe90>@B?>})@X*+v&yT6FvUsO=p#n8p{ zFA6xNarPy0qJDO1BPBYk4~~LP0ykPV ztoz$i+QC%Ch%t}|i^(Rb9?$(@ijUc@w=3F1AM}OgFo1b89KzF6qJO~W52U_;R_MsB zfAC29BNUXpl!w&!dT^Zq<__Hr#w6q%qS1CJ#5Wrb*)2P1%h*DmZ?br)*)~$^TExX1 zL&{>xnM*sh=@IY)i?u5@;;k6+MLjx%m(qwDF3?K3p>-4c2fe(cIpKq#Lc~;#I#Wwz zywZ!^&|9#G7PM6tpgwA@3ev@Ev_w`ZZRs#VS4}<^>tfP*(uqLL65uSi9H!Gqd59C&=LSDo{;#@Isg3caF1X+4T}sL2B+Q zK*kO0?4F7%8mx3di$B~b&*t7y|{x%2BUg4kLFXt`FK;Vi(FIJ+!H zW;mjBrfZdNT>&dDfc4m$^f@k)mum{DioeYYJ|XKQynXl-IDs~1c(`w{*ih0-y_=t$ zaMDwAz>^CC;p*Iw+Hm}%6$GN49<(rembdFvb!ZyayLoqR*KBLc^OIA*t8CXur+_e0 z3`|y|!T>7+jdny7x@JHtV0CP1jI^)9){!s#{C>BcNc5#*hioZ>OfDv)&PAM!PTjS+ zy1gRZirf>YoGpgprd?M1k<;=SShCMn406J>>iRVnw9QxsR|_j5U{Ixr;X5n$ih+-=X0fo(Oga zB=uer9jc=mYY=tV-tAe@_d-{aj`oYS%CP@V3m6Y{)mZ5}b1wV<9{~$`qR9 zEzXo|ok?1fS?zneLA@_C(BAjE_Bv7Dl2s?=_?E9zO5R^TBg8Be~fpG?$9I; zDWLH9R9##?>ISN8s2^wj3B?qJxrSSlC6YB}Yee{D3Ex8@QFLZ&zPx-?0>;Cafcb-! zlGLr)wisd=C(F#4-0@~P-C&s%C}GvBhb^tTiL4Y_dsv@O;S56@?@t<)AXpqHx9V;3 zgB!NXwp`=%h9!L9dBn6R0M<~;(g*nvI`A@&K!B`CU3^FpRWvRi@Iom>LK!hEh8VjX z_dSw5nh-f#zIUDkKMq|BL+IO}HYJjMo=#_srx8cRAbu9bvr&WxggWvxbS_Ix|B}DE zk!*;&k#1BcinaD-w#E+PR_k8I_YOYNkoxw5!g&3WKx4{_Y6T&EV>NrnN9W*@OH+niSC0nd z#x*dm=f2Zm?6qhY3}Kurxl@}d(~ z<}?Mw+>%y3T{!i3d1%ig*`oIYK|Vi@8Z~*vxY%Od-N0+xqtJ*KGrqo*9GQ14WluUn z+%c+og=f0s6Mcf%r1Be#e}&>1n!!ZxnWZ`7@F9ymfVkuFL;m6M5t%6OrnK#*lofS{ z=2;WPobvGCu{(gy8|Mn(9}NV99Feps6r*6s&bg(5aNw$eE ztbYsrm0yS`UIJ?Kv-EpZT#76g76*hVNg)L#Hr7Q@L4sqHI;+q5P&H{GBo1$PYkr@z zFeVdcS?N1klRoBt4>fMnygNrDL!3e)k3`TXoa3#F#0SFP(Xx^cc)#e2+&z9F=6{qk z%33-*f6=+W@baq){!d_;ouVthV1PREX^ykCjD|%WUMnNA2GbA#329aEihLk~0!!}k z)SIEXz(;0lemIO{|JdO{6d|-9LePs~$}6vZ>`xYCD(ODG;OuwOe3jeN;|G$~ml%r* z%{@<9qDf8Vsw581v9y+)I4&te!6ZDJMYrQ*g4_xj!~pUu#er`@_bJ34Ioez)^055M$)LfC|i*2*3E zLB<`5*H#&~R*VLYlNMCXl~=9%o0IYJ$bY+|m-0OJ-}6c@3m<~C;;S~#@j-p?DBdr<><3Y92rW-kc2C$zhqwyq09;dc5;BAR#PPpZxqo-@e_s9*O`?w5 zMnLUs(2c-zw9Pl!2c#+9lFpmTR>P;SA#Id;+fo|g{*n&gLi}7`K)(=tcK|?qR4qNT z%aEsSCL0j9DN$j8g(a+{Z-qPMG&O)H0Y9!c*d?aN0tC&GqC+`%(IFY$ll~!_%<2pX zuD`w_l)*LTG%Qq3ZSDE)#dt-xp<+n=3&lPPzo}r2u~>f8)mbcdN6*r)_AaTYq%Scv zEdwzZw&6Ls8S~RTvMEfX{t@L4PtDi{o;|LyG>rc~Um3;x)rOOGL^Bmp0$TbvPgnwE zJEmZ>ktIfiJzdW5i{OSWZuQWd13tz#czek~&*?iZkVlLkgxyiy^M~|JH(?IB-*o6% zZT8+svJzcVjcE0UEkL_5$kNmdrkOl3-`eO#TwpTnj?xB}AlV2`ks_Ua9(sJ+ok|%b z=2n2rgF}hvVRHJLA@9TK4h#pLzw?A8u31&qbr~KA9;CS7aRf$^f1BZ5fsH2W8z}FU zC}Yq76IR%%g|4aNF9BLx6!^RMhv|JYtoZW&!7uOskGSGL+}_>L$@Jg2Vzugq-NJW7 zzD$7QK7cftU1z*Fxd@}wcK$n6mje}=C|W)tm?*V<<{;?8V9hdoi2NRm#~v^#bhwlc z5J5{cSRAUztxc6NH>Nwm4yR{(T>0x9%%VeU&<&n6^vFvZ{>V3RYJ_kC9zN(M(` zp?1PHN>f!-aLgvsbIp*oTZv4yWsXM2Q=C}>t7V(iX*N8{aoWphUJ^(n3k`pncUt&` ze+sYjo)>>=I?>X}1B*ZrxYu`|WD0J&RIb~ zPA_~u)?&`}JPwc1tu=OlKlJ3f!9HXa)KMb|2%^~;)fL>ZtycHQg`j1Vd^nu^XexYkcae@su zOhxk8ws&Eid_KAm_<}65zbgGNzwshR#yv&rQ8Ae<9;S^S}Dsk zubzo?l{0koX8~q*{uA%)wqy*Vqh4>_Os7PPh-maB1|eT-4 zK>*v3q}TBk1QlOF!113XOn(Kzzb5o4Dz@?q3aEb9%X5m{xV6yT{;*rnLCoI~BO&SM zXf=CHLI>kaSsRP2B{z_MgbD;R_yLnd>^1g`l;uXBw7|)+Q_<_rO!!VaU-O+j`u%zO z1>-N8OlHDJlAqi2#z@2yM|Dsc$(nc>%ZpuR&>}r(i^+qO+sKfg(Ggj9vL%hB6 zJ$8an-DbmKBK6u6oG7&-c0&QD#?JuDYKvL5pWXG{ztpq3BWF)e|7aF-(91xvKt047 zvR{G@KVKz$0qPNXK*gt*%qL-boz-*E;7LJXSyj3f$7;%5wj)2p8gvX}9o_u}A*Q|7 z)hjs?k`8EOxv1zahjg2PQDz5pYF3*Cr{%iUW3J+JU3P+l?n%CwV;`noa#3l@vd#6N zc#KD2J;5(Wd1BP)`!IM;L|(d9m*L8QP|M7W#S7SUF3O$GFnWvSZOwC_Aq~5!=1X+s z6;_M++j0F|x;HU6kufX-Ciy|du;T%2@hASD9(Z)OSVMsJg+=7SNTAjV<8MYN-zX5U zVp~|N&{|#Z)c6p?BEBBexg4Q((kcFwE`_U>ZQotiVrS-BAHKQLr87lpmwMCF_Co1M z`tQI{{7xotiN%Q~q{=Mj5*$!{aE4vi6aE$cyHJC@VvmemE4l_v1`b{)H4v7=l5+lm^ ztGs>1gnN(Vl+%VuwB+|4{bvdhCBRxGj3ady^ zLxL@AIA>h@eP|H41@b}u4R`s4yf9a2K!wGcGkzUe?!21Dk)%N6l+#MP&}B0%1Ar*~ zE^88}(mff~iKMPaF+UEp5xn(gavK(^9pvsUQT8V;v!iJt|7@&w+_va`(s_57#t?i6 zh$p!4?BzS9fZm+ui`276|I307lA-rKW$-y^lK#=>N|<-#?WPPNs86Iugsa&n{x%*2 zzL_%$#TmshCw&Yo$Ol?^|hy{=LYEUb|bMMY`n@#(~oegs-nF){0ppwee|b{ca)OXzS~01a%cg&^ zp;}mI0ir3zapNB)5%nF>Sd~gR1dBI!tDL z&m24z9sE%CEv*SZh1PT6+O`%|SG>x74(!d!2xNOt#C5@I6MnY%ij6rK3Y+%d7tr3&<^4XU-Npx{^`_e z9$-|@$t`}A`UqS&T?cd@-+-#V7n7tiZU!)tD8cFo4Sz=u65?f#7Yj}MDFu#RH_GUQ z{_-pKVEMAQ7ljrJ5Wxg4*0;h~vPUI+Ce(?={CTI&(RyX&GVY4XHs>Asxcp%B+Y9rK z5L$q94t+r3=M*~seA3BO$<0%^iaEb2K=c7((dIW$ggxdvnC$_gq~UWy?wljgA0Dwd`ZsyqOC>)UCn-qU5@~!f znAWKSZeKRaq#L$3W21fDCMXS;$X(C*YgL7zi8E|grQg%Jq8>YTqC#2~ys%Wnxu&;ZG<`uZ1L<53jf2yxYR3f0>a;%=$SYI@zUE*g7f)a{QH^<3F?%({Gg)yx^zsdJ3^J2 z#(!C3qmwx77*3#3asBA(jsL`86|OLB)j?`0hQIh>v;c2A@|$Yg>*f+iMatg8w#SmM z<;Y?!$L--h9vH+DL|Wr3lnfggMk*kyGH^8P48or4m%K^H-v~`cBteWvnN9port02u zF;120HE2WUDi@8?&Oha6$sB20(XPd3LhaT~dRR2_+)INDTPUQ9(-370t6a!rLKHkIA`#d-#WUcqK%pMcTs6iS2nD?hln+F-cQPUtTz2bZ zq+K`wtc1;ex_iz9?S4)>Fkb~bj0^VV?|`qe7W02H)BiibE9=_N8=(5hQK7;(`v7E5Mi3o? z>J_)L`z(m(27_&+89P?DU|6f9J*~Ih#6FWawk`HU1bPWfdF?02aY!YSo_!v$`&W znzH~kY)ll^F07=UNo|h;ZG2aJ<5W~o7?*${(XZ9zP0tTCg5h-dNPIM=*x@KO>a|Bk zO13Cbnbn7+_Kj=EEMJh4{DW<))H!3)vcn?_%WgRy=FpIkVW>NuV`knP`VjT78dqzT z>~ay~f!F?`key$EWbp$+w$8gR1RHR}>wA8|l9rl7jsT+>sQLqs{aITUW{US&p{Y)O zRojdm|7yoA_U+`FkQkS?$4$uf&S52kOuUaJT9lP@LEqjKDM)iqp9aKNlkpMyJ76eb zAa%9G{YUTXa4c|UE>?CCv(x1X3ebjXuL&9Dun1WTlw@Wltn3zTareM)uOKs$5>0tR zDA~&tM~J~-YXA<)&H(ud)JyFm+d<97d8WBr+H?6Jn&^Ib0<{6ov- ze@q`#Y%KpD?(k{if5-M(fO3PpK{Wjqh)7h+ojH ztb=h&vmy0tn$eA8_368TlF^DKg>BeFtU%3|k~3lZAp(C$&Qjo9lR<#rK{nVn$)r*y z#58_+t=UJm7tp|@#7}6M*o;vn7wM?8Srtc z3ZFlKRDYc^HqI!O9Z*OZZ8yo-3ie9i8C%KDYCfE?`rjrf(b&xBXub!54yaZY2hFi2w2asEOiO8;Hru4~KsqQZMrs+OhO8WMX zFN0=EvME`WfQ85bmsnPFp|RU;GP^&Ik#HV(iR1B}8apb9W9)Nv#LwpED~%w67o;r! zVzm@zGjsl)loBy6p>F(G+#*b|7BzZbV#E0Pi`02uAC}D%6d12TzOD19-9bhZZT*GS zqY|zxCTWn+8*JlL3QH&eLZ}incJzgX>>i1dhff}DJ=qL{d?yv@k33UhC!}#hC#31H zOTNv5e*ozksj`4q5H+75O70w4PoA3B5Ea*iGSqA=v)}LifPOuD$ss*^W}=9kq4qqd z6dqHmy_IGzq?j;UzFJ*gI5)6qLqdUL;G&E*;lnAS+ZV1nO%OdoXqw(I+*2-nuWjwM-<|XD541^5&!u2 z1XflFJp(`^D|ZUECbaoqT5$#MJ=c23KYpBjGknPZ7boYRxpuaO`!D6C_Al?T$<47T zFd@QT%860pwLnUwer$BspTO9l1H`fknMR|GC?@1Wn`HscOe4mf{KbVio zahne0&hJd0UL#{Xyz=&h@oc>E4r*T|PHuNtK6D279q!2amh%r#@HjaN_LT4j>{&2I z?07K#*aaZ?lNT6<8o85cjZoT~?=J&Xd35I%JJom{P=jj?HQ5yfvIR8bd~#7P^m%B-szS{v<)7i?#at=WA+}?r zwMlc-iZv$GT};AP4k2nL70=Q-(+L_CYUN{V?dnvG-Av+%)JxfwF4-r^Z$BTwbT!Jh zG0YXK4e8t`3~){5Qf6U(Ha0WKCKl^zlqhqHj~F}DoPV#yHqLu+ZWlv2zH29J6}4amZ3+-WZkR7(m{qEG%%57G!Yf&!Gu~FDeSYmNEkhi5nw@#6=Bt& zOKT!UWVY-FFyq1u2c~BJ4F`39K7Vw!1U;aKZw)2U8hAb&7ho|FyEyP~D<31{_L>RrCU>eEk-0)TBt5sS5?;NwAdRzRj5qRSD?J6 ze9ueq%TA*pgwYflmo`=FnGj2r_u2!HkhE5ZbR_Xf=F2QW@QTLD5n4h(?xrbOwNp5` zXMEtm`m52{0^27@=9VLt&GI;nR9S)p(4e+bAO=e4E;qprIhhclMO&7^ThphY9HEko z#WfDFKKCcf%Bi^umN({q(avHrnTyPH{o=sXBOIltHE?Q65y_At<9DsN*xWP|Q=<|R z{JfV?B5dM9gsXTN%%j;xCp{UuHuYF;5=k|>Q=;q zU<3AEYawUG;=%!Igjp!FIAtJvoo!*J^+!oT%VI4{P=XlbYZl;Dc467Nr*3j zJtyn|g{onj!_vl)yv)Xv#}(r)@25OHW#|eN&q7_S4i2xPA<*uY9vU_R7f};uqRgVb zM%<_N3ys%M;#TU_tQa#6I1<+7Bc+f%mqHQ}A@(y^+Up5Q*W~bvS9(21FGQRCosvIX zhmsjD^OyOpae*TKs=O?(_YFjSkO`=CJIb*yJ)Pts1egl@dX6-YI1qb?AqGtIOir&u zyn>qxbJhhJi9SjK+$knTBy-A)$@EfzOj~@>s$M$|cT5V!#+|X`aLR_gGYmNuLMVH4 z(K_Tn;i+fR28M~qv4XWqRg~+18Xb?!sQ=Dy)oRa)Jkl{?pa?66h$YxD)C{F%EfZt| z^qWFB2S_M=Ryrj$a?D<|>-Qa5Y6RzJ$6Yp`FOy6p2lZSjk%$9guVsv$OOT*6V$%TH zMO}a=JR(1*u`MN8jTn|OD!84_h${A)_eFRoH7WTCCue9X73nbD282V`VzTH$ckVaC zalu%ek#pHxAx=0migDNXwcfbK3TwB7@T7wx2 zGV7rS+2g9eIT9>uWfao+lW2Qi9L^EBu#IZSYl0Q~A^KYbQKwNU(YO4Xa1XH_>ml1v z#qS;P!3Lt%2|U^=++T`A!;V-!I%upi?<#h~h!X`p7eP!{+2{7DM0$yxi9gBfm^W?M zD1c)%I7N>CG6250NW54T%HoCo^ud#`;flZg_4ciWuj4a884oWUYV(#VW`zO1T~m(_ zkayymAJI)NU9_0b6tX)GU+pQ3K9x=pZ-&{?07oeb1R7T4RjYYbfG^>3Y>=?dryJq& zw9VpqkvgVB?&aK}4@m78NQhTqZeF=zUtBkJoz8;6LO<4>wP7{UPEs1tP69;v919I5 zzCqXUhfi~FoK5niVU~hQqAksPsD@_|nwH4avOw67#fb@Z5_OS=$eP%*TrPU%HG<-A z`9)Y3*SAdfiqNTJ2eKj8B;ntdqa@U46)B+odlH)jW;U{A*0sg@z>-?;nN}I=z3nEE@Bf3kh1B zdqT{TWJvb#AT&01hNsBz8v(OwBJSu#9}A6Y!lv|`J#Z3uVK1G`0$J&OH{R?3YVfk% z9P3HGpo<1uy~VRCAe&|c4L!SR{~^0*TbVtqej3ARx(Okl5c>m~|H9ZwKVHc_tCe$hsqA`l&h7qPP5xBgtwu!; zzQyUD<6J!M5fsV-9P?C9P49qnXR+iXt#G_AS2N<6!HZ(eS`|-ndb|y!(0Y({2 z4aF~GO8bHM7s+wnhPz>sa!Z%|!qWk*DGr)azB}j6bLe#FQXV4aO>Eo7{v`0x=%5SY zy&{kY+VLXni6pPJYG_Sa*9hLy-s$79$zAhkF)r?9&?UaNGmY9F$uf>iJ~u@Q;sydU zQaN7B>4B*V;rtl^^pa3nFh$q*c&sx^Um}I)Z)R&oLEoWi3;Yv6za?;7m?fZe>#_mS z-EGInS^#UHdOzCaMRSLh7Mr0}&)WCuw$4&K^lx{;O+?Q1p5PD8znQ~srGrygJ?b~Q5hIPt?Wf2)N?&Dae4%GRcRKL(a-2koctrcvxSslXn-k9cYS|<-KJ#+$Wo>}yKKh*3Q zHsK(4-Jv!9R3*FKmN$Z#^aZcACGrlGjOe^#Z&DfPyS-1bT9OIX~-I-5lN6Y>M}dvivbs2BcbPcaNH%25-xMkT$>*soDJ) z27;};8oCYHSLF0VawZFn8^H;hIN=J457@eoI6s2P87QN6O`q8coa;PN$mRZ>2Vv+! zQj1}Tvp8?>yyd_U>dnhx%q~k*JR`HO=43mB?~xKAW9Z}Vh2b0<(T89%eZ z57kGs@{NUHM>|!+QtqI@vE8hp`IIGc`A9Y{p?c;@a!zJFmdaCJ;JmzOJ8)B1x{yZp zi!U{Wh-h+u6vj`2F+(F6gTv*cRX7MR z9@?>is`MSS1L#?PaW6BWEd#EX4+O1x6WdU~LZaQ^Quow~ybz*aAu{ZMrQ;yQ8g)-qh>x z^}@eFu1u7+3C0|hRMD1{MEn(JOmJ|wYHqGyn*xt-Y~J3j@nY56i)sgNjS4n@Q&p@@^>HQjzNaw#C9=TbwzDtiMr2a^}bX< zZE%HU^|CnS`WYVcs}D)+fP#bW0+Q#l#JC+!`OlhffKUCN8M-*CqS;VQX`If78$as0 z=$@^NFcDpTh~45heE63=x5nmP@4hBaFn(rmTY2Yj{S&k;{4W!0Nu9O5pK30}oxM7{ z>l4cKb~9D?N#u_AleD<~8XD@23sY^rt&fN%Q0L=Ti2bV#px`RhM$}h*Yg-iC4A+rI zV~@yY7!1}-@onsZ)@0tUM23cN-rXrZYWF#!V-&>vds8rP+w0t{?~Q zT^LN*lW==+_ifPb+-yMh9JhfcYiXo_zWa`ObRP9_En3P))Qyu0qPJ3*hiFSu>Vt-j z<*HWbiP2#BK@nt<g|pe3 zfBKS@i;ISkorx@cOIx9}p^d8Gis%$)))%ByVYU^KG#eE+j1p;^(Y1ndHnV&YuQZm~ zj;f+mf>0ru!N`)_p@Ls<& z`t+JDx7}R568Q|8`4A}G@t8Wc?SOXunyW5C-AWoB@P>r}uwFY*=?=!K@J(!t@#xOuPXhFS@FTf6-7|%k;nw2%Z+iHl219Ho1!bv(Ee0|ao!Rs%Jl0@3suGrOsb_@VM;(xzrf^Cbd;CK3b%a|ih-fG)`Rd00O74=sQYW~Ve z#fl!*(fo~SIQ5-Sl?1@o7-E*|SK|hoVEKzxeg!$KmQLSTN=5N`rYeh$AH&x}JMR+5dq|~FUy&Oj%QIy;HNr;V*7cQC+ka>LAwdU)?ubI@W z={eg%A&7D**SIj$cu=CN%vN^(_JeIHMUyejCrO%C3MhOcVL~Niu;8WYoN}YVhb+=- zR}M3p|H0`E2Id99y#03r`8$s0t*iD>`^7EPm1~guC)L~uW#O~>I85Q3Nj8(sG<@T| zL^e~XQt9O0AXQ^zkMdgzk5bdYttP~nf-<831zulL>>ghTFii$lg3^80t8Gb*x1w5| zN{kZuv`^8Fj=t(T*46M=S$6xY@0~AvWaGOYOBTl0?}KTkplmGn-*P(X=o-v^48OY} zi11-+Y}y)fdy_tI;*W(>#qzvgQZ52t!nrGsJEy!c86TKIN(n|!&ucCduG$XaIapI z{(Z9gZANsI={A=5Aorgq2H25Dd}H5@-5=j=s{f`%^>6b5qkm_2|3g>r-^amf=B_xV zXg*>aqxXZ6=VUI4$})ypDMy$IKkgJ;V>077T9o#OhpFhKtHP_4mnjS5QCgGe<;~Xe zt<2ZhL7?JL6Mi|U_w?;?@4OD@=4EB2op_s)N-ehm#7`zSU#7itU$#%^ncqjc`9HCG zfj;O1T+*oTkzRi-6NN`oS3w3$7ZB37L>PcN$C$L^qqHfiYO4_>0_qCw0r@FEMj=>}}%q_`d#pUT;c?=gI zqTGpiY4Z;Q(B~#hXIVBFbi#dO=cOdmOqD0|An?7nMdrm2^C>yw*dQ=#lf8)@DvXK; z$MXp}QZgnE!&L73x0LZX_bCdD4lRY$$^?9dt1RwCng{lIpbb%Ej%yOh{@76yEyb}K zXZy%^656Sk3BLKbalcc>Dt5iDzo^tj2!wnDL(X;urJfpkWrab!frFSC6Q7m zuoqN!(t=L&+Ov&~9mz(yEB`MK%RPXS>26Ww5(F;aZ zR@tPAw~=q2ioOiynxgBqE&3-R-@6yCo0*mE;#I^c!=g~HyyjGA6}|<(0EseKDTM4w z94YnCO^VYIUY@}x8kr;;El-cFHVO<$6;-UdmUB|J8R*Wf$a37gVgYT|w5^KkYe=(i zMkA$%7;^a*$V+}e%S~&*^^O;AX9NLt@cIPc*v!lKZ)(zahAsUj%PJot19ErFU=Uk( z9Hw;Lb`V+BzVpMu;TGB9}y~ff)^mbEmF?g{{7_0SR zPgp*n)l{?>7-Ji;eWG{ln$)Bro+UJAQo6W2-23d@SI=HiFV3hR2OUcAq_9q~ye)o@ zq8WZvhg`H(?1AUZ-NM%_Cuj}eb{4wOCnqs^E1G9U4HKjqaw@4dsXWP#$wx^}XPZ0F zywsJ0aJHA>AHc^q#nhQjD3!KDFT6FaDioJ#HsZU7Wo?8WH19TJ%OMDz$XH5J4Cjdt z@crE;#JNG`&1H8ekB(R4?QiiZ55kztsx}pQti}gG0&8`dP=d(8aCLOExd*Sw^WL`Q zHvZ(u`5A58h?+G&GVsA;pQNNPFI)U@O`#~RjaG(6Y<=gKT2?1 z*pCUGU)f??VlyP64P@uT`qh?L03ZQyLOBn?EKwH+IG{XvTh5|NldaSV_n~DK&F1aa znq~C_lCQHMfW6xib%a2m!h&%J)aXb{%-0!HCcW|kzaoSwPMhJ6$KL|F~Sx(tctbwfkgV;#KZlEmJN5&l5XF9eD;Kqb<| z>os)CqC^qF8$be|v;)LY{Gh@c0?a??k7M7&9CH+-B)t&T$xeSzCs30sf8O-+I#rq} z&kZj5&i>UyK9lDjI<*TLZ3USVwwpiE5x8<|{Db z3`HX3+Tt>1hg?+uY{^wC$|Tb7ud@3*Ub?=2xgztgv6OOz0G z-4VRyIChHfegUak^-)-P;VZY@FT64#xyo=+jG<48n2%wcx`ze6yd51(!NclmN=$*kY=#uu#>=yAU-u4I9Bt0n_6ta?&9jN+tM_5_3RH);I zxTN4n$EhvKH%TmOh5mq|?Cx$m>$Ed?H7hUEiRW^lnW+}ZoN#;}aAuy_n189qe1Juk z6;QeZ!gdMAEx4Na;{O*j$3F3e?FLAYuJ2iuMbWf8Ub6(nDo?zI5VNhN@ib6Yw_4P)GY^0M7TJwat z2S*2AcP}e0tibZ@k&htTD&yxT9QRG0CEq$;obfgV^&6YVX9B9|VJf`1aS_#Xk>DFo zwhk?~)>XlP5(u~UW0hP7dWZuCuN4QM24Td&j^7~)WQ6YeCg)njG*ri}tTcG-NxX}p zNB>kcxd5ipW@tN3=6r@Jgm#rgrK*dXA!gxy6fAvP7$)8)Vc~PPQ|`( zPy|bG1sUz958-!zW^j(8ILV%QC@x`~PDFczboZqWjvSU<9O3!TQ&xYi%?Y0AiVBLV z%R?#1L#G&xw*RZPsrwF?)B5+MSM(b$L;GLnRsSU!_$N;6pD97~H}`c>0F`&E_FCNE z_)Q*EA1%mOp`z>+h&aqlLKUD9*w?D>stDeBRdR*AS9)u;ABm7w1}eE|>YH>YtMyBR z^e%rPeZzBx_hj?zhJVNRM_PX(O9N#^ngmIJ0W@A)PRUV7#2D!#3vyd}ADuLry;jdn zSsTsHfQ@6`lH z^GWQf?ANJS>bBO-_obBL$Apvakhr1e5}l3axEgcNWRN$4S6ByH+viK#CnC1|6Xqj& z*_i7cullAJKy9GBAkIxUIzsmN=M|(4*WfBhePPHp?55xfF}yjeBld7+A7cQPX8PE-|Pe_xqboE;2AJb5ifrEfr86k&F0+y!r`-urW}OXSkfz2;E``UTrGSt^B)7&#RSLTQitk=mmPKUKP`uGQ4)vp_^$^U`2Jjq zeul!ptEpa%aJo0S(504oXPGdWM7dAA9=o9s4-{>z*pP zJ31L#|L?YR;^%+>YRJrLrFC=5vc;0{hcxDKF z!ntmgO>rVDaGmRpMI7-+mv(j~;s_LARvcpkXj|{GHu1c<1 zKI)#7RE~Dizu1lG>p-PcY2jX#)!oJlBA$LHnTUWX=lu``E)vhf9h4tYL-juZ`e|Kb z=F?C;Ou)h^cxB;M-8@$ZSH0jkVD>x-XS$ePV1vlU8&CG))4NgU(=XFH=Jb1IB7dBysS+94}Y>sjS(&YcJwhn zifzA|g$D5rW89vkJSv()I+Th4R&C$g-!CB30xkh%aw4po3$@DK2fW>}enE2YPt&{C~j}`>RYICK{ zYAPfZ&%`R}u6MYo<>d`^O#Q(dM{3>T^%J{Vu;lr#Utg4x9!Z9J%iXs(j+dn&SS1_2 zzxGtMnu^`d%K4Xq4Ms-ErG3_7n?c(3T!?rvyW=G<7_XKDv*ox`zN*^BVwUoqh{D7o zdEiq;Zp6}k_mCIAVTUcMdH|fo%L#qkN19X$%b1#Oko|u4!M*oRqdBa3z98{H#g=d%5X&D#NXhLh`nUjxi8@3oo(AgeItdJ zIrt9ieHI1GiwHiU4Cba-*nK@eHI4uj^LVmVIntU@Gwf^t6i3{;SfLMCs#L;s;P4s5oqd^}8Uil!NssP>?!K z07nAH>819U=^4H6l-Dhy`^Q6DV^}B9^aR0B%4AH=D&+dowt9N}zCK+xHnXb-tsKaV6kjf;Wdp#uIZ_QsI4ralE>MWP@%_5eN=MApv92( z09SSB#%eE|2atm9P~X2W2F-zJD+#{q9@1}L2fF|Lzu@1CAJq*d6gA8*Jjb;<+Asih zctE|7hdr5&b-hRhVe}PN z$0G{~;pz1yhkbwuLkfbvnX=<7?b(1PhxAmefKn$VS6Sv)t-UypwhEs3?*E=(pc%Dlul1V~OdWvdf z{WBX?lhfO_g$$X~hm^Bhl@U0t<|beYgT)2L_C(z@B^-63c9Ak2*Aa)iOMylfl|qyNQdO#yoJ?m2FOkhZ1ou@G%+^m z#!#(gTv8nx^34(HddDp|dcFl@&eh+&FFJc@^FL3fV2?u&9Wt|Yp3&MS)e+ez0g~Ys zY7d0n^)+ z0@K^GJTLN?XAV(0F6e>o>HCGJU5(8WsSFErs0FsO=O1u$=T~xx7HYK{7C>-IGB8U+ z&G^Vy>uY}Bq7HX-X`U^nNh+11GjG-)N1l_tG<^4Tu4+4X9KO9IrdH+eXGk|G6Tc(U zU~g7BoO!{elBk>;uN-`rGQP-7qIf9lQhj-=_~0Qyszu>s$s0FrJatSylv!ol&{29~ z7S4fv&-UBOF&cR@xpuW*{x9$R;c_ALt?{+dI&HoBKG-!EY{yE=>aWhlmNhHlCXc(B zuA-zI*?Z9ohO$i8s*SEIHzVvyEF$65b5m=H*fQ)hi*rX8 zKlPqjD*Ix1tPzfR_Z3bO^n32iQ#vhjWDwj6g@4S?_2GyjiGdZZRs3MLM zTfl0_Dsn=CvL`zRey?yi)&4TpF&skAi|)+`N-wrB_%I_Osi~)9`X+`Z^03whrnP7f z?T`*4Id`J@1x#T~L(h5^5z%Cok~U|&g&GpCF%E4sB#i3xAe>6>24%Kuu=)=HRS;Pu2wghgTFa zHqm#sa{7-~{w_039gH0vrOm&KPMiPmuPRpAQTm5fkPTZVT&9eKuu%Riu%-oMQl2X6 z{Bnx`3ro^Z$}rVzvUZsk9T)pX|4%sY+j0i)If_z-9;a^vr1YN>=D(I7PX){_JTJ&T zPS6~9iDT{TFPn}%H=QS!Tc$I9FPgI<0R7?Mu`{FTP~rRq(0ITmP1yrJdy|m;nWmDelF-V^y7*UEVvbxNv0sHR?Q=PVYRuZinR(;RjVAG zm&qlSYvaiIbVEqBwyDaJ8LVmiCi{6ESF4pO?U&7pk&CASm6vuB;n-RauPFzdr!C%1 z8pjdSUts7EbA4Kg(01zK!ZU<-|d zU&jWswHnSLIg&mTR;!=-=~z(#!UsXt%NJR|^teM8kG@8Qg_0^6Jqfn&(eENtP8D7K zvnll3Y%7yh1Ai~0+l6dAG|lEGe~Oa+3hO>K2}{ulO?Vf*R{o2feaRBolc;SJg)HXHn4qtzomq^EM zb)JygZ=_4@I_T=Xu$_;!Q`pv6l)4E%bV%37)RAba{sa4T*cs%C!zK?T8(cPTqE`bJ zrBWY`04q&+On`qH^KrAQT7SD2j@C>aH7E8=9U*VZPN-(x>2a++w7R$!sHH+wlze2X)<<=zC_JJvTdY7h&Jum?s?VRV)JU`T;vjdi7N-V)_QCBzI zcWqZT{RI4(lYU~W0N}tdOY@dYO8Rx5d7DF1Ba5*U7l$_Er$cO)R4dV zE#ss{Dl`s#!*MdLfGP>?q2@GSNboVP!9ZcHBZhQZ>TJ85(=-_i4jdX5A-|^UT}~W{CO^Lt4r;<1ps@s|K7A z90@6x1583&fobrg9-@p&`Gh+*&61N!$v2He2fi9pk9W2?6|)ng7Y~pJT3=g~DjTcYWjY9gtZ5hk*1Qf!y2$ot@0St$@r8|9^GMWEE>iB~etL zXYxn#Rvc`DV&y93@U$Z91md1qVtGY*M(=uCc}@STDOry@58JNx`bUH}EIb(n6I}i? zSYJOZ2>B6&Payu+@V!gxb;)_zh-{~qtgVwQ-V;vK7e0^Ag_$3+g+{xSVudVOY_p-R z$sXhpFSk7je2lk5)7Y2;Z847E1<;5?;z(I)55YFtgF!J;NT|eVi}q^*2sM}zyM{+s zD0phl+J>k1E7cZEGmP?1-3~RE;R$q(I5}m?MX8xi?6@0f#rD8Cjkpv1GmL5HVbTnM zAQ&4-rbkpdaoLp~?ZoW>^+t0t1t%GO2B;ZD4?{qeP+qsjOm{1%!oy1OfmX?_POQJ4 zGwvChl|uE;{zGoO?9B_m{c8p(-;_yq?b^jA({}iQG35?7H7`1cm`BGyfuq7z1s~T| zm88HpS{z54T{jxC=>kZ=Z#8G@uya3tt0$xST5V$-V<;6MA66VFg}`LLU8L=q3DmkU z)P^X8pg`ndMY*>gr{6~ur^Q@Z8LNQf*6wkP03K<|M*+cDc#XKZ`Z0$1FkI-IDRw#| za52W4MyHlDABs~AQu7Duebjgc}02W;1jgBx&I@TMDXU`LJutQ?@r%1z`W zlB8G-U$q37G1ob>Er8j0$q@OU3IwG#8HsvJM#)j=Y%~#zY`jaG%5;!(kY3*a^t>(qf6>I zpAJpF%;FQ?BhDSsVG27tQEG*CmWhl4)Ngp%}D?U0!nb1=)1M==^B)^$8Li$boCY$S4U;G^A!?24nSYHra{< zSNapX#G+0BTac|xh`w&}K!);$sA3ay%^a2f?+^*9Ev8ONilfwYUaDTMvhqz2Ue2<81uuB71 zAl|VEOy%GQ7zxAJ&;V^h6HOrAzF=q!s4x)Mdlmp{WWI=gZRk(;4)saI0cpWJw$2TJcyc2hWG=|v^1CAkKYp;s_QmU?A;Yj!VQ1m-ugzkaJA(wQ_ zah00eSuJg<5Nd#OWWE?|GrmWr+{-PpE_Dbqs&2`BI=<%ggbwK^8VcGiwC-6x`x|ZY z1&{Vj*XIF2$-2Lx?KC3UNRT z&=j7p1B(akO5G)SjxXOjEzujDS{s?%o*k{Ntu4*X z;2D|UsC@9Wwk5%)wzTrR`qJX!c1zDZXG>-Q<3Z)7@=8Y?HAlj_ZgbvOJ4hPlcH#Iw z!M-f`OSHF~R5U`p(3*JY=kgBZ{Gk;0;bqEu%A;P6uvlZ0;BAry`VUoN(*M9NJ z%CU2_w<0(mSOqG;LS4@`p(3*Z7jC|Khm5-i>FcYr87};_J9)XKlE}(|HSfnA(I3)I zfxNYZhs#E6k5W(z9TI2)qGY&++K@Z?bd;H%B@^!>e2Wi@gLk)wC)T93gTxdRPU7uh z)`$-m(G2I5AuK52aj!fMJR|d^H?0X~+4xSpw zqNRtq5r8hic*{eAwUT<=gI5uXLg)o5mg4XnO^T+Rd+{l)<$Aqp{+RxhNYuX^45W0k z5$t%+7R;dX$`s6CYQYcims>5bNt+k&l_t%C9D-6sYVm%Y8SRC#kgRh*%2kqMg2ewb zp_X*$NFU%#$PuQ@ULP>h9Xw`cJ>J-ma8lU`n*9PcWFpE%x0^}(DvOVe2jz@ z0^2QOi0~t!ov?jI{#bw~`Aj5ymQW@eruRg`ZNJ5IT5_5AHbQ?|C>_7rwREf2e2x&L zlV8xdOkp_*+wdaqE?6bmdrFfaGepcj=0AI<+c=Tg^WB9BhFx?SvwoVdTEm&zPy@Vs zPs2mVPiw1n_h?Xi6!+w)ypsFXXuM>gIY(J+1N6r!sJ{+r1%BzRF20!D;bN>L^?O8n z(5|x2p^Q6X`!pm3!MMFET5`nJXn>tK`fFAj5Eo&t6;F>TU_4G93YGyzvF2_fB& zfE8(dq?R@@&Wh8~%G~rDt1+e)96O5)by_%;G~Zv`TpmZ)vY@BkAan*zEy(s`*{-@U z;$WPjoNx~m?`6Z;^O=K3SBL3LrIxfU{&g)edERkPQZK!mVYU-zHuV0ENDq^e<-?^U zGyRcrPDZZw*wxK(1SPUR$0t0Wc^*u_gb*>qEOP102FX|`^U%n*7z=wM@pOmYa6Z=-)T%!{tAFELY2`dTl3$&w! z7sgKXCTU(h3+8)H#Qov19%85Xo+oQh?C-q0zaM_X2twSCz|j_u!te3J2zLV#Ut_q7 zl+5LGx#{I`(9FzE$0==km|?%m?g~HB#BSz2vHynf1x14mEX^~pej*dhzD|6gMgOJ_ z8F_<>&OIz;`NSqrel?HI-K(|ypxwz}NtX!CF3&T(CkuYOnKS&%lUSU44KsgS`L>!w zl{MoT4`t=+p8>@88)Ea%*hOIkxt#b4RfrwRMr91UF_Ic~kV;|+dRW0a8Vl725+gsvtHr5 z>?3fai&9NmU|3;-nAu8OB|<(-2Kfub4MX&1i}dDd=R~Dk=U-Vr=@&lfEIYU~xtHHO z4TKt=wze`qm=69lD)sOOkZ;$9=0B#*g@X6xPM-%zG*rCXkN%eRDEUp$gAaEd29t&T zRTAg##Sk+TAYaa(LyTD__zL3?Z+45^+1o}(&f<~lQ*-z7`Um^>v@PKqOunTE#OyKFY^q&L^fqZgplhXQ>P3?BMaq6%rO5hfsiln7TppJ z>nG9|2MmL|lShn4-yz0qH>+o;Fe`V!-e*R0M|q~31B=EC$(bQZTW^!PrHCPE4i|>e zyAFK!@P}u>@hqwf%<#uv*jen5xEL|v!VQEK!F`SIz_H8emZfn#Hg}}@SuqPv+gJ@- zf3a`DT_Q#)DnHv+XVXX`H}At zmQwW2K`t@(k%ULJrBe6ln9|W8+3B*pJ#-^9P?21%mOk(W1{t#h?|j0ZrRi_dwGh#*eBd?fy(UBXWqAt5I@L3=@QdaiK`B_NQ$ zLXzm{0#6zh2^M zfu>HFK^d`&v|x&xxa&M|pr))A4)gFw<_X@eN`B1X%C^a{$39fq`(mOG!~22h)DYut z(?MONP1>xp4@dIN^rxtMp&a^yeGc8gmcajyuXhgaB;3}vFCQFa!pTDht9ld9`&ql`2&(dwNl5FZqedD^BP zf5K1`(_&i7x-&rD=^zkFD87idQrk(Y?E;-j^DMCht`A8Qa5J-46@G_*Y3J+&l{$}*QCATEc9zuzaQGHR8B;y*>eWuv)E##?Ba3w= zZ|v(l{EB`XzD#|ncVm#Wy?#Nzm3bS1!FJ70e{DGe$EgNDg7<_ic^mJSh&Xc|aTwCrTv;XkW~UlS&G%KyLklCn}F^i(YP(f z{cqH%5q9ND_S;l$HRP$Q@`D=F*_1$CXIA5X@|V&Vir$NQ$vCx!b&LGCR<-2y)m%HI zxeeyQIjiWcf4uD9+FP+EJ`&$oJ%$R(#w~GjqP|aTQj#d(;l#rq$vcM&Y4ZQ_i{Kpx z?k2BtoKb?+1-EVmG^ne-W%8+y?i#J5N5g8f^qpH5(ZZp7$u+?I9GB+&MREX?TmVV$ zA}Ps=^CkD^sD9N;tNtN!a>@D^&940cTETu*DUZlJO*z7BBy`Rl;$-D@8$6PFq@tz0 z=_2JMmq-JRSvx`;!XM|kO!|DENI-5ke8WR*Zj#vy#Nf1;mW-{6>_sCO8?sVWOKDM| zR(iaZrBrzlRatUzp_Y|2nOXnY2G%WLGXCo9*)th_RnXvXV=q;WNAimI98!A54|$&OCCG%$4m{%E&o?S|Qx<4K~YGmM1CS!vZAzLN%d znbZsw6ql=XkiwSbNofNeA42q8#LH6Rk(u@z172O#6K>Sb{#`t#GUgpd{2;D(9@I_9 zwsY(6Go7RmOThs2rM3|Z#Vbs}CHPLgBK6gE8;XkJQDx~p5wJ?XkE(0<^hwnt6;$~R zXCAzMfK@`myzdkkpv*ZbarVwCi&{-O#rswrb-#x4zRkxfVCq;mJLic|*C92T?0CYv z)FCqY$xA(QZmggPocZqQj0Rc?=Afna`@fpSn)&nSqtI}?;cLphqEF3F9^OZfW9@HDunc^2{_H)1D9(O}4e zJMi_4(&$CD{Jf5&u|7#Iq*F~)l!8pAzNrX^<&wfEu~}Ipslzx=g^ff2?B9SnV=!$ zv&K0`hMN6BVIusHNX-lr`#K?OG1S*S4rCQaI3ea(!gCl7YjxJ3YQ)7-b&N*D8k><*x|47s3; z4f~WTWuk|Qd*d*DICV}Vb0YSzFZp5|%s4}@jvtTfm&`|(jNpajge zD}@CMaUBs+b?Yu6&c#18=TxzMCLE76#Dy=DLiq_a_knQX4Uxk$&@3ORoBFK_&a>`QKaWu^)Hzrqz{5)?h3B_`4AOn{fG9k zEwnjQb>8XRq!k?rmCd6E**1cY#b9yczN4mD%GLCeRk}{TmR1*!dTNzY;(f!B0yVuk zSjRyf;9i@2>bdGSZJ=FNrnxOExb075;gB z*7&YR|4ZraFO#45-4h%8z8U}jdt?83AmU3)Ln#m3GT!@hYdzqqDrkeHW zU#R`Z8RHq996HR=mC}SRGtsz07;-C-!n*ALpwwBe~loM)YqMH)Um$sH0RbTTzxFd)h1=-w5Yl3k|3nQ zZG>=_yZ7Lsn=b8_MZI+LSHLGYSSCc?ht~7cv#39>Moz6AS}5 zus?xge0PGdFd2FpXgIscWOyG}oxATgd$yl0Ugf_&J_vwt`)XWx!p*gE_cWU(tUTnz zQS}!bMxJyi3KWh^W9m zxLcy``V@EfJzYjK@$e7Yk=q!kL8cd3E-zpc*wwvGJ62O!V;N zFG7Y?sJ+^a%H1;rdDZRu2JmGn6<&ERKes=Pwx)GG-nt73&M78+>SOy!^#=gvLB)2H zjv!J0O`-zft|0Jv$3k5wScY)XB+9leZgR5%3~HtZA=bCg7=Dn+F}>2lf;!*1+vBtf z9jhmqlH=t5XW{0MC7Y~O7jaju&2`p!ZDLGlgnd~%+EJ%A#pIByi-+EOmoLVoK&ow8 zTDjB%0hxhiRv+O3c2*y00rMA=)s|3-ev7emcbT43#izku7dvaDXy1IMV0ahjB9yzi z9C9fN+I2Mzt1*{`a6B?+PdWHiJ5fH}rb2t>q)~3RfCxmyK^y5jN7Pn(9DFh61GO%p zuBErj=m|bDn_L8SINU)Z&@K*AgGz+SUYO_RUeJt=E0M+eh&kqK;%Y1psBNU<4-s9# ziHFr7QP6Ew=-2CdfA#Bf|EsctH;<&=Hsd>)Ma8NvHB$cpVY@}TV!UN}3?9o@CS5kw zx%nXo%y|r5`YOWoZi#hE(3+rNKLZ2g5^(%Z99nSVt$2TeU2zD%$Q(=$Y;%@QyT5Rq zRI#b><}zztscQaTiFbsu2+%O~sd`L+oKYy5nkF4Co6p88i0pmJN9In`zg*Q;&u#uK zj#>lsuWWH14-2iG z&4w{6QN8h$(MWPNu84w1m{Qg0I31ra?jdyea*I~Xk(+A5bz{x%7+IL}vFDUI-Rf{! zE^&Dau9QxA2~)M98b42(D6Q}2PUum0%g>B?JS?o~VrP+Go2&c-7hIf7(@o1*7k$zS zy@o5MEe8DoX$Ie(%SZByyf9Xf9n8xkoX}s6RiO1sg*kAV^6EAAz$>*x^OmIy!*?1k zG+UQ|aIWDEl%)#;k{>-(w9UE7oKM#2AvQud}sby=D7$l6{$}SE8O9WgHM_+ zJ?tHeu@Pi93{AuwVF^)N(B~0?#V*6z;zY)wtgqF7Nx7?YQdD^s+f8T0_;mFV9r<+C z4^NloIJIir%}ptEpDk!z`l+B z5h(k$0bO$VV(i$E@(ngVG^YAjdieHWwMrz6DvNGM*ydHGU#ZG{HG5YGTT&SIqub@) z=U)hR_)Q@#!jck+V`$X5itp9&PGiENo(yT5>4erS<|Rh#mbCA^aO2rw+~zR&2N6XP z5qAf^((HYO2QQQu2j9fSF)#rRAwpbp+o=X>au|J5^|S@(vqun`du;1_h-jxJU-%v| z_#Q!izX;$3%BBE8Exh3ojXC?$Rr6>dqXlxIGF?_uY^Z#INySnWam=5dV`v_un`=G*{f$51(G`PfGDBJNJfg1NRT2&6E^sG%z8wZyv|Yuj z%#)h~7jGEI^U&-1KvyxIbHt2%zb|fa(H0~Qwk7ED&KqA~VpFtQETD^AmmBo54RUhi z=^Xv>^3L^O8~HO`J_!mg4l1g?lLNL$*oc}}QDeh!w@;zex zHglJ-w>6cqx3_lvZ_R#`^19smw-*WwsavG~LZUP@suUGz;~@Cj9E@nbfdH{iqCg>! zD7hy1?>dr^ynOw|2(VHK-*e%fvU0AoKxsmReM7Uy{qqUVvrYc5Z#FK&Z*XwMNJ$TJ zW1T**U1Vfvq1411ol1R?nE)y%NpR?4lVjqZL`J}EWT0m7r>U{2BYRVVzAQamN#wiT zu*A`FGaD=fz|{ahqurK^jCapFS^2e>!6hSQTh87V=OjzVZ}ShM3vHX+5IY{f^_uFp zIpKBGq)ildb_?#fzJWy)MLn#ov|SvVOA&2|y;{s;Ym4#as?M^K}L_g zDkd`3GR+CuH0_$s*Lm6j)6@N;L7Vo@R=W3~a<#VxAmM&W33LiEioyyVpsrtMBbON+ zX^#%iKHM;ueExK@|t3fX`R+vO(C zucU#Xf>OjSH0Kd%521=Sz%5Y!O(ug(?gRH@K>IUayFU~ntx`Wdm27dB-2s@)J=jf_ zjI-o;hKnjQ|Lg~GKX!*OHB69xvuDU zuG-H48~inKa)^r539a{F)OS`*4GShX>%BR)LU~a-|6+sx&FYsrS1}_b)xSNOzH|Kv zq>+1-cSc0`99EsUz(XWcoRO)|shn>TqKoQBHE)w8i8K`*Xy6(ls%WN_#d}YC^)NJ; zzl8!Zduz^Gg8*f0tCWnLEzw6k5Fv!QWC1x4)3r}+x~@#O8_)0>lP-@3(kFwLl%%Mz(TpATVnL5Pl2Gahw45QXI~>Hrw))CcEs@PP?}4^zkM$ z@(?H6^`Jl?A=(&Ue;W0`*a8&fR7vde@^q^AzX^H#gd~96`Ay^_A%?;?@q@t7l7iGn zWms#2J|To4;o1?3g3L!K_chdtmbEg~>U>$5{WO@Ip~YE&H($(^X6y_OBuNHkd0wu= z4rXGy#-@vZ?>M<_gpE8+W-{#ZJeAfgE#yIDSS?M?K(oY@A|FaS3P;OjMNOG% zGWyZWS(}LJCPaGi9=5b%sq$i!6x@o(G}wwfpI5|yJe24d_V}cT1{^(Qe$KEMZ;>I@ zuE6ee%FLgem>CKEN8SeY)fpK#>*lGcH~71)T4p|9jWT;vwM@N!gL}nCW=Oi6+_>K2 zl4sWXeM1U}RETA~hp=o3tCk+?Zwl#*QA>Wwd|FlUF0)U;rEGPD1s0Syluo zfW9L(F>q9li8YKwKXZrp*t)N9E;?&Hdbm-AZp2BcDTHO6q=tzVkZsozEIXjIH`tm} zo2-UleNm*Lj7zgvhBph_|1IggkSuW~S(9ueZEfao8BuzqlF(a+pRivTv(Zb zXFaHwcuovdM#d+!rjV7F<^VW&@}=5|xj!OUF)s0zh|8yzC)7!9CZB+TLnycoGBsDF z$u&j={5c(4A$iik;x6_S96Krw8--+9pGY+*oSVTIuq;$z8*)W8B~rMX_(U6uM}!Gc`T;WfEKwI84%)-e7j}>NA(O_)3Vn9 zjXxY1Fnx3Fx%CFpUHVu0xjvxgZv}F9@!vC!lD|05#ew3eJ}@!V&urwRKH`1f{0e^o zWvM1S@NbI6pHdzm33pza_q;#?s%J*$4>10uYi4l%5qi|j5qh+D=oqSJR=7QwkQh>>c$|uJ#Z@lK6PMHs@ zyvnnoOSkGQkYz#g>||xN&1fV)aJb*y--Y`UQV~lt!u8yTUG59ns1l7u>CX2F>9fl; zB)zH3z^XHmSU{F_jlvESvaNL&nj^;j)29~1LcTYw>(6}>bt0hiRooqm0@qTj%A&P9 zKmexPwyXG@Rs1i+8>AJ;=?&7RHC7Mn%nO>@+l?Qj~+lD376O2rp)>tlVHn8MKq zwop1KRLhUjZ|+6ecGIAftSPT*3i94=QzYCi_ay+5J&O(%^IsqZ!$w-^bmd7ds$^!q z;AkC;5mTAU>l0S$6NSyG30Ej?KPq@#T)^x#x?@U~fl2m$Ffk)s6u|iPr!)-j0BlA7p3E*A|My8S#KH;8i-IQq7Q*F4*ZVPe<{^SWz_ zr?!6cS+@|C#-P~d#=W1n7acn8_pg#W-lcyf+41zwR+BU6`jUkP^`*wgX)FxEaXzoi z8)?FE*97Yqz|b@fR1(r{QD363t260rQ(F||dt9^xABi+{C*_HL9Zt5T;fq|#*b}=K zo5yj_cZB(oydMAL&X(W6yKf>ui?!%(HhiHJ83EA|#k0hQ!gpVd( zVSqRR&ado+v4BP9mzamKtSsV<|0U-Fe2HP5{{x&K>NxWLIT+D^7md{%>D1Z-5lwS~ z6Q<1`Hfc+0G{4-84o-6dr@)>5;oTt|P6jt9%a43^wGCslQtONH)7QXJEYa!c~39 zWJpTL@bMYhtem1de>svLvOUa*DL7+Ah0(_~2|ng`!Z!qiN}6xL;F}<%M8qWv&52-Y zG*1A&ZKlp~{UFV%Hb_*Re({93f7W*jJZMV-Yn|<+l3SPN+%GuPl=+tSZxxr%?6SEc zntb0~hcK691wwxlQz_jSY+V_h+0o`X!Vm{;qYK$n?6ib1G{q>a%UejzOfk6q<=8oM z6Izkn2%JA2E)aRZbel(M#gI45(Fo^O=F=W26RA8Qb0X;m(IPD{^Wd|Q;#jgBg}e( z+zY(c!4nxoIWAE4H*_ReTm|0crMv8#RLSDwAv<+|fsaqT)3}g=|0_CJgxKZo7MhUiYc8Dy7B~kohCQ$O6~l#1*#v4iWZ=7AoNuXkkVVrnARx?ZW^4-%1I8 zEdG1%?@|KmyQ}tploH>5@&8Cp{`)CxVQOss&x|Z7@gGL3=tCVNDG!N9`&;N$gu^MDk|`rRm=lhnXAJ5v1T)WTz)qvz|Dw zR?{}W4VB(O6#9%o9Z^kFZZV*PDTAWqkQ8TH!rti8QIcR&>zcg3qG}&A( zwH^K8=`1C1lRfhrX{IvNn9R9!$UMC%k(;;VH%`S0h_on|Gh6qDSH&#}*m-u{;p~WB zF$_I~xx!RxVrxNQdr@3T>{F#^D{@N9OYC9LsV62F_Z1KYQ5yk*C5WQ4&q}Kz(I{9UWWf?LIcCZicB1EO_FUH*a9QKS(4IR%#D5DTi_@M}Q_-4)J4d zz@!vR0}5MPAOK(#uL+$7XOcP$5SS#*EK9Rt6XN%}HB7@`8S^gNRk!HLv(CvCjX4o= z>9scPwWbE!F8T=@x9^;s-OF2!eO(!gL9$-AmzUiDnu&QS4If5ea2T070n1-IyNhck z9$J8b!he3@q5qB-cQ;5ymVIXXn46kK0sqKZV+3s3^mac=3~BrCW})WNrrRs1KtMmg zLzwXYC?@_H#s3W4D$W0rh%WL|G<1$$uYdptPbxy0ke!c%v#x9I=2?S)YVkg1X$W^cB!i>B{e9wXlm8AcCT8|verIZQngj>{%W%~W0J%N`Q($h z^u3}p|HyHk?(ls7?R`a&&-q@R<94fI30;ImG3jARzFz<(!K|o9@lqB@Va+on`X2G) zegCM8$vvJ$kUwXlM8df|r^GQXr~2q*Zepf&Mc%kgWGTf;=Wx%7e{&KId-{G}r22lI zmq%L6Y-M*T$xf8 z#kWOBg2TF1cwcd{<$B)AZmD%h-a6>j z%I=|#ir#iEkj3t4UhHy)cRB$3-K12y!qH^1Z%g*-t;RK z6%Mjb*?GGROZSHSRVY1Ip=U_V%(GNfjnUkhk>q%&h!xjFvh69W8Mzg)7?UM=8VHS* zx|)6Ew!>6-`!L+uS+f0xLQC^brt2b(8Y9|5j=2pxHHlbdSN*J1pz(#O%z*W-5WSf# z6EW5Nh&r<;$<3o1b013?U$#Y!jXY)*QiGFt|M58sO45TBGPiHl4PKqZhJ|VRX=AOO zsFz-=3$~g#t4Ji9c;GFS9L~}~bzgCqnYuJ-60AMDdN7HZt8_$~Of{oXaD3HVn9zkH z`>#xQNe=YpWTq_LcOoy}R`L<_4il7w4)QH4rl?AUk%?fH##I>`1_mnp&=$-%SutYT zs}sSNMWo;(a&D()U$~PG0MvZ#1lmsF&^P4l_oN#_NORD-GSmR{h_NbJ^ZdY#R9#qW zKAC%V*?y~}V1Zh#d|-z1Z8sy5A+}*cOq$xk@Pn&{QffzG-9ReyPeEhqF%~Z3@|r(s z3(wA&)dV~fELW*&*=!~l9M=7wq8xE(<@)BjjN8bUiS8@N9E{wi+Dd!V1AtT;Nl}9> zTz`2ge2Jn#Dlg1kC%oFlOe<>?jYC`Asr^%i4hH;S`*qZTPRan2a9Kjj=0aq{iVi2Z z87PZt$d(LAm_{92kl+2Z%k3KGV;~gsp;C>k?gMYZrVIzaI|0D+fka9G_4v>N96*8T zI(C8bj?A7l%V&U?H_IpSeCvf7@y1e?b>G7cN382GVO0qAMQ93(T*<*9c_;%P1}x2l zi8S$s<=e_8ww%DaBAf4oIQ7}U7_48$eYpo}Fb+F|K|43IAPR1y9xbqPPg6er{I7xj|=>-c%pGBRLn1~=5KbAb1mJAx=z(loN!w{49VkEthF>*OX z)=gqXyZB5%5lIWYPWh~{!5pSt43-)-@L@x=pmiuKP-3Cwq8qSxGNwaTT4->BWEjxk zUjr)z7WrBZB5u3iV>Y_>*i~*!vRYL)iAh5hMqNzVq1eeq=&d9Ye!26jks{f~6Ru&c zg$D;^4ui#kC`rSxx`fP!zZ^6&qSneQzZRq0F*V4QvKYKB<9FC%t#)Tik%Zq*G*IOW z3*`2!4d)!3oH>GxVcXlorJDt+JnH)p{~olYBPq|>_V@8=l#(f*diW=L+%>rfWCcPQ z#H^ksQt15Z5Uc4ODq8_JwD5^H&OGqyH6E@MabJQO>s`?bqgA6}J_QpytW{2jH#eCN z8k7y*TFZ2lj2B|1CB(@QZedFfPhX|IQbKMI;$YK>9Zla0fsU7}an6(kP;sXpBWLR` zJ#z_kk!`JJC7h(1J!+G)gL2WB2&0*~Q!%s??}GH?=`hU@03xOwU} z6s7?tGySLz!%(MwxQRiF)2(vR2wQX`YB}u&I-S+RR)LQcyH407#-{*pWLJJR?X|5 zsAl2k{&0N-?JArn@)9YTo-5+gl}R~XkbZM*5AOjPrcikpE3P?p0oN^?H+5+n)}Qxe z*RQ!-eu0RxPyF8B=}xnseNpQMXFU$d^=(G%kUd&|!BHSm7bXoGR$WA+%yjuA{|S>u z?9N6JDhS+ui~rd?wY_t7`p)|qKIMM>6jz%$jv4hc_YUDjF6-%5muq|SNuoji2)|qK zNY5+oWMe+5vu{I*grk6xlVk;(J)uuy13G`VDbj(~Vz9lA)_;$aj?=-cmd#h~N0mn{ z9EIS_d4C=L3H;Pl^;vcpb&-B+)8vt%#?gn5z>#;G{1L&8u8cXJYADMUsm9>%*%)&F zsi&I{Y=VUsV82+)hdNgDWh^M7^hMs|TA0M269^|RIGfdX1MetV2z`Ycb&_Mn4iRI! zeI6O}O9mOhN6pzfs5IfMz#Gxl`C{(111okA8M4gijgb~5s7QTyh84zUiZZ^sr1^ps z1GO`$eOS@k@XP^OVH|8)n}Wx)fKHoGwL&5;W?qEf5Jdsd!3hf7L`%QNwN0gGBm^2= z@WI+qJMJG1w2AS9d@Dt$sj_P$+S2kh7+M72^SfcdBjQEtWQ5?PT&a~G9hOo6CtS>h zoghqoR;sk{X)`ZK-M|lu{M}0>Mrs^ZW@ngC?c$26_vYKDBK^n7sFiod_xV#XcPL!^ zRPyqD{w^9u{oA3y73IW0 zH;%xop$r(Q=bq=JaLT%myEKD_2&?L@s6TzsUwE#g^OkiU6{lN)(7I?%a;_%r5_^@d zS-Z)Q-2o|~?F~f`sHlhNhiZk;!CW;3Ma6{xPlBjJx8PXc!Oq{uTo$p*tyH~ka`g<` z;3?wLhLg5pfL)2bYZTd)jP%f+N7|vIi?c491#Kv57sE3fQh(ScM?+ucH2M>9Rqj?H zY^d!KezBk6rQ|p{^RNn2dRt(9)VN_j#O!3TV`AGl-@jbbBAW$!3S$LXS0xNMr}S%f z%K9x%MRp(D2uO90(0||EOzFc6DaLm((mCe9Hy2 z-59y8V)5(K^{B0>YZUyNaQD5$3q41j-eX))x+REv|TIckJ+g#DstadNn_l~%*RBSss_jV3XS&>yNBc8H2jo(lwcLz-PuYp< z7>)~}zl$Ts0+RFxnYj7-UMpmFcw_H zYrsXM>8icD)@Iauiu_(Y#~Iyl)|pj@kHkWvg2N$kGG(W>Y)nfNn%z2xvTLwk1O2GQ zb^5KAW?c%5;VM4RWBy}`JVCBFOGQWoA9|+bgn7^fY3tSk1MSZccs9&Fy6{8F>_K@? zK(z=zgmq1R#jGE^eGV`<`>SP9SEBx!_-Ao|VZq6)-rUpd^<2GgVN&uHiM{0zA9kI( z<1^1%*uE$?4mXV@?W8}fvnBOpfwCo^?(a0E402!pZi&Kd5pp$oV%2Ofx<}YC-1mynB3X|BzWC_ufrmaH1F&VrU&Gs+5>uixj*OJ*f=gs9VR8k^7HRR$Ns|DYBc*Slz>hGK5B1}U+}#j0{ohGC zE80>WClD5FP+nUS?1qa}ENOPb2`P4ccI<9j;k?hqEe|^#jE4gguHYz-$_BCovNqIb zMUrsU;Fq%n$Ku_wB{Ny>%(B&x9$pr=Anti@#U%DgKX|HzC^=21<5Fn6EKc#~g!Mcj zJrI(gW+aK+3BWVFPWEF*ntHX5;aabHqRgU-Nr2t++%JRPP7-6$XS|M8o&YSgf3a9A zLW*tSJxoe1?#T4EocApa*+1kUIgy7oA%Ig9n@)AdY%)p_FWgF-Kxx{6vta)2X1O5y z#+%KQlxETmcIz@64y`mrSk2Z17~}k1n{=>d#$AVMbp>_60Jc&$ILCg-DTN~kM8)#o$M#Fk~<10{bQ>_@gU2uZE z*eN~mqqQC*wh{CI(!xvRQ^{jyUcvE~8N)S0bMA^SK@v;b7|xUOi63X~3Qc>2UNSD1) z7moi9K3QN_iW5KmKH>1ijU41PO>BvA6f1;kL)6io%^r>?YQ#+bB;)Rzad5;{XAJGeAT#FnDV0$w2>v|JeFIB zZ>8vmz?WVs78PuCDiHfb@D0Yi;2#%){*#?bY4dpta6dSjquGLcOw?Z{nxg98mN^4* zj&^!WMUQ_zFp+}B|G0vcNsk8(2u9(LAPk5ogKt%zgQ4^1#UCd;`-W#X8v{YyQ_m9g z8`jydw>>@1J{Q*q#5^cHVA~xR9LR3Hl@^bx)`IBKmj+Gmye36;xwL0>sS|mV+$~%b zC;2wEm&Ht3#6P|2Y0XQ+5t-aI)jn{o%&ZHWvjzEtSojFgXxNKO^e(RmM`gsJ4GrR8 zKhBtBoRjnH`mD$kT;-8ttq|iw?*`7iTF_AX<^Qe3=h8L^tqz$w$#Z@Z$`C579Jeeu ztr0z~HEazU&htfG@`HW!201!N(70hCd{%~@Wv)G*uKnJZ8>hFx`9LnYs;T>8p!`5T zx#aXXU?}B{QTV_Ux(EMzDhl-a^y^f5tRU;xnOQoN)pThr4M>-HU)As8nQ34-0*sab&z<2ye-D_3m&Q`KJJ|ZEZbaDrE%j>yQ(LM#N845j zNYrP)@)md;&r5|;JA?<~l^<=F1VRGFM93c=6@MJ`tDO_7E7Ru zW{ShCijJ?yHl63Go)-YlOW2n3W*x%w||iw(Cy>@dBJHdQl){bBVg{wmRt{#oXb9kaWqe{bJPmGE$$ z_0=cmD9dVzh<8&oyM8rK9F^bufW$Bj2cFhw&f*oKKyu$H{PI=Aqe^NL6B=dkMEAk& zE3y&F=x;e|!7kMn%(UX>G!OE$Y$@UyME#d;#d+WLmm@W@y!sboiIox^DZPB|EN<>7 z57xm5YWlFUGyF|{<*;b&Cqm+|DC8{rB9R@2EFHGL^NX*l#AcDpw6}bCmhY7!(Gv{s zm^eYNvzyJLQA#GhmL*oSt^Uulb5&ZYBuGJTC>Vm9yGaZ=Vd--pMUoDRaV_^3hE9b*Pby#Ubl65U!VBm7sV}coY)m zn1Ag^jPPLT93J{wpK%>8TnkNp;=a@;`sA7{Q}JmmS1bEK5=d@hQEWl;k$9M-PYX~S zayGm;P(Wwk23}JR7XM~kNqba`6!Z+Wt2|5K>g_j3ajhR>+;HF?88GBN!P; zr6sQ8YYpn%r^gbi8yYK7qx6U5^Tf<|VfcR$jCo`$VMVh_&(9w@O?|o3eRHq*e*#P z8-==G)D?vB3Zo~b-dkx8lg0^=gn`9FUy?ZzAfWQd>>@cyqF!sHQ_S&@$r&tTB~Lxq zAjAZTK~?J{A|L3)8K>S{`Qf%131B>?<~t=w!D{;olQ>#31R#{go`a9DOy+H*q5t+; z^*Ka!r@#8tk?~tQbylaG-$n#wP2VzIm3vjrZjcmTL zl`{6mhBhMKbSWoGqi;g3z1@G0q!ib`(Zz_o8HG_*vr8U5G|vhZn26h`f~bO&)RY0; zw(CWk*a_{ji_=O9U}66lI` zCm32)SEcAo5)5k>{<8DLI@Zz)*R29BB!^wF;WZRF9sAi39BGObmZzg?$lUn6w1rYPHSB^L4^AN zLObEaUh7TXpt6)hWck#6AZV(2`lze<`urGFre|>LUF+j5;9z%=K@&BPXCM)P$>;Xc z!tRA4j0grcS%E!urO^lsH-Ey*XY4m&9lK(;gJOyKk*#l!y7$BaBC)xHc|3i~e^bpR zz5E-=BX_5n8|<6hLj(W67{mWk@Bfc){NGAX z5-O3SP^38wjh6dCEDLB#0((3`g4rl}@I(&E8V2yDB=wYhSxlxB4&!sRy>NTh#cVvv z=HyRrf9dVK&3lyXel+#=R6^hf`;lF$COPUYG)Bq4`#>p z@u%=$28dn8+?|u94l6)-ay7Z!8l*6?m}*!>#KuZ1rF??R@Zd zrRXSfn3}tyD+Z0WOeFnKEZi^!az>x zDgDtgv>Hk-xS~pZRq`cTQD(f=kMx3Mfm2AVxtR(u^#Ndd6xli@n1(c6QUgznNTseV z_AV-qpfQ0#ZIFIccG-|a+&{gSAgtYJ{5g!ane(6mLAs5z?>ajC?=-`a5p8%b*r*mOk}?)zMfus$+W~k z{Tmz9p5$wsX1@q`aNMukq-jREu;;A6?LA(kpRut+jX?Tt?}4HGQr}7>+8z4miohO2 zU4fQ?Y8ggl%cj&>+M+)TTjn8(?^%`~!oAt#ri8gIbzIig$y#d7o##077fM9sCu%N9 zOIsq4vyox6`itu*j{eOD<$gTZd-$JuyM^cM>{?v<8# zS1yN%R0zRy&>+D*Gv-&S80?JF+Y|c^^IJWDnfy06MI2{NFO-x4JXsb@3Qp;EnL!a{ zJwKwV@mO zYVGvNmeJ!;+ce+@j@oo-+`DaPJX|h@7@4BD`QEdP?NKkYzdIa3KrZt%VUSsR+{b+| zk?dSd#9NnVl?&Y$A{-OtZ>wk%mWVF5)bf`)AA2{EFapIS4jil69Xan>*J^6Juou&`oJx|7-&|@8z?$ z2V#jm!UHstCE*qM{OGtqYY8q+x%SL6&aGY!a>@d=_G~^0;+7dY9P`oJ*)67*9Kx*O zKitC5V3g5;&L-fa37?eN=;V_c^L-ph_uKv5)Q`&!Z!RPlDWA2{J%a2q@_*?-cn@bH zIt)+mA@HaJj2RV+-MNc#y#Vji*N~m!ZyrYyg-7UK4PYK4F7Y$3Y%@Lk6iPp=I96N> z!;ih(KtZMB23*v{`5cJ}^4D*P!k1&OfU&1%borv_q|7jfaV7fL+wwx8Zp*b}B_O>NRSeJeM zpvw3M`=vSYjFYQ11kx1xqOnJ@degPh&SyXnWz-l719EiW17Yo?c~Bh~;R$MOl+jzV zM1yTq-1**x-=AVR;p0;IPi`#=E!G5qIT>EFE`Bn<7o*8!aVd7?(CZT=U9^Gi3rmWUQG z0|GaP9s$^4t_oLCs!fInyCoB(d?=tZ%%Bb2Y+X&7gvQ6~C4kU%e$W_H;-%XSM;&*HYYnLI z>%{5x_RtSUC~PI4C0H^>O%FixKYVubA>#72wexd}Cgwuw5ZYTvcN2ywVP(dO=5975 zCjo)mOa2Bo&ucEsaq8wi1{h*brT(H=XrTOy*P>?0%VV1QDr09X+Je!T)JT`02?gjX zT@B8}h|;4lH35Guq2gKZT?ags-~Ts~S=poPnQ_T1*?U|{$jaur_PjQ6WmF_(XLFG)d#|iiBC=&B zp}1eOQvQ!3UpL?K`=8hAzMkv#a^COr`J8i}d!BPX&*xp-LL#qse~mOtxI-}{yPRNV zJNTL1{7A55F~K>0e&Os%MwQ~?n1>QV=j!8o_`^-&*E|Q-L9DNr%#6sw8kQVE3E|*}$aAoO$@27ei1w=+zU%?AA!;mf#!%IV*w_D=u516!Kz1F0-WnyVB`I6F1Pc3r1=0iT<_(pCyk>@22z1$w$@M>7AIuk6+ zRG&MFVQ_7>5DLoR5HeOa$?2SA(v2u!#8;5I(ss%=x9U#R zU62n~&)22RTTsp${}6C&$+l&0skFVX%ACgc$(iQ#DVRRz!`Y+b>E?;ib(TH#6Wa=} zs(q_;SA|fhyEo7Ix%rAY9j=Ul^Rzd`3ABf+yO@~h@Rh=wo`?;8PdHE1AUo34r7izy znAr`;VavQueSu7bD5r^nXTERcW(P-{2SOSfF1x0cW1Nczvj0}@!!upORN1%_-b2bh zGt#zokJz&SveJRzlUK4DruxR(YuHEAmB%F}buU`*pAzJ7Mbgs4sg;H@&6x*wxvGm6 z>KH@ilsvvdl@CGfm4T+$agodrB=md8ygG!|O=r@FY>S_zX%*)mqf?XBX*chhQ9uPP z-(T(24)})vWD*{bQM5_hy3CD8C>anuNtCXMkG7T?Yew^>=PK!~Hlr0{-0h0cNAJ8> zRMzLFz7aJv)Yh)_s)^L&L*nDV@qfeg>_<`z1z(?s}}3tE4h|7_taB> zPfmmOCFZ8%>`gyf1@|7t3;e~mwBRCDDw(Rrt>@O}obs#1?!W((+9>d$b7t!{&wR!P ziQbn0@j=&sw={`s##Uc@uS^(tbShjtsk=qrU1LW0lu}BplIfzv{fwxNsSaG~b|ryo zTQ}YXfp6o?^sSHW>s~m;l@h6wFbIPw{Z(IqO1u){{hEZgrTdF0o$n;hYIm`h5ejym zWt^w~#8p1J)FtfY6LvGmNQ~#n>4#mN4B^ zjrQk)Zt%k}GBRD>l`<~og6N_{6HYKDtsAtd%y?KbXCQR(sW8O(v_)kwYMz|(OW zsFz6A1^abSklOl`wLC-KYI8x=oMD^qZBs}}JVW@YY|3&k&IZ_n2Ia@5WiK>buV!E- zOsYcS4dFPE7vzj%_?5i2!XY`TiPd*jy>#C`i^XG8h?f35`=)s`0EhQBN!+YrXbpt( z-bwg_Jen`w<+6&B`hldU%rr&Xdgtze>rKuJ61AI12ja-eDZZX-+u1H>Sa|7pCine9 z&MEhmT7nq`P!pPK>l?I8cjuPpN<7(hqH~beChC*YMR+p;;@6#0j2k$=onUM`IXW3> z`dtX8`|@P|Ep-_0>)@&7@aLeg$jOd4G`eIW=^dQQ*^cgKeWAsSHOY?WEOsrtnG|^yeQ3lSd`pKAR}kzgIiEk@OvQb>DS*pGidh`E=BHYepHXbV)SV6pE2dx6 zkND~nK}2qjDVX3Z`H;2~lUvar>zT7u%x8LZa&rp7YH@n@GqQ65Cv+pkxI1OU6(g`b z?>)NcE7>j@p>V0mFk-5Rpi`W}oQ!tUU&Yn8m0OWYFj|~`?aVFOx;e`M)Q!YSokY)3 zV6l-;hK6?j=mp2#1e5cCn7P6n_7)n^+MdRw@5pvkOA>|&B8`QZ32|ynqaf}Kcdro= zzQchCYM0^)7$;m2iZnMbE$!}hwk&AVvN`iX3A9mB&`*BDmLV-m`OMvd`sJ?;%U`p~ zmwow{y6sPbcZNQPZ#GQS0&mzy?s%>_p>ZM|sCXVAUlST;rQ-3#Iu!-bpFSV4g7?-l zGfX>Z#hR+i;9B};^CO@7<<#MGFeY)SC&;a{!` zf;yaQo%{bjSa8KT~@?O$cK z(DGnm7w>cG1hH#*J%X}%Y%~+nLT*{aP08@l&Nu}>!-j|!8lSqt_xUNF+Y}SQmupyb zPua2PI;@1YaIsRF*knA^rJv84Tc=7?J2}!1kMfHSO$d$+PK*u?OI%=P7;`PHxMB0k zau~T0Wk)rPEGJ$NiXW~kfPA#m%Sr|7=$tHelF9A6rFLa$^g{6)8GSW*6}#~Zb^qk% zg=pLwC!SkY+&Gne((9`TCy`i`a#eCS{A2yMi>J>p*NS*!V~aAgK;wnSOHPULqzyj- z-q4BPXqXn))iRnMF*WZj17wUYjC!h43tI7uScHLf1|WJfA7^5O9`%lH>ga`cmpiz( zs|I8nTUD4?d{CQ-vwD!2uwGU_Ts&{1_mvqY`@A{j^b?n&WbPhb418NY1*Otz19`1w zc9rn?0e_*En&8?OWii89x+jaqRVzlL!QUCg^qU&+WERycV&1+fcsJ%ExEPjiQWRTU zCJpu*1dXyvrJJcH`+OKn7;q`X#@Gmy3U?5ZAV~mXjQhBJOCMw>o@2kznF>*?qOW;D z6!GTcM)P-OY-R`Yd>FeX%UyL%dY%~#^Yl!c42;**WqdGtGwTfB9{2mf2h@#M8YyY+!Q(4}X^+V#r zcZXYE$-hJyYzq%>$)k8vSQU` zIpxU*yy~naYp=IocRp5no^PeFROluibl( zmaKkWgSWZHn(`V_&?hM{%xl3TBWCcr59WlX6Q{j45)`A^-kUv4!qM=OdcwpsGB)l} z&-_U+8S8bQ!RDc&Y3~?w5NwLNstoUYqPYs(y+lj!HFqIZ7FA>WsxAE7vB=20K zn_&y{2)Uaw4b^NCFNhJXd&XrhA4E~zD7Ue7X^f98=&5!wn_r=6qAwDkd>g#2+*ahd zaV|_P_8e%jiHh7W;cl(d=&-r-C}_Ov?bts8s^rKUWQ|XkuW!ToSwe}Z{4|kl+q&&W zn%iW48c5*ft#*m)+xSps+j(B5bPh&u0&m6=@WgwBf_QfJJzg2Qdz89HwcV`5kZ#5z zw;W&H8>5R(>KRwvd0gh30wJHA>|2N(im;~wy1HTv_}Ue%qb)>5qL^$hIyPvoT(nk_<`7F;#nS8;q!cqKspvBc<%xMsQj*h|>`Z)F6LDxue@to))OIbs2X+zY2L9#2UNrR^)?c8&PFc?j*&Q-r|C%7a$)ZRQ->#|?rEj&M4spQfNt;J^ntwf(d+q;tt)C`d{*|t)czD4x-qw{Chm0vuKp8axqy5`Yz z1756|;JX1q(lEieR=uT;%havqflgv+`5i!Z`R}(JNV~&`x}I9Lmm;aB7Bnc^UC?>W zu)(J7@fs}pL=Y-4aLq&Z*lO$e^0(bOW z3gWbcvb^gjEfhV=6Lgu2aX{(zjq|NH*fSgm&kBj?6dFqD2MWk5@eHt@_&^ZTX$b?o}S<9BGaCZIm6Hz)Qkruacn!qv*>La|#%j*XFp(*;&v3h4 zcjPbZWzv|cOypb@XDnd}g%(@f7A>w2Nseo|{KdeVQu)mN=W=Q`N?ID%J_SXUr0Rl# z3X;tO*^?41^%c!H;ia@hX``kWS3TR|CJ4_9j-?l6RjC=n?}r&sr>m%58&~?$JJV6{ zDq5h#m4S_BPiibQQaPGg6LIHVCc`9w3^3ZVWP$n>p7 z5dIEH-W9e;$Id8>9?wh%WnWf>4^1U<%vn=<4oNFhVl9zVk+jn;WtQUQ)ZeEjKYy8C z3g#tIb28thR1nZdKrN}(r zJdy-Y3Rvr5D3D|msZbmE;FLePbiM0ZjwTIQQHk)8G+sB$iwmEa2kQv&9Vs9m#$_8j zNKz}(x$Wc(M)a9H-Pn?5(Lk-CmOS(&+EVLOfsiq>e3ru6P?Lp>FOwPt>0o=j8UyF^ zO{(vf#MGx^y~WaOKnt%I78s}60(O#jFx0^47^Ikh$QTar(Dg$c=0KR|rRD|6s zz?tEX0_=(Hm0jWl;QOu!-k)mV?^i(Etl=Lg-{ z0G}CBprLX60zgAUz-fS^&m#o;erEC5TU+mn_Wj(zL$zqMo!e`D>s7X&;E zFz}}}puI+c%xq0uTpWS3RBlIS2jH0)W(9FU1>6PLcj|6O>=y)l`*%P`6K4}U2p}a0 zvInj%$AmqzkNLy%azH|_f7x$lYxSG=-;7BViUN(&0HPUobDixM1RVBzWhv8LokKI2 zjDwvWu=S~8We)+K{oMd-_cuXNO&+{eUaA8Ope3MxME0?PD+0a)99N>WZ66*;sn(N++hjPyz5z0RC{- z$pcSs{|)~a_h?w)y}42A6fg|nRnYUjMaBqg=68&_K%h3eboQ=%i083nfIVZZ04qOp%d*)*hNJA_foPjiW z$1r8ZZiRSvJT3zhK>iR@8_+TTJ!tlNLdL`e0=yjzv3Ie80h#wSfS3$>DB!!@JHxNd z0Mvd0Vqq!zfDy$?goY+|h!e(n3{J2;Ag=b)eLq{F0W*O?j&@|882U5?hUVIw_v3aV8tMn`8jPa5pSxzaZe{z}z|}$zM$o=3-mQ0Zgd?ZtaI> zQVHP1W3v1lbw>|?z@2MO(Ex!5KybKQ@+JRAg1>nzpP-!@3!th3rV=o?eiZ~fQRWy_ zfA!U9^bUL+z_$VJI=ic;{epla<&J@W-QMPZm^kTQ8a^2TX^TDpza*^tOu!WZ=T!PT z+0lJ*HuRnNGobNk0PbPT?i;^h{&0u+-fejISNv#9&j~Ep2;dYspntgzwR6<$@0dTQ z!qLe3Ztc=Ozy!btCcx!G$U7FlBRe}-L(E|RpH%_gt4m_LJllX3!iRYJEPvxcJ>C76 zfBy0_zKaYn{3yG6@;}S&+BeJk5X}$Kchp<Ea-=>VDg&zi*8xM0-ya!{ zcDN@>%H#vMwugU&1KN9pqA6-?Q8N@Dz?VlJ3IDfz#i#_RxgQS*>K+|Q@bek+s7#Qk z(5NZ-4xs&$j)X=@(1(hLn)vPj&pP>Nyu)emQ1MW6)g0hqXa5oJ_slh@(5MMS4xnG= z{0aK#F@_p=e}FdAa3tEl!|+j?h8h`t0CvCmNU%dOwEq<+jmm-=n|r|G^7QX4N4o(v zPU!%%w(Cet)Zev3QA?;TMm_aEK!5(~Nc6pJlp|sQP@z%JI}f0_`u+rc`1Df^j0G&s ScNgau(U?ep-K_E5zy1%ZQTdPn diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d3f0c..a80b22ce5cf 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d65c..1aa94a42690 100755 --- a/gradlew +++ b/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f135..25da30dbdee 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 2c3a2361b635e8d727dc1c9e09e7c59512fab830 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:45:33 +0000 Subject: [PATCH 424/595] build(deps): bump the freefair group with 5 updates Bumps the freefair group with 5 updates: | Package | From | To | | --- | --- | --- | | [io.freefair.lombok](https://github.com/freefair/gradle-plugins) | `8.4` | `8.6` | | [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) | `8.4` | `8.6` | | [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) | `8.4` | `8.6` | | [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) | `8.4` | `8.6` | | [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) | `8.4` | `8.6` | Updates `io.freefair.lombok` from 8.4 to 8.6 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.4...8.6) Updates `io.freefair.javadoc-links` from 8.4 to 8.6 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.4...8.6) Updates `io.freefair.javadoc-utf-8` from 8.4 to 8.6 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.4...8.6) Updates `io.freefair.aspectj.post-compile-weaving` from 8.4 to 8.6 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.4...8.6) Updates `io.freefair.maven-central.validate-poms` from 8.4 to 8.6 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.4...8.6) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4402390ee17..a264d8899c3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,11 +9,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "4.4.1.3373" - id("io.freefair.lombok") version "8.4" - id("io.freefair.javadoc-links") version "8.4" - id("io.freefair.javadoc-utf-8") version "8.4" - id("io.freefair.aspectj.post-compile-weaving") version "8.4" - id("io.freefair.maven-central.validate-poms") version "8.4" + id("io.freefair.lombok") version "8.6" + id("io.freefair.javadoc-links") version "8.6" + id("io.freefair.javadoc-utf-8") version "8.6" + id("io.freefair.aspectj.post-compile-weaving") version "8.6" + id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.2" From c3d5d72498c6a34cb1d39b981b208d5aeade5f55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:37:39 +0000 Subject: [PATCH 425/595] build(deps): bump io.sentry:sentry-bom from 7.3.0 to 7.4.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.3.0 to 7.4.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.3.0...7.4.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a264d8899c3..3b5435762be 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.3.0") + mavenBom("io.sentry:sentry-bom:7.4.0") } } From 560ec792ae357baf71d9ac135fb2e5af5a1a7b91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 09:11:15 +0000 Subject: [PATCH 426/595] build(deps): bump org.springframework.boot from 3.2.2 to 3.2.3 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.2.2 to 3.2.3. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.2.2...v3.2.3) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a264d8899c3..43689938544 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.2.2" + id("org.springframework.boot") version "3.2.3" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "2.2.2" From d4205b05f2fe1c3480e240479a20c5882cbd09cc Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 2 Mar 2024 17:15:12 +0100 Subject: [PATCH 427/595] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=8D=D1=88=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B3=D1=80=D0=B0=D0=B4=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 1b0828fcdff..1879e2262b2 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -27,6 +27,7 @@ jobs: with: java-version: ${{ matrix.java_version }} distribution: 'temurin' + cache: gradle - name: Build with Gradle run: ./gradlew check --stacktrace - name: Archive test results From 0987acf5cf8864028f1554cd8a51b08f0bfd7b0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 09:46:14 +0000 Subject: [PATCH 428/595] build(deps): bump io.sentry:sentry-bom from 7.4.0 to 7.5.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.4.0 to 7.5.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.4.0...7.5.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ee08aac3c92..fd885c553d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.4.0") + mavenBom("io.sentry:sentry-bom:7.5.0") } } From 9a997790f2eb573475af474ed2cd9274dd8106dd Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 5 Mar 2024 03:31:38 +0100 Subject: [PATCH 429/595] Sentry jakarta --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fd885c553d3..b1dfc1b117a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -120,7 +120,7 @@ dependencies { implementation("com.contrastsecurity", "java-sarif", "2.0") // Sentry - implementation("io.sentry:sentry-spring-boot-starter") + implementation("io.sentry:sentry-spring-boot-starter-jakarta") implementation("io.sentry:sentry-logback") // CONSTRAINTS From 0e0a7d5fce21aa378899fa5ebff6118158c1fb7a Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 5 Mar 2024 05:35:27 +0000 Subject: [PATCH 430/595] Add Gradle Cache --- .github/workflows/benchmark.yml | 1 + .github/workflows/check-package.yml | 1 + .github/workflows/codeql-analysis.yml | 3 ++- .github/workflows/gh-pages.yml | 1 + .github/workflows/javadoc.yml | 1 + .github/workflows/publish-to-sonatype.yml | 1 + .github/workflows/qa.yml | 1 + .github/workflows/release.yml | 1 + .github/workflows/update-gradle.yml | 1 + 9 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 976394da116..24f4b47c2d6 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -33,6 +33,7 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: Build with Gradle run: ./gradlew bootJar diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index af6c2260d65..406db7c187e 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -38,6 +38,7 @@ jobs: with: java-version: 20 distribution: 'temurin' + cache: gradle - name: Build bootJar with Gradle run: ./gradlew check build diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d42c3aa797a..eede133d6de 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -29,11 +29,12 @@ jobs: # a pull request then we can checkout the head. fetch-depth: 2 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' + cache: gradle # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index cbec2a32a12..5b54b62e4cc 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -24,6 +24,7 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: Build javadoc run: ./gradlew --no-daemon javadoc diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index ec8bc5c1b6c..391052f8d68 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -23,5 +23,6 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: Check javadoc build run: ./gradlew javadoc --stacktrace diff --git a/.github/workflows/publish-to-sonatype.yml b/.github/workflows/publish-to-sonatype.yml index 2c5dc68bd01..8dd8c892fa0 100644 --- a/.github/workflows/publish-to-sonatype.yml +++ b/.github/workflows/publish-to-sonatype.yml @@ -18,6 +18,7 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: Publish to Sonatype run: ./gradlew publishMavenPublicationToSonatypeRepository -PsimplifyVersion env: diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 8923c07c393..1866a759a25 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -52,6 +52,7 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: SonarCloud Scan on PR if: github.event.workflow_run.event == 'pull_request' run: ./gradlew check sonar -Dsonar.scm.revision=${{ github.event.workflow_run.head_sha }} -Dsonar.pullrequest.key=${{ fromJson(steps.get_pr_data.outputs.data).number }} -Dsonar.pullrequest.branch=${{ fromJson(steps.get_pr_data.outputs.data).head.ref }} -Dsonar.pullrequest.base=${{ fromJson(steps.get_pr_data.outputs.data).base.ref }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85520dfe0be..0c1ba6c3209 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,6 +35,7 @@ jobs: with: java-version: 20 distribution: 'temurin' + cache: gradle - name: Build bootJar with Gradle run: ./gradlew check bootJar diff --git a/.github/workflows/update-gradle.yml b/.github/workflows/update-gradle.yml index 11542359b70..82ef2caa042 100644 --- a/.github/workflows/update-gradle.yml +++ b/.github/workflows/update-gradle.yml @@ -17,6 +17,7 @@ jobs: with: java-version: 17 distribution: 'temurin' + cache: gradle - name: Update Gradle Wrapper uses: gradle-update/update-gradle-wrapper-action@v1 From 1a5717eb0ffacb5b04e5ba55d32062c700ccb528 Mon Sep 17 00:00:00 2001 From: Losyash1C <162876371+Losyash1C@users.noreply.github.com> Date: Sun, 10 Mar 2024 12:42:53 +0300 Subject: [PATCH 431/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/CognitiveComplexity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/CognitiveComplexity.md b/docs/diagnostics/CognitiveComplexity.md index 0ffca8e0984..8604ddeff30 100644 --- a/docs/diagnostics/CognitiveComplexity.md +++ b/docs/diagnostics/CognitiveComplexity.md @@ -123,7 +123,7 @@ И НЕ Символы.Экспортный() Тогда // +1, логическая операция, вложенность не учитывается Если МожноПереопределить(Символ) Тогда // +3, вложенное условие, вложенность 2 - Переопредялемость = ПроверитьПереопределяемость(Символ, ТипКласса); + Переопределяемость = ПроверитьПереопределяемость(Символ, ТипКласса); Если Переопределяемость = Неопределено Тогда // +4, вложенное условие, вложенность 3 Если НЕ НеизвестностьНайдена Тогда // +5, вложенное условие, вложенность 4 НеизвестностьНайдена = Истина; From f5ebcf374fe4d9280edff4aee9dc095c71f80922 Mon Sep 17 00:00:00 2001 From: Losyash1C <162876371+Losyash1C@users.noreply.github.com> Date: Sun, 10 Mar 2024 17:23:46 +0300 Subject: [PATCH 432/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=B4=D0=B8?= =?UTF-8?q?=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=83=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B8=D0=BB=20=D1=84=D0=BE=D1=80=D0=BC=D1=83?= =?UTF-8?q?=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D1=83=20=D0=BE=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/GlobalContextMethodCollision8312.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/GlobalContextMethodCollision8312.md b/docs/diagnostics/GlobalContextMethodCollision8312.md index 9532b1c3100..b782e38028f 100644 --- a/docs/diagnostics/GlobalContextMethodCollision8312.md +++ b/docs/diagnostics/GlobalContextMethodCollision8312.md @@ -19,7 +19,7 @@ ПобитовыйСдвигВлево|BitwiseShiftLeft ПобитовыйСдвигВправо|BitwiseShiftRight -Необходимо существующие функции конфигурации прикладного решения необходимо либо переименовать, либо удалить, заменив обращение к ним на методы глобального контекста. +Необходимо существующие функции конфигурации прикладного решения переименовать или удалить, заменив обращение к ним на методы глобального контекста. ## Примеры From f644e8518371aa183a9f5ad52c7eebedde1df351 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:08:24 +0000 Subject: [PATCH 433/595] build(deps): bump ru.vyarus.pom from 2.2.2 to 3.0.0 Bumps ru.vyarus.pom from 2.2.2 to 3.0.0. --- updated-dependencies: - dependency-name: ru.vyarus.pom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b1dfc1b117a..e4353af0602 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ plugins { id("org.springframework.boot") version "3.2.3" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" - id("ru.vyarus.pom") version "2.2.2" + id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.1" id("io.codearte.nexus-staging") version "0.30.0" id("me.champeau.jmh") version "0.7.2" From 0e821d212c1937b57a80b75066925dcbdf942e1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:08:31 +0000 Subject: [PATCH 434/595] build(deps): bump io.sentry:sentry-bom from 7.5.0 to 7.6.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.5.0 to 7.6.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.5.0...7.6.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b1dfc1b117a..972843648a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.5.0") + mavenBom("io.sentry:sentry-bom:7.6.0") } } From b3a92802748e64477c725f1d55256f528f2bc58b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:32:57 +0000 Subject: [PATCH 435/595] build(deps): bump org.springframework.boot from 3.2.3 to 3.2.4 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.2.3 to 3.2.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.2.3...v3.2.4) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fde73c3fe87..8ac513a9128 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.2.3" + id("org.springframework.boot") version "3.2.4" id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "3.0.0" From 774a60fcc676adb674f9558f8cad41f6a512379b Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 24 Mar 2024 01:22:11 +0000 Subject: [PATCH 436/595] Update Gradle Wrapper from 8.6 to 8.7. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch delta 34118 zcmY(qRX`kF)3u#IAjsf0xCD212@LM;?(PINyAue(f;$XO2=4Cg1P$=#e%|lo zKk1`B>Q#GH)wNd-&cJofz}3=WfYndTeo)CyX{fOHsQjGa<{e=jamMNwjdatD={CN3>GNchOE9OGPIqr)3v>RcKWR3Z zF-guIMjE2UF0Wqk1)21791y#}ciBI*bAenY*BMW_)AeSuM5}vz_~`+1i!Lo?XAEq{TlK5-efNFgHr6o zD>^vB&%3ZGEWMS>`?tu!@66|uiDvS5`?bF=gIq3rkK(j<_TybyoaDHg8;Y#`;>tXI z=tXo~e9{U!*hqTe#nZjW4z0mP8A9UUv1}C#R*@yu9G3k;`Me0-BA2&Aw6f`{Ozan2 z8c8Cs#dA-7V)ZwcGKH}jW!Ja&VaUc@mu5a@CObzNot?b{f+~+212lwF;!QKI16FDS zodx>XN$sk9;t;)maB^s6sr^L32EbMV(uvW%or=|0@U6cUkE`_!<=LHLlRGJx@gQI=B(nn z-GEjDE}*8>3U$n(t^(b^C$qSTI;}6q&ypp?-2rGpqg7b}pyT zOARu2x>0HB{&D(d3sp`+}ka+Pca5glh|c=M)Ujn_$ly^X6&u z%Q4Y*LtB_>i6(YR!?{Os-(^J`(70lZ&Hp1I^?t@~SFL1!m0x6j|NM!-JTDk)%Q^R< z@e?23FD&9_W{Bgtr&CG&*Oer3Z(Bu2EbV3T9FeQ|-vo5pwzwQ%g&=zFS7b{n6T2ZQ z*!H(=z<{D9@c`KmHO&DbUIzpg`+r5207}4D=_P$ONIc5lsFgn)UB-oUE#{r+|uHc^hzv_df zV`n8&qry%jXQ33}Bjqcim~BY1?KZ}x453Oh7G@fA(}+m(f$)TY%7n=MeLi{jJ7LMB zt(mE*vFnep?YpkT_&WPV9*f>uSi#n#@STJmV&SLZnlLsWYI@y+Bs=gzcqche=&cBH2WL)dkR!a95*Ri)JH_4c*- zl4pPLl^as5_y&6RDE@@7342DNyF&GLJez#eMJjI}#pZN{Y8io{l*D+|f_Y&RQPia@ zNDL;SBERA|B#cjlNC@VU{2csOvB8$HzU$01Q?y)KEfos>W46VMh>P~oQC8k=26-Ku)@C|n^zDP!hO}Y z_tF}0@*Ds!JMt>?4y|l3?`v#5*oV-=vL7}zehMON^=s1%q+n=^^Z{^mTs7}*->#YL z)x-~SWE{e?YCarwU$=cS>VzmUh?Q&7?#Xrcce+jeZ|%0!l|H_=D_`77hBfd4Zqk&! zq-Dnt_?5*$Wsw8zGd@?woEtfYZ2|9L8b>TO6>oMh%`B7iBb)-aCefM~q|S2Cc0t9T zlu-ZXmM0wd$!gd-dTtik{bqyx32%f;`XUvbUWWJmpHfk8^PQIEsByJm+@+-aj4J#D z4#Br3pO6z1eIC>X^yKk|PeVwX_4B+IYJyJyc3B`4 zPrM#raacGIzVOexcVB;fcsxS=s1e&V;Xe$tw&KQ`YaCkHTKe*Al#velxV{3wxx}`7@isG zp6{+s)CG%HF#JBAQ_jM%zCX5X;J%-*%&jVI?6KpYyzGbq7qf;&hFprh?E5Wyo=bZ) z8YNycvMNGp1836!-?nihm6jI`^C`EeGryoNZO1AFTQhzFJOA%Q{X(sMYlzABt!&f{ zoDENSuoJQIg5Q#@BUsNJX2h>jkdx4<+ipUymWKFr;w+s>$laIIkfP6nU}r+?J9bZg zUIxz>RX$kX=C4m(zh-Eg$BsJ4OL&_J38PbHW&7JmR27%efAkqqdvf)Am)VF$+U3WR z-E#I9H6^)zHLKCs7|Zs<7Bo9VCS3@CDQ;{UTczoEprCKL3ZZW!ffmZFkcWU-V|_M2 zUA9~8tE9<5`59W-UgUmDFp11YlORl3mS3*2#ZHjv{*-1#uMV_oVTy{PY(}AqZv#wF zJVks)%N6LaHF$$<6p8S8Lqn+5&t}DmLKiC~lE{jPZ39oj{wR&fe*LX-z0m}9ZnZ{U z>3-5Bh{KKN^n5i!M79Aw5eY=`6fG#aW1_ZG;fw7JM69qk^*(rmO{|Z6rXy?l=K=#_ zE-zd*P|(sskasO(cZ5L~_{Mz&Y@@@Q)5_8l<6vB$@226O+pDvkFaK8b>%2 zfMtgJ@+cN@w>3)(_uR;s8$sGONbYvoEZ3-)zZk4!`tNzd<0lwt{RAgplo*f@Z)uO` zzd`ljSqKfHJOLxya4_}T`k5Ok1Mpo#MSqf~&ia3uIy{zyuaF}pV6 z)@$ZG5LYh8Gge*LqM_|GiT1*J*uKes=Oku_gMj&;FS`*sfpM+ygN&yOla-^WtIU#$ zuw(_-?DS?6DY7IbON7J)p^IM?N>7x^3)(7wR4PZJu(teex%l>zKAUSNL@~{czc}bR z)I{XzXqZBU3a;7UQ~PvAx8g-3q-9AEd}1JrlfS8NdPc+!=HJ6Bs( zCG!0;e0z-22(Uzw>hkEmC&xj?{0p|kc zM}MMXCF%RLLa#5jG`+}{pDL3M&|%3BlwOi?dq!)KUdv5__zR>u^o|QkYiqr(m3HxF z6J*DyN#Jpooc$ok=b7{UAVM@nwGsr6kozSddwulf5g1{B=0#2)zv!zLXQup^BZ4sv*sEsn)+MA?t zEL)}3*R?4(J~CpeSJPM!oZ~8;8s_=@6o`IA%{aEA9!GELRvOuncE`s7sH91 zmF=+T!Q6%){?lJn3`5}oW31(^Of|$r%`~gT{eimT7R~*Mg@x+tWM3KE>=Q>nkMG$U za7r>Yz2LEaA|PsMafvJ(Y>Xzha?=>#B!sYfVob4k5Orb$INFdL@U0(J8Hj&kgWUlO zPm+R07E+oq^4f4#HvEPANGWLL_!uF{nkHYE&BCH%l1FL_r(Nj@M)*VOD5S42Gk-yT z^23oAMvpA57H(fkDGMx86Z}rtQhR^L!T2iS!788E z+^${W1V}J_NwdwdxpXAW8}#6o1(Uu|vhJvubFvQIH1bDl4J4iDJ+181KuDuHwvM?` z%1@Tnq+7>p{O&p=@QT}4wT;HCb@i)&7int<0#bj8j0sfN3s6|a(l7Bj#7$hxX@~iP z1HF8RFH}irky&eCN4T94VyKqGywEGY{Gt0Xl-`|dOU&{Q;Ao;sL>C6N zXx1y^RZSaL-pG|JN;j9ADjo^XR}gce#seM4QB1?S`L*aB&QlbBIRegMnTkTCks7JU z<0(b+^Q?HN1&$M1l&I@>HMS;!&bb()a}hhJzsmB?I`poqTrSoO>m_JE5U4=?o;OV6 zBZjt;*%1P>%2{UL=;a4(aI>PRk|mr&F^=v6Fr&xMj8fRCXE5Z2qdre&;$_RNid5!S zm^XiLK25G6_j4dWkFqjtU7#s;b8h?BYFxV?OE?c~&ME`n`$ix_`mb^AWr+{M9{^^Rl;~KREplwy2q;&xe zUR0SjHzKVYzuqQ84w$NKVPGVHL_4I)Uw<$uL2-Ml#+5r2X{LLqc*p13{;w#E*Kwb*1D|v?e;(<>vl@VjnFB^^Y;;b3 z=R@(uRj6D}-h6CCOxAdqn~_SG=bN%^9(Ac?zfRkO5x2VM0+@_qk?MDXvf=@q_* z3IM@)er6-OXyE1Z4sU3{8$Y$>8NcnU-nkyWD&2ZaqX1JF_JYL8y}>@V8A5%lX#U3E zet5PJM`z79q9u5v(OE~{by|Jzlw2<0h`hKpOefhw=fgLTY9M8h+?37k@TWpzAb2Fc zQMf^aVf!yXlK?@5d-re}!fuAWu0t57ZKSSacwRGJ$0uC}ZgxCTw>cjRk*xCt%w&hh zoeiIgdz__&u~8s|_TZsGvJ7sjvBW<(C@}Y%#l_ID2&C`0;Eg2Z+pk;IK}4T@W6X5H z`s?ayU-iF+aNr5--T-^~K~p;}D(*GWOAYDV9JEw!w8ZYzS3;W6*_`#aZw&9J ziXhBKU3~zd$kKzCAP-=t&cFDeQR*_e*(excIUxKuD@;-twSlP6>wWQU)$|H3Cy+`= z-#7OW!ZlYzZxkdQpfqVDFU3V2B_-eJS)Fi{fLtRz!K{~7TR~XilNCu=Z;{GIf9KYz zf3h=Jo+1#_s>z$lc~e)l93h&RqW1VHYN;Yjwg#Qi0yzjN^M4cuL>Ew`_-_wRhi*!f zLK6vTpgo^Bz?8AsU%#n}^EGigkG3FXen3M;hm#C38P@Zs4{!QZPAU=m7ZV&xKI_HWNt90Ef zxClm)ZY?S|n**2cNYy-xBlLAVZ=~+!|7y`(fh+M$#4zl&T^gV8ZaG(RBD!`3?9xcK zp2+aD(T%QIgrLx5au&TjG1AazI;`8m{K7^!@m>uGCSR;Ut{&?t%3AsF{>0Cm(Kf)2 z?4?|J+!BUg*P~C{?mwPQ#)gDMmro20YVNsVx5oWQMkzQ? zsQ%Y>%7_wkJqnSMuZjB9lBM(o zWut|B7w48cn}4buUBbdPBW_J@H7g=szrKEpb|aE>!4rLm+sO9K%iI75y~2HkUo^iw zJ3se$8$|W>3}?JU@3h@M^HEFNmvCp|+$-0M?RQ8SMoZ@38%!tz8f8-Ptb@106heiJ z^Bx!`0=Im z1!NUhO=9ICM*+||b3a7w*Y#5*Q}K^ar+oMMtekF0JnO>hzHqZKH0&PZ^^M(j;vwf_ z@^|VMBpcw8;4E-9J{(u7sHSyZpQbS&N{VQ%ZCh{c1UA5;?R} z+52*X_tkDQ(s~#-6`z4|Y}3N#a&dgP4S_^tsV=oZr4A1 zaSoPN1czE(UIBrC_r$0HM?RyBGe#lTBL4~JW#A`P^#0wuK)C-2$B6TvMi@@%K@JAT_IB^T7Zfqc8?{wHcSVG_?{(wUG%zhCm=%qP~EqeqKI$9UivF zv+5IUOs|%@ypo6b+i=xsZ=^G1yeWe)z6IX-EC`F=(|_GCNbHbNp(CZ*lpSu5n`FRA zhnrc4w+Vh?r>her@Ba_jv0Omp#-H7avZb=j_A~B%V0&FNi#!S8cwn0(Gg-Gi_LMI{ zCg=g@m{W@u?GQ|yp^yENd;M=W2s-k7Gw2Z(tsD5fTGF{iZ%Ccgjy6O!AB4x z%&=6jB7^}pyftW2YQpOY1w@%wZy%}-l0qJlOSKZXnN2wo3|hujU+-U~blRF!^;Tan z0w;Srh0|Q~6*tXf!5-rCD)OYE(%S|^WTpa1KHtpHZ{!;KdcM^#g8Z^+LkbiBHt85m z;2xv#83lWB(kplfgqv@ZNDcHizwi4-8+WHA$U-HBNqsZ`hKcUI3zV3d1ngJP-AMRET*A{> zb2A>Fk|L|WYV;Eu4>{a6ESi2r3aZL7x}eRc?cf|~bP)6b7%BnsR{Sa>K^0obn?yiJ zCVvaZ&;d_6WEk${F1SN0{_`(#TuOOH1as&#&xN~+JDzX(D-WU_nLEI}T_VaeLA=bc zl_UZS$nu#C1yH}YV>N2^9^zye{rDrn(rS99>Fh&jtNY7PP15q%g=RGnxACdCov47= zwf^9zfJaL{y`R#~tvVL#*<`=`Qe zj_@Me$6sIK=LMFbBrJps7vdaf_HeX?eC+P^{AgSvbEn?n<}NDWiQGQG4^ZOc|GskK z$Ve2_n8gQ-KZ=s(f`_X!+vM5)4+QmOP()2Fe#IL2toZBf+)8gTVgDSTN1CkP<}!j7 z0SEl>PBg{MnPHkj4wj$mZ?m5x!1ePVEYI(L_sb0OZ*=M%yQb?L{UL(2_*CTVbRxBe z@{)COwTK1}!*CK0Vi4~AB;HF(MmQf|dsoy(eiQ>WTKcEQlnKOri5xYsqi61Y=I4kzAjn5~{IWrz_l))|Ls zvq7xgQs?Xx@`N?f7+3XKLyD~6DRJw*uj*j?yvT3}a;(j_?YOe%hUFcPGWRVBXzpMJ zM43g6DLFqS9tcTLSg=^&N-y0dXL816v&-nqC0iXdg7kV|PY+js`F8dm z2PuHw&k+8*&9SPQ6f!^5q0&AH(i+z3I7a?8O+S5`g)>}fG|BM&ZnmL;rk)|u{1!aZ zEZHpAMmK_v$GbrrWNP|^2^s*!0waLW=-h5PZa-4jWYUt(Hr@EA(m3Mc3^uDxwt-me^55FMA9^>hpp26MhqjLg#^Y7OIJ5%ZLdNx&uDgIIqc zZRZl|n6TyV)0^DDyVtw*jlWkDY&Gw4q;k!UwqSL6&sW$B*5Rc?&)dt29bDB*b6IBY z6SY6Unsf6AOQdEf=P1inu6(6hVZ0~v-<>;LAlcQ2u?wRWj5VczBT$Op#8IhppP-1t zfz5H59Aa~yh7EN;BXJsLyjkjqARS5iIhDVPj<=4AJb}m6M@n{xYj3qsR*Q8;hVxDyC4vLI;;?^eENOb5QARj#nII5l$MtBCI@5u~(ylFi$ zw6-+$$XQ}Ca>FWT>q{k)g{Ml(Yv=6aDfe?m|5|kbGtWS}fKWI+})F6`x@||0oJ^(g|+xi zqlPdy5;`g*i*C=Q(aGeDw!eQg&w>UUj^{o?PrlFI=34qAU2u@BgwrBiaM8zoDTFJ< zh7nWpv>dr?q;4ZA?}V}|7qWz4W?6#S&m>hs4IwvCBe@-C>+oohsQZ^JC*RfDRm!?y zS4$7oxcI|##ga*y5hV>J4a%HHl^t$pjY%caL%-FlRb<$A$E!ws?8hf0@(4HdgQ!@> zds{&g$ocr9W4I84TMa9-(&^_B*&R%^=@?Ntxi|Ejnh;z=!|uVj&3fiTngDPg=0=P2 zB)3#%HetD84ayj??qrxsd9nqrBem(8^_u_UY{1@R_vK-0H9N7lBX5K(^O2=0#TtUUGSz{ z%g>qU8#a$DyZ~EMa|8*@`GOhCW3%DN%xuS91T7~iXRr)SG`%=Lfu%U~Z_`1b=lSi?qpD4$vLh$?HU6t0MydaowUpb zQr{>_${AMesCEffZo`}K0^~x>RY_ZIG{(r39MP>@=aiM@C;K)jUcfQV8#?SDvq>9D zI{XeKM%$$XP5`7p3K0T}x;qn)VMo>2t}Ib(6zui;k}<<~KibAb%p)**e>ln<=qyWU zrRDy|UXFi9y~PdEFIAXejLA{K)6<)Q`?;Q5!KsuEw({!#Rl8*5_F{TP?u|5(Hijv( ztAA^I5+$A*+*e0V0R~fc{ET-RAS3suZ}TRk3r)xqj~g_hxB`qIK5z(5wxYboz%46G zq{izIz^5xW1Vq#%lhXaZL&)FJWp0VZNO%2&ADd?+J%K$fM#T_Eke1{dQsx48dUPUY zLS+DWMJeUSjYL453f@HpRGU6Dv)rw+-c6xB>(=p4U%}_p>z^I@Ow9`nkUG21?cMIh9}hN?R-d)*6%pr6d@mcb*ixr7 z)>Lo<&2F}~>WT1ybm^9UO{6P9;m+fU^06_$o9gBWL9_}EMZFD=rLJ~&e?fhDnJNBI zKM=-WR6g7HY5tHf=V~6~QIQ~rakNvcsamU8m28YE=z8+G7K=h%)l6k zmCpiDInKL6*e#)#Pt;ANmjf`8h-nEt&d}(SBZMI_A{BI#ck-_V7nx)K9_D9K-p@?Zh81#b@{wS?wCcJ%og)8RF*-0z+~)6f#T` zWqF7_CBcnn=S-1QykC*F0YTsKMVG49BuKQBH%WuDkEy%E?*x&tt%0m>>5^HCOq|ux zuvFB)JPR-W|%$24eEC^AtG3Gp4qdK%pjRijF5Sg3X}uaKEE z-L5p5aVR!NTM8T`4|2QA@hXiLXRcJveWZ%YeFfV%mO5q#($TJ`*U>hicS+CMj%Ip# zivoL;dd*araeJK9EA<(tihD50FHWbITBgF9E<33A+eMr2;cgI3Gg6<-2o|_g9|> zv5}i932( zYfTE9?4#nQhP@a|zm#9FST2 z!y+p3B;p>KkUzH!K;GkBW}bWssz)9b>Ulg^)EDca;jDl+q=243BddS$hY^fC6lbpM z(q_bo4V8~eVeA?0LFD6ZtKcmOH^75#q$Eo%a&qvE8Zsqg=$p}u^|>DSWUP5i{6)LAYF4E2DfGZuMJ zMwxxmkxQf}Q$V3&2w|$`9_SQS^2NVbTHh;atB>=A%!}k-f4*i$X8m}Ni^ppZXk5_oYF>Gq(& z0wy{LjJOu}69}~#UFPc;$7ka+=gl(FZCy4xEsk);+he>Nnl>hb5Ud-lj!CNicgd^2 z_Qgr_-&S7*#nLAI7r()P$`x~fy)+y=W~6aNh_humoZr7MWGSWJPLk}$#w_1n%(@? z3FnHf1lbxKJbQ9c&i<$(wd{tUTX6DAKs@cXIOBv~!9i{wD@*|kwfX~sjKASrNFGvN zrFc=!0Bb^OhR2f`%hrp2ibv#KUxl)Np1aixD9{^o=)*U%n%rTHX?FSWL^UGpHpY@7 z74U}KoIRwxI#>)Pn4($A`nw1%-D}`sGRZD8Z#lF$6 zOeA5)+W2qvA%m^|$WluUU-O+KtMqd;Pd58?qZj})MbxYGO<{z9U&t4D{S2G>e+J9K ztFZ?}ya>SVOLp9hpW)}G%kTrg*KXXXsLkGdgHb+R-ZXqdkdQC0_)`?6mqo8(EU#d( zy;u&aVPe6C=YgCRPV!mJ6R6kdY*`e+VGM~`VtC>{k27!9vAZT)x2~AiX5|m1Rq}_= z;A9LX^nd$l-9&2%4s~p5r6ad-siV`HtxKF}l&xGSYJmP=z!?Mlwmwef$EQq~7;#OE z)U5eS6dB~~1pkj#9(}T3j!((8Uf%!W49FfUAozijoxInUE7z`~U3Y^}xc3xp){#9D z<^Tz2xw}@o@fdUZ@hnW#dX6gDOj4R8dV}Dw`u!h@*K)-NrxT8%2`T}EvOImNF_N1S zy?uo6_ZS>Qga4Xme3j#aX+1qdFFE{NT0Wfusa$^;eL5xGE_66!5_N8!Z~jCAH2=${ z*goHjl|z|kbmIE{cl-PloSTtD+2=CDm~ZHRgXJ8~1(g4W=1c3=2eF#3tah7ho`zm4 z05P&?nyqq$nC?iJ-nK_iBo=u5l#|Ka3H7{UZ&O`~t-=triw=SE7ynzMAE{Mv-{7E_ zViZtA(0^wD{iCCcg@c{54Ro@U5p1QZq_XlEGtdBAQ9@nT?(zLO0#)q55G8_Ug~Xnu zR-^1~hp|cy&52iogG@o?-^AD8Jb^;@&Ea5jEicDlze6%>?u$-eE};bQ`T6@(bED0J zKYtdc?%9*<<$2LCBzVx9CA4YV|q-qg*-{yQ;|0=KIgI6~z0DKTtajw2Oms3L zn{C%{P`duw!(F@*P)lFy11|Z&x`E2<=$Ln38>UR~z6~za(3r;45kQK_^QTX%!s zNzoIFFH8|Y>YVrUL5#mgA-Jh>j7)n)5}iVM4%_@^GSwEIBA2g-;43* z*)i7u*xc8jo2z8&=8t7qo|B-rsGw)b8UXnu`RgE4u!(J8yIJi(5m3~aYsADcfZ!GG zzqa7p=sg`V_KjiqI*LA-=T;uiNRB;BZZ)~88 z`C%p8%hIev2rxS12@doqsrjgMg3{A&N8A?%Ui5vSHh7!iC^ltF&HqG~;=16=h0{ygy^@HxixUb1XYcR36SB}}o3nxu z_IpEmGh_CK<+sUh@2zbK9MqO!S5cao=8LSQg0Zv4?ju%ww^mvc0WU$q@!oo#2bv24 z+?c}14L2vlDn%Y0!t*z=$*a!`*|uAVu&NO!z_arim$=btpUPR5XGCG0U3YU`v>yMr z^zmTdcEa!APX zYF>^Q-TP11;{VgtMqC}7>B^2gN-3KYl33gS-p%f!X<_Hr?`rG8{jb9jmuQA9U;BeG zHj6Pk(UB5c6zwX%SNi*Py*)gk^?+729$bAN-EUd*RKN7{CM4`Q65a1qF*-QWACA&m zrT)B(M}yih{2r!Tiv5Y&O&=H_OtaHUz96Npo_k0eN|!*s2mLe!Zkuv>^E8Xa43ZwH zOI058AZznYGrRJ+`*GmZzMi6yliFmGMge6^j?|PN%ARns!Eg$ufpcLc#1Ns!1@1 zvC7N8M$mRgnixwEtX{ypBS^n`k@t2cCh#_6L6WtQb8E~*Vu+Rr)YsKZRX~hzLG*BE zaeU#LPo?RLm(Wzltk79Jd1Y$|6aWz1)wf1K1RtqS;qyQMy@H@B805vQ%wfSJB?m&&=^m4i* zYVH`zTTFbFtNFkAI`Khe4e^CdGZw;O0 zqkQe2|NG_y6D%h(|EZNf&77_!NU%0y={^E=*gKGQ=)LdKPM3zUlM@otH2X07Awv8o zY8Y7a1^&Yy%b%m{mNQ5sWNMTIq96Wtr>a(hL>Qi&F(ckgKkyvM0IH<_}v~Fv-GqDapig=3*ZMOx!%cYY)SKzo7ECyem z9Mj3C)tCYM?C9YIlt1?zTJXNOo&oVxu&uXKJs7i+j8p*Qvu2PAnY}b`KStdpi`trk ztAO}T8eOC%x)mu+4ps8sYZ=vYJp16SVWEEgQyFKSfWQ@O5id6GfL`|2<}hMXLPszS zgK>NWOoR zBRyKeUPevpqKKShD|MZ`R;~#PdNMB3LWjqFKNvH9k+;(`;-pyXM55?qaji#nl~K8m z_MifoM*W*X9CQiXAOH{cZcP0;Bn10E1)T@62Um>et2ci!J2$5-_HPy(AGif+BJpJ^ ziHWynC_%-NlrFY+(f7HyVvbDIM$5ci_i3?22ZkF>Y8RPBhgx-7k3M2>6m5R24C|~I z&RPh9xpMGzhN4bii*ryWaN^d(`0 zTOADlU)g`1p+SVMNLztd)c+;XjXox(VHQwqzu>FROvf0`s&|NEv26}(TAe;@=FpZq zaVs6mp>W0rM3Qg*6x5f_bPJd!6dQGmh?&v0rpBNfS$DW-{4L7#_~-eA@7<2BsZV=X zow){3aATmLZOQrs>uzDkXOD=IiX;Ue*B(^4RF%H zeaZ^*MWn4tBDj(wj114r(`)P96EHq4th-;tWiHhkp2rDlrklX}I@ib-nel0slFoQO zOeTc;Rh7sMIebO`1%u)=GlEj+7HU;c|Nj>2j)J-kpR)s3#+9AiB zd$hAk6;3pu9(GCR#)#>aCGPYq%r&i02$0L9=7AlIGYdlUO5%eH&M!ZWD&6^NBAj0Y9ZDcPg@r@8Y&-}e!aq0S(`}NuQ({;aigCPnq75U9cBH&Y7 ze)W0aD>muAepOKgm7uPg3Dz7G%)nEqTUm_&^^3(>+eEI;$ia`m>m0QHEkTt^=cx^JsBC68#H(3zc~Z$E9I)oSrF$3 zUClHXhMBZ|^1ikm3nL$Z@v|JRhud*IhOvx!6X<(YSX(9LG#yYuZeB{=7-MyPF;?_8 zy2i3iVKG2q!=JHN>~!#Bl{cwa6-yB@b<;8LSj}`f9pw7#x3yTD>C=>1S@H)~(n_K4 z2-yr{2?|1b#lS`qG@+823j;&UE5|2+EdU4nVw5=m>o_gj#K>>(*t=xI7{R)lJhLU{ z4IO6!x@1f$aDVIE@1a0lraN9!(j~_uGlks)!&davUFRNYHflp<|ENwAxsp~4Hun$Q z$w>@YzXp#VX~)ZP8`_b_sTg(Gt7?oXJW%^Pf0UW%YM+OGjKS}X`yO~{7WH6nX8S6Z ztl!5AnM2Lo*_}ZLvo%?iV;D2z>#qdpMx*xY2*GGlRzmHCom`VedAoR=(A1nO)Y>;5 zCK-~a;#g5yDgf7_phlkM@)C8s!xOu)N2UnQhif-v5kL$*t=X}L9EyBRq$V(sI{90> z=ghTPGswRVbTW@dS2H|)QYTY&I$ljbpNPTc_T|FEJkSW7MV!JM4I(ksRqQ8)V5>}v z2Sf^Z9_v;dKSp_orZm09jb8;C(vzFFJgoYuWRc|Tt_&3k({wPKiD|*m!+za$(l*!gNRo{xtmqjy1=kGzFkTH=Nc>EL@1Um0BiN1)wBO$i z6rG={bRcT|%A3s3xh!Bw?=L&_-X+6}L9i~xRj2}-)7fsoq0|;;PS%mcn%_#oV#kAp zGw^23c8_0~ ze}v9(p};6HM0+qF5^^>BBEI3d=2DW&O#|(;wg}?3?uO=w+{*)+^l_-gE zSw8GV=4_%U4*OU^hibDV38{Qb7P#Y8zh@BM9pEM_o2FuFc2LWrW2jRRB<+IE)G=Vx zuu?cp2-`hgqlsn|$nx@I%TC!`>bX^G00_oKboOGGXLgyLKXoo$^@L7v;GWqfUFw3< zekKMWo0LR;TaFY}Tt4!O$3MU@pqcw!0w0 zA}SnJ6Lb597|P5W8$OsEHTku2Kw9y4V=hx*K%iSn!#LW9W#~OiWf^dXEP$^2 zaok=UyGwy3GRp)bm6Gqr>8-4h@3=2`Eto2|JE6Sufh?%U6;ut1v1d@#EfcQP2chCt z+mB{Bk5~()7G>wM3KYf7Xh?LGbwg1uWLotmc_}Z_o;XOUDyfU?{9atAT$={v82^w9 z(MW$gINHt4xB3{bdbhRR%T}L?McK?!zkLK3(e>zKyei(yq%Nsijm~LV|9mll-XHavFcc$teX7v);H>=oN-+E_Q{c|! zp

    JV~-9AH}jxf6IF!PxrB9is{_9s@PYth^`pb%DkwghLdAyDREz(csf9)HcVRq z+2Vn~>{(S&_;bq_qA{v7XbU?yR7;~JrLfo;g$Lkm#ufO1P`QW_`zWW+4+7xzQZnO$ z5&GyJs4-VGb5MEDBc5=zxZh9xEVoY(|2yRv&!T7LAlIs@tw+4n?v1T8M>;hBv}2n) zcqi+>M*U@uY>4N3eDSAH2Rg@dsl!1py>kO39GMP#qOHipL~*cCac2_vH^6x@xmO|E zkWeyvl@P$2Iy*mCgVF+b{&|FY*5Ygi8237i)9YW#Fp& z?TJTQW+7U)xCE*`Nsx^yaiJ0KSW}}jc-ub)8Z8x(|K7G>`&l{Y&~W=q#^4Gf{}aJ%6kLXsmv6cr=Hi*uB`V26;dr4C$WrPnHO>g zg1@A%DvIWPDtXzll39kY6#%j;aN7grYJP9AlJgs3FnC?crv$wC7S4_Z?<_s0j;MmE z75yQGul2=bY%`l__1X3jxju2$Ws%hNv75ywfAqjgFO7wFsFDOW^)q2%VIF~WhwEW0 z45z^+r+}sJ{q+>X-w(}OiD(!*&cy4X&yM`!L0Fe+_RUfs@=J{AH#K~gArqT=#DcGE z!FwY(h&+&811rVCVoOuK)Z<-$EX zp`TzcUQC256@YWZ*GkE@P_et4D@qpM92fWA6c$MV=^qTu7&g)U?O~-fUR&xFqNiY1 zRd=|zUs_rmFZhKI|H}dcKhy%Okl(#y#QuMi81zsY56Y@757xBQqDNkd+XhLQhp2BB zBF^aJ__D676wLu|yYo6jNJNw^B+Ce;DYK!f$!dNs1*?D^97u^jKS++7S z5qE%zG#HY-SMUn^_yru=T6v`)CM%K<>_Z>tPe|js`c<|y7?qol&)C=>uLWkg5 zmzNcSAG_sL)E9or;i+O}tY^70@h7+=bG1;YDlX{<4zF_?{)K5B&?^tKZ6<$SD%@>F zY0cl2H7)%zKeDX%Eo7`ky^mzS)s;842cP{_;dzFuyd~Npb4u!bwkkhf8-^C2e3`q8>MuPhgiv0VxHxvrN9_`rJv&GX0fWz-L-Jg^B zrTsm>)-~j0F1sV=^V?UUi{L2cp%YwpvHwwLaSsCIrGI#({{QfbgDxLKsUC6w@m?y} zg?l=7aMX-RnMxvLn_4oSB|9t;)Qf2%m-GKo_07?N1l^ahJ+Wf8C>h5~=-o1BJzV@5HBTB-ACNpsHnGt6_ku37M z{vIEB^tR=--4SEg{jfF=gEogtGwi&A$mwk7E+SV$$ZuU}#F3Y7t}o{!w4LJh8v4PW%8HfUK@dta#l*z@w*9Xzz(i)r#WXi`r1D#oBPtNM7M?Hkq zhhS1)ea5(6VY45|)tCTr*@yc$^Zc!zQzsNXU?aRN6mh7zVu~i=qTrX^>de+f6HYfDsW@6PBlw0CsDBcOWUmt&st>Z zYNJEsRCP1#g0+Htb=wITvexBY@fOpAmR7?szQNR~nM)?sPWIj)0)jG-EF8U@nnBaQZy z)ImpVYQL>lBejMDjlxA$#G4%y+^_>N;}r@Zoe2|u-9-x@vvD^ZWnV>Gm=pZa7REAf zOnomhCxBaGZgT+4kiE%aS&lH2sI1mSCM<%)Cr*Sli;#!aXcUb&@Z|Hj{VPsJyClqD%>hy`Y7z(GASs8Mqas3!D zSQE83*%uctlD|p%4)v`arra4y>yP5m25V*_+n)Ry1v>z_Fz!TV6t+N?x?#iH$q=m= z8&X{uW%LVRO87dVl=$Y*>dabJVq{o|Kx`7(D2$5DVX&}XGbg|Ua(*5b=;5qzW9;|w>m{hIO(Tu-z(ey8H=EMluJNyK4BJmGpX~ZM2O61 zk*O7js{-MBqwq>Urf0igN+6soGGc!Y?SP6hiXuJzZ1V4WZqE*?h;PG84gvG~dds6~484!kPM zMP87IP?dhdc;%|cS&LxY*Ib6P3%p|9)E3IgRmhhwtUR3eRK6iZ_6fiGW}jnL4(I|t ze`2yLvmuY42lNwO6>I#Son3$R4NOoP*WUm1R4jl#agtSLE}fSu-Z>{+*?pQIn7`s3LAzF#1pSxCAo?clr9 z9PUj#REq28*ZkJnxs$aK%8^5?P<_Q!#Z?%JH0FKVF;&zH3F#J^fz|ahl$Ycs~kFij_XP;U<`FcaDYyXYPM~&jEe1Xj1n;wyRdD;lmnq&FEro=;+Z$=v-&fYM9eK*S_D&oTXFW#b0 zRY}Y7R#bLzTfg9i7{s?=P9~qjA?$-U2p5;0?gPPu`1JY|*?*8IPO!eX>oiX=O#F!A zl`S%e5Y(csR1f)I(iKMf-;5%_rPP7h&}5Fc(8byKUH1*d7?9%QC|4aADj3L8yuo6GOv#%HDgU3bN(UHw1+(99&Om%f!DY(RYSf4&Uny% zH}*&rEXc$W5+eyeEg|I|E-HnkIO0!$1sV7Z&NXxiCZJ@`kH4eEi5}q~!Vv5qQq{MI zi4^`GYoUN-7Q(jy^SKXL4$G4K+FQXR)B}ee=pS0RyK=YC8c2bGnMA~rrOh&jd3_AT zxVaq37w^-;OU3+C`Kko-Z%l_2FC^maa=Ae0Fm@PEtXEg@cX*oka1Lt&h@jES<6?o1Oi1C9>}7+U(Ve zQ$=8RlzcnfCd59CsJ=gG^A!2Bb_PY~K2sSau{)?Ge03G7US&qrgV!3NUi>UHWZ*lo zS;~0--vn{ot+7UWMV{a(X3rZ8Z06Ps3$-sd|CWE(Y#l`swvcDbMjuReGsoA`rmZ`^ z=AaArdbeU0EtwnOuzq@u5P1rlZjH#gNgh6HIhG(>dX%4m{_!&DNTQE)8= zXD-vcpcSi|DSm3aUMnrV;DQY?svz?9*#GT$NXb~Hem=24iy>7xj367(!#RjnrHtrP-Q`T2W*PEvAR-=j ztY2|#<|JvHNVnM-tNdoS_yRSo=yFqukTZmB$|>Vclj)o=YzC9!ph8)ZOH5X=%Aq|9gNgc}^KFVLht!Lyw54v5u&D zW%vT%z`H{Ax>Ry+bD&QjHQke_wEA;oj(&E!s4|OURButQKSc7Ar-PzIiFa8F@ezkaY2J9&PH+VI1!G+{JgsQ7%da*_Gr!exT*OgJld)b-?cd)xI+|v_C`h(Cg`N~oj0`SQPTma z{@vc8L^D-rBXwS#00jT#@=-n1H-C3hvg61r2jx#ok&cr#BV~9JdPaVihyrGq*lb>bm$H6rIoc}ifaSn6mTD9% z$FRJxbNozOo6y}!OUci1VBv-7{TYZ4GkOM@46Y9?8%mSH9?l&lU59)T#Fjg(h%6I} z?ib zZ(xb8Rwr+vv>@$h{WglT2lL`#V=-9tP^c)cjvnz(g|VL^h8^CPVv12dE(o}WQ@0OP z^2-&ssBXP^#Oh`X5@F+~$PCB6kK-T7sFUK|>$lNDSkvAy%{y2qgq-&v zv}^&gm`wiYztWgMS<{^qQKYNV=>CQaOeglAY~EZvr}n~tW=yg)_+fzqF%~+*V_$3h z2hDW`e$qR;QMg?(wKE>%H_6ASS@6bkOi-m- zg6B7AzD;gBS1%OD7|47a%3BykN{w}P!Wn-nQOfpKUpx8Mk{$IO62D!%U9$kr!e%T> zlqQih?3(U&5%r!KZFZPdbwZ0laAJCj!c&pEFVzrH&_&i5m68Y_*J+-Qjlnz}Q{3oAD)`d14H zKUGmbwC|beC9Mtp>SbL~NVrlctU3WBpHz(UeIa~_{u^_4OaHs_LQt>bUwcyD`_Bbh zC=x|1vSjL)JvVHLw|xKynEvq2m)7O-6qdmjht7pZ*z|o%NA17v$9H*(5D5(MXiNo1 z72Tv}QASqr$!mY58s_Q{hHa9MY+QZ`2zX-FT@Kd?`8pczcV^9IeOKDG4WKqiP7N|S z+O977=VQTk8k5dafK`vd(4?_3pBdB?YG9*Z=R@y|$S+d%1sJf-Ka++I&v9hH)h#}} zw-MjQWJ?ME<7PR(G<1#*Z-&M?%=yzhQw$Lki(R+Pq$X~Q!9BO=fP9FyCIS8zE3n04 z8ScD%XmJnIv=pMTgt6VSxBXOZucndRE@7^aU0wefJYueY(Cb%?%0rz)zWEnsNsKhQ z+&o6d^x=R;Pt7fUa_`JVb1HPHYbXg{Jvux|atQ^bV#_|>7QZNC~P^IKUThB6{kvz2pr2*Cyxj zy37Nri8za8J!@Iw9rbt~#^<9zOaM8LOi$kPBcAGqPq-DB^-93Qeup{9@9&=zV6KQN zL)ic5S%n1!F(7b>MQ973$~<0|9MY-G!?wk?j-cQhMQlM2n{&7JoTBGsP;=fC6CBJn zxlpk^%x=B16rfb-W9pYV#9IRHQL9VG4?Uh>pN>2}0-MST2AB2pQjf*rT+TLCX-+&m z9I{ic2ogXoh=HwdI#igr(JC>>NUP|M>SA?-ux<2&>Jyx>Iko!B<3vS}{g*dKqxYW7 z0i`&U#*v)jot+keO#G&wowD!VvD(j`Z9a*-_RALKn0b(KnZ37d#Db7royLhBW~*7o zRa`=1fo9C4dgq;;R)JpP++a9^{xd)8``^fPW9!a%MCDYJc;3yicPs8IiQM>DhUX*; zeIrxE#JRrr|D$@bKgOm4C9D+e!_hQKj3LC`Js)|Aijx=J!rlgnpKeF>b+QlKhI^4* zf%Of^RmkW|xU|p#Lad44Y5LvIUIR>VGH8G zz7ZEIREG%UOy4)C!$muX6StM4@Fsh&Goa}cj10RL(#>oGtr6h~7tZDDQ_J>h)VmYlKK>9ns8w4tdx6LdN5xJQ9t-ABtTf_ zf1dKVv!mhhQFSN=ggf(#$)FtN-okyT&o6Ms+*u72Uf$5?4)78EErTECzweDUbbU)) zc*tt+9J~Pt%!M352Y5b`Mwrjn^Orp+)L_U1ORHJ}OUsB78YPcIRh4p5jzoDB7B*fb z4v`bouQeCAW#z9b1?4(M3dcwNn2F2plwC^RVHl#h&b-8n#5^o+Ll20OlJ^gOYiK2< z;MQuR!t!>`i}CAOa4a+Rh5IL|@kh4EdEL*O=3oGx4asg?XCTcUOQnmHs^6nLu6WcI zSt9q7nl*?2TIikKNb?3JZBo$cW6)b#;ZKzi+(~D-%0Ec+QW=bZZm@w|prGiThO3dy zU#TQ;RYQ+xU~*@Zj;Rf~z~iL8Da`RT!Z)b3ILBhnIl@VX9K0PSj5owH#*FJXX3vZ= zg_Zyn^G&l!WR6wN9GWvt)sM?g2^CA8&F#&t2z3_MiluRqvNbV{Me6yZ&X-_ zd6#Xdh%+6tCmSNTdCBusVkRwJ_A~<^Nd6~MNOvS;YDixM43`|8e_bmc*UWi7TLA})`T_F ztk&Nd=dgFUss#Ol$LXTRzP9l1JOSvAws~^X%(`ct$?2Im?UNpXjBec_-+8YK%rq#P zT9=h8&gCtgx?=Oj$Yr2jI3`VVuZ`lH>*N+*K11CD&>>F)?(`yr~54vHJftY*z?EorK zm`euBK<$(!XO%6-1=m>qqp6F`S@Pe3;pK5URT$8!Dd|;`eOWdmn916Ut5;iXWQoXE z0qtwxlH=m_NONP3EY2eW{Qwr-X1V3;5tV;g7tlL4BRilT#Y&~o_!f;*hWxWmvA;Pg zRb^Y$#PipnVlLXQIzKCuQP9IER0Ai4jZp+STb1Xq0w(nVn<3j(<#!vuc?7eJEZC<- zPhM7ObhgabN2`pm($tu^MaBkRLzx&jdh;>BP|^$TyD1UHt9Qvr{ZcBs^l!JI4~d-Py$P5QOYO&8eQOFe)&G zZm+?jOJioGs7MkkQBCzJSFJV6DiCav#kmdxc@IJ9j5m#&1)dhJt`y8{T!uxpBZ>&z zD^V~%GEaODak5qGj|@cA7HSH{#jHW;Q0KRdTp@PJO#Q1gGI=((a1o%X*{knz&_`ym zkRLikN^fQ%Gy1|~6%h^vx>ToJ(#aJDxoD8qyOD{CPbSvR*bC>Nm+mkw>6mD0mlD0X zGepCcS_x7+6X7dH;%e`aIfPr-NXSqlu&?$Br1R}3lSF2 zWOXDtG;v#EVLSQ!>4323VX-|E#qb+x%IxzUBDI~N23x? zXUHfTTV#_f9T$-2FPG@t)rpc9u9!@h^!4=fL^kg9 zVv%&KY3!?bU*V4X)wNT%Chr;YK()=~lc%$auOB_|oH`H)Xot@1cmk{^qdt&1C55>k zYnIkdoiAYW41zrRBfqR?9r^cpWIEqfS;|R#bIs4$cqA zoq~$yl8h{IXTSdSdH?;`ky6i%+Oc?HvwH+IS`%_a!d#CqQob9OTNIuhUnOQsX;nl_ z;1w99qO9lAb|guQ9?p4*9TmIZ5{su!h?v-jpOuShq!{AuHUYtmZ%brpgHl$BKLK_L z6q5vZodM$)RE^NNO>{ZWPb%Ce111V4wIX}?DHA=uzTu0$1h8zy!SID~m5t)(ov$!6 zB^@fP#vpx3enbrbX=vzol zj^Bg7V$Qa53#3Lptz<6Dz=!f+FvUBVIBtYPN{(%t(EcveSuxi3DI>XQ*$HX~O{KLK5Dh{H2ir87E^!(ye{9H&2U4kFxtKHkw zZPOTIa*29KbXx-U4hj&iH<9Z@0wh8B6+>qQJn{>F0mGnrj|0_{nwN}Vw_C!rm0!dC z>iRlEf}<+z&?Z4o3?C>QrLBhXP!MV0L#CgF{>;ydIBd5A{bd-S+VFn zLqq4a*HD%65IqQ5BxNz~vOGU=JJv|NG{OcW%2PU~MEfy6(bl#^TfT7+az5M-I`i&l z#g!HUfN}j#adA-21x7jbP6F;`99c8Qt|`_@u@fbhZF+Wkmr;IdVHj+F=pDb4MY?fU znDe##Hn){D}<>vVhYL#)+6p9eAT3T$?;-~bZU%l7MpPNh_mPc(h@79 z;LPOXk>e3nmIxl9lno5cI5G@Q!pE&hQ`s{$Ae4JhTebeTsj*|!6%0;g=wH?B1-p{P z`In#EP12q6=xXU)LiD+mLidPrYGHaKbe5%|vzApq9(PI6I5XjlGf<_uyy59iw8W;k zdLZ|8R8RWDc`#)n2?~}@5)vvksY9UaLW`FM=2s|vyg>Remm=QGthdNL87$nR&TKB*LB%*B}|HkG64 zZ|O4=Yq?Zwl>_KgIG@<8i{Zw#P3q_CVT7Dt zoMwoI)BkpQj8u(m!>1dfOwin(50}VNiLA>A2OG&TBXcP=H(3I;!WdPFe?r_e{%>bc6(Zk?6~Ew&;#ZxBJ| zAd1(sAHqlo_*rP;nTk)kAORe3cF&tj>m&LsvB)`-y9#$4XU=Dd^+CzvoAz%9216#f0cS`;kERxrtjbl^7pmO;_y zYBGOL7R1ne7%F9M2~0a7Srciz=MeaMU~ zV%Y#m_KV$XReYHtsraWLrdJItLtRiRo98T3J|x~(a>~)#>JHDJ z|4j!VO^qWQfCm9-$N29SpHUqvz62%#%98;2FNIF*?c9hZ7GAu$q>=0 zX_igPSK8Et(fmD)V=CvbtA-V(wS?z6WV|RX2`g=w=4D)+H|F_N(^ON!jHf72<2nCJ z^$hEygTAq7URR{Vq$)BsmFKTZ+i1i(D@SJuTGBN3W8{JpJ^J zkF=gBTz|P;Xxo1NIypGzJq8GK^#4tl)S%8$PP6E8c|GkkQ)vZ1OiB%mH#@hO1Z%Hp zv%2~Mlar^}7TRN-SscvQ*xVv+i1g8CwybQHCi3k;o$K@bmB%^-U8dILX)7b~#iPu@ z&D&W7YY2M3v`s(lNm2#^dCRFd;UYMUw1Rh2mto8laH1m`n0u;>okp5XmbsShOhQwo z@EYOehg-KNab)Rieib?m&NXls+&31)MB&H-zj_WmJsGjc1sCSOz0!2Cm1vV?y@kkQ z<1k6O$hvTQnGD*esux*aD3lEm$mUi0td0NiOtz3?7}h;Bt*vIC{tDBr@D)9rjhP^< zY*uKu^BiuSO%)&FL>C?Ng!HYZHLy`R>`rgq+lJhdXfo|df zmkzpQf{6o9%^|7Yb5v{Tu& zsP*Y~<#jK$S_}uEisRC;=y{zbq`4Owc@JyvB->nPzb#&vcMKi5n66PVV{Aub>*>q8 z=@u7jYA4Ziw2{fSED#t4QLD7Rt`au^y(Ggp3y(UcwIKtI(OMi@GHxs!bj$v~j(FZK zbdcP^gExtXQqQ8^Q#rHy1&W8q!@^aL>g1v2R45T(KErWB)1rB@rU`#n&-?g2Ti~xXCrexrLgajgzNy=N9|A6K=RZ zc3yk>w5sz1zsg~tO~-Ie?%Aplh#)l3`s632mi#CCl^75%i6IY;dzpuxu+2fliEjQn z&=~U+@fV4>{Fp=kk0oQIvBdqS#yY`Z+>Z|T&K{d;v3}=JqzKx05XU3M&@D5!uPTGydasyeZ5=1~IX-?HlM@AGB9|Mzb{{Dt@bUU8{KUPU@EX zv0fpQNvG~nD2WiOe{Vn=hE^rQD(5m+!$rs%s{w9;yg9oxRhqi0)rwsd245)igLmv* zJb@Xlet$+)oS1Ra#qTB@U|lix{Y4lGW-$5*4xOLY{9v9&RK<|K!fTd0wCKYZ)h&2f zEMcTCd+bj&YVmc#>&|?F!3?br3ChoMPTA{RH@NF(jmGMB2fMyW(<0jUT=8QFYD7-% zS0ydgp%;?W=>{V9>BOf=p$q5U511~Q0-|C!85)W0ov7eb35%XV;3mdUI@f5|x5C)R z$t?xLFZOv}A(ZjjSbF+8&%@RChpRvo>)sy>-IO8A@>i1A+8bZd^5J#(lgNH&A=V4V z*HUa0{zT{u-_FF$978RziwA@@*XkV{<-CE1N=Z!_!7;wq*xt3t((m+^$SZKaPim3K zO|Gq*w5r&7iqiQ!03SY{@*LKDkzhkHe*TzQaYAkz&jNxf^&A_-40(aGs53&}$dlKz zsel3=FvHqdeIf!UYwL&Mg3w_H?utbE_(PL9B|VAyaOo8k4qb>EvNYHrVmj^ocJQTf zL%4vl{qgmJf#@uWL@)WiB>Lm>?ivwB%uO|)i~;#--nFx4Kr6{TruZU0N_t_zqkg`? zwPFK|WiC4sI%o1H%$!1ANyq6_0OSPQJybh^vFriV=`S;kSsYkExZwB{68$dTODWJQ z@N57kBhwN(y~OHW_M}rX2W13cl@*i_tjW`TMfa~Y;I}1hzApXgWqag@(*@(|EMOg- z^qMk(s~dL#ps>>`oWZD=i1XI3(;gs7q#^Uj&L`gVu#4zn$i!BIHMoOZG!YoPO^=Gu z5`X-(KoSsHL77c<7^Y*IM2bI!dzg5j>;I@2-EeB$LgW|;csQTM&Z|R)q>yEjk@Sw% z6FQk*&zHWzcXalUJSoa&pgH24n`wKkg=2^ta$b1`(BBpBT2Ah9yQF&Kh+3jTaSE|=vChGz2_R^{$C;D`Ua(_=|OO11uLm;+3k%kO19EA`U065i;fRBoH z{Hq$cgHKRFPf0#%L?$*KeS@FDD;_TfJ#dwP7zzO5F>xntH(ONK{4)#jYUDQr6N(N< zp+fAS9l9)^c4Ss8628Zq5AzMq4zc(In_yJSXAT57Dtl}@= zvZoD7iq0cx7*#I{{r9m{%~g6@Hdr|*njKBb_5}mobCv=&X^`D9?;x6cHwRcwnlO^h zl;MiKr#LaoB*PELm8+8%btnC)b^E12!^ zMmVA!z>59e7n+^!P{PA?f9M^2FjKVw1%x~<`RY5FcXJE)AE}MTopGFDkyEjGiE|C6 z(ad%<3?v*?p;LJGopSEY18HPu2*}U!Nm|rfewc6(&y(&}B#j85d-5PeQ{}zg>>Rvl zDQ3H4E%q_P&kjuAQ>!0bqgAj){vzHpnn+h(AjQ6GO9v**l0|aCsCyXVE@uh?DU;Em zE*+7EU9tDH````D`|rM6WUlzBf1e{ht8$62#ilA6Dcw)qAzSRwu{czZJAcKv8w(Q6 zx)b$aq*=E=b5(UH-5*u)3iFlD;XQyklZrwHy}+=h6=aKtTriguHP@Inf+H@q32_LL z2tX|+X}4dMYB;*EW9~^5bydv)_!<%q#%Ocyh=1>FwL{rtZ?#2Scp{Q55%Fd-LgLU$ zM2u#|F{%vi%+O2^~uK3)?$6>9cc7_}F zWU72eFrzZ~x3ZIBH;~EMtD%51o*bnW;&QuzwWd$ds=O>Ev807cu%>Ac^ZK&7bCN;Ftk#eeQL4pG0p!W{Ri@tGw>nhIo`rC zi!Z6?70nYrNf92V{Y_i(a4DG=5>RktP=?%GcHEx?aKN$@{w{uj#Cqev$bXefo?yC6KI%Rol z%~$974WCymg;BBhd9Mv}_MeNro_8IB4!evgo*je4h?B-CAkEW-Wr-Q_V9~ef(znU& z{f-OHnj>@lZH(EcUb2TpOkc70@1BPiY0B#++1EPY5|UU?&^Vpw|C`k4ZWiB-3oAQM zgmG%M`2qDw5BMY|tG++34My2fE|^kvMSp(d+~P(Vk*d+RW1833i_bX^RYbg9tDtX` zox?y^YYfs-#fX|y7i(FN7js)66jN!`p9^r7oildEU#6J1(415H3h>W*p(p9@dI|c7 z&c*Aqzksg}o`D@i+o@WIw&jjvL!(`)JglV5zwMn)praO2M05H&CDeps0Wq8(8AkuE zPm|8MB6f0kOzg(gw}k>rzhQyo#<#sVdht~Wdk`y`=%0!jbd1&>Kxed8lS{Xq?Zw>* zU5;dM1tt``JH+A9@>H%-9f=EnW)UkRJe0+e^iqm0C5Z5?iEn#lbp}Xso ztleC}hl&*yPFcoCZ@sgvvjBA_Ew6msFml$cfLQY_(=h03WS_z+Leeh$M3#-?f9YT^Q($z z+pgaEv$rIa*9wST`WHASQio=9IaVS7l<87%;83~X*`{BX#@>>p=k`@FYo ze!K5_h8hOc`m0mK0p}LxsguM}w=9vw6Ku8y@RNrXSRPh&S`t4UQY=e-B8~3YCt1Fc zU$CtRW%hbcy{6K{>v0F*X<`rXVM3a{!muAeG$zBf`a(^l${EA9w3>J{aPwJT?mKVN2ba+v)Mp*~gQ_+Ws6= zy@D?85!U@VY0z9T=E9LMbe$?7_KIg)-R$tD)9NqIt84fb{B;f7C)n+B8)Cvo*F0t! zva6LeeC}AK4gL#d#N_HvvD& z0;mdU3@7%d5>h(xX-NBmJAOChtb(pX-qUtRLF5f$ z`X?Kpu?ENMc88>O&ym_$Jc7LZ> z#73|xJ|aa@l}PawS4Mpt9n)38w#q^P1w2N|rYKdcG;nb!_nHMZA_09L!j)pBK~e+j?tb-_A`wF8 zIyh>&%v=|n?+~h}%i1#^9UqZ?E9W!qJ0d0EHmioSt@%v7FzF`eM$X==#oaPESHBm@ zYzTXVo*y|C0~l_)|NF|F(If~YWJVkQAEMf5IbH{}#>PZpbXZU;+b^P8LWmlmDJ%Zu)4CajvRL!g_Faph`g0hpA2)D0|h zYy0h5+@4T81(s0D=crojdj|dYa{Y=<2zKp@xl&{sHO;#|!uTHtTey25f1U z#=Nyz{rJy#@SPk3_U|aALcg%vEjwIqSO$LZI59^;Mu~Swb53L+>oxWiN7J{;P*(2b@ao*aU~}-_j10 z@fQiaWnb}fRrHhNKrxKmi{aC#34BRP(a#0K>-J8D+v_2!~(V-6J%M@L{s?fU5ChwFfqn)2$siOUKw z?SmIRlbE8ot5P^z0J&G+rQ5}H=JE{FNsg`^jab7g-c}o`s{JS{-#}CRdW@hO`HfEp z1eR0DsN! zt5xmsYt{Uu;ZM`CgW)VYk=!$}N;w+Ct$Wf!*Z-7}@pA62F^1e$Ojz9O5H;TyT&rV( zr#IBM8te~-2t2;kv2xm&z%tt3pyt|s#vg2EOx1XkfsB*RM;D>ab$W-D6#Jdf zJ3{yD;P4=pFNk2GL$g~+5x;f9m*U2!ovWMK^U5`mAgBRhGpu)e`?#4vsE1aofu)iT zDm;aQIK6pNd8MMt@}h|t9c$)FT7PLDvu3e)y`otVe1SU4U=o@d!gn(DB9kC>Ac1wJ z?`{Hq$Q!rGb9h&VL#z+BKsLciCttdLJe9EmZF)J)c1MdVCrxg~EM80_b3k{ur=jVjrVhDK1GTjd3&t#ORvC0Q_&m|n>&TF1C_>k^8&ylR7oz#rG?mE%V| zepj0BlD|o?p8~LK_to`GINhGyW{{jZ{xqaO*SPvH)BYy1eH22DL_Kkn28N!0z3fzj z_+xZ3{ph_Tgkd)D$OjREak$O{F~mODA_D`5VsoobVnpxI zV0F_79%JB!?@jPs=cY73FhGuT!?fpVX1W=Wm zK5}i7(Pfh4o|Z{Ur=Y>bM1BDo2OdXBB(4Y#Z!61A8C6;7`6v-(P{ou1mAETEV?Nt< zMY&?ucJcJ$NyK0Zf@b;U#3ad?#dp`>zmNn=H1&-H`Y+)ai-TfyZJX@O&nRB*7j$ zDQF!q#a7VHL3z#Hc?Ca!MRbgL`daF zW#;L$yiQP|5VvgvRLluk3>-1cS+7MQ1)DC&DpYyS9j;!Rt$HdXK1}tG3G_)ZwXvGH zG;PB^f@CFrbEK4>3gTVj73~Tny+~k_pEHt|^eLw{?6NbG&`Ng9diB9XsMr(ztNC!{FhW8Hi!)TI`(Q|F*b z-z;#*c1T~kN67omP(l7)ZuTlxaC_XI(K8$VPfAzj?R**AMb0*p@$^PsN!LB@RYQ4U zA^xYY9sX4+;7gY%$i%ddfvneGfzbE4ZTJT5Vk3&1`?ULTy28&D#A&{dr5ZlZH&NTz zdfZr%Rw*Ukmgu@$C5$}QLOyb|PMA5syQns?iN@F|VFEvFPK321mTW^uv?GGNH6rnM zR9a2vB`}Y++T3Wumy$6`W)_c0PS*L;;0J^(T7<)`s{}lZVp`e)fM^?{$ zLbNw>N&6aw5Hlf_M)h8=)x0$*)V-w-Pw5Kh+EY{^$?#{v)_Y{9p5K{DjLnJ(ZUcyk*y(6D8wHB8=>Y)fb_Pw0v)Xybk`Sw@hNEaHP$-n`DtYP ziJyiauEXtuMpWyQjg$gdJR?e+=8w+=5GO-OT8pRaVFP1k^vI|I&agGjN-O*bJEK!M z`kt^POhUexh+PA&@And|vk-*MirW?>qB(f%y{ux z*d44UXxQOs+C`e-x4KSWhPg-!gO~kavIL8X3?!Ac2ih-dkK~Ua2qlcs1b-AIWg*8u z0QvL~51vS$LnmJSOnV4JUCUzg&4;bSsR5r_=FD@y|)Y2R_--e zMWJ;~*r=vJssF5_*n?wF0DO_>Mja=g+HvT=Yd^uBU|aw zRixHUQJX0Pgt-nFV+8&|;-n>!jNUj!8Y_YzH*%M!-_uWt6& z|Ec+lAD``i^do;u_?<(RpzsYZVJ8~}|NjUFgXltofbjhf!v&208g^#0h-x?`z8cInq!9kfVwJ|HQ;VK>p_-fn@(3q?e51Keq(=U-7C0#as-q z8Or}Ps07>O2@AAXz_%3bTOh{tKm#uRe}Sqr=w6-Wz$FCdfF3qNabEaj`-OfipxaL- zPh2R*l&%ZbcV?lv4C3+t2DAVSFaRo20^W_n4|0t(_*`?KmmUHG2sNZ*CRZlCFIyZbJqLdBCj)~%if)g|4NJr(8!R!E0iBbm$;`m;1n2@(8*E%B zH!g{hK|WK?1jUfM9zX?hlV#l%!6^p$$P+~rg}OdKg|d^Ed4WTY1$1J@WWHr$Os_(L z;-Zu1FJqhR4LrCUl)C~E7gA!^wtA6YIh10In9rX@LGSjnTPtLp+gPGp6u z3}{?J1!yT~?FwqT;O_-1%37f#4ek&DL){N}MX3RbNfRb-T;U^wXhx#De&QssA$lu~ mWkA_K7-+yz9tH*t6hj_Qg(_m7JaeTomk=)l!_+yTk^le-`GmOu delta 34176 zcmX7vV`H6d(}mmEwr$(CZQE$vU^m*aZQE(=WXEZ2+l}qF_w)XN>&rEBu9;)4>7EB0 zo(HR^Mh47P)@z^^pH!4#b(O8!;$>N+S+v5K5f8RrQ+Qv0_oH#e!pI2>yt4ij>fI9l zW&-hsVAQg%dpn3NRy$kb_vbM2sr`>bZ48b35m{D=OqX;p8A${^Dp|W&J5mXvUl#_I zN!~GCBUzj~C%K?<7+UZ_q|L)EGG#_*2Zzko-&Kck)Qd2%CpS3{P1co1?$|Sj1?E;PO z7alI9$X(MDly9AIEZ-vDLhpAKd1x4U#w$OvBtaA{fW9)iD#|AkMrsSaNz(69;h1iM1#_ z?u?O_aKa>vk=j;AR&*V-p3SY`CI}Uo%eRO(Dr-Te<99WQhi>y&l%UiS%W2m(d#woD zW?alFl75!1NiUzVqgqY98fSQNjhX3uZ&orB08Y*DFD;sjIddWoJF;S_@{Lx#SQk+9 zvSQ-620z0D7cy8-u_7u?PqYt?R0m2k%PWj%V(L|MCO(@3%l&pzEy7ijNv(VXU9byn z@6=4zL|qk*7!@QWd9imT9i%y}1#6+%w=s%WmsHbw@{UVc^?nL*GsnACaLnTbr9A>B zK)H-$tB`>jt9LSwaY+4!F1q(YO!E7@?SX3X-Ug4r($QrmJnM8m#;#LN`kE>?<{vbCZbhKOrMpux zTU=02hy${;n&ikcP8PqufhT9nJU>s;dyl;&~|Cs+o{9pCu{cRF+0{iyuH~6=tIZXVd zR~pJBC3Hf-g%Y|bhTuGyd~3-sm}kaX5=T?p$V?48h4{h2;_u{b}8s~Jar{39PnL7DsXpxcX#3zx@f9K zkkrw9s2*>)&=fLY{=xeIYVICff2Id5cc*~l7ztSsU@xuXYdV1(lLGZ5)?mXyIDf1- zA7j3P{C5s?$Y-kg60&XML*y93zrir8CNq*EMx)Kw)XA(N({9t-XAdX;rjxk`OF%4-0x?ne@LlBQMJe5+$Ir{Oj`@#qe+_-z!g5qQ2SxKQy1ex_x^Huj%u+S@EfEPP-70KeL@7@PBfadCUBt%`huTknOCj{ z;v?wZ2&wsL@-iBa(iFd)7duJTY8z-q5^HR-R9d*ex2m^A-~uCvz9B-1C$2xXL#>ow z!O<5&jhbM&@m=l_aW3F>vjJyy27gY}!9PSU3kITbrbs#Gm0gD?~Tub8ZFFK$X?pdv-%EeopaGB#$rDQHELW!8bVt`%?&>0 zrZUQ0!yP(uzVK?jWJ8^n915hO$v1SLV_&$-2y(iDIg}GDFRo!JzQF#gJoWu^UW0#? z*OC-SPMEY!LYY*OO95!sv{#-t!3Z!CfomqgzFJld>~CTFKGcr^sUai5s-y^vI5K={ z)cmQthQuKS07e8nLfaIYQ5f}PJQqcmokx?%yzFH*`%k}RyXCt1Chfv5KAeMWbq^2MNft;@`hMyhWg50(!jdAn;Jyx4Yt)^^DVCSu?xRu^$*&&=O6#JVShU_N3?D)|$5pyP8A!f)`| z>t0k&S66T*es5(_cs>0F=twYJUrQMqYa2HQvy)d+XW&rai?m;8nW9tL9Ivp9qi2-` zOQM<}D*g`28wJ54H~1U!+)vQh)(cpuf^&8uteU$G{9BUhOL| zBX{5E1**;hlc0ZAi(r@)IK{Y*ro_UL8Ztf8n{Xnwn=s=qH;fxkK+uL zY)0pvf6-iHfX+{F8&6LzG;&d%^5g`_&GEEx0GU=cJM*}RecV-AqHSK@{TMir1jaFf&R{@?|ieOUnmb?lQxCN!GnAqcii9$ z{a!Y{Vfz)xD!m2VfPH=`bk5m6dG{LfgtA4ITT?Sckn<92rt@pG+sk>3UhTQx9ywF3 z=$|RgTN<=6-B4+UbYWxfQUOe8cmEDY3QL$;mOw&X2;q9x9qNz3J97)3^jb zdlzkDYLKm^5?3IV>t3fdWwNpq3qY;hsj=pk9;P!wVmjP|6Dw^ez7_&DH9X33$T=Q{>Nl zv*a*QMM1-2XQ)O=3n@X+RO~S`N13QM81^ZzljPJIFBh%x<~No?@z_&LAl)ap!AflS zb{yFXU(Uw(dw%NR_l7%eN2VVX;^Ln{I1G+yPQr1AY+0MapBnJ3k1>Zdrw^3aUig*! z?xQe8C0LW;EDY(qe_P!Z#Q^jP3u$Z3hQpy^w7?jI;~XTz0ju$DQNc4LUyX}+S5zh> zGkB%~XU+L?3pw&j!i|x6C+RyP+_XYNm9`rtHpqxvoCdV_MXg847oHhYJqO+{t!xxdbsw4Ugn($Cwkm^+36&goy$vkaFs zrH6F29eMPXyoBha7X^b+N*a!>VZ<&Gf3eeE+Bgz7PB-6X7 z_%2M~{sTwC^iQVjH9#fVa3IO6E4b*S%M;#WhHa^L+=DP%arD_`eW5G0<9Tk=Ci?P@ z6tJXhej{ZWF=idj32x7dp{zmQY;;D2*11&-(~wifGXLmD6C-XR=K3c>S^_+x!3OuB z%D&!EOk;V4Sq6eQcE{UEDsPMtED*;qgcJU^UwLwjE-Ww54d73fQ`9Sv%^H>juEKmxN+*aD=0Q+ZFH1_J(*$~9&JyUJ6!>(Nj zi3Z6zWC%Yz0ZjX>thi~rH+lqv<9nkI3?Ghn7@!u3Ef){G(0Pvwnxc&(YeC=Kg2-7z zr>a^@b_QClXs?Obplq@Lq-l5>W);Y^JbCYk^n8G`8PzCH^rnY5Zk-AN6|7Pn=oF(H zxE#8LkI;;}K7I^UK55Z)c=zn7OX_XVgFlEGSO}~H^y|wd7piw*b1$kA!0*X*DQ~O` z*vFvc5Jy7(fFMRq>XA8Tq`E>EF35{?(_;yAdbO8rrmrlb&LceV%;U3haVV}Koh9C| zTZnR0a(*yN^Hp9u*h+eAdn)d}vPCo3k?GCz1w>OOeme(Mbo*A7)*nEmmUt?eN_vA; z=~2}K_}BtDXJM-y5fn^v>QQo+%*FdZQFNz^j&rYhmZHgDA-TH47#Wjn_@iH4?6R{J z%+C8LYIy>{3~A@|y4kN8YZZp72F8F@dOZWp>N0-DyVb4UQd_t^`P)zsCoygL_>>x| z2Hyu7;n(4G&?wCB4YVUIVg0K!CALjRsb}&4aLS|}0t`C}orYqhFe7N~h9XQ_bIW*f zGlDCIE`&wwyFX1U>}g#P0xRRn2q9%FPRfm{-M7;}6cS(V6;kn@6!$y06lO>8AE_!O z{|W{HEAbI0eD$z9tQvWth7y>qpTKQ0$EDsJkQxAaV2+gE28Al8W%t`Pbh zPl#%_S@a^6Y;lH6BfUfZNRKwS#x_keQ`;Rjg@qj zZRwQXZd-rWngbYC}r6X)VCJ-=D54A+81%(L*8?+&r7(wOxDSNn!t(U}!;5|sjq zc5yF5$V!;%C#T+T3*AD+A({T)#p$H_<$nDd#M)KOLbd*KoW~9E19BBd-UwBX1<0h9 z8lNI&7Z_r4bx;`%5&;ky+y7PD9F^;Qk{`J@z!jJKyJ|s@lY^y!r9p^75D)_TJ6S*T zLA7AA*m}Y|5~)-`cyB+lUE9CS_`iB;MM&0fX**f;$n($fQ1_Zo=u>|n~r$HvkOUK(gv_L&@DE0b4#ya{HN)8bNQMl9hCva zi~j0v&plRsp?_zR zA}uI4n;^_Ko5`N-HCw_1BMLd#OAmmIY#ol4M^UjLL-UAat+xA+zxrFqKc@V5Zqan_ z+LoVX-Ub2mT7Dk_ z<+_3?XWBEM84@J_F}FDe-hl@}x@v-s1AR{_YD!_fMgagH6s9uyi6pW3gdhauG>+H? zi<5^{dp*5-9v`|m*ceT&`Hqv77oBQ+Da!=?dDO&9jo;=JkzrQKx^o$RqAgzL{ zjK@n)JW~lzxB>(o(21ibI}i|r3e;17zTjdEl5c`Cn-KAlR7EPp84M@!8~CywES-`mxKJ@Dsf6B18_!XMIq$Q3rTDeIgJ3X zB1)voa#V{iY^ju>*Cdg&UCbx?d3UMArPRHZauE}c@Fdk;z85OcA&Th>ZN%}=VU%3b9={Q(@M4QaeuGE(BbZ{U z?WPDG+sjJSz1OYFpdImKYHUa@ELn%n&PR9&I7B$<-c3e|{tPH*u@hs)Ci>Z@5$M?lP(#d#QIz}~()P7mt`<2PT4oHH}R&#dIx4uq943D8gVbaa2&FygrSk3*whGr~Jn zR4QnS@83UZ_BUGw;?@T zo5jA#potERcBv+dd8V$xTh)COur`TQ^^Yb&cdBcesjHlA3O8SBeKrVj!-D3+_p6%P zP@e{|^-G-C(}g+=bAuAy8)wcS{$XB?I=|r=&=TvbqeyXiuG43RR>R72Ry7d6RS;n^ zO5J-QIc@)sz_l6%Lg5zA8cgNK^GK_b-Z+M{RLYk5=O|6c%!1u6YMm3jJg{TfS*L%2 zA<*7$@wgJ(M*gyTzz8+7{iRP_e~(CCbGB}FN-#`&1ntct@`5gB-u6oUp3#QDxyF8v zOjxr}pS{5RpK1l7+l(bC)0>M;%7L?@6t}S&a zx0gP8^sXi(g2_g8+8-1~hKO;9Nn%_S%9djd*;nCLadHpVx(S0tixw2{Q}vOPCWvZg zjYc6LQ~nIZ*b0m_uN~l{&2df2*ZmBU8dv`#o+^5p>D5l%9@(Y-g%`|$%nQ|SSRm0c zLZV)45DS8d#v(z6gj&6|ay@MP23leodS8-GWIMH8_YCScX#Xr)mbuvXqSHo*)cY9g z#Ea+NvHIA)@`L+)T|f$Etx;-vrE3;Gk^O@IN@1{lpg&XzU5Eh3!w;6l=Q$k|%7nj^ z|HGu}c59-Ilzu^w<93il$cRf@C(4Cr2S!!E&7#)GgUH@py?O;Vl&joXrep=2A|3Vn zH+e$Ctmdy3B^fh%12D$nQk^j|v=>_3JAdKPt2YVusbNW&CL?M*?`K1mK*!&-9Ecp~>V1w{EK(429OT>DJAV21fG z=XP=%m+0vV4LdIi#(~XpaUY$~fQ=xA#5?V%xGRr_|5WWV=uoG_Z&{fae)`2~u{6-p zG>E>8j({w7njU-5Lai|2HhDPntQ(X@yB z9l?NGoKB5N98fWrkdN3g8ox7Vic|gfTF~jIfXkm|9Yuu-p>v3d{5&hC+ZD%mh|_=* zD5v*u(SuLxzX~owH!mJQi%Z=ALvdjyt9U6baVY<88B>{HApAJ~>`buHVGQd%KUu(d z5#{NEKk6Vy08_8*E(?hqZe2L?P2$>!0~26N(rVzB9KbF&JQOIaU{SumX!TsYzR%wB z<5EgJXDJ=1L_SNCNZcBWBNeN+Y`)B%R(wEA?}Wi@mp(jcw9&^1EMSM58?68gwnXF` zzT0_7>)ep%6hid-*DZ42eU)tFcFz7@bo=<~CrLXpNDM}tv*-B(ZF`(9^RiM9W4xC%@ZHv=>w(&~$Wta%)Z;d!{J;e@z zX1Gkw^XrHOfYHR#hAU=G`v43E$Iq}*gwqm@-mPac0HOZ0 zVtfu7>CQYS_F@n6n#CGcC5R%4{+P4m7uVlg3axX}B(_kf((>W?EhIO&rQ{iUO$16X zv{Abj3ZApUrcar7Ck}B1%RvnR%uocMlKsRxV9Qqe^Y_5C$xQW@9QdCcF%W#!zj;!xWc+0#VQ*}u&rJ7)zc+{vpw+nV?{tdd&Xs`NV zKUp|dV98WbWl*_MoyzM0xv8tTNJChwifP!9WM^GD|Mkc75$F;j$K%Y8K@7?uJjq-w zz*|>EH5jH&oTKlIzueAN2926Uo1OryC|CmkyoQZABt#FtHz)QmQvSX35o`f z<^*5XXxexj+Q-a#2h4(?_*|!5Pjph@?Na8Z>K%AAjNr3T!7RN;7c)1SqAJfHY|xAV z1f;p%lSdE8I}E4~tRH(l*rK?OZ>mB4C{3e%E-bUng2ymerg8?M$rXC!D?3O}_mka? zm*Y~JMu+_F7O4T;#nFv)?Ru6 z92r|old*4ZB$*6M40B;V&2w->#>4DEu0;#vHSgXdEzm{+VS48 z7U1tVn#AnQ3z#gP26$!dmS5&JsXsrR>~rWA}%qd{92+j zu+wYAqrJYOA%WC9nZ>BKH&;9vMSW_59z5LtzS4Q@o5vcrWjg+28#&$*8SMYP z!l5=|p@x6YnmNq>23sQ(^du5K)TB&K8t{P`@T4J5cEFL@qwtsCmn~p>>*b=37y!kB zn6x{#KjM{S9O_otGQub*K)iIjtE2NfiV~zD2x{4r)IUD(Y8%r`n;#)ujIrl8Sa+L{ z>ixGoZJ1K@;wTUbRRFgnltN_U*^EOJS zRo4Y+S`cP}e-zNtdl^S5#%oN#HLjmq$W^(Y6=5tM#RBK-M14RO7X(8Gliy3+&9fO; zXn{60%0sWh1_g1Z2r0MuGwSGUE;l4TI*M!$5dm&v9pO7@KlW@j_QboeDd1k9!7S)jIwBza-V#1)(7ht|sjY}a19sO!T z2VEW7nB0!zP=Sx17-6S$r=A)MZikCjlQHE)%_Ka|OY4+jgGOw=I3CM`3ui^=o0p7u z?xujpg#dRVZCg|{%!^DvoR*~;QBH8ia6%4pOh<#t+e_u!8gjuk_Aic=|*H24Yq~Wup1dTRQs0nlZOy+30f16;f7EYh*^*i9hTZ`h`015%{i|4 z?$7qC3&kt#(jI#<76Biz=bl=k=&qyaH>foM#zA7}N`Ji~)-f-t&tR4^do)-5t?Hz_Q+X~S2bZx{t+MEjwy3kGfbv(ij^@;=?H_^FIIu*HP_7mpV)NS{MY-Rr7&rvWo@Wd~{Lt!8|66rq`GdGu% z@<(<7bYcZKCt%_RmTpAjx=TNvdh+ZiLkMN+hT;=tC?%vQQGc7WrCPIYZwYTW`;x|N zrlEz1yf95FiloUU^(onr3A3>+96;;6aL?($@!JwiQ2hO|^i)b4pCJ7-y&a~B#J`#FO!3uBp{5GBvM2U@K85&o0q~6#LtppE&cVY z3Bv{xQ-;i}LN-60B2*1suMd=Fi%Y|7@52axZ|b=Wiwk^5eg{9X4}(q%4D5N5_Gm)` zg~VyFCwfkIKW(@@ZGAlTra6CO$RA_b*yz#){B82N7AYpQ9)sLQfhOAOMUV7$0|d$=_y&jl>va$3u-H z_+H*|UXBPLe%N2Ukwu1*)kt!$Y>(IH3`YbEt; znb1uB*{UgwG{pQnh>h@vyCE!6B~!k}NxEai#iY{$!_w54s5!6jG9%pr=S~3Km^EEA z)sCnnau+ZY)(}IK#(3jGGADw8V7#v~<&y5cF=5_Ypkrs3&7{}%(4KM7) zuSHVqo~g#1kzNwXc39%hL8atpa1Wd#V^uL=W^&E)fvGivt)B!M)?)Y#Ze&zU6O_I?1wj)*M;b*dE zqlcwgX#eVuZj2GKgBu@QB(#LHMd`qk<08i$hG1@g1;zD*#(9PHjVWl*5!;ER{Q#A9 zyQ%fu<$U?dOW=&_#~{nrq{RRyD8upRi}c-m!n)DZw9P>WGs>o1vefI}ujt_`O@l#Z z%xnOt4&e}LlM1-0*dd?|EvrAO-$fX8i{aTP^2wsmSDd!Xc9DxJB=x1}6|yM~QQPbl z0xrJcQNtWHgt*MdGmtj%x6SWYd?uGnrx4{m{6A9bYx`m z$*UAs@9?3s;@Jl19%$!3TxPlCkawEk12FADYJClt0N@O@Pxxhj+Kk(1jK~laR0*KGAc7%C4nI^v2NShTc4#?!p{0@p0T#HSIRndH;#Ts0YECtlSR}~{Uck+keoJq6iH)(Zc~C!fBe2~4(Wd> zR<4I1zMeW$<0xww(@09!l?;oDiq zk8qjS9Lxv$<5m#j(?4VLDgLz;8b$B%XO|9i7^1M;V{aGC#JT)c+L=BgCfO5k>CTlI zOlf~DzcopV29Dajzt*OcYvaUH{UJPaD$;spv%>{y8goE+bDD$~HQbON>W*~JD`;`- zZEcCPSdlCvANe z=?|+e{6AW$f(H;BND>uy1MvQ`pri>SafK5bK!YAE>0URAW9RS8#LWUHBOc&BNQ9T+ zJpg~Eky!u!9WBk)!$Z?!^3M~o_VPERYnk1NmzVYaGH;1h+;st==-;jzF~2LTn+x*k zvywHZg7~=aiJe=OhS@U>1fYGvT1+jsAaiaM;) zay2xsMKhO+FIeK?|K{G4SJOEt*eX?!>K8jpsZWW8c!X|JR#v(1+Ey5NM^TB1n|_40 z@Db2gH}PNT+3YEyqXP8U@)`E|Xat<{K5K;eK7O0yV72m|b!o43!e-!P>iW>7-9HN7 zmmc7)JX0^lPzF#>$#D~nU^3f!~Q zQWly&oZEb1847&czU;dg?=dS>z3lJkADL1innNtE(f?~OxM`%A_PBp?Lj;zDDomf$ z;|P=FTmqX|!sHO6uIfCmh4Fbgw@`DOn#`qAPEsYUiBvUlw zevH{)YWQu>FPXU$%1!h*2rtk_J}qNkkq+StX8Wc*KgG$yH#p-kcD&)%>)Yctb^JDB zJe>=!)5nc~?6hrE_3n^_BE<^;2{}&Z>Dr)bX>H{?kK{@R)`R5lnlO6yU&UmWy=d03 z*(jJIwU3l0HRW1PvReOb|MyZT^700rg8eFp#p<3Et%9msiCxR+jefK%x81+iN0=hG z;<`^RUVU+S)Iv-*5y^MqD@=cp{_cP4`s=z)Ti3!Bf@zCmfpZTwf|>|0t^E8R^s`ad z5~tA?0x7OM{*D;zb6bvPu|F5XpF11`U5;b*$p zNAq7E6c=aUnq>}$JAYsO&=L^`M|DdSSp5O4LA{|tO5^8%Hf1lqqo)sj=!aLNKn9(3 zvKk($N`p`f&u+8e^Z-?uc2GZ_6-HDQs@l%+pWh!|S9+y3!jrr3V%cr{FNe&U6(tYs zLto$0D+2}K_9kuxgFSeQ!EOXjJtZ$Pyl_|$mPQ9#fES=Sw8L% zO7Jij9cscU)@W+$jeGpx&vWP9ZN3fLDTp zaYM$gJD8ccf&g>n?a56X=y zec%nLN`(dVCpSl9&pJLf2BN;cR5F0Nn{(LjGe7RjFe7efp3R_2JmHOY#nWEc2TMhMSj5tBf-L zlxP3sV`!?@!mRnDTac{35I7h@WTfRjRiFw*Q*aD8)n)jdkJC@)jD-&mzAdK6Kqdct8P}~dqixq;n zjnX!pb^;5*Rr?5ycT7>AB9)RED^x+DVDmIbHKjcDv2lHK;apZOc=O@`4nJ;k|iikKk66v4{zN#lmSn$lh z_-Y3FC)iV$rFJH!#mNqWHF-DtSNbI)84+VLDWg$ph_tkKn_6+M1RZ!)EKaRhY={el zG-i@H!fvpH&4~$5Q+zHU(Ub=;Lzcrc3;4Cqqbr$O`c5M#UMtslK$3r+Cuz>xKl+xW?`t2o=q`1djXC=Q6`3C${*>dm~I{ z(aQH&Qd{{X+&+-4{epSL;q%n$)NOQ7kM}ea9bA++*F+t$2$%F!U!U}(&y7Sd0jQMV zkOhuJ$+g7^kb<`jqFiq(y1-~JjP13J&uB=hfjH5yAArMZx?VzW1~>tln~d5pt$uWR~TM!lIg+D)prR zocU0N2}_WTYpU`@Bsi1z{$le`dO{-pHFQr{M}%iEkX@0fv!AGCTcB90@e|slf#unz z*w4Cf>(^XI64l|MmWih1g!kwMJiifdt4C<5BHtaS%Ra>~3IFwjdu;_v*7BL|fPu+c zNp687`{}e@|%)5g4U*i=0zlSWXzz=YcZ*&Bg zr$r(SH0V5a%oHh*t&0y%R8&jDI=6VTWS_kJ!^WN!ET@XfEHYG-T1jJsDd`yEgh!^* z+!P62=v`R2=TBVjt=h}|JIg7N^RevZuyxyS+jsk>=iLA52Ak+7L?2$ZDUaWdi1PgB z_;*Uae_n&7o27ewV*y(wwK~8~tU<#Np6UUIx}zW6fR&dKiPq|$A{BwG_-wVfkm+EP zxHU@m`im3cD#fH63>_X`Il-HjZN_hqOVMG;(#7RmI13D-s_>41l|vDH1BglPsNJ+p zTniY{Hwoief+h%C^|@Syep#722=wmcTR7awIzimAcye?@F~f|n<$%=rM+Jkz9m>PF70$)AK@|h_^(zn?!;={;9Zo7{ zBI7O?6!J2Ixxk;XzS~ScO9{K1U9swGvR_d+SkromF040|Slk%$)M;9O_8h0@WPe4= z%iWM^ust8w$(NhO)7*8uq+9CycO$3m-l}O70sBi<4=j0CeE_&3iRUWJkDM$FIfrkR zHG2|hVh3?Nt$fdI$W?<|Qq@#hjDijk@7eUr1&JHYI>(_Q4^3$+Zz&R)Z`WqhBIvjo zX#EbA8P0Qla-yACvt)%oAVHa#kZi3Y8|(IOp_Z6J-t{)98*OXQ#8^>vTENsV@(M}^ z(>8BXw`{+)BfyZB!&85hT0!$>7$uLgp9hP9M7v=5@H`atsri1^{1VDxDqizj46-2^ z?&eA9udH#BD|QY2B7Zr$l;NJ-$L!u8G{MZoX)~bua5J=0p_JnM`$(D4S!uF}4smWq zVo%kQ~C~X?cWCH zo4s#FqJ)k|D{c_ok+sZ8`m2#-Uk8*o)io`B+WTD0PDA!G`DjtibftJXhPVjLZj~g& z=MM9nF$7}xvILx}BhM;J-Xnz0=^m1N2`Mhn6@ct+-!ijIcgi6FZ*oIPH(tGYJ2EQ0 z{;cjcc>_GkAlWEZ2zZLA_oa-(vYBp7XLPbHCBcGH$K9AK6nx}}ya%QB2=r$A;11*~ z_wfru1SkIQ0&QUqd)%eAY^FL!G;t@7-prQ|drDn#yDf%Uz8&kGtrPxKv?*TqkC(}g zUx10<;3Vhnx{gpWXM8H zKc0kkM~gIAts$E!X-?3DWG&^knj4h(q5(L;V81VWyC@_71oIpXfsb0S(^Js#N_0E} zJ%|XX&EeVPyu}? zz~(%slTw+tcY3ZMG$+diC8zed=CTN}1fB`RXD_v2;{evY z@MCG$l9Az+F()8*SqFyrg3jrN7k^x3?;A?L&>y{ZUi$T8!F7Dv8s}}4r9+Wo0h^m= zAob@CnJ;IR-{|_D;_w)? zcH@~&V^(}Ag}%A90);X2AhDj(-YB>$>GrW1F4C*1S5`u@N{T|;pYX1;E?gtBbPvS* zlv3r#rw2KCmLqX0kGT8&%#A6Sc(S>apOHtfn+UdYiN4qPawcL{Sb$>&I)Ie>Xs~ej z7)a=-92!sv-A{-7sqiG-ysG0k&beq6^nX1L!Fs$JU#fsV*CbsZqBQ|y z{)}zvtEwO%(&mIG|L?qs2Ou1rqTZHV@H+sm8Nth(+#dp0DW4VXG;;tCh`{BpY)THY z_10NNWpJuzCG%Q@#Aj>!v7Eq8eI6_JK3g2CsB2jz)2^bWiM{&U8clnV7<2?Qx5*k_ zl9B$P@LV7Sani>Xum{^yJ6uYxM4UHnw4zbPdM|PeppudXe}+OcX z!nr!xaUA|xYtA~jE|436iL&L={H3e}H`M1;2|pLG)Z~~Ug9X%_#D!DW>w}Es!D{=4 zxRPBf5UWm2{}D>Em;v43miQ~2{>%>O*`wA{7j;yh;*DV=C-bs;3p{AD;>VPcn>E;V zLgtw|Y{|Beo+_ABz`lofH+cdf33LjIf!RdcW~wWgmsE%2yCQGbst4TS_t%6nS8a+m zFEr<|9TQzQC@<(yNN9GR4S$H-SA?xiLIK2O2>*w-?cdzNPsG4D3&%$QOK{w)@Dk}W z|3_Z>U`XBu7j6Vc=es(tz}c7k4al1$cqDW4a~|xgE9zPX(C`IsN(QwNomzsBOHqjd zi{D|jYSv5 zC>6#uB~%#!!*?zXW`!yHWjbjwm!#eo3hm;>nJ!<`ZkJamE6i>>WqkoTpbm(~b%G_v z`t3Z#ERips;EoA_0c?r@WjEP|ulD+hue5r8946Sd0kuBD$A!=dxigTZn)u3>U;Y8l zX9j(R*(;;i&HrB&M|Xnitzf@><3#)aKy=bFCf5Hz@_);{nlL?J!U>%fL$Fk~Ocs3& zB@-Ek%W>h9#$QIYg07&lS_CG3d~LrygXclO!Ws-|PxMsn@n{?77wCaq?uj`dd7lllDCGd?ed&%5k{RqUhiN1u&?uz@Fq zNkv_4xmFcl?vs>;emR1R<$tg;*Ayp@rl=ik z=x2Hk zJqsM%++e|*+#camAiem6f;3-khtIgjYmNL0x|Mz|y{r{6<@_&a7^1XDyE>v*uo!qF zBq^I8PiF#w<-lFvFx9xKoi&0j)4LX~rWsK$%3hr@ebDv^($$T^4m4h#Q-(u*Mbt6F zE%y0Fvozv=WAaTj6EWZ)cX{|9=AZDvPQuq>2fUkU(!j1GmdgeYLX`B0BbGK(331ME zu3yZ3jQ@2)WW5!C#~y}=q5Av=_;+hNi!%gmY;}~~e!S&&^{4eJuNQ2kud%Olf8TRI zW-Dze987Il<^!hCO{AR5tLW{F1WLuZ>nhPjke@CSnN zzoW{m!+PSCb7byUf-1b;`{0GU^zg7b9c!7ueJF`>L;|akVzb&IzoLNNEfxp7b7xMN zKs9QG6v@t7X)yYN9}3d4>*ROMiK-Ig8(Do$3UI&E}z!vcH2t(VIk-cLyC-Y%`)~>Ce23A=dQsc<( ziy;8MmHki+5-(CR8$=lRt{(9B9W59Pz|z0^;`C!q<^PyE$KXt!KibFH*xcB9V%xTD zn;YlZ*tTukwr$(mWMka@|8CW-J8!zCXI{P1-&=wSvZf&%9SZ7m`1&2^nV#D z6T*)`Mz3wGUC69Fg0Xk!hwY}ykk!TE%mr57TLX*U4ygwvM^!#G`HYKLIN>gT;?mo% zAxGgzSnm{}vRG}K)8n(XjG#d+IyAFnozhk|uwiey(p@ zu>j#n4C|Mhtd=0G?Qn5OGh{{^MWR)V*geNY8d)py)@5a85G&_&OSCx4ASW8g&AEXa zC}^ET`eORgG*$$Q1L=9_8MCUO4Mr^1IA{^nsB$>#Bi(vN$l8+p(U^0dvN_{Cu-UUm zQyJc!8>RWp;C3*2dGp49QVW`CRR@no(t+D|@nl138lu@%c1VCy3|v4VoKZ4AwnnjF z__8f$usTzF)TQ$sQ^|#(M}-#0^3Ag%A0%5vA=KK$37I`RY({kF-z$(P50pf3_20YTr%G@w+bxE_V+Tt^YHgrlu$#wjp7igF!=o8e2rqCs|>XM9+M7~TqI&fcx z=pcX6_MQQ{TIR6a0*~xdgFvs<2!yaA1F*4IZgI!)xnzJCwsG&EElg_IpFbrT}nr)UQy}GiK;( zDlG$cksync34R3J^FqJ=={_y9x_pcd%$B*u&vr7^ItxqWFIAkJgaAQiA)pioK1JQ| zYB_6IUKc$UM*~f9{Xzw*tY$pUglV*?BDQuhsca*Fx!sm`9y`V&?lVTH%%1eJ74#D_ z7W+@8@7LAu{aq)sPys{MM~;`k>T%-wPA)E2QH7(Z4XEUrQ5YstG`Uf@w{n_Oc!wem z7=8z;k$N{T74B*zVyJI~4d60M09FYG`33;Wxh=^Ixhs69U_SG_deO~_OUO1s9K-8p z5{HmcXAaKqHrQ@(t?d@;63;Pnj2Kk<;Hx=kr>*Ko`F*l){%GVDj5nkohSU)B&5Vrc zo0u%|b%|VITSB)BXTRPQC=Bv=qplloSI#iKV#~z#t#q*jcS`3s&w-z^m--CYDI7n2 z%{LHFZ*(1u4DvhES|Dc*n%JL8%8?h7boNf|qxl8D)np@5t~VORwQn)TuSI07b-T=_ zo8qh+0yf|-6=x;Ra$w&WeVZhUO%3v6Ni*}i&sby3s_(?l5Er{K9%0_dE<`7^>8mLr zZ|~l#Bi@5}8{iZ$(d9)!`}@2~#sA~?uH|EbrJQcTw|ssG)MSJJIF96-_gf&* zy~I&$m6e0nnLz^M2;G|IeUk?s+afSZ){10*P~9W%RtYeSg{Nv5FG<2QaWpj?d`;}<4( z>V1i|wNTpH`jJtvTD0C3CTws410U9HS_%Ti2HaB~%^h6{+$@5`K9}T=eQL;dMZ?=Y zX^z?B3ZU_!E^OW%Z*-+t&B-(kLmDwikb9+F9bj;NFq-XHRB=+L)Rew{w|7p~7ph{#fRT}}K zWA)F7;kJBCk^aFILnkV^EMs=B~#qh*RG2&@F|x2$?7QTX_T6qL?i$c6J*-cNQC~E6dro zR)CGIoz;~V?=>;(NF4dihkz~Koqu}VNPE9^R{L@e6WkL{fK84H?C*uvKkO(!H-&y( zq|@B~juu*x#J_i3gBrS0*5U*%NDg+Ur9euL*5QaF^?-pxxieMM6k_xAP;S}sfKmIa zj(T6o{4RfARHz25YWzv=QaJ4P!O$LHE(L~6fB89$`6+olZR!#%y?_v+Cf+g)5#!ZM zkabT-y%v|ihYuV}Y%-B%pxL264?K%CXlbd_s<GY5BG*`kYQjao$QHiC_qPk5uE~AO+F=eOtTWJ1vm*cU(D5kvs3kity z$IYG{$L<8|&I>|WwpCWo5K3!On`)9PIx(uWAq>bSQTvSW`NqgprBIuV^V>C~?+d(w$ZXb39Vs`R=BX;4HISfN^qW!{4 z^amy@Nqw6oqqobiNlxzxU*z2>2Q;9$Cr{K;*&l!;Y??vi^)G|tefJG9utf|~4xh=r3UjmRlADyLC*i`r+m;$7?7*bL!oR4=yU<8<-3XVA z%sAb`xe&4RV(2vj+1*ktLs<&m~mGJ@RuJ)1c zLxZyjg~*PfOeAm8R>7e&#FXBsfU_?azU=uxBm=E6z7FSr7J>{XY z1qUT>dh`X(zHRML_H-7He^P_?148AkDqrb>;~1M-k+xHVy>;D7p!z=XBgxMGQX2{* z-xMCOwS33&K^~3%#k`eIjKWvNe1f3y#}U4;J+#-{;=Xne^6+eH@eGJK#i|`~dgV5S zdn%`RHBsC!=9Q=&=wNbV#pDv6rgl?k1wM03*mN`dQBT4K%uRoyoH{e=ZL5E*`~X|T zbKG9aWI}7NGTQtjc3BYDTY3LbkgBNSHG$5xVx8gc@dEuJqT~QPBD=Scf53#kZzZ6W zM^$vkvMx+-0$6R^{{hZ2qLju~e85Em>1nDcRN3-Mm7x;87W#@RSIW9G>TT6Q{4e~b z8DN%n83FvXWdpr|I_8TaMv~MCqq0TA{AXYO-(~l=ug42gpMUvOjG_pWSEdDJ2Bxqz z!em;9=7y3HW*XUtK+M^)fycd8A6Q@B<4biGAR)r%gQf>lWI%WmMbij;un)qhk$bff zQxb{&L;`-1uvaCE7Fm*83^0;!QA5-zeSvKY}WjbwE68)jqnOmj^CTBHaD zvK6}Mc$a39b~Y(AoS|$%ePoHgMjIIux?;*;=Y|3zyfo)^fM=1GBbn7NCuKSxp1J|z zC>n4!X_w*R8es1ofcPrD>%e=E*@^)7gc?+JC@mJAYsXP;10~gZv0!Egi~){3mjVzs z^PrgddFewu>Ax_G&tj-!L=TuRl0FAh#X0gtQE#~}(dSyPO=@7yd zNC6l_?zs_u5&x8O zQ|_JvKf!WHf43F0R%NQwGQi-Dy7~PGZ@KRKMp?kxlaLAV=X{UkKgaTu2!qzPi8aJ z-;n$}unR?%uzCkMHwb56T%IUV)h>qS(XiuRLh3fdlr!Cri|{fZf0x9GVYUOlsKgxLA7vHrkpQddcSsg4JfibzpB zwR!vYiL)7%u8JG7^x@^px(t-c_Xt|9Dm)C@_zGeW_3nMLZBA*9*!fLTV$Uf1a0rDt zJI@Z6pdB9J(a|&T_&AocM2WLNB;fpLnlOFtC9yE6cb39?*1@wy8UgruTtX?@=<6YW zF%82|(F7ANWQ`#HPyPqG6~ggFlhJW#R>%p@fzrpL^K)Kbwj(@#7s97r`)iJ{&-ToR z$7(mQI@~;lwY+8dSKP~0G|#sjL2lS0LQP3Oe=>#NZ|JKKYd6s6qwe#_6Xz_^L4PJ5TM_|#&~zy= zabr|kkr3Osj;bPz`B0s;c&kzzQ2C8|tC9tz;es~zr{hom8bT?t$c|t;M0t2F{xI;G z`0`ADc_nJSdT`#PYCWu4R0Rmbk#PARx(NBfdU>8wxzE(`jA}atMEsaG6zy8^^nCu| z9_tLj90r-&Xc~+p%1vyt>=q_hQsDYB&-hPj(-OGxFpesWm;A(Lh>UWy4SH9&+mB(A z2jkTQ2C&o(Q4wC_>|c()M8_kF?qKhNB+PW6__;U+?ZUoDp2GNr<|*j(CC*#v0{L2E zgVBw6|3c(~V4N*WgJsO(I3o>8)EO5;p7Xg8yU&%rZ3QSRB6Ig6MK7Wn5r+xo2V}fM z0QpfDB9^xJEi}W*Fv6>=p4%@eP`K5k%kCE0YF2Eu5L!DM1ZY7wh`kghC^NwxrL}90dRXjQx=H>8 zOWP@<+C!tcw8EL8aCt9{|4aT+x|70i6m*LP*lhp;kGr5f#OwRy`(60LK@rd=to5yk^%N z6MTSk)7)#!cGDV@pbQ>$N8i2rAD$f{8T{QM+|gaj^sBt%24UJGF4ufrG1_Ag$Rn?c zzICg9`ICT>9N_2vqvVG#_lf9IEd%G5gJ_!j)1X#d^KUJBkE9?|K03AEe zo>5Rql|WuUU=LhLRkd&0rH4#!!>sMg@4Wr=z2|}dpOa`4c;_DqN{3Pj`AgSnc;h%# z{ny1lK%7?@rwZO(ZACq#8mL)|vy8tO0d1^4l;^e?hU+zuH%-8Y^5YqM9}sRzr-XC0 zPzY1l($LC-yyy*1@eoEANoTLQAZ2lVto2r7$|?;PPQX`}rbxPDH-a$8ez@J#v0R5n z7P*qT3aHj02*cK)WzZmoXkw?e3XNu&DkElGZ0Nk~wBti%yLh+l2DYx&U1lD_NW_Yt zGN>yOF?u%ksMW?^+~2&p@NoPzk`T)8qifG_owD>@iwI3@u^Y;Mqaa!2DGUKi{?U3d z|Efe=CBc!_ZDoa~LzZr}%;J|I$dntN24m4|1(#&Tw0R}lP`a`?uT;>szf^0mDJx3u z6IJvpeOpS$OV!Xw21p>Xu~MZ(Nas5Iim-#QSLIYSNhYgx1V!AR>b zf5b7O`ITTvW5z%X8|7>&BeEs8~J1i47l;`7Y#MUMReQ4z!IL1rh8UauKNPG?7rV_;#Y zG*6Vrt^SsTMOpV7mkui}l_S8UNOBcYi+DzcMF>YKrs3*(q5fwVCr;_zO?gpGx*@%O zl`KOwYMSUs4e&}eM#FhB3(RIDJ9ZRn6NN{2Nf+ z2jcz%-u6IPq{n7N3wLH{9c+}4G(NyZa`UmDr5c-SPgj0Sy$VN#Vxxr;kF>-P;5k!w zuAdrP(H+v{Dybn78xM6^*Ym@UGxx?L)m}WY#R>6M2zXnPL_M9#h($ECz^+(4HmKN7 zA>E;`AEqouHJd7pegrq4zkk>kHh`TEb`^(_ea;v{?MW3Sr^FXegkqAQPM-h^)$#Jn z?bKbnXR@k~%*?q`TPL=sD8C+n^I#08(}d$H(@Y;3*{~nv4RLZLw`v=1M0-%j>CtT( zTp#U03GAv{RFAtj4vln4#E4eLOvt zs;=`m&{S@AJbcl1q^39VOtmN^Zm(*x(`(SUgF(=6#&^7oA8T_ojX>V5sJx@*cV|29 z)6_%P6}e}`58Sd;LY2cWv~w}fer&_c1&mlY0`YNNk9q=TRg@Khc5E$N`aYng=!afD z@ewAv^jl$`U5;q4OxFM4ab%X_Jv>V!98w$8ZN*`D-)0S7Y^6xW$pQ%g3_lEmW9Ef^ zGmFsQw`E!ATjDvy@%mdcqrD-uiKB}!)ZRwpZRmyu+x|RUXS+oQ*_jIZKAD~U=3B|t zz>9QQr91qJihg9j9rWHww{v@+SYBzCfc0kI=4Gr{ZLcC~mft^EkJ`CMl?8fZ z3G4ix71=2dQ`5QuTOYA0(}f`@`@U<#K?1TI(XO9c*()q!Hf}JUCaUmg#y?ffT9w1g zc)e=JcF-9J`hK{0##K#A>m^@ZFx!$g09WSBdc8O^IdP&JE@O{i0&G!Ztvt{L4q%x& zGE2s!RVi6ZN9)E*(c33HuMf7#X2*VPVThdmrVz-Fyqxcs&aI4DvP#bfW={h$9>K0HsBTUf z2&!G;( z^oOVIYJv~OM=-i`6=r4Z1*hC8Fcf3rI9?;a_rL*nr@zxwKNlxf(-#Kgn@C~4?BdKk zYvL?QcQeDwwR5_S(`sn&{PL6FYxwb-qSh_rUUo{Yi-GZz5rZotG4R<+!PfsGg`MVtomw z5kzOZJrh(#rMR_87KeP0Q=#^5~r_?y1*kN?3Fq% zvnzHw$r!w|Soxz8Nbx2d&{!#w$^Hua%fx!xUbc2SI-<{h>e2I;$rJL)4)hnT5cx^* zIq#+{3;Leun3Xo=C(XVjt_z)F#PIoAw%SqJ=~DMQeB zNWQ={d|1qtlDS3xFik}#j*8%DG0<^6fW~|NGL#P_weHnJ(cYEdJtI9#1-Pa8M}(r{ zwnPJB_qB?IqZw5h!hRwW2WIEb?&F<52Ruxpr77O2K>=t*3&Z@=5(c^Uy&JSph}{Q^ z0Tl|}gt=&vK;Rb9Tx{{jUvhtmF>;~k$8T7kp;EV`C!~FKW|r$n^d6=thh`)^uYgBd zydgnY9&mm$?B@pKK+_QreOm?wnl5l}-wA$RZCZukfC$slxbqv9uKq0o^QeSID96{Rm^084kZ)*`P zk))V~+<4-_7d6<~)PL%!+%JP`Dn23vUpH47h~xnA=B_a}rLy|7U-f0W+fH`{wnyh2 zD$JYdXuygeP5&OAqpl2)BZ|X){~G;E|7{liYf%AZFmXXyA@32qLA)tuuQz`n^iH1Y z=)pAzxK$jw0Xq?7`M`=kN2WeQFhz)p;QhjbKg#SB zP~_Vqo0SGbc5Q;v4Q7vm6_#iT+p9B>%{s`8H}r|hAL5I8Q|ceJAL*eruzD8~_m>fg26HvLpik&#{3Zd#|1C_>l&-RW2nBBzSO zQ3%G{nI*T}jBjr%3fjG*&G#ruH^ioDM>0 zb0vSM8ML?tPU*y%aoCq;V%x%~!W*HaebuDn9qeT*vk0%X>fq-4zrrQf{Uq5zI1rEy zjQ@V|Cp~$AoBu=VgnVl@Yiro>ZF{uB=5)~i1rZzmDTIzLBy`8Too!#Z4nE$Z{~uB( z_=o=gKuhVpy&`}-c&f%**M&(|;2iy+nZy2Su}GOAH_GT9z`!ogwn$+Bi&1ZhtPF zVS&LO5#Bq}cew$kvE7*t8W^{{7&7WaF{upy0mj*K&xbnXvSP9V$6m6cesHGC!&Us36ld9f*Pn8gbJb3`PPT|ZG zri2?uIu09i>6Y-0-8sREOU?WaGke0+rHPb^sp;*E{Z5P7kFJ@RiLZTO`cN2mRR#Nz zxjJ##Nk+Uy-2N-8K_@576L(kJ>$UhP+)|w!SQHkkz+e62*hpzyfmY4eQLZtZUhEdG zIZluDOoPDlt5#iw+2epC3vEATfok^?SDT`TzBwtgKjY z>ZImbO)i~T=IYAfw$3j2mF1Cj*_yqK(qw(U^r-!gcUKvWQrDG@E{lEyWDWOPtA9v{ z5($&mxw{nZWo_Ov??S#Bo1;+YwVfx%M23|o$24Hdf^&4hQeV=Cffa5MMYOu2NZLSC zQ4UxWvn+8%YVGDg(Y*1iHbUyT^=gP*COcE~QkU|&6_3h z-GOS6-@o9+Vd(D7x#NYt{Bvx2`P&ZuCx#^l0bR89Hr6Vm<||c3Waq(KO0eZ zH(|B;X}{FaZ8_4yyWLdK!G_q9AYZcoOY}Jlf3R;%oR5dwR(rk7NqyF%{r>F4s^>li z`R~-fh>YIAC1?%!O?mxLx!dq*=%IRCj;vXX628aZ;+^M0CDFUY0Rc<1P5e(OVX8n- z*1UOrX{J}b2N)6m5&_xw^WSN=Lp$I$T>f8K6|J_bj%ZsIYKNs1$TFt!RuCWF48;98`7D(XPVnk+~~i=U$} zR#;!ZRo4eVqlDxjDeE^3+8)bzG_o~VRwdxqvD^HNh#@o>1My$0*Y_`wfQ$y}az|Uz zM47oEaYNTH?J^w9EVNnvfmmbV+GHDe)Kf;$^@6?9DrSHnk@*{PuJ>ra|9KO!qQ-Fp zNNcZB4ZdAI>jEh@3Mt(E1Fy!^gH-Zx6&lr8%=duIgI^~gC{Q;4yoe;#F7B`w9daIe z{(I;y)=)anc;C;)#P`8H6~iAG_q-4rPJb(6rn4pjclGi6$_L79sFAj#CTv;t@94S6 zz`Id7?k!#3JItckcwOf?sj=Xr6oKvAyt1=jiWN@XBFoW6dw_+c9O9x2i4or?*~8f& zm<>yzc6Aw_E-gsGAa`6`cjK~k^TJt(^`E1^_h)5(8)1kzAsBxjd4+!hJ&&T!qklDN z`?j#za=(^wRCvEI75uE^K#IBe5!5g2XW}|lUqAmdmIQb7xJtP}G9^(=!V`ZS_7#RZ zjXq#Cekw>fE*YS-?Qea|7~H?)bbLK;G&(~%!B@H`o#LYAuu6;-c~jFfjY7GKZ|9~{ zE!`!d@@rhY_@5fDbuQ8gRI~R_vs4%fR5$?yot4hDPJ28k_Wzmc^0yzwMr#*(OXq@g zRUgQmJA?E>3GO=5N8iWIfBP{&QM%!Oa*iwTlbd0Fbm*QCX>oRb*2XfG-=Bz1Qz0$v zn#X!2C!LqE601LEMq;X7`P*5nurdKZAmmsI-zZ|rTH;AFxNDyZ_#hN2m4W(|YB64E z470#yh$;8QzsdA;6vbNvc95HLvZvyT4{C>F(fwy&izvNDuvfO1Z;`Ss#4a_c6pm*{0t|_i9z{@84^lffQa5zG4<{(+p5-S z^>lG-^GJR#V>;5f3~y%n=`U_jBp~WgB0cp;Lx5VZYPYCH&(evw#}AYRlGJ>vcoeVr z3%#-QUBgeH!GB>XLw;rT&oMI9ynP;leDwh4O2uM!oIWo&Qxk{^9#nX&^3GJ z(U~5{S9aw@yHH^yuQGso=~*JOC9Zdi6(TFP+IddkfK5Eu9q;+F9?PPNAe-O;;P_Aa zPJ{Dqa1gQb%dZ|0I{#B0(z|r(qq!A4CxlW92-LwXFjYfOzAT1DDK`9rm4AB~l&oVv zi6_{)M9L1%JP}i52y@`!T9RB~!CRel53wl?amNHqcuElq%hn)|#BPvW5_m51RVb|? zXQ&B*eAD}}QamG>o{?i~usG5X6IDa3+Xkb8w%7;C8|Cln70biA+ZH}fxkH^Wei$vZPnuqIT!Mmy26;mLfU z3Bbv4M^vvMlz-I+46=g>0^wWkmA!hlYj*I!%it^x9Kx(d{L|+L{rW?Y#hLHWJfd5X z>B=Swk8=;mRtIz}Hr3NE_garb5W*!7fnNM{+m2_>!cHZZlNEeof~7M#FBEQ+f&gJ3 z^zv*t?XV)jQi%0-Ra|ISiW-fx)DsK-> zI}Fv%uee$#-1PKJwr=lU89eh=M{>Nk7IlJ)U33U)lLW+OOU%A|9-Lf;`@c*+vX{W2 z{{?0QoP!#?8=5%yL=fP%iF+?n$0#iHz`P;1{Ra6iwr=V7v^8;NoLJ5)QxIyIx>ur?lMwV=mBo0BA?28kMow8SX=Ax5L%S~x4+EQi#Ig`(ht%)D(F#Pa!)SiHy&PvUp32=VtAsR|6|NZR@jkad zX^aEgojf9(-)rNOZ=NVA&a;6Cljkb=H-bY9m^_I)`pBHB16QW)sU27zF13ypefeATJc1Wzy39GrKF{UntHsIU59AdXp?j{eh2R)IbU&omd zk6(qzvE@hve1yM6dgkbz>5HDR&MD~yi$yymQ}?b;RfL$N-#l7(u?T^Wlu+Q;fo|jd zBe^jzGMHY(2=5l?bEIh+zgE$1TEQ&!p3fH;AW`P?W5Hkj3eJnT>dqg! zf~}A*SZU5HHDCbdywQ^l_PqssHRlrySYN=`hAv2sVrtcF!`kyEu%XeeRUTJU7vB%h zY0*)N$mLo6d=tJfe}IPIeiH~>AKwCpkn&WEfYgl?3anq5#-F$6$v-(G_j0*S9mdsn zg@ek_ut4(?+JP_9-n`YqoD(gAz+Ttm1#t za96D}oQR(o=e8wwes19_(p4g(A1vSGwPAp~Hh3hh!fc>u{1E^+^}AzwilFVf6^vbL zc&NnRs`u)N-P|Cu4()yTiuE{j_V&=K?iP!IUBf~ei2}~_KBvUAlXa;R#Wl`gOBtJ$Y5(L))@`riLB)v*r>9*8VfmQt<72?+fdwP{BA@?_qo>mN7yzICUCaeG(+>Rb~8wg~6U(P)NlDLuhQgjbC}=)HuZgC}0Z-qLX4lJ7^)8~!!*qP0=~`Y_(A z{@15*ZevZSI^s|OnpCeCwLXf#tgbq8y~R*GB5anmZ;_N!+-3>!wu@NBFCNJ$#y?{? zMI!?s*=_xA;V&aX)ROxzVW8*de+&P#2zucA|8mksdgCXBsZ*TM=%{L1Tk5LB_*^@&S?O=ot{h)1xRVSn27&Tk8>rF|6ruzYb;Nq) z;qvlmrP^SL$mhe4Ai)xpl6Wx&y;z8o!7-+6$qj;ZLXvfR71I@w(R|6lyuP6v-lP&r z@KK-TEmGQfMmk1c0^fd7!^si}T%b5a2%>T-Drh|^Cf z$}qxIv@zxbmJ#qjK6Q_aGDe{ciVT20V1lW52Xs!}x(4_j)sUXYdm4 zwYC9FOa;X*c*LxL;xE5ov?|?^7gWXyALy_D2GvDo-8%0-Y%9TkkO_Tcr2qIUg3(OC z%3wt?hyn*+e^z%(~2#!2dvMFa$mzgwk1I1X;naFMjXSbnmZ!zd%7u)=cgi z*0&@Scrl&BDfU(9Pks8#;!~v~r7~DN{G6WE&_;7i{{a*?oiCao(l%2ruxX0fAt69e2vLgL%Mf_)!*(Tz zNKW>sW@YB2vBfP>C&L|-pq)Uq^PsG_THu;8iEcqafO?0k$IQp1KyWyOoTxwmKvlc^ zO9$%Tt8;%qQxwy5;CsJ)V}a7I6}SvQ%0_H53Kcqx=m83fIzpLSGgfVe^SPdc*xPdciI5dg}#{Etv$e<)gGD=qm0v=!aN@*?$s zLhzD%4w{vf-g6FHQjG9XyC+4=bewb?Mz%!u8%oP{G9{UJFTLTcCi3R(=Nm&t&Sl(? zr>pj?=ECdDVa}-g%`LF^1EY@>7d}%VhYpKFSDPH)D(zB+gPe1m7E}W>TiW=8L0&(D&YG=0<&7G4Bu{;-#Ud;-1%Ta9V}U6fyK1YX z`Rq|i-X(loPZ)M$H%m@j7bGx>uj~y=0)!t#dc|c}+hT%~Sq>fefez0Ul|jOJHta~u zx7*mV6~Jpt(FkY(pQN91>aFk7VS%Sa^oLaq$*)W?fy`xuFJgH<2s=!Rz}_(qdmdF~ zlr2f=)q_vpi8X;Jq>5^$GweJ{iS`Khw2f)fsvKpgh;U~13a+9 zfaw}UuGiBy;q10pI^Avb#X3D=k_r(T{N;-xA)OM}2Py5L##<96NU*Sr7GQqhfrPej z?;B$Bt_sTxuSAPXfTSC{zr?@$$0iHxC@z*5F52j*PG87hh`0w3At8jPf*rjNE~_Gj z2)fjeUFJ(#l9uWuw&5#@13|AQ1;pdA?EL4YKq0JDR5T8I?aWGxI=J9}vdyH;gQ@iE z>+UnC2iwT0f80-VuE^bY!N@(}9?bOXyy%rTqSNDN4rO4Zt#(kZwcGgTp&3((F+nsd ze~B)%K6oP4WX_w1>|QImC;9q zy}4p+s%^Too2(gE>yo%+yY#F{)phtmNqsJPVQQ0lGR|H9q>aA&AtU4M+EZ%`xvQLb zbigBOc`dL}&j3er?EOI`!W)N#>+uwp_!h^5FspaEylq!e(FPY-6T3~WeNmZ<$?Y6y z-!bM1kD7ZF8xl+Pi6fiv1?)q%`aNxn#pK%)ct||L&Xnf8Gu&3g;Of{B8Pt=u`e+Mn zA(DmU#3cF#Nr7W;X0V4ksFHMcNDAf4G&D8VjLeZ^|5-f$>_|71>P3xuu)?4NJed*w z6GR_RB5HQLzT(h+`Y?-3esxeue{-Q%b+!&o>IJ!#=}#_&q+hwJga>fkt(*(WdoN5vSta z#$mMN6}YzYRpaBZ)j)EL91-oL1(|d(>%UclsTUOyXyWM&(hNqLwqtn`!E>HJM{ zh>M~xa1@*U^cwx-k5QjePr5=B6u*jpJ)C0{C?f7Yga+I^4$TleyX$x&jm9z@c!?cC z<2kY7)p^+W{AXd@l1C09_yB*TG|yzb96BYk z8Wpj81vB>zcR+qM4m~A44w1n7$fxB$-?MV}S?Fh}c_|2FXg`cZ?750i;Cdl-_nGK# zta)h)6!*AsQ-z8caSh)%5JY>_yCeJs~FpAzdY8 zF@SU_hN#~ip5I;UACFzx1v0yf{j97l&)e-=`d#1Kp6A(Kj&HC!%vK!wEdK3HFJ?|6 za;WwUczZ+&<$g!Td^48@lJtfW@doXL#jY6)dK_RDCQAZ}l&OdD+?Yl5-bqpsHZR^( zF{u_cR(x>u(c4i5f(^8!h6CV0#ZxRFhLlunWiGDLO6yoRb(wV<(P^8=fOU7Hp{AHE z;Yg%kg@6&tL3Z*IrbkDeQ$%rbalVP39D@LVrC2xSavnTp%PorXPf1DVzHyqjDsDnS zL=mv0a2s60bHKGQM)ue>npH0SCp;XtZFUzm?R-x7D*(PxMmuJ4J*K2eY&ebe0yQHe zVG&*qe{pot{PM^xQv`H_rn2FcYOrEN+I#uX^1`Id%J$;Hi2cNCU!0Hlc0TjxLzkss zHxmC;hQBu5U4J0XflWM;{uH`_47Sg)QyZ{8D&T0;bdc3{^^<=q7P?C_2E-}PQn>*= z2T5q^J|Q_2+x%Qt`i3m6=6V$)BxIx{2KAFkMb#q`iMCD|L>+}_dYVA$wBr1Zr}YOF z^MMGO@PHGGh>g|^yF`PvvtDwN@kxt?ClLcG<+murHMz1Asj!$l=b)4{d}SqOJ}>Y< zSeAyP@ZEcpx`ayIdp>{--UVLYC_cZZURh_!4u2(*#x@Tk(QJa}4BqqZ$6%LhF-HB~ zAcc?$I6KP}IxANcAteEBX$Ys?T=JB|Fnd3*UAO0mYAXCgWf~?7Z_G7G5`H4;S^QKK zG*2l75vI@DHQC*es>6&|r^#RHKRQ5rwv_l4`!(!I3%)Z$P1fnZ8N@27zyg}54ElO%SjQ_4uujX)4ta@Gz2)_>4b~vX|rhRIH-eqdD zL)xaEpW3K|a>daQRRR*_$W>rWOsW-IE4VQl3L$3}=-PFU)s@XG&9+DFivH-;2&w~$ES_nJZJH!?1mO!CnP)Jb{mW9=f`bDpo^PI6i4|YurK)Q1 z^Ys1oHRdr!$X4RuyR%kgp!a*Lz*_AAoJ$EVAdsNCoPA^VZE1pGO@D3UStACE+%vs6 z$io@E>DmB|3VV~GbOt2oc+K;t zdn3gaFvYz;vRN-+2+Qk{8|O}e86nVck)fZn3sg$j#dLVham{yGkc$I#!HF7mRS%f* z!+NdzG49K(qaO^SBlp@K@D?|^rAq;8{*@kRc4sYSNQmoy7@_RS_ksWl2T_38h2A)# ziU2WXWD03(NqS&Mu*?0-iK8X_Z3w`}c7MPv0qZ7iM|L3xdTnR{y!7{#82$}uJCiGT zqa=8<9L05hu6 z1N+2n7OzT{NEf?gS@eq7@buCDFe9mAxY%THo^b@BHckKK>jg6{@)>n z43cPs%$Qi0iwyZ+{C491>FRu5+6baJ{&XXXC@Sp+b!QE|{7_d?lm5K=B z)myKEcxjFm74+drF|JCYcxdY%ASig#YoRBRUV7An7f-%rqj%PHECbxh#5476cEq@NQL?dI6gUqvS@w zq!WmD(aR0{NxItAZCKDCVw=Zu{9WGDu^i?2g zLerPiOU*HSaXg^3CdOX^F6c9MiHINP339N%)a96`^Z-c#&EogcxMSYo0Cb4{-}q1( zRrJine`P|6WRkm8u4Ja1QRYq$AR>b7tugd#EsT-VmXN-t!TYjZy}i!uKi6$u>EJ?w zvdHZg+hp+5ree?>fdJAX)5#Wtm#2M-{~2jfX2{G`)?D6UD1MevdeeU;;HCi}AtJr( SGW6ptSs!X7{rG*o_g?|vpSEZK diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22ce5cf..b82aa23a4f0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 4fa773ab258436276624b819744068da626e97d1 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Mon, 25 Mar 2024 08:08:28 +0300 Subject: [PATCH 437/595] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ build.gradle.kts | 6 +++--- .../bsl/languageserver/context/DocumentContext.java | 6 +----- .../diagnostics/ForbiddenMetadataNameDiagnostic.java | 5 +++-- .../diagnostics/ForbiddenMetadataNameDiagnosticTest.java | 4 ++-- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 317b6dd3d8d..195133a8fd0 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,5 @@ public/ bsl-language-server/ bsl-language-server_*.zip /.idea/misc.xml +*.log +*.hprof diff --git a/build.gradle.kts b/build.gradle.kts index fde73c3fe87..6a1085724ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -81,10 +81,10 @@ dependencies { exclude("org.abego.treelayout", "org.abego.treelayout.core") exclude("org.antlr", "antlr-runtime") } - api("com.github.1c-syntax", "utils", "0.5.2") - api("io.github.1c-syntax", "mdclasses", "0.13.0-rc.1") + api("io.github.1c-syntax", "utils", "0.6.0") + api("io.github.1c-syntax", "mdclasses", "0.13.0-rc.2") api("io.github.1c-syntax", "bsl-common-library", "0.5.1") - api("io.github.1c-syntax", "supportconf", "0.13.1") + api("io.github.1c-syntax", "supportconf", "0.14.0") api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") // JLanguageTool diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index 7efe088443b..ab853043114 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -34,7 +34,6 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.mdo.MD; -import com.github._1c_syntax.bsl.mdo.Module; import com.github._1c_syntax.bsl.mdo.support.ScriptVariant; import com.github._1c_syntax.bsl.parser.BSLLexer; import com.github._1c_syntax.bsl.parser.BSLParser; @@ -366,10 +365,7 @@ private SymbolTree computeSymbolTree() { private ModuleType computeModuleType() { - return context.getConfiguration() - .getModuleByUri(uri) - .map(Module::getModuleType) - .orElse(ModuleType.UNKNOWN); + return context.getConfiguration().getModuleTypeByURI(uri); } private ComplexityData computeCognitiveComplexity() { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index a2584b18eb2..af3a78aa126 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -28,6 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.mdo.AttributeOwner; import com.github._1c_syntax.bsl.mdo.ChildrenOwner; import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.types.MdoReference; @@ -136,8 +137,8 @@ protected void checkMetadata(MD mdo) { checkName(mdo.getName(), mdo.getMdoReference()); // проверка имен реквизитов и табличных частей - if (mdo instanceof ChildrenOwner childrenOwner) { - childrenOwner.getMDOPlainChildren() + if (mdo instanceof AttributeOwner childrenOwner) { + childrenOwner.getPlainStorageFields() .forEach(child -> checkName(child.getName(), child.getMdoReference())); } } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java index 7d5b049bcb6..1d21cb0ab0a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java @@ -62,7 +62,7 @@ void testCatalog() { when(spyCatalog.getName()).thenReturn("Справочник"); List children = new ArrayList<>(); - spyCatalog.getMDOPlainChildren() + spyCatalog.getPlainStorageFields() .forEach(mdo -> { var spyMDO = spy(mdo); when(spyMDO.getName()).thenReturn("РегистрСведений"); @@ -74,7 +74,7 @@ void testCatalog() { children.add(spyMDO); }); - when(spyCatalog.getMDOPlainChildren()).thenReturn(children); + when(spyCatalog.getPlainStorageFields()).thenReturn(children); when(documentContext.getMdObject()).thenReturn(Optional.of(spyCatalog)); List diagnostics = diagnosticInstance.getDiagnostics(documentContext); From def91245740ce982cd503df039aee3f2505a71b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 09:50:57 +0000 Subject: [PATCH 438/595] build(deps): bump JetBrains/qodana-action from 2023.3.1 to 2023.3.2 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.3.1 to 2023.3.2. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.3.1...v2023.3.2) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 908ce314015..65be1ebb7b7 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.3.1 + uses: JetBrains/qodana-action@v2023.3.2 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 09155861cadbc7a6051d01a4b82e2119d584feb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:22:17 +0000 Subject: [PATCH 439/595] build(deps): bump org.sonarqube from 4.4.1.3373 to 5.0.0.4638 Bumps org.sonarqube from 4.4.1.3373 to 5.0.0.4638. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b0f9a79ceb7..916829819d2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "4.4.1.3373" + id("org.sonarqube") version "5.0.0.4638" id("io.freefair.lombok") version "8.6" id("io.freefair.javadoc-links") version "8.6" id("io.freefair.javadoc-utf-8") version "8.6" From cfd4029941cc62aa40a238adc7f11b65f7249083 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 09:59:14 +0000 Subject: [PATCH 440/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.3 to 4.8.4. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.3...4.8.4) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 916829819d2..60692a2ed4a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -131,7 +131,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.3") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.4") // TEST From 945a94a3aa252b0308eee3c6f3cc4090a1db67e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 09:01:38 +0000 Subject: [PATCH 441/595] build(deps): bump peaceiris/actions-gh-pages from 3.9.3 to 4.0.0 Bumps [peaceiris/actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) from 3.9.3 to 4.0.0. - [Release notes](https://github.com/peaceiris/actions-gh-pages/releases) - [Changelog](https://github.com/peaceiris/actions-gh-pages/blob/main/CHANGELOG.md) - [Commits](https://github.com/peaceiris/actions-gh-pages/compare/v3.9.3...v4.0.0) --- updated-dependencies: - dependency-name: peaceiris/actions-gh-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/gh-pages.yml | 2 +- .github/workflows/qodana.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 5b54b62e4cc..e37def7222c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -146,7 +146,7 @@ jobs: cp -R temp/site/. public/dev/en - name: Deploy - uses: peaceiris/actions-gh-pages@v3.9.3 + uses: peaceiris/actions-gh-pages@v4.0.0 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_branch: gh-pages diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 65be1ebb7b7..31735366a54 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -30,7 +30,7 @@ jobs: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json - name: Deploy to GitHub Pages if: github.event_name == 'push' - uses: peaceiris/actions-gh-pages@v3.9.3 + uses: peaceiris/actions-gh-pages@v4.0.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ${{ runner.temp }}/qodana/results/report From 55e9e0cf6e4376663c6d712bf22a5b8d03968e98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 09:06:42 +0000 Subject: [PATCH 442/595] build(deps): bump io.sentry:sentry-bom from 7.6.0 to 7.8.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.6.0 to 7.8.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.6.0...7.8.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 916829819d2..f0128246eda 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.6.0") + mavenBom("io.sentry:sentry-bom:7.8.0") } } From a1604ebe845a85b19e7144acc3ccd5b9c775f2b8 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 24 Apr 2024 17:59:38 +0200 Subject: [PATCH 443/595] license update --- .../languageserver/diagnostics/DisableSafeModeDiagnostic.java | 2 +- .../diagnostics/DisableSafeModeDiagnosticTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java index 7e2f529aee2..fb77b6ee573 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java index f54eb5579aa..0c634a49810 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From b14278436ba97ad4c833501823527bfec081d0e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:11:08 +0000 Subject: [PATCH 444/595] build(deps): bump JetBrains/qodana-action from 2023.3.2 to 2024.1.2 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2023.3.2 to 2024.1.2. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2023.3.2...v2024.1.2) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 31735366a54..f0cb7a3b4a5 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2023.3.2 + uses: JetBrains/qodana-action@v2024.1.2 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From d8b6c852c2cfac97b47371304e54071c34e248e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 09:57:04 +0000 Subject: [PATCH 445/595] build(deps): bump com.gorylenko.gradle-git-properties Bumps com.gorylenko.gradle-git-properties from 2.4.1 to 2.4.2. --- updated-dependencies: - dependency-name: com.gorylenko.gradle-git-properties dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7c551d0c1da..e1d0d95cf7c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { id("io.spring.dependency-management") version "1.1.4" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "3.0.0" - id("com.gorylenko.gradle-git-properties") version "2.4.1" + id("com.gorylenko.gradle-git-properties") version "2.4.2" id("io.codearte.nexus-staging") version "0.30.0" id("me.champeau.jmh") version "0.7.2" } From f8bc51cf53f3d28189bdcd60fd61a7da85506c6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 09:51:33 +0000 Subject: [PATCH 446/595] build(deps): bump JetBrains/qodana-action from 2024.1.2 to 2024.1.3 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.2 to 2024.1.3. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.2...v2024.1.3) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index f0cb7a3b4a5..3f36d6e346e 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.2 + uses: JetBrains/qodana-action@v2024.1.3 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 68e87770f9153db29e929dacef2b2d5d9fb092d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=AD=D0=B4=D1=83?= =?UTF-8?q?=D0=B0=D1=80=D0=B4?= Date: Fri, 3 May 2024 20:23:44 +0300 Subject: [PATCH 447/595] =?UTF-8?q?=D0=9D=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=B2=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B5=20"=D0=94=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=B3=D0=BE"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Как описание переменной бралось описание ближайшей переменной описанной в блоке Перем. Изменил поведение, как описание берется "висящий" комментарий в строке с первой строкой описания цикла --- .../context/computer/VariableSymbolComputer.java | 12 ++++++++++++ .../context/computer/VariableSymbolTest.java | 8 ++++---- .../resources/context/symbol/variableSymbolTest.bsl | 6 +++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java index e902d03b770..1b59ca1f199 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java @@ -229,6 +229,18 @@ private Optional createDescription(BSLParser.LValueContext ); } + private Optional createDescription(BSLParser.ForEachStatementContext ctx) { + var trailingComments = Trees.getTrailingComment(documentContext.getTokens(), ctx.getStart()); + + if (trailingComments.isEmpty()) { + return Optional.empty(); + } + + return Optional.of( + new VariableDescription(Collections.emptyList(), trailingComments) + ); + } + private Optional createDescription(BSLParserRuleContext ctx) { List tokens = documentContext.getTokens(); List comments = new ArrayList<>(); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java index 152daa91ce3..6c6584c924c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java @@ -52,7 +52,7 @@ void setup() { @Test void testVariableSymbolDescription() { - assertThat(variableSymbols).hasSize(19); + assertThat(variableSymbols).hasSize(20); assertThat(variableSymbols) .filteredOn(variableSymbol -> variableSymbol.getDescription().isEmpty()) @@ -69,7 +69,7 @@ void testVariableSymbolDescription() { assertThat(variableSymbols) .filteredOn(variableSymbol -> variableSymbol.getDescription().isPresent()) - .hasSize(10) + .hasSize(11) .anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(2, 6, 32))) .anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(6, 6, 33))) .anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(8, 6, 33))) @@ -92,7 +92,7 @@ void testVariableDescriptionRange() { .collect(Collectors.toList()); assertThat(variableDescriptions) - .hasSize(10) + .hasSize(11) .filteredOn(variableDescription -> !variableDescription.getDescription().equals("")) .hasSize(5) .anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(1, 0, 18))) @@ -105,7 +105,7 @@ void testVariableDescriptionRange() { assertThat(variableDescriptions) .extracting(VariableDescription::getTrailingDescription) .filteredOn(Optional::isPresent) - .hasSize(7) + .hasSize(8) .extracting(Optional::get) .anyMatch(trailingDescription -> trailingDescription.getRange().equals(Ranges.create(8, 35, 55))) .anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(19, 20, 42))) diff --git a/src/test/resources/context/symbol/variableSymbolTest.bsl b/src/test/resources/context/symbol/variableSymbolTest.bsl index de17b2730e2..dd32f9c4bf8 100644 --- a/src/test/resources/context/symbol/variableSymbolTest.bsl +++ b/src/test/resources/context/symbol/variableSymbolTest.bsl @@ -55,4 +55,8 @@ ПеременнаяСоздаваемаяВКодеВнеМетода = Неопределенно; ПеременнаяСоздаваемаяВКодеВнеМетодаВторойПример = МойМетод(); -А.ЭтоНеПеременная = Неопределенно; \ No newline at end of file +А.ЭтоНеПеременная = Неопределенно; + +Для Каждого Метод Из Методы Цикл // Висячий комментарий для цикла + МойМетод(Метод); +КонецЦикла; \ No newline at end of file From ba2f548165f012d9d86fa1a97ebe8defcd0ee655 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 09:55:06 +0000 Subject: [PATCH 448/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.4 to 4.8.5. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.4...4.8.5) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e1d0d95cf7c..3317929358b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -131,7 +131,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.4") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.5") // TEST From 25ac087f31156fc9271bf6c31859a86d9b625b35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 09:55:21 +0000 Subject: [PATCH 449/595] build(deps): bump io.spring.dependency-management from 1.1.4 to 1.1.5 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.4 to 1.1.5. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.4...v1.1.5) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e1d0d95cf7c..1a28b8913bc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.4" - id("io.spring.dependency-management") version "1.1.4" + id("io.spring.dependency-management") version "1.1.5" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.2" From 5e934384940b4878b93927a8f617d0f4f2e89867 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 09:16:36 +0000 Subject: [PATCH 450/595] build(deps): bump info.picocli:picocli-spring-boot-starter Bumps [info.picocli:picocli-spring-boot-starter](https://github.com/remkop/picocli) from 4.7.5 to 4.7.6. - [Release notes](https://github.com/remkop/picocli/releases) - [Changelog](https://github.com/remkop/picocli/blob/main/RELEASE-NOTES.md) - [Commits](https://github.com/remkop/picocli/compare/v4.7.5...v4.7.6) --- updated-dependencies: - dependency-name: info.picocli:picocli-spring-boot-starter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5947cf799c3..ab1ea594033 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,7 +67,7 @@ dependencies { // spring api("org.springframework.boot:spring-boot-starter") api("org.springframework.boot:spring-boot-starter-websocket") - api("info.picocli:picocli-spring-boot-starter:4.7.5") + api("info.picocli:picocli-spring-boot-starter:4.7.6") // lsp4j core api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.21.0") From 2271bd006700eeea45b1c1f477ebd62703a24ad9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 09:34:22 +0000 Subject: [PATCH 451/595] build(deps): bump JetBrains/qodana-action from 2024.1.3 to 2024.1.4 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.3 to 2024.1.4. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.3...v2024.1.4) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 3f36d6e346e..b521fc286cf 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.3 + uses: JetBrains/qodana-action@v2024.1.4 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 011b719641a1f5a2cf7b6d8f205e7737858e9265 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 09:15:48 +0000 Subject: [PATCH 452/595] build(deps): bump io.sentry:sentry-bom from 7.8.0 to 7.9.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.8.0 to 7.9.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.8.0...7.9.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5947cf799c3..db5d4012aeb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ val languageToolVersion = "6.1" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.8.0") + mavenBom("io.sentry:sentry-bom:7.9.0") } } From 4b9b2dbb6ba73311e3f99c0a4ffab8374c31dcfb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 10:05:46 +0000 Subject: [PATCH 453/595] build(deps): bump org.springframework.boot from 3.2.4 to 3.2.5 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.2.4...v3.2.5) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 458e0a3ccc0..73ccb76777e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.2.4" + id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.5" id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" id("ru.vyarus.pom") version "3.0.0" From 629d7c706ed66b3f4dbbcde154dc114069506c33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 09:13:52 +0000 Subject: [PATCH 454/595] build(deps): bump JetBrains/qodana-action from 2024.1.4 to 2024.1.5 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.4 to 2024.1.5. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.4...v2024.1.5) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index b521fc286cf..dc40d3d41fb 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.4 + uses: JetBrains/qodana-action@v2024.1.5 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 0e6756b033d1069c9ac42d1572384af38ac20a05 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 13:28:53 +0000 Subject: [PATCH 455/595] Translate ExternalAppStarting.md in en 100% translated source file: 'ExternalAppStarting.md' on 'en'. --- docs/en/diagnostics/ExternalAppStarting.md | 66 +++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/docs/en/diagnostics/ExternalAppStarting.md b/docs/en/diagnostics/ExternalAppStarting.md index 061fa651c09..59ae54e2bc5 100644 --- a/docs/en/diagnostics/ExternalAppStarting.md +++ b/docs/en/diagnostics/ExternalAppStarting.md @@ -3,14 +3,76 @@ ## Description +To improve the quality and security of 1C solutions, it is necessary to control the launch of external applications from 1C code. + +This rule applies to all methods of launching external programs, including: +- System +- RunSystem +- RunApp +- BeginRunningApplication +- RunAppAsync +- GotoURL or FileSystems.OpenURL +- FileSystemsClient.RunApp (for client side) and FileSystems.RunApp (for server side) +- FileSystemClient.OpenExplorer +- FileSystemClient.OpenFile ## Examples +```bsl +Процедура Метод() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + ОписаниеОповещения = Неопределено; + ПараметрыКоманды = Новый Структура; + + КомандаСистемы(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, Истина); // есть замечание + + НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание + + ПерейтиПоНавигационнойСсылке(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды, ОписаниеОповещения); // есть замечание + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыКоманды); // есть замечание + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + + ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды, ОписаниеОповещения); // есть замечание + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура Подключить() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, КодВозврата) + ДождатьсяЗавершения = Истина; + + ЗапуститьСистему(); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата); // есть замечание +КонецПроцедуры +``` ## Sources +- [Standard: Application launch security (RU)](https://its.1c.ru/db/v8std#content:774:hdoc) +- Standard: [Restriction on the execution of "external" code (RU)](https://its.1c.ru/db/v8std/content/669/hdoc) From 1680a2a90b1547df66ee5cd1cdd4892339c17165 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 13:51:17 +0000 Subject: [PATCH 456/595] Translate DiagnosticStructure.md in en 100% translated source file: 'DiagnosticStructure.md' on 'en'. --- docs/en/contributing/DiagnosticStructure.md | 29 +++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/docs/en/contributing/DiagnosticStructure.md b/docs/en/contributing/DiagnosticStructure.md index b08d50035b8..fc4669a1b0b 100644 --- a/docs/en/contributing/DiagnosticStructure.md +++ b/docs/en/contributing/DiagnosticStructure.md @@ -45,26 +45,33 @@ At the time of this writing, the following properties are available: - The type of diagnostics is `type` and its importance is `severity`, for each diagnostics it is necessary to define them. In order to choose the correct type and importance of diagnostics, you can refer to [article](DiagnosticTypeAndSeverity.md). - Time to fix issue `minutesToFix` (default 0). This value is used when calculating the total technical debt of the project in labor costs to correct all comments (the sum of time to correct for all detected comments). It is worth indicating the time, as realistic as possible, that the developer should spend on fixing. +- Using the `extraMinForComplexity` parameter, you can dynamically increase the time to correct a comment for diagnostics that take into account several places that violate the rule, for example, when calculating the complexity of a method. - A set of diagnostics tags `tag` that indicate the group to which it belongs. Read more about tags in the [article](DiagnosticTag.md). - Applicability limit `scope` (by default `ALL`, i.e. no limit). BSL LS supports multiple languages (oscript and bsl) and diagnostics can be applied to one specific language or to all at once. - Default diagnostic active `activatedByDefault` (default `True`). When developing experimental, controversial, or not applicable in most projects, it is worth turning off diagnostics by default, the activation will be performed by the end user of the solution. - Compatibility mode `compatibilityMode`, by which diagnostics are filtered when using metadata. The default is `UNDEFINED`. - +- List of module types `modules` for the ability to limit the area analyzed by diagnostics +- Sign of the ability to set issues on the entire project `canLocateOnProject`. Used for diagnostics not related to the source code module. At the moment, the option is accepted only by SonarQube, other tools ignore it. The last two can be omitted. Annotation example ```java @DiagnosticMetadata( - type = DiagnosticType.CODE_SMELL, - severity = DiagnosticSeverity.MINOR, - minutesToFix = 1, - activatedByDefault = false, // Deactivated by default - scope = DiagnosticScope.BSL, // Applicable only for BSL - compatibilityMode = DiagnosticCompatibilityMode.COMPATIBILITY_MODE_8_3_3, // 8.3.3 compatibility mode + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MINOR, + minutesToFix = 1, + activatedByDefault = false, + scope = DiagnosticScope.BSL, + compatibilityMode = DiagnosticCompatibilityMode.COMPATIBILITY_MODE_8_3_3, tags = { - DiagnosticTag.STANDARD // This is a diagnosis for violation of the 1C standard - } + DiagnosticTag.STANDARD + }, + modules = { + ModuleType.CommonModule + }, + canLocateOnProject = false, + extraMinForComplexity = 1 // For each additional note position (`DiagnosticRelatedInformation`) one minute will be added ) ``` @@ -217,7 +224,7 @@ Examples: ### Diagnostics class, inherits from AbstractSDBLVisitorDiagnostic -The diagnostic class implements the necessary `AST visitors`, according to the grammar of the query language (see [BSLParser](https://github.com/1c-syntax/bsl-parser/blob/master/src/main/antlr/SDBLParser. g4)). The complete list of visitor methods is in the `SDBLParserBaseVisitor` class. +The diagnostic class implements the necessary `AST visitors`, according to the grammar of the query language (see [BSLParser](https://github.com/1c-syntax/bsl-parser/blob/master/src/main/antlr/SDBLParser.g4)). The complete list of visitor methods is in the `SDBLParserBaseVisitor` class. The rest of the rules are identical to `AbstractVisitorDiagnostic`. @@ -355,7 +362,7 @@ The fixtures are the contents of the test resource file located in the `src/test It is necessary to add both erroneous and correct code, **marking the places of errors with comments**. It is best if the test cases are `real`, from practice, and not synthetic, invented `for diagnostics`. -## Diagnostics description +## Description The diagnostic description is created in the [Markdown](https://ru.wikipedia.org/wiki/Markdown) format in two versions - for Russian and English. The files are located in the `docs/diagnostics` directory for Russian, for English in `docs/en/diagnostics`. The file has the structure From fe5ac6d2a50da6e482b56b91c7a8f7e01cc81df0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 13:52:21 +0000 Subject: [PATCH 457/595] Translate UsageWriteLogEvent.md in en 100% translated source file: 'UsageWriteLogEvent.md' on 'en'. --- docs/en/diagnostics/UsageWriteLogEvent.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/en/diagnostics/UsageWriteLogEvent.md b/docs/en/diagnostics/UsageWriteLogEvent.md index 241ae91838d..b91b67c66be 100644 --- a/docs/en/diagnostics/UsageWriteLogEvent.md +++ b/docs/en/diagnostics/UsageWriteLogEvent.md @@ -55,7 +55,27 @@ Correct code Raise; EndTry; ``` - +If an outer attempt makes a log entry, then there is no need to do it again in a nested attempt: +```bsl +Процедура ЗагрузитьДанные() Экспорт + Попытка + ВыполнитьЗаписьДанных(); + Исключение + ЗаписьЖурналаРегистрации(); // <- исключение подавляется с записью в ЖР + КонецПопытки; +КонецПроцедуры + +Процедура ВыполнитьЗаписьДанных() + НачатьТранзакцию(); + Попытка + // ... + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; // <- вложенная попытка, запись в ЖР не требуется + КонецПопытки; +КонецПроцедуры +``` ## Sources ## Description +It is important to review your code. Be sure to pay attention to accessing the file system and using “external code” + +The found sections of the code must be analyzed, a manual audit of the code must be performed for its correctness and safety. ## Examples +```bsl + Текст = Новый ЧтениеТекста(ПутьФайла, КодировкаТекста.ANSI); // есть замечание + Текст = Новый ЗаписьТекста(ПутьФайла, КодировкаТекста.ANSI); // есть замечание + + ЗначениеВФайл(ПутьФайла, ЛичныеДанные); // есть замечание + КопироватьФайл(ПутьФайла, ДругойПутьФайла); // есть замечание + + МассивИмен = Новый Массив(); + МассивИмен.Добавить(ПутьФайла); + ОбъединитьФайлы(МассивИмен, ДругойПутьФайла); // есть замечание + + ПереместитьФайл(ПутьФайла, ДругойПутьФайла); // есть замечание + РазделитьФайл(ПутьФайла, 1024 * 1024 ); // есть замечание + СоздатьКаталог(ИмяКаталога); // есть замечание + УдалитьФайлы(ПутьФайла); // есть замечание +``` ## Sources +* [File system access from application code (RU)](https://its.1c.ru/db/v8std#content:542:hdoc) +* [Standard: Application launch security (RU)](https://its.1c.ru/db/v8std#content:774:hdoc) +* [Safe operation - Developer's Guide (RU](https://its.1c.ru/db/v8323doc#bookmark:dev:TI000000186) From 328b99333264b2a1616d69d338bc3bfa90f76f4d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 14:01:23 +0000 Subject: [PATCH 459/595] Translate PrivilegedModuleMethodCall.md in en 100% translated source file: 'PrivilegedModuleMethodCall.md' on 'en'. --- docs/en/diagnostics/PrivilegedModuleMethodCall.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/diagnostics/PrivilegedModuleMethodCall.md b/docs/en/diagnostics/PrivilegedModuleMethodCall.md index 5db0a1be36f..e86ebe5feea 100644 --- a/docs/en/diagnostics/PrivilegedModuleMethodCall.md +++ b/docs/en/diagnostics/PrivilegedModuleMethodCall.md @@ -1,16 +1,16 @@ # Accessing privileged module methods (PrivilegedModuleMethodCall) -## Description +## Описание диагностики +Code running in `privileged` `mode` must be checked. -## Examples +## Примеры -## Sources +## Источники +* `Источник`: [Cognitive complexity, `ver`. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) --> From 3c6e168eb647d9bb8eb117dd3130800cc388155f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 14:01:53 +0000 Subject: [PATCH 460/595] Translate DisableSafeMode.md in en 100% translated source file: 'DisableSafeMode.md' on 'en'. --- docs/en/diagnostics/DisableSafeMode.md | 37 +++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/docs/en/diagnostics/DisableSafeMode.md b/docs/en/diagnostics/DisableSafeMode.md index 83a36958b30..f96823b3758 100644 --- a/docs/en/diagnostics/DisableSafeMode.md +++ b/docs/en/diagnostics/DisableSafeMode.md @@ -1,16 +1,45 @@ # Disable safe mode (DisableSafeMode) -## Description - +## Examples + +In addition to configuration code, the application solution can execute third-party program code, which can be connected in various ways (external reports and data processing, extensions, external components, etc.). The developer cannot guarantee the reliability of this code. An attacker can include various destructive actions in it that can harm user computers, servers, and data in the program. + +The listed security problems are especially critical when operating configurations in the service model, because Having gained access to the service, malicious code can immediately gain access to all applications of all users of the service. + +It is important to control the execution of such external code in safe mode, in exceptional cases (after verification) allowing code to be executed in unsafe mode. + +The rule diagnoses calls to the methods `SetSafeMode` and `SetDisableSafeMode` in the mode of disabling safe mode control +- Method call `SetDisableSafeMode(true)` is ignored +- Method call `SetDisableSafeMode(false)` is ignored ## Examples +``` + SetSafeMode (False); // is error + + Value = False; + SetSafeMode(Value); // is error + + SetSafeMode (True); // no error + + SetDisableSafeMode(True); // is error + + Value = True; + SetDisableSafeMode(Value); // is error + + SetDisableSafeMode(False); // no error +``` ## Sources +- [Developer's Guide 8.3.22: Safe operation (RU)](https://its.1c.ru/db/v8322doc#bookmark:dev:TI000000186) +- [Standard: Restriction on the execution of "external" code (RU)](https://its.1c.ru/db/v8std/content/669/hdoc) +- [Standard: Server API Security (RU)](https://its.1c.ru/db/v8std/content/678/hdoc) +- [Standard: Restrictions on the use of Execute and Eval on the server (RU)](https://its.1c.ru/db/v8std#content:770:hdoc) +- [Standard: Using Privileged Mode (RU)](https://its.1c.ru/db/v8std/content/485/hdoc) From d40395e47b518535424933f11050f620085c5198 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 14:07:33 +0000 Subject: [PATCH 461/595] Translate DisableSafeMode.md in en 100% translated source file: 'DisableSafeMode.md' on 'en'. --- docs/en/diagnostics/DisableSafeMode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/DisableSafeMode.md b/docs/en/diagnostics/DisableSafeMode.md index f96823b3758..da4c2057737 100644 --- a/docs/en/diagnostics/DisableSafeMode.md +++ b/docs/en/diagnostics/DisableSafeMode.md @@ -1,7 +1,7 @@ # Disable safe mode (DisableSafeMode) -## Examples +## Description In addition to configuration code, the application solution can execute third-party program code, which can be connected in various ways (external reports and data processing, extensions, external components, etc.). The developer cannot guarantee the reliability of this code. An attacker can include various destructive actions in it that can harm user computers, servers, and data in the program. From 3b68cbe54056095338199147fde4adcce4516c1f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 14:08:32 +0000 Subject: [PATCH 462/595] Translate PrivilegedModuleMethodCall.md in en 100% translated source file: 'PrivilegedModuleMethodCall.md' on 'en'. --- docs/en/diagnostics/PrivilegedModuleMethodCall.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/diagnostics/PrivilegedModuleMethodCall.md b/docs/en/diagnostics/PrivilegedModuleMethodCall.md index e86ebe5feea..87647762992 100644 --- a/docs/en/diagnostics/PrivilegedModuleMethodCall.md +++ b/docs/en/diagnostics/PrivilegedModuleMethodCall.md @@ -1,14 +1,14 @@ # Accessing privileged module methods (PrivilegedModuleMethodCall) -## Описание диагностики +## Description Code running in `privileged` `mode` must be checked. -## Примеры +## Examples -## Источники +## Sources +## Описание диагностики + +Использование двойных отрицаний усложняет понимание кода и может приводить к ошибкам, когда вместо истины разработчик "в уме" вычислил Ложь, или наоборот. +Двойные отрицания рекомендуется заменять на выражения условий, которые прямо выражают намерения автора. + +## Примеры + +### Неправильно + +```bsl +Если Не ТаблицаЗначений.Найти(ИскомоеЗначение, "Колонка") <> Неопределено Тогда + // Сделать действие +КонецЕсли; +``` + +### Правильно + +```bsl +Если ТаблицаЗначений.Найти(ИскомоеЗначение, "Колонка") = Неопределено Тогда + // Сделать действие +КонецЕсли; +``` + +## Источники + + +* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) \ No newline at end of file diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md new file mode 100644 index 00000000000..5a960bb659c --- /dev/null +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -0,0 +1,28 @@ +# Double negatives (DoubleNegatives) + + +## Description + +Using double negatives complicates the understanding of the code and can lead to errors when instead of truth the developer "in his mind" calculated False, or vice versa. It is recommended to replace double negatives with conditions that directly express the author's intentions. + +## Examples + +### Wrong + +```bsl +If Not ValueTable.Find(ValueToSearch, "Column") <> Undefined Тогда + // Act +EndIf; +``` + +### Correct + +```bsl +If ValueTable.Find(ValueToSearch, "Column") = Undefined Тогда + // Act +EndIf; +``` + +## Sources + +* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) \ No newline at end of file diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java new file mode 100644 index 00000000000..94952ad9608 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -0,0 +1,38 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionParseTreeRewriter; +import com.github._1c_syntax.bsl.parser.BSLParser; +import org.antlr.v4.runtime.tree.ParseTree; + +@DiagnosticMetadata( + type = DiagnosticType.CODE_SMELL, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 3, + tags = { + DiagnosticTag.BRAINOVERLOAD, + DiagnosticTag.BADPRACTICE + } +) +public class DoubleNegativesDiagnostic extends AbstractVisitorDiagnostic { + + private static final int MIN_EXPRESSION_SIZE = 3; + + @Override + public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { + + if (sufficientSize(ctx)) + return ctx; + + var tree = ExpressionParseTreeRewriter.buildExpressionTree(ctx); + + return ctx; + } + + private static boolean sufficientSize(BSLParser.ExpressionContext ctx) { + return ctx.children.size() < MIN_EXPRESSION_SIZE; + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties new file mode 100644 index 00000000000..5349a4b9fcc --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Using double negatives complicates understandong of code +diagnosticName=Double negatives diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_ru.properties new file mode 100644 index 00000000000..06fb1ed09ea --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Использование двойных отрицаний усложняет понимание кода +diagnosticName=Двойные отрицания diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java new file mode 100644 index 00000000000..9a571e52415 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -0,0 +1,25 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class DoubleNegativesDiagnosticTest extends AbstractDiagnosticTest { + DoubleNegativesDiagnosticTest() { + super(DoubleNegativesDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(3, 6, 3, 74) + ; + + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index 01b2415ae2d..11c50bf5fa5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -317,6 +317,25 @@ void realLifeHardExpression() { assertThat(binary.getRight().cast().getOperator()).isEqualTo(BslOperator.EQUAL); } + @Test + void notOperatorPriority() { + var code = "А = Не Разыменование.Метод() = Неопределено"; + + var expressionTree = getExpressionTree(code); + + assertThat(expressionTree.getNodeType()).isEqualTo(ExpressionNodeType.UNARY_OP); + + var unary = expressionTree.cast(); + assertThat(unary.getOperator()).isEqualTo(BslOperator.NOT); + assertThat(unary.getOperand()).isInstanceOf(BinaryOperationNode.class); + + var binary = unary.getOperand().cast(); + assertThat(binary.getOperator()).isEqualTo(BslOperator.EQUAL); + assertThat(binary.getLeft().getNodeType()).isEqualTo(ExpressionNodeType.CALL); + assertThat(binary.getRight().getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); + + } + BslExpression getExpressionTree(String code) { var expression = parse(code); return ExpressionParseTreeRewriter.buildExpressionTree(expression); diff --git a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl new file mode 100644 index 00000000000..24799667ebd --- /dev/null +++ b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl @@ -0,0 +1,40 @@ +// Выражение в условии +Если Не ТаблицаЗначений.Найти(ИскомоеЗначение, "Колонка") <> Неопределено Тогда + // Сделать действие +КонецЕсли; + +// Отрицание с проверкой на литерал + +А = Не Отказ = Ложь; +А = Не (Отказ = Ложь); +А = Не Отказ <> Ложь; +А = Не (Отказ <> Ложь); +А = Не НекотороеЗначение() <> Неопределено; +А = Не Неопределено <> НекотороеЗначение(); +А = Не (А <> Неопределено); // срабатывает +А = Не А <> Неопределено И Б = 5; // срабатывает +А = Не (А <> Неопределено и Б = 5); // не срабатывает +А = Не (А <> Неопределено или Б = 5); // не срабатывает +А = Не (Б = 5 и А <> Неопределено); // не срабатывает + +Пока Не Таблица.Данные <> Неопределено Цикл +КонецЦикла; + +Б = Не (Не А = 1 или Б <> Неопределено); // срабатывает на "Не А = 1" +Б = Не (А <> 1 или Не Б <> Неопределено); // срабатывает на "Не Б <> Неопределено" +Б = Не (А <> 1 или Не Б = Неопределено); // не срабатывает на "Не Б <> Неопределено" т.к. сравнения вида Не Х = Неопределено популярны + +Если Не Т.Найти(Значение) = Неопределено Тогда + // не срабатывает, т.к. популярный код +КонецЕсли; + +// Отрицание с проверкой на неравенство нелитералу + +А = Не (Отказ <> НеЛитерал); // срабатывает +А = Не СложнаяФункция() <> НеЛитерал; // срабатывает + +Б = Не (А = 1 или Б <> НеЛитерал); // не срабатывает + +// Прямое двойное отрицание + +Б = Не (Не Значение); \ No newline at end of file From 1ed6cfefa6dbd25f884ccf64268d1a600547f616 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Mon, 3 Jun 2024 20:11:49 +0300 Subject: [PATCH 468/595] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BD=D1=8B=D1=85=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20"NOT"=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B8=D1=82=D0=B5=D0=BB=D1=8F=20=D0=B2=D1=8B=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExpressionTreeBuildingVisitor.java | 4 ---- .../ExpressionParseTreeRewriterTest.java | 21 ++++++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 178e5d79883..53c8019f6ba 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -149,10 +149,6 @@ public ParseTree visitMember(BSLParser.MemberContext ctx) { dispatchChild.accept(this); } - if (unaryModifier != null) { - buildOperation(); - } - return ctx; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index 11c50bf5fa5..028ede22c6c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -331,7 +331,26 @@ void notOperatorPriority() { var binary = unary.getOperand().cast(); assertThat(binary.getOperator()).isEqualTo(BslOperator.EQUAL); - assertThat(binary.getLeft().getNodeType()).isEqualTo(ExpressionNodeType.CALL); + assertThat(binary.getLeft().cast().getOperator()).isEqualTo(BslOperator.DEREFERENCE); + assertThat(binary.getRight().getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); + + } + + @Test + void notOperatorPriority_with_parenthesis() { + var code = "А = Не (Разыменование.Метод() = Неопределено)"; + + var expressionTree = getExpressionTree(code); + + assertThat(expressionTree.getNodeType()).isEqualTo(ExpressionNodeType.UNARY_OP); + + var unary = expressionTree.cast(); + assertThat(unary.getOperator()).isEqualTo(BslOperator.NOT); + assertThat(unary.getOperand()).isInstanceOf(BinaryOperationNode.class); + + var binary = unary.getOperand().cast(); + assertThat(binary.getOperator()).isEqualTo(BslOperator.EQUAL); + assertThat(binary.getLeft().cast().getOperator()).isEqualTo(BslOperator.DEREFERENCE); assertThat(binary.getRight().getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); } From f1c2e8c0b7091c5caee0be569311766aedcb1029 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 4 Jun 2024 09:05:54 +0300 Subject: [PATCH 469/595] mdclasses 0.13 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a17863b7a58..7ebc092530b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -82,7 +82,7 @@ dependencies { exclude("org.antlr", "antlr-runtime") } api("io.github.1c-syntax", "utils", "0.6.1") - api("io.github.1c-syntax", "mdclasses", "0.13.0-rc.3") + api("io.github.1c-syntax", "mdclasses", "0.13.0") api("io.github.1c-syntax", "bsl-common-library", "0.6.0") api("io.github.1c-syntax", "supportconf", "0.14.0") api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") From 32fd2ca56ef10e5ebd483cb27333859c84e1fcff Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Tue, 4 Jun 2024 09:14:37 +0300 Subject: [PATCH 470/595] Update ReservedParameterNames.md --- docs/diagnostics/ReservedParameterNames.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/ReservedParameterNames.md b/docs/diagnostics/ReservedParameterNames.md index 591058e9c2c..7a5ce85f5fc 100644 --- a/docs/diagnostics/ReservedParameterNames.md +++ b/docs/diagnostics/ReservedParameterNames.md @@ -2,7 +2,7 @@ ## Описание диагностики -Если имя параметра совпадает с именем системного перечисления, то в локальном контексте доступ к значениям этого перечисления будет недоступен. +Если имя параметра совпадает с именем системного перечисления, то невозможно будет обратиться к значениям этого системного перечисления, потому что параметр его скроет. Синтаксическая проверка кода модуля не выявит такую ошибку. Чтобы предотвратить эту ситуацию имя параметра не должно совпадать с именами системных перечислений. Список зарезервированных слов задается регулярным выражением. Поиск производится без учета регистра символов. From 89f610ac1e8fee2941d7c295119a7e41890cac27 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Tue, 4 Jun 2024 09:15:30 +0300 Subject: [PATCH 471/595] Update ReservedParameterNamesDiagnostic_ru.properties --- .../diagnostics/ReservedParameterNamesDiagnostic_ru.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties index 1a6a444e62a..e494355e7fa 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic_ru.properties @@ -1,3 +1,3 @@ -diagnosticMessage=Переименуйте параметр "%s" чтобы он не совпадал с зарезервированным словом. +diagnosticMessage=Переименуйте параметр "%s" так, чтобы он не совпадал с зарезервированным словом. diagnosticName=Зарезервированные имена параметров reservedWords=Регулярное выражение для зарезервированных имен параметров. From 90c9e48329a26d36a48eb91cbc1b200b1c062d6f Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Tue, 4 Jun 2024 09:20:40 +0300 Subject: [PATCH 472/595] Update ReservedParameterNamesDiagnostic.java --- .../diagnostics/ReservedParameterNamesDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java index c1d4e308e30..2033f717bd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 3d2a526d8daa4ef2477a221a8da4eb7b46b61f82 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Tue, 4 Jun 2024 09:20:57 +0300 Subject: [PATCH 473/595] Update ReservedParameterNamesTest.java --- .../diagnostics/ReservedParameterNamesTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index 5d59199e026..86d6f25641c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later @@ -74,4 +74,4 @@ void testNegative(String testWord) { } -} \ No newline at end of file +} From 432256ffac3f439796dce3f8d7005af02f6e97a0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 06:52:13 +0000 Subject: [PATCH 474/595] Translate CanonicalSpellingKeywords.md in en 100% translated source file: 'CanonicalSpellingKeywords.md' on 'en'. --- docs/en/diagnostics/CanonicalSpellingKeywords.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/diagnostics/CanonicalSpellingKeywords.md b/docs/en/diagnostics/CanonicalSpellingKeywords.md index 72511e8f523..3ad88a4f340 100644 --- a/docs/en/diagnostics/CanonicalSpellingKeywords.md +++ b/docs/en/diagnostics/CanonicalSpellingKeywords.md @@ -25,14 +25,14 @@ A built-in language constructs, keywords must be written canonically. | Каждого, каждого | Each, each | | КонецЕсли | EndIf | | КонецПопытки | EndTry | -| КонецПроцедуры | EndProcedure | -| КонецФункции | EndFunction | +| EndProcedure | EndProcedure | +| EndFunction | EndFunction | | КонецЦикла | EndDo | | НЕ, Не | NOT, Not | | Неопределено | Undefined | | Перейти | Goto | | Перем | Var | -| По | For | +| По | To | | Пока | While | | Попытка | Try | | Процедура | Procedure | From 06331de2f8be96e3effe3273e2ec946dc9f45a27 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 06:53:21 +0000 Subject: [PATCH 475/595] Translate CanonicalSpellingKeywords.md in en 100% translated source file: 'CanonicalSpellingKeywords.md' on 'en'. --- docs/en/diagnostics/CanonicalSpellingKeywords.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/CanonicalSpellingKeywords.md b/docs/en/diagnostics/CanonicalSpellingKeywords.md index 3ad88a4f340..334b9066b75 100644 --- a/docs/en/diagnostics/CanonicalSpellingKeywords.md +++ b/docs/en/diagnostics/CanonicalSpellingKeywords.md @@ -25,7 +25,7 @@ A built-in language constructs, keywords must be written canonically. | Каждого, каждого | Each, each | | КонецЕсли | EndIf | | КонецПопытки | EndTry | -| EndProcedure | EndProcedure | +| КонецПроцедуры | EndProcedure | | EndFunction | EndFunction | | КонецЦикла | EndDo | | НЕ, Не | NOT, Not | From 9066956ec056f932dbe32122b769b65fabe33af9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 06:53:30 +0000 Subject: [PATCH 476/595] Translate CanonicalSpellingKeywords.md in en 100% translated source file: 'CanonicalSpellingKeywords.md' on 'en'. --- docs/en/diagnostics/CanonicalSpellingKeywords.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/diagnostics/CanonicalSpellingKeywords.md b/docs/en/diagnostics/CanonicalSpellingKeywords.md index 334b9066b75..6b77e38575f 100644 --- a/docs/en/diagnostics/CanonicalSpellingKeywords.md +++ b/docs/en/diagnostics/CanonicalSpellingKeywords.md @@ -26,7 +26,7 @@ A built-in language constructs, keywords must be written canonically. | КонецЕсли | EndIf | | КонецПопытки | EndTry | | КонецПроцедуры | EndProcedure | -| EndFunction | EndFunction | +| КонецФункции | EndFunction | | КонецЦикла | EndDo | | НЕ, Не | NOT, Not | | Неопределено | Undefined | From d2b92dfcbcd842ab3698c8e065c15f6484bad258 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 10:38:05 +0300 Subject: [PATCH 477/595] =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B4=D0=B0=D1=82=D0=B0?= =?UTF-8?q?=209999?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/diagnostics/MagicDateDiagnostic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index 37ae8273d59..362eace6414 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -65,7 +65,7 @@ public class MagicDateDiagnostic extends AbstractVisitorDiagnostic { private static final Pattern nonNumberPattern = CaseInsensitivePattern.compile( "\\D" ); - public static final int MAX_YEAR_BY_1C = 3999; + public static final int MAX_YEAR_BY_1C = 9999; @DiagnosticParameter( type = String.class, From 247cd8c5ea826079d5e22e52b581ad17ae4145fb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 10:42:35 +0300 Subject: [PATCH 478/595] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=83=D1=8E=20=D0=B4=D0=B0=D1=82=D1=83=209999=D0=B3.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/resources/diagnostics/MagicDateDiagnostic.bsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl index aaf8626edc8..201c9c8311c 100644 --- a/src/test/resources/diagnostics/MagicDateDiagnostic.bsl +++ b/src/test/resources/diagnostics/MagicDateDiagnostic.bsl @@ -3,7 +3,7 @@ КонецФункции Функция МаксимальнаяДатаПриПродолжении() - Возврат '39990101000000'; + Возврат '99990101000000'; КонецФункции Процедура Тест3() From 9937768ffd87bf2e3d2f6ac8263d529a4bbdf746 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 12:03:15 +0300 Subject: [PATCH 479/595] =?UTF-8?q?=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/InternetAccess.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/diagnostics/InternetAccess.md b/docs/diagnostics/InternetAccess.md index b6c2c4646d8..974639618c7 100644 --- a/docs/diagnostics/InternetAccess.md +++ b/docs/diagnostics/InternetAccess.md @@ -3,10 +3,14 @@ ## Описание диагностики -При код-ревью или аудите кода необходимо проверять обращения к Интернет-ресурсам и набор передаваемых данных для исключения передачи конфиденциальной или защищенной информации. +Проверьте обращение к Интернет-ресурсам и набор передаваемых данных для исключения передачи конфиденциальной или защищенной информации. ## Примеры +```bsl +HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80); // замечание +FTPСоединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль); // замечание +``` ## Источники From b166bce1681e056e0c1a4ca57206183eba7dd3ef Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 09:16:49 +0000 Subject: [PATCH 480/595] Translate docs/diagnostics/MagicDate.md in en 100% translated source file: 'docs/diagnostics/MagicDate.md' on 'en'. --- docs/en/diagnostics/MagicDate.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/en/diagnostics/MagicDate.md b/docs/en/diagnostics/MagicDate.md index 158097d92b9..49635b0166c 100644 --- a/docs/en/diagnostics/MagicDate.md +++ b/docs/en/diagnostics/MagicDate.md @@ -22,3 +22,16 @@ If now < PredictedDate Then HoverBoardIsReal = Undefined; EndIf; ``` + +Also, a good solution is to use a special method with "telling name" that returns +constant + +```bsl +Function DateInventionHover() + Return '20151021'; +EndFunction + +If CurrentDate < DateInventionHover() Then + HoverBoardWillBeInvented = Undefined; +EndIf; +``` From 4a24a23c7d29cb248a84e3d7a26e979165f78484 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 12:20:51 +0300 Subject: [PATCH 481/595] precommit --- .../languageserver/diagnostics/InternetAccessDiagnostic.java | 2 +- .../bsl/languageserver/configuration/parameters-schema.json | 2 +- .../diagnostics/InternetAccessDiagnosticTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java index 5f61d1fb290..cb5c0017b64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 194546f1487..426a9533cd8 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -890,7 +890,7 @@ }, "InternetAccess": { "description": "Referring to Internet resources", - "default": true, + "default": false, "type": [ "boolean", "object" diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java index 096df28e5d6..46cdcc91428 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2023 + * Copyright (c) 2018-2024 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From dfe0737ad3ae5c454c58ce5b18ff1591cf6a5ccb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 12:27:38 +0300 Subject: [PATCH 482/595] =?UTF-8?q?=D0=B4=D1=83=D0=B1=D0=BB=D1=8C=20=D0=B2?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InternetAccessDiagnosticTest.java | 20 +++++++++---------- .../diagnostics/InternetAccessDiagnostic.bsl | 8 -------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java index 46cdcc91428..01230161a8f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -48,15 +48,15 @@ void test() { .hasRange(15, 17, 47) .hasRange(16, 17, 43) .hasRange(17, 21, 51) - .hasRange(21, 21, 65) - .hasRange(22, 17, 35) - .hasRange(23, 17, 47) - .hasRange(24, 17, 43) - .hasRange(25, 21, 51) - .hasRange(29, 14, 43) - .hasRange(35, 14, 32) - .hasRange(39, 14, 35) - .hasRange(42, 10, 21) - .hasSize(18); +// .hasRange(21, 21, 65) +// .hasRange(22, 17, 35) +// .hasRange(23, 17, 47) +// .hasRange(24, 17, 43) +// .hasRange(25, 21, 51) + .hasRange(21, 14, 43) + .hasRange(27, 14, 32) + .hasRange(31, 14, 35) + .hasRange(34, 10, 21) + .hasSize(13); } } diff --git a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl index daa61b1756e..f556f167b3a 100644 --- a/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl +++ b/src/test/resources/diagnostics/InternetAccessDiagnostic.bsl @@ -18,14 +18,6 @@ ИнтернетПрокси = Новый ИнтернетПрокси("zabbix"); // ошибка КонецПроцедуры -Процедура HTTP() - HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80); // ошибка - HTTPЗапрос = Новый HTTPЗапрос(); // ошибка - HTTPЗапрос = Новый HTTPЗапрос("zabbix", 80); // ошибка - HTTPЗапрос = Новый HTTPЗапрос("zabbix"); // ошибка - ИнтернетПрокси = Новый ИнтернетПрокси("zabbix"); // ошибка -КонецПроцедуры - Функция НовыйИнтернетПочтовыйПрофильБезТаймАута() Профиль = Новый ИнтернетПочтовыйПрофиль; // ошибка Профиль.Пользователь = "admin"; From 56b72df125c8ca74f890fee24d7cd21060006a62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 09:51:47 +0000 Subject: [PATCH 483/595] build(deps): bump dawidd6/action-download-artifact from 3 to 4 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 3 to 4. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 1866a759a25..c9697209261 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Download PR number artifact if: github.event.workflow_run.event == 'pull_request' - uses: dawidd6/action-download-artifact@v3 + uses: dawidd6/action-download-artifact@v4 with: workflow: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} From 27da16dbea99701270800134aef9a7685de73978 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 4 Jun 2024 12:55:15 +0300 Subject: [PATCH 484/595] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B1=D1=8B=D1=82=D1=8B=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/InternetAccessDiagnosticTest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java index 01230161a8f..2b6216a8a47 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -48,11 +48,6 @@ void test() { .hasRange(15, 17, 47) .hasRange(16, 17, 43) .hasRange(17, 21, 51) -// .hasRange(21, 21, 65) -// .hasRange(22, 17, 35) -// .hasRange(23, 17, 47) -// .hasRange(24, 17, 43) -// .hasRange(25, 21, 51) .hasRange(21, 14, 43) .hasRange(27, 14, 32) .hasRange(31, 14, 35) From f7fa5a823dd1fd9dd800fbf4724c26d67acb6e75 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:09:50 +0000 Subject: [PATCH 485/595] Translate docs/diagnostics/InternetAccess.md in en 100% translated source file: 'docs/diagnostics/InternetAccess.md' on 'en'. --- docs/en/diagnostics/InternetAccess.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/docs/en/diagnostics/InternetAccess.md b/docs/en/diagnostics/InternetAccess.md index 9c2305abc49..f958792968b 100644 --- a/docs/en/diagnostics/InternetAccess.md +++ b/docs/en/diagnostics/InternetAccess.md @@ -3,14 +3,3 @@ ## Description - -## Examples - - -## Sources - - From 83e82a024f191f49415af6864d0547dcde09c485 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 10:14:42 +0000 Subject: [PATCH 486/595] Translate docs/diagnostics/InternetAccess.md in en 100% translated source file: 'docs/diagnostics/InternetAccess.md' on 'en'. --- docs/en/diagnostics/InternetAccess.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/en/diagnostics/InternetAccess.md b/docs/en/diagnostics/InternetAccess.md index f958792968b..ffbd2238150 100644 --- a/docs/en/diagnostics/InternetAccess.md +++ b/docs/en/diagnostics/InternetAccess.md @@ -3,3 +3,19 @@ ## Description +Check access to Internet resources and the set of transmitted data to prevent the transfer of confidential or protected information. + +## Examples + +```bsl +HTTPConnection = New HTTPConnection("zabbix.localhost", 80); // error +FTPConnection = New FTPConnection(Server, Port, User, Pwd); // error +``` + +## Sources + + From 6af057cfda2ffb91fae77d9a81b92d4cf30658c1 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 4 Jun 2024 18:37:05 +0300 Subject: [PATCH 487/595] - new bslls-dev-tool - doc fixes --- build.gradle.kts | 2 +- .../bsl/languageserver/configuration/parameters-schema.json | 4 ++-- .../_1c_syntax/bsl/languageserver/configuration/schema.json | 6 ++++++ .../diagnostics/FileSystemAccessDiagnostic_en.properties | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7ebc092530b..064bc21f346 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.5" - id("io.github.1c-syntax.bslls-dev-tools") version "0.7.3" + id("io.github.1c-syntax.bslls-dev-tools") version "0.8.0" id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.2" id("io.codearte.nexus-staging") version "0.30.0" diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 13ab035dbca..749df4a1160 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -713,13 +713,13 @@ "$id": "#/definitions/FieldsFromJoinsWithoutIsNull" }, "FileSystemAccess": { - "description": "FileSystemAccess", + "description": "File system access", "default": false, "type": [ "boolean", "object" ], - "title": "FileSystemAccess", + "title": "File system access", "properties": { "globalMethods": { "description": "Global methods pattern (regex)", diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index bac7b3f6eed..96fdadfbdff 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -146,6 +146,9 @@ "DeprecatedTypeManagedForm": { "$ref": "parameters-schema.json#/definitions/DeprecatedTypeManagedForm" }, + "DisableSafeMode": { + "$ref": "parameters-schema.json#/definitions/DisableSafeMode" + }, "DuplicateRegion": { "$ref": "parameters-schema.json#/definitions/DuplicateRegion" }, @@ -239,6 +242,9 @@ "IncorrectUseOfStrTemplate": { "$ref": "parameters-schema.json#/definitions/IncorrectUseOfStrTemplate" }, + "InternetAccess": { + "$ref": "parameters-schema.json#/definitions/InternetAccess" + }, "InvalidCharacterInFile": { "$ref": "parameters-schema.json#/definitions/InvalidCharacterInFile" }, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties index ef44edd4783..aa06ad1bf5e 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic_en.properties @@ -1,4 +1,4 @@ diagnosticMessage=Check access to the file system -diagnosticName=FileSystemAccess +diagnosticName=File system access globalMethods=Global methods pattern (regex) newExpression=Class names pattern (regex) From 8daad34bab88d9044718ca4d2d835f7634996352 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Tue, 4 Jun 2024 19:37:20 +0300 Subject: [PATCH 488/595] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B8=D0=B4=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8=20-=20=D0=BF=D0=BE=20=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=83=20=D0=B2=D1=8B=D1=80=D0=B0=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B8=20=D0=B5=D1=89=D0=B5=20=D0=BA=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D0=BD=D1=8B=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BE=D1=80=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractExpressionTreeDiagnostic.java | 91 +++++++++++++++++++ .../DoubleNegativesDiagnostic.java | 57 +++++++++--- .../IdenticalExpressionsDiagnostic.java | 50 ++++++---- .../expressiontree/BinaryOperationNode.java | 8 +- .../utils/expressiontree/BslExpression.java | 8 +- .../expressiontree/BslOperationNode.java | 2 +- .../ExpressionParseTreeRewriter.java | 44 --------- .../ExpressionTreeBuildingVisitor.java | 22 ++++- .../expressiontree/ExpressionTreeVisitor.java | 53 +++++++++++ .../expressiontree/TerminalSymbolNode.java | 2 +- .../DoubleNegativesDiagnosticTest.java | 10 +- .../ExpressionParseTreeRewriterTest.java | 19 +++- .../utils/ExpressionTreeComparersTest.java | 4 +- 13 files changed, 282 insertions(+), 88 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java delete mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java new file mode 100644 index 00000000000..d6d13c383af --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java @@ -0,0 +1,91 @@ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeVisitor; +import com.github._1c_syntax.bsl.parser.BSLParser; +import lombok.Getter; +import lombok.Setter; +import org.antlr.v4.runtime.tree.ParseTree; +import org.eclipse.lsp4j.Diagnostic; + +import java.util.List; + +/** + * Диагностика, анализирующая выражения BSL и предоставляющая для этого Expression Tree + */ +public abstract class AbstractExpressionTreeDiagnostic extends ExpressionTreeVisitor implements BSLDiagnostic { + @Getter + @Setter + protected DiagnosticInfo info; + protected final DiagnosticStorage diagnosticStorage = new DiagnosticStorage(this); + protected DocumentContext documentContext; + + @Override + public final List getDiagnostics(DocumentContext documentContext) { + this.documentContext = documentContext; + diagnosticStorage.clearDiagnostics(); + + var expressionTreeBuilder = new ExpressionTreeBuilder(); + expressionTreeBuilder.visitFile(documentContext.getAst()); + + return diagnosticStorage.getDiagnostics(); + } + + /** + * При входе в выражение вызывается данный метод. + * Переопределяя его можно оценить - имеет ли смысл строить дерево выражения, или данное выражение не подходит. + * Позволяет сократить время на построение дерева, если это не требуется для данного AST. + * @param ctx - выражение, которое в данный момент посещается. + * @return + * - если надо прекратить обход в глубину и построить Expression Tree на данном выражении - надо вернуть ACCEPT + * - если надо пройти дальше и посетить дочерние выражения, не затрагивая данное - надо вернуть VISIT_CHILDREN + * - если надо пропустить выражение, не ходить глубже и не строить Expression Tree - надо вернуть SKIP + */ + protected ExpressionVisitorDecision onExpressionEnter(BSLParser.ExpressionContext ctx) { + return ExpressionVisitorDecision.ACCEPT; + } + + /** + * Стратегия по построению дерева выражения на основе выражения AST + */ + protected enum ExpressionVisitorDecision { + + /** + * Не обрабатывать выражение + */ + SKIP, + + /** + * Обработать данное выражение (построить для него ExpressionTree) + */ + ACCEPT, + + /** + * Пропустить данное выражение и обойти вложенные в него выражения + */ + VISIT_CHILDREN; + } + + private class ExpressionTreeBuilder extends ExpressionTreeBuildingVisitor { + @Override + public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { + + var result = onExpressionEnter(ctx); + return switch (result) { + case SKIP -> ctx; + case ACCEPT -> { + super.visitExpression(ctx); + var expressionTree = getExpressionTree(); + if (expressionTree != null) // нашлись выражения в предложенном файле + visitTopLevelExpression(expressionTree); + + yield ctx; + } + case VISIT_CHILDREN -> super.visitChildren(ctx); + }; + } + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 94952ad9608..8a7d27e6f63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -4,9 +4,13 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionParseTreeRewriter; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BinaryOperationNode; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslExpression; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionNodeType; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.UnaryOperationNode; import com.github._1c_syntax.bsl.parser.BSLParser; -import org.antlr.v4.runtime.tree.ParseTree; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -17,22 +21,53 @@ DiagnosticTag.BADPRACTICE } ) -public class DoubleNegativesDiagnostic extends AbstractVisitorDiagnostic { +public class DoubleNegativesDiagnostic extends AbstractExpressionTreeDiagnostic { - private static final int MIN_EXPRESSION_SIZE = 3; + @Override + protected ExpressionVisitorDecision onExpressionEnter(BSLParser.ExpressionContext ctx) { + return super.onExpressionEnter(ctx); + } @Override - public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { + protected void visitBinaryOperation(BinaryOperationNode node) { + + if (node.getOperator() != BslOperator.EQUAL && node.getOperator() != BslOperator.NOT_EQUAL) { + super.visitBinaryOperation(node); + return; + } + + var parent = node.getParent(); + + if (parent == null || !isNegationOperator(parent)) { + super.visitBinaryOperation(node); + return; + } - if (sufficientSize(ctx)) - return ctx; + if (node.getOperator() == BslOperator.NOT_EQUAL) { + addDiagnostic(node); + } else if (isBooleanLiteral(node.getLeft()) || isBooleanLiteral(node.getRight())) { + addDiagnostic(node); + } - var tree = ExpressionParseTreeRewriter.buildExpressionTree(ctx); + super.visitBinaryOperation(node); + } + + private boolean isBooleanLiteral(BslExpression node) { + if (node.getNodeType() != ExpressionNodeType.LITERAL) + return false; - return ctx; + var constant = (BSLParser.ConstValueContext) node.getRepresentingAst(); + return constant.TRUE() != null || constant.FALSE() != null; } - private static boolean sufficientSize(BSLParser.ExpressionContext ctx) { - return ctx.children.size() < MIN_EXPRESSION_SIZE; + private static boolean isNegationOperator(BslExpression parent) { + return parent.getNodeType() == ExpressionNodeType.UNARY_OP && parent.cast().getOperator() == BslOperator.NOT; + } + + private void addDiagnostic(BinaryOperationNode node) { + var startToken = Trees.getTokens(node.getParent().getRepresentingAst()).stream().findFirst().orElseThrow(); + var endToken = Trees.getTokens(node.getRight().getRepresentingAst()).stream().reduce((one, two) -> two).orElseThrow(); + + diagnosticStorage.addDiagnostic(startToken, endToken); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java index 5b81dee5aa8..46d3bd114de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java @@ -34,7 +34,7 @@ import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslExpression; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionNodeType; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionParseTreeRewriter; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.NodeEqualityComparer; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.TernaryOperatorNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.TransitiveOperationsIgnoringComparer; @@ -62,7 +62,7 @@ } ) @RequiredArgsConstructor -public class IdenticalExpressionsDiagnostic extends AbstractVisitorDiagnostic { +public class IdenticalExpressionsDiagnostic extends AbstractExpressionTreeDiagnostic { private static final int MIN_EXPRESSION_SIZE = 3; private static final String POPULAR_DIVISORS_DEFAULT_VALUE = "60, 1024"; @@ -73,7 +73,10 @@ public class IdenticalExpressionsDiagnostic extends AbstractVisitorDiagnostic { ) private Set popularDivisors = parseCommaSeparatedSet(POPULAR_DIVISORS_DEFAULT_VALUE); private final FormatProvider formatProvider; - + + private final List binaryOperations = new ArrayList<>(); + private BSLParser.ExpressionContext expressionContext; + private static Set parseCommaSeparatedSet(String values) { if (values.trim().isEmpty()) { return Collections.emptySet(); @@ -95,28 +98,41 @@ public void configure(Map configuration) { } @Override - public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { - - if (sufficientSize(ctx)) { - return ctx; - } - - var tree = ExpressionParseTreeRewriter.buildExpressionTree(ctx); + protected ExpressionVisitorDecision onExpressionEnter(BSLParser.ExpressionContext ctx) { + expressionContext = ctx; + return sufficientSize(ctx)? ExpressionVisitorDecision.SKIP : ExpressionVisitorDecision.ACCEPT; + } - var binariesList = flattenBinaryOperations(tree); - if (binariesList.isEmpty()) { - return ctx; - } + @Override + protected void visitTopLevelExpression(BslExpression node) { + binaryOperations.clear(); + super.visitTopLevelExpression(node); var comparer = new TransitiveOperationsIgnoringComparer(); comparer.logicalOperationsAsTransitive(true); - binariesList + binaryOperations .stream() .filter(x -> checkEquality(comparer, x)) - .forEach(x -> diagnosticStorage.addDiagnostic(ctx, + .forEach(x -> diagnosticStorage.addDiagnostic(expressionContext, info.getMessage(x.getRepresentingAst().getText(), getOperandText(x)))); + } + + @Override + protected void visitBinaryOperation(BinaryOperationNode node) { + var operator = node.getOperator(); + + // разыменования отбросим, хотя comparer их и не зачтет, но для производительности + // лучше выкинем их сразу + if (operator == BslOperator.DEREFERENCE || operator == BslOperator.INDEX_ACCESS) { + return; + } + + // одинаковые умножения и сложения - не считаем, см. тесты + if (operator != BslOperator.ADD && operator != BslOperator.MULTIPLY) { + binaryOperations.add(node); + } - return ctx; + super.visitBinaryOperation(node); } private boolean checkEquality(NodeEqualityComparer comparer, BinaryOperationNode node) { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java index acde5b6f19b..31549e9b98f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java @@ -22,16 +22,16 @@ package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.ToString; -import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; -@Value +@Getter @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class BinaryOperationNode extends BslOperationNode { - BslExpression left; - BslExpression right; + private final BslExpression left; + private final BslExpression right; private BinaryOperationNode(BslOperator operator, BslExpression left, BslExpression right, ParseTree actualSourceCode) { super(ExpressionNodeType.BINARY_OP, operator, actualSourceCode); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java index 76bc9dc1da0..72a98f95e9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java @@ -24,18 +24,22 @@ import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.antlr.v4.runtime.tree.ParseTree; @Data @RequiredArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) -@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true) public abstract class BslExpression { private final ExpressionNodeType nodeType; private ParseTree representingAst; + @ToString.Exclude + @Setter(AccessLevel.PACKAGE) + private BslExpression parent; + /** * Синтаксический-помощник для более удобных downcast-ов * @param тип, к которому надо привести данный узел diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java index 8afabd15956..fa065e25bae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java @@ -36,7 +36,7 @@ public abstract class BslOperationNode extends BslExpression { BslOperator operator; protected BslOperationNode(ExpressionNodeType type, BslOperator operator, ParseTree sourceCodeOperator) { - super(type, sourceCodeOperator); + super(type, sourceCodeOperator, null); this.operator = operator; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java deleted file mode 100644 index c580191eb8d..00000000000 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionParseTreeRewriter.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is a part of BSL Language Server. - * - * Copyright (c) 2018-2024 - * Alexey Sosnoviy , Nikita Fedkin and contributors - * - * SPDX-License-Identifier: LGPL-3.0-or-later - * - * BSL Language Server is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * BSL Language Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BSL Language Server. - */ -package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; - -import com.github._1c_syntax.bsl.parser.BSLParser; - - -/** - * Преобразователь выражения в дерево вычисления. - */ -public final class ExpressionParseTreeRewriter { - - private ExpressionParseTreeRewriter(){ - } - - /** - * @return результирующее выражение в виде дерева вычисления операций - */ - public static BslExpression buildExpressionTree(BSLParser.ExpressionContext expression) { - var visitor = new ExpressionTreeBuildingVisitor(); - visitor.visitExpression(expression); - return visitor.getExpressionTree(); - } - -} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 53c8019f6ba..8be9b8973ce 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -37,9 +37,9 @@ /** - * внутренний, неэкспортируемый класс. + * Посетитель AST, который находит выражения и преобразует их в Expression Tree */ -class ExpressionTreeBuildingVisitor extends BSLParserBaseVisitor { +public class ExpressionTreeBuildingVisitor extends BSLParserBaseVisitor { @Value private static class OperatorInCode { @@ -57,6 +57,17 @@ public int getPriority() { private BslExpression resultExpression; private int recursionLevel = -1; + /** + * Хелпер построения дерева выражения на основе готового AST выражения + * @param ctx AST выражения + * @return дерево вычисления выражения + */ + public static BslExpression buildExpressionTree(BSLParser.ExpressionContext ctx) { + var instance = new ExpressionTreeBuildingVisitor(); + instance.visitExpression(ctx); + return instance.getExpressionTree(); + } + /** * @return результирующее выражение в виде дерева вычисления операций */ @@ -358,7 +369,7 @@ public ParseTree visitTernaryOperator(BSLParser.TernaryOperatorContext ctx) { } private static BslExpression makeSubexpression(BSLParser.ExpressionContext ctx) { - return ExpressionParseTreeRewriter.buildExpressionTree(ctx); + return buildExpressionTree(ctx); } private static void addCallArguments(AbstractCallNode callNode, List args) { @@ -383,11 +394,16 @@ private void buildOperation() { var operand = operands.pop(); var operation = UnaryOperationNode.create(operator.getOperator(), operand, operator.getActualSourceCode()); + operand.setParent(operation); operands.push(operation); } else { var right = operands.pop(); var left = operands.pop(); var binaryOp = BinaryOperationNode.create(operator.getOperator(), left, right, operator.getActualSourceCode()); + + left.setParent(binaryOp); + right.setParent(binaryOp); + operands.push(binaryOp); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java new file mode 100644 index 00000000000..868e29b163c --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java @@ -0,0 +1,53 @@ +package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; + +/** + * Обходчик дерева выражений + */ +public class ExpressionTreeVisitor { + + private void visit(BslExpression node) { + switch (node.getNodeType()) { + case CALL: + visitAbstractCall((AbstractCallNode) node); + break; + case UNARY_OP: + visitUnaryOperation((UnaryOperationNode) node); + break; + case TERNARY_OP: + var ternary = (TernaryOperatorNode) node; + visitTernaryOperator(ternary); + break; + case BINARY_OP: + visitBinaryOperation((BinaryOperationNode)node); + break; + + default: + break; // для спокойствия сонара + } + } + + protected void visitTopLevelExpression(BslExpression node) { + visit(node); + } + + protected void visitAbstractCall(AbstractCallNode node) { + for (var expr : node.arguments()) { + visit(expr); + } + } + + protected void visitUnaryOperation(UnaryOperationNode node) { + visit(node.getOperand()); + } + + protected void visitBinaryOperation(BinaryOperationNode node) { + visit(node.getLeft()); + visit(node.getRight()); + } + + protected void visitTernaryOperator(TernaryOperatorNode node) { + visit(node.getCondition()); + visit(node.getTruePart()); + visit(node.getFalsePart()); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java index dae120ca7b3..e32ae01ee08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java @@ -30,7 +30,7 @@ */ public class TerminalSymbolNode extends BslExpression { private TerminalSymbolNode(ExpressionNodeType type, ParseTree representingAst) { - super(type, representingAst); + super(type, representingAst, null); } /** diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java index 9a571e52415..387f4d289c8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -18,7 +18,15 @@ void test() { List diagnostics = getDiagnostics(); assertThat(diagnostics, true) - .hasRange(3, 6, 3, 74) + .hasRange(1, 5, 1, 73) + .hasRange(7, 4, 7, 19) + .hasRange(8, 4, 8, 20) + .hasRange(9, 4, 9, 20) + .hasRange(10, 4, 10, 21) + .hasRange(11, 4, 11, 42) + .hasRange(12, 4, 12, 42) + .hasRange(13, 4, 13, 25) + .hasRange(14, 4, 14, 25) ; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index 028ede22c6c..e9b430abad2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -28,7 +28,7 @@ import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ConstructorCallNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionNodeType; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionParseTreeRewriter; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.MethodCallNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.SkippedCallArgumentNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.UnaryOperationNode; @@ -146,6 +146,21 @@ void booleanPriority() { } + @Test + void booleanNotPriority() { + var code = "Рез = Не Б <> Неопределено И Ложь"; + var expressionTree = getExpressionTree(code); + var binary = (BinaryOperationNode) expressionTree; + + assertThat(binary.getOperator()).isEqualTo(BslOperator.AND); + + var negation = binary.getLeft().cast(); + assertThat(negation.getNodeType()).isEqualTo(ExpressionNodeType.UNARY_OP); + assertThat(negation.getOperator()).isEqualTo(BslOperator.NOT); + + assertThat((binary.getLeft()).getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); + } + @Test void dereferenceOfProperty() { var code = "Рез = Структура.Свойство"; @@ -357,6 +372,6 @@ void notOperatorPriority_with_parenthesis() { BslExpression getExpressionTree(String code) { var expression = parse(code); - return ExpressionParseTreeRewriter.buildExpressionTree(expression); + return ExpressionTreeBuildingVisitor.buildExpressionTree(expression); } } \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java index 0a654d5fdb9..375ee3cb2f2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java @@ -26,7 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslExpression; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.DefaultNodeEqualityComparer; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionParseTreeRewriter; +import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.TransitiveOperationsIgnoringComparer; import com.github._1c_syntax.bsl.parser.BSLParser; import org.junit.jupiter.api.Test; @@ -72,7 +72,7 @@ BSLParser.ExpressionContext parse(String code) { BslExpression getExpressionTree(String code) { var expression = parse(code); - return ExpressionParseTreeRewriter.buildExpressionTree(expression); + return ExpressionTreeBuildingVisitor.buildExpressionTree(expression); } } From ae51c6e798a30cd9def1593e0f8421d533b0fae7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 4 Jun 2024 19:06:58 +0000 Subject: [PATCH 489/595] =?UTF-8?q?=D0=A1=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20jdk21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/check-package.yml | 2 +- .github/workflows/gradle.yml | 2 +- .github/workflows/release.yml | 2 +- docs/en/systemRequirements.md | 2 +- docs/systemRequirements.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index 406db7c187e..0aafe4335dd 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -36,7 +36,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - java-version: 20 + java-version: 21 distribution: 'temurin' cache: gradle diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 1879e2262b2..5d3c2e361f2 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - java_version: ['17', '20'] + java_version: ['17', '21'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0c1ba6c3209..783c4057b71 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,7 +33,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - java-version: 20 + java-version: 21 distribution: 'temurin' cache: gradle diff --git a/docs/en/systemRequirements.md b/docs/en/systemRequirements.md index 64b79c356af..edc3e8a9044 100644 --- a/docs/en/systemRequirements.md +++ b/docs/en/systemRequirements.md @@ -6,7 +6,7 @@ Using `BSL Language Server` has some limitations, listed bellow `BSL Language Server` is a console Java application and requires the presence of a Java virtual machine on the computer. -The minimum supported version is Java 17, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 17 and 20 are currently supported. +The minimum supported version is Java 17, but as part of the build pipelines, a health check is performed when using more recent versions. Java versions 17 and 21 are currently supported. JDK vendor is also interesting. Due to the changed licensing policy of Oracle, it is recommended to use open implementations of the `OpenJDK` virtual machine: AdoptOpenJDK, Liberica JDK. diff --git a/docs/systemRequirements.md b/docs/systemRequirements.md index 6d6bc14fad1..a5038f2bb47 100644 --- a/docs/systemRequirements.md +++ b/docs/systemRequirements.md @@ -6,7 +6,7 @@ `BSL Language Server` представляет собой консольное Java приложение, соответственно, для его функционирования необходимо наличие виртуальной машины Java на компьютере. -На данный момент минимальной поддерживаемой версией является Java 17, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 17 и 20. +На данный момент минимальной поддерживаемой версией является Java 17, но в рамках сборочных конвейеров происходит проверка работоспособности при использовании более свежих версий. На данный момент поддерживаются Java версий 17 и 21. Кроме версии Java интересен и вендор JDK. В связи с изменившейся политикой лицензирования Oracle, рекомендуется использование открытых реализаций виртуальной машины `OpenJDK`: AdoptOpenJDK, Liberica JDK. From b35f58f7c79185fe8d0fb4e2171d6d6f24d5cdee Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 4 Jun 2024 19:16:57 +0000 Subject: [PATCH 490/595] .devcontainers --- .devcontainer/devcontainer.json | 29 ++++++++++++++++++++++++++++- .github/dependabot.yml | 4 ++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 76edfa61db8..537f1b340b8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1 +1,28 @@ -{"image":"mcr.microsoft.com/devcontainers/universal:2"} \ No newline at end of file +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/java +{ + "name": "Java", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/java:1-17-bookworm", + + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "none", + "installMaven": "false", + "installGradle": "true" + }, + "ghcr.io/devcontainers/features/python:1": {} + } + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "java -version", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7b69fdb395b..cd99e05a5b4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -17,3 +17,7 @@ updates: directory: "/" schedule: interval: "daily" + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly \ No newline at end of file From 2b658b13e643e59cf19af8dc82bd07c32b7d2813 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 19:17:28 +0000 Subject: [PATCH 491/595] build(deps): bump dawidd6/action-download-artifact from 4 to 5 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 4 to 5. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index c9697209261..d3fa9fe8363 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Download PR number artifact if: github.event.workflow_run.event == 'pull_request' - uses: dawidd6/action-download-artifact@v4 + uses: dawidd6/action-download-artifact@v5 with: workflow: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} From 43a3c7b7456a119f10dde7ce141b74b9f958a134 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 4 Jun 2024 19:24:36 +0000 Subject: [PATCH 492/595] Some extensions to dev container --- .devcontainer/devcontainer.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 537f1b340b8..3e87a12aa22 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,6 +12,14 @@ "installGradle": "true" }, "ghcr.io/devcontainers/features/python:1": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "vscjava.vscode-gradle", + "GitHub.vscode-github-actions" + ] + } } // Use 'forwardPorts' to make a list of ports inside the container available locally. From 1650bab05c0407ea61bb9abffc275231dacfa86f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 4 Jun 2024 19:54:05 +0000 Subject: [PATCH 493/595] Update dependencies --- .devcontainer/devcontainer.json | 4 ++- build.gradle.kts | 29 +++++++++++-------- .../testrunner/TestRunnerAdapter.java | 5 ++-- .../diagnostics/TypoDiagnostic.java | 7 ++--- .../languageserver/BSLLanguageServerTest.java | 4 +-- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 3e87a12aa22..1b6a3b2913c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -17,7 +17,9 @@ "vscode": { "extensions": [ "vscjava.vscode-gradle", - "GitHub.vscode-github-actions" + "GitHub.vscode-github-actions", + "astrizhachuk.1c-extension-pack", + "zhuangtongfa.Material-theme" ] } } diff --git a/build.gradle.kts b/build.gradle.kts index 064bc21f346..37af904a504 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,4 @@ +import gradlegitproperties.org.ajoberstar.grgit.Grgit import me.qoomon.gitversioning.commons.GitRefType import org.apache.tools.ant.filters.EscapeUnicode import java.util.* @@ -16,7 +17,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.2.5" + id("org.springframework.boot") version "3.3.0" id("io.spring.dependency-management") version "1.1.5" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.0" id("ru.vyarus.pom") version "3.0.0" @@ -50,9 +51,13 @@ gitVersioning.apply { } } +gitProperties { + customProperty("git.build.time", "2018-03-28T05:13:53Z") +} + val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "6.1" +val languageToolVersion = "6.4" dependencyManagement { imports { @@ -70,8 +75,8 @@ dependencies { api("info.picocli:picocli-spring-boot-starter:4.7.6") // lsp4j core - api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.21.0") - api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.21.0") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j", "0.23.1") + api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket.jakarta", "0.23.1") // 1c-syntax api("io.github.1c-syntax", "bsl-parser", "0.24.0") { @@ -95,19 +100,19 @@ dependencies { implementation("org.languagetool", "language-ru", languageToolVersion) // AOP - implementation("org.aspectj", "aspectjrt", "1.9.19") + implementation("org.aspectj", "aspectjrt", "1.9.22.1") // commons utils - implementation("commons-io", "commons-io", "2.13.0") - implementation("org.apache.commons", "commons-lang3", "3.12.0") + implementation("commons-io", "commons-io", "2.16.1") + implementation("org.apache.commons", "commons-lang3", "3.14.0") implementation("commons-beanutils", "commons-beanutils", "1.9.4"){ exclude("commons-logging", "commons-logging") } implementation("org.apache.commons", "commons-collections4", "4.4") - implementation("org.apache.commons", "commons-exec", "1.3") + implementation("org.apache.commons", "commons-exec", "1.4.0") // progress bar - implementation("me.tongfei", "progressbar", "0.9.5") + implementation("me.tongfei", "progressbar", "0.10.1") // (de)serialization implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") @@ -126,7 +131,7 @@ dependencies { // CONSTRAINTS implementation("com.google.guava:guava") { version { - strictly("32.0.1-jre") + strictly("33.2.1-jre") } } @@ -142,11 +147,11 @@ dependencies { // test utils testImplementation("org.jmockit", "jmockit", "1.49") - testImplementation("org.awaitility", "awaitility", "4.2.0") + testImplementation("org.awaitility", "awaitility", "4.2.1") } lombok { - version.set("edge-SNAPSHOT") + version.set("1.18.32") } jacoco { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index c853bb4b290..badd8e71f7f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -38,6 +38,7 @@ import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Paths; +import java.time.Duration; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -83,14 +84,14 @@ private List computeTestIds(DocumentContext documentContext) { var getTestsCommand = new CommandLine(executable).addArguments(arguments, false); var timeout = 10_000L; - var watchdog = new ExecuteWatchdog(timeout); + var watchdog = ExecuteWatchdog.builder().setTimeout(Duration.ofMillis(timeout)).get(); var outputStream = new ByteArrayOutputStream(); var streamHandler = new PumpStreamHandler(outputStream); var resultHandler = new DefaultExecuteResultHandler(); - var executor = new DefaultExecutor(); + var executor = DefaultExecutor.builder().get(); executor.setWatchdog(watchdog); executor.setStreamHandler(streamHandler); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java index 5183d00a53c..32db59a0a11 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java @@ -38,8 +38,7 @@ import org.antlr.v4.runtime.Token; import org.apache.commons.lang3.StringUtils; import org.languagetool.JLanguageTool; -import org.languagetool.language.AmericanEnglish; -import org.languagetool.language.Russian; +import org.languagetool.Languages; import org.languagetool.rules.RuleMatch; import java.io.IOException; @@ -68,8 +67,8 @@ public class TypoDiagnostic extends AbstractDiagnostic { @Getter(lazy = true, value = AccessLevel.PRIVATE) private static final Map languageToolPoolMap = Map.of( - "en", new JLanguageToolPool(new AmericanEnglish()), - "ru", new JLanguageToolPool(new Russian()) + "en", new JLanguageToolPool(Languages.getLanguageForShortCode("en-US")), + "ru", new JLanguageToolPool(Languages.getLanguageForShortCode("ru")) ); /** diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java index 479b4ddcebb..73db8cd1116 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java @@ -66,7 +66,7 @@ void initialize() throws ExecutionException, InterruptedException { // given InitializeParams params = new InitializeParams(); - WorkspaceFolder workspaceFolder = new WorkspaceFolder(Absolute.path(PATH_TO_METADATA).toUri().toString()); + WorkspaceFolder workspaceFolder = new WorkspaceFolder(Absolute.path(PATH_TO_METADATA).toUri().toString(), "test"); List workspaceFolders = List.of(workspaceFolder); params.setWorkspaceFolders(workspaceFolders); @@ -82,7 +82,7 @@ void initializeRename() throws ExecutionException, InterruptedException { // given InitializeParams params = new InitializeParams(); - WorkspaceFolder workspaceFolder = new WorkspaceFolder(Absolute.path(PATH_TO_METADATA).toUri().toString()); + WorkspaceFolder workspaceFolder = new WorkspaceFolder(Absolute.path(PATH_TO_METADATA).toUri().toString(), "test"); List workspaceFolders = List.of(workspaceFolder); params.setWorkspaceFolders(workspaceFolders); From 824894f23c76c787d5eb8e7261a5458c6fb78601 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 4 Jun 2024 22:35:22 +0200 Subject: [PATCH 494/595] Downgrade spring boot to 3.2.5 Until javadoc issue will be resolved --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 37af904a504..3f4c1d1de9d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.6" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.3.0" + id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.5" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.0" id("ru.vyarus.pom") version "3.0.0" From 9524c1313cebe489a7ce5141f7b3734ca655cbb9 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Wed, 5 Jun 2024 08:34:42 +0300 Subject: [PATCH 495/595] add buildtime --- build.gradle.kts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3f4c1d1de9d..5a70f42f60f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,7 @@ import gradlegitproperties.org.ajoberstar.grgit.Grgit import me.qoomon.gitversioning.commons.GitRefType import org.apache.tools.ant.filters.EscapeUnicode import java.util.* +import java.text.SimpleDateFormat plugins { `java-library` @@ -52,7 +53,7 @@ gitVersioning.apply { } gitProperties { - customProperty("git.build.time", "2018-03-28T05:13:53Z") + customProperty("git.build.time", buildTime()) } val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG @@ -390,3 +391,9 @@ nexusStaging { tasks.withType { enabled = false } + +fun buildTime(): String { + val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") + formatter.timeZone = TimeZone.getTimeZone("UTC") + return formatter.format(Date()) +} From 1842f447a06f40638ebd02a7d40b8bf947481a73 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Thu, 6 Jun 2024 15:24:03 +0300 Subject: [PATCH 496/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20=D0=B7=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleNegativesDiagnostic.java | 22 +++++++++++++++++++ .../ExpressionTreeBuildingVisitor.java | 11 ++++++++-- .../DoubleNegativesDiagnosticTest.java | 7 +++++- .../ExpressionParseTreeRewriterTest.java | 2 +- .../diagnostics/DoubleNegativesDiagnostic.bsl | 5 +++-- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 8a7d27e6f63..52ed915f451 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -52,6 +52,21 @@ protected void visitBinaryOperation(BinaryOperationNode node) { super.visitBinaryOperation(node); } + @Override + protected void visitUnaryOperation(UnaryOperationNode node) { + if (node.getOperator() == BslOperator.NOT && + node.getParent() != null && + node.getParent().getNodeType() == ExpressionNodeType.UNARY_OP) { + + var unaryParent = node.getParent().cast(); + if (unaryParent.getOperator() == BslOperator.NOT) { + addDiagnostic(node); + } + } + + super.visitUnaryOperation(node); + } + private boolean isBooleanLiteral(BslExpression node) { if (node.getNodeType() != ExpressionNodeType.LITERAL) return false; @@ -70,4 +85,11 @@ private void addDiagnostic(BinaryOperationNode node) { diagnosticStorage.addDiagnostic(startToken, endToken); } + + private void addDiagnostic(UnaryOperationNode node) { + var startToken = Trees.getTokens(node.getParent().getRepresentingAst()).stream().findFirst().orElseThrow(); + var endToken = Trees.getTokens(node.getOperand().getRepresentingAst()).stream().reduce((one, two) -> two).orElseThrow(); + + diagnosticStorage.addDiagnostic(startToken, endToken); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 8be9b8973ce..250ae335c63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -192,14 +192,21 @@ private void processOperation(OperatorInCode operator) { return; } - var lastSeenOperator = operatorsInFly.peek(); - if (lastSeenOperator.getPriority() > operator.getPriority()) { + while (hasHigherPriorityOperatorsInFly(operator)) { buildOperation(); } operatorsInFly.push(operator); } + private boolean hasHigherPriorityOperatorsInFly(OperatorInCode operator) { + var lastSeenOperator = operatorsInFly.peek(); + if (lastSeenOperator == null) + return false; + + return lastSeenOperator.getPriority() > operator.getPriority(); + } + private static BslOperator getOperator(BSLParser.OperationContext ctx) { if (ctx.PLUS() != null) { return BslOperator.ADD; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java index 387f4d289c8..c6c5236c83e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -26,7 +26,12 @@ void test() { .hasRange(11, 4, 11, 42) .hasRange(12, 4, 12, 42) .hasRange(13, 4, 13, 25) - .hasRange(14, 4, 14, 25) + .hasRange(14, 4, 14, 24) + .hasRange(19, 5, 19, 38) + .hasRange(23, 19, 23, 39) + .hasRange(32, 4, 32, 26) + .hasRange(33, 4, 33, 36) + .hasRange(39, 4, 39, 19) ; } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index e9b430abad2..c97ae2dd585 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -158,7 +158,7 @@ void booleanNotPriority() { assertThat(negation.getNodeType()).isEqualTo(ExpressionNodeType.UNARY_OP); assertThat(negation.getOperator()).isEqualTo(BslOperator.NOT); - assertThat((binary.getLeft()).getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); + assertThat((binary.getRight()).getNodeType()).isEqualTo(ExpressionNodeType.LITERAL); } @Test diff --git a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl index 24799667ebd..f0493b0ec06 100644 --- a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl +++ b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl @@ -20,7 +20,7 @@ Пока Не Таблица.Данные <> Неопределено Цикл КонецЦикла; -Б = Не (Не А = 1 или Б <> Неопределено); // срабатывает на "Не А = 1" +Б = Не (Не А = 1 или Б <> Неопределено); // не срабатывает на "Не А = 1" Б = Не (А <> 1 или Не Б <> Неопределено); // срабатывает на "Не Б <> Неопределено" Б = Не (А <> 1 или Не Б = Неопределено); // не срабатывает на "Не Б <> Неопределено" т.к. сравнения вида Не Х = Неопределено популярны @@ -37,4 +37,5 @@ // Прямое двойное отрицание -Б = Не (Не Значение); \ No newline at end of file +Б = Не (Не Значение); +Б = Не (Не Значение И ДругоеЗначение); // не срабатывает \ No newline at end of file From 0e597d58ca12b81e88293a0e477850da0af5d8e4 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Thu, 6 Jun 2024 15:35:32 +0300 Subject: [PATCH 497/595] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/DoubleNegativesDiagnostic_en.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties index 5349a4b9fcc..b40f038bd92 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic_en.properties @@ -1,2 +1,2 @@ -diagnosticMessage=Using double negatives complicates understandong of code +diagnosticMessage=Using double negatives complicates understanding of code diagnosticName=Double negatives From 7ad97669963ef0d689dedae7f972fdbf3ee724fd Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Thu, 6 Jun 2024 15:39:07 +0300 Subject: [PATCH 498/595] gradlew precommit --- docs/diagnostics/DoubleNegatives.md | 2 +- docs/en/diagnostics/DoubleNegatives.md | 2 +- .../AbstractExpressionTreeDiagnostic.java | 21 +++++++++++++++++++ .../DoubleNegativesDiagnostic.java | 21 +++++++++++++++++++ .../expressiontree/ExpressionTreeVisitor.java | 21 +++++++++++++++++++ .../configuration/parameters-schema.json | 10 +++++++++ .../languageserver/configuration/schema.json | 3 +++ .../DoubleNegativesDiagnosticTest.java | 21 +++++++++++++++++++ 8 files changed, 99 insertions(+), 2 deletions(-) diff --git a/docs/diagnostics/DoubleNegatives.md b/docs/diagnostics/DoubleNegatives.md index dfc19134c94..fda21235024 100644 --- a/docs/diagnostics/DoubleNegatives.md +++ b/docs/diagnostics/DoubleNegatives.md @@ -27,4 +27,4 @@ ## Источники -* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) \ No newline at end of file +* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md index 5a960bb659c..3a6b3059d40 100644 --- a/docs/en/diagnostics/DoubleNegatives.md +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -25,4 +25,4 @@ EndIf; ## Sources -* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) \ No newline at end of file +* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java index d6d13c383af..6481916867f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 52ed915f451..1c416d31ce5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java index 868e29b163c..951ac2b76d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.utils.expressiontree; /** diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 749df4a1160..917a458b09c 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -526,6 +526,16 @@ "title": "Disable safe mode", "$id": "#/definitions/DisableSafeMode" }, + "DoubleNegatives": { + "description": "Double negatives", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "Double negatives", + "$id": "#/definitions/DoubleNegatives" + }, "DuplicateRegion": { "description": "Duplicate regions", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 96fdadfbdff..e22c02dd4b2 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -149,6 +149,9 @@ "DisableSafeMode": { "$ref": "parameters-schema.json#/definitions/DisableSafeMode" }, + "DoubleNegatives": { + "$ref": "parameters-schema.json#/definitions/DoubleNegatives" + }, "DuplicateRegion": { "$ref": "parameters-schema.json#/definitions/DuplicateRegion" }, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java index c6c5236c83e..1880469c2c1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.diagnostics; import org.eclipse.lsp4j.Diagnostic; From 1623f327ddf2adac4050a43a1cd95aeb1b5b8352 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 6 Jun 2024 20:57:23 +0000 Subject: [PATCH 499/595] Fix depreciation warnings from jdk21 --- .../configuration/watcher/ConfigurationFileSystemWatcher.java | 3 +++ .../context/computer/DiagnosticIgnoranceComputer.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index c7175da391e..37999e7f76a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -56,6 +56,7 @@ @Component @Slf4j @RequiredArgsConstructor +@SuppressWarnings("removal") // SensitivityWatchEventModifier is deprecated in jdk21 public class ConfigurationFileSystemWatcher { private final LanguageServerConfiguration configuration; @@ -131,6 +132,8 @@ private void registerWatchService(File configurationFile) { registeredPath = configurationDir; + // TODO: SensitivityWatchEventModifier is deprecated in java 21 and marked for removal. + // We need to drop usage of it here when we change our baseline to jdk 21 watchKey = registeredPath.register( watchService, new WatchEvent.Kind[]{ diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index 28ace78241f..5c3ee42e89a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -227,7 +227,7 @@ private boolean checkIgnoreOn( private void addIgnoredRange(DiagnosticCode diagnosticKey, int ignoreRangeStart, int ignoreRangeEnd) { // convert antlr4 line numbers (1..n) to lsp (0..n) - Range ignoreRange = Range.between(ignoreRangeStart - 1, ignoreRangeEnd - 1); + Range ignoreRange = Range.of(ignoreRangeStart - 1, ignoreRangeEnd - 1); final List> ranges = diagnosticIgnorance.computeIfAbsent(diagnosticKey, s -> new ArrayList<>()); ranges.add(ignoreRange); } From 97288600c10ba8a4c497cca944a5591f3d56266e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 6 Jun 2024 21:01:58 +0000 Subject: [PATCH 500/595] Add sarif from the benchmark to arficats --- .github/scripts/benchmark.py | 2 ++ .github/workflows/benchmark.yml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/.github/scripts/benchmark.py b/.github/scripts/benchmark.py index 3bb69bac0de..04e561792c7 100644 --- a/.github/scripts/benchmark.py +++ b/.github/scripts/benchmark.py @@ -20,6 +20,8 @@ def some_func(arg): cmdArgs.append('-a') cmdArgs.append('-s') cmdArgs.append('ssl') + cmdArgs.append('-r') + cmdArgs.append('sarif') cmdArgs.append('-c') cmdArgs.append(pathToConfig) cmd = ' '.join(cmdArgs) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 24f4b47c2d6..5d73464866b 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -52,6 +52,12 @@ jobs: - name: Analyze ssl run: pytest .github/scripts/benchmark.py --benchmark-min-rounds=3 --benchmark-timer=time.time --benchmark-json=output.json --benchmark-verbose + - name: Archive results in SARIF + uses: actions/upload-artifact@v4 + with: + name: "SARIF report" + path: bsl-ls.sarif + - name: Generation badge benchmark if: github.event_name == 'push' run: python .github/scripts/gen-bandge.py From 4d3eecd070fe6f465d46a5ed50c5c01fff552e9f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 6 Jun 2024 21:03:04 +0000 Subject: [PATCH 501/595] More extensions into dev container --- .devcontainer/devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1b6a3b2913c..d06d6c669ee 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -19,7 +19,10 @@ "vscjava.vscode-gradle", "GitHub.vscode-github-actions", "astrizhachuk.1c-extension-pack", - "zhuangtongfa.Material-theme" + "zhuangtongfa.Material-theme", + "GitHub.copilot", + "GitHub.copilot-chat", + "github.vscode-github-actions" ] } } From 8a15984ca36b179654a3420f91271e5190c6c2ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:36:58 +0000 Subject: [PATCH 502/595] build(deps): bump io.sentry:sentry-bom from 7.9.0 to 7.10.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.9.0 to 7.10.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.9.0...7.10.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5a70f42f60f..3dc34666a09 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,7 +62,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.9.0") + mavenBom("io.sentry:sentry-bom:7.10.0") } } From 72a382d26a9841d5cb8d09cfb9cceada7487eaac Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Fri, 7 Jun 2024 12:54:45 +0300 Subject: [PATCH 503/595] typo --- docs/features/ConfigurationFile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/ConfigurationFile.md b/docs/features/ConfigurationFile.md index 240c95c4210..5d53f61fb81 100644 --- a/docs/features/ConfigurationFile.md +++ b/docs/features/ConfigurationFile.md @@ -34,7 +34,7 @@ BSL Language Server предоставляет возможность измен | ⤷   `parameters` | `JSON-Объект` | Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
    * *ключ объекта* - строка, являющаяся идентификатором inlay hint
    * *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | |    ⤷   `cognitiveComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | |    ⤷   `cyclomaticComplexity` | `Булево` или `JSON-Объект` | Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода в виде inlay hints. По умолчанию настройка установлена в `true`. | -|    ⤷   `sourceDefinedMethodCall` | `Булево` или `JSON-Объект` | Включает отображение параметров вызываемого метожа конфигурации/библиотеки в виде inlay hints. По умолчанию настройка установлена в `true`. Доступные параметры:
    * `showParametersWithTheSameName` - отображать параметры с именами, содержащимися в передаваемом значении. Значение параметра по умолчанию - `false`.
    * `showDefaultValues` - отображать значения по умолчанию для непереданных параметров. Значение параметра по умолчанию - `true`. | +|    ⤷   `sourceDefinedMethodCall` | `Булево` или `JSON-Объект` | Включает отображение параметров вызываемого метода конфигурации/библиотеки в виде inlay hints. По умолчанию настройка установлена в `true`. Доступные параметры:
    * `showParametersWithTheSameName` - отображать параметры с именами, содержащимися в передаваемом значении. Значение параметра по умолчанию - `false`.
    * `showDefaultValues` - отображать значения по умолчанию для непереданных параметров. Значение параметра по умолчанию - `true`. | | `useDevSite` | `Булево` | При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | | `siteRoot` | `Строка` | Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | | `traceLog` | `Строка` | Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

    **ВНИМАНИЕ**

    * При запуске **BSL Language Server** перезаписывает указанный файл
    * Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | From 0d07e04a3cffbeb25ee7fe8bb2330983d52a47b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:31:39 +0000 Subject: [PATCH 504/595] build(deps): bump dawidd6/action-download-artifact from 5 to 6 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 5 to 6. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index d3fa9fe8363..b4ae642abe3 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Download PR number artifact if: github.event.workflow_run.event == 'pull_request' - uses: dawidd6/action-download-artifact@v5 + uses: dawidd6/action-download-artifact@v6 with: workflow: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} From 656b264c02ef6aafa5d80d9e07b77a700faf2c03 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Thu, 13 Jun 2024 12:41:59 +0300 Subject: [PATCH 505/595] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BE=D0=BD=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractExpressionTreeDiagnostic.java | 26 +++++----- .../DoubleNegativesDiagnostic.java | 43 +++++++++------- .../IdenticalExpressionsDiagnostic.java | 50 ------------------- .../ExpressionTreeBuildingVisitor.java | 4 +- 4 files changed, 43 insertions(+), 80 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java index 6481916867f..d3e23cf5107 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java @@ -58,11 +58,11 @@ public final List getDiagnostics(DocumentContext documentContext) { * При входе в выражение вызывается данный метод. * Переопределяя его можно оценить - имеет ли смысл строить дерево выражения, или данное выражение не подходит. * Позволяет сократить время на построение дерева, если это не требуется для данного AST. + * * @param ctx - выражение, которое в данный момент посещается. - * @return - * - если надо прекратить обход в глубину и построить Expression Tree на данном выражении - надо вернуть ACCEPT - * - если надо пройти дальше и посетить дочерние выражения, не затрагивая данное - надо вернуть VISIT_CHILDREN - * - если надо пропустить выражение, не ходить глубже и не строить Expression Tree - надо вернуть SKIP + * @return - если надо прекратить обход в глубину и построить Expression Tree на данном выражении - надо вернуть ACCEPT + * - если надо пройти дальше и посетить дочерние выражения, не затрагивая данное - надо вернуть VISIT_CHILDREN + * - если надо пропустить выражение, не ходить глубже и не строить Expression Tree - надо вернуть SKIP */ protected ExpressionVisitorDecision onExpressionEnter(BSLParser.ExpressionContext ctx) { return ExpressionVisitorDecision.ACCEPT; @@ -96,17 +96,19 @@ public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { var result = onExpressionEnter(ctx); return switch (result) { case SKIP -> ctx; - case ACCEPT -> { - super.visitExpression(ctx); - var expressionTree = getExpressionTree(); - if (expressionTree != null) // нашлись выражения в предложенном файле - visitTopLevelExpression(expressionTree); - - yield ctx; - } + case ACCEPT -> processExpression(ctx); case VISIT_CHILDREN -> super.visitChildren(ctx); }; } + + private BSLParser.ExpressionContext processExpression(BSLParser.ExpressionContext ctx) { + super.visitExpression(ctx); + var expressionTree = getExpressionTree(); + if (expressionTree != null) // нашлись выражения в предложенном файле + visitTopLevelExpression(expressionTree); + + return ctx; + } } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 1c416d31ce5..1a3cd45fcd1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -44,11 +44,6 @@ ) public class DoubleNegativesDiagnostic extends AbstractExpressionTreeDiagnostic { - @Override - protected ExpressionVisitorDecision onExpressionEnter(BSLParser.ExpressionContext ctx) { - return super.onExpressionEnter(ctx); - } - @Override protected void visitBinaryOperation(BinaryOperationNode node) { @@ -64,9 +59,7 @@ protected void visitBinaryOperation(BinaryOperationNode node) { return; } - if (node.getOperator() == BslOperator.NOT_EQUAL) { - addDiagnostic(node); - } else if (isBooleanLiteral(node.getLeft()) || isBooleanLiteral(node.getRight())) { + if (node.getOperator() == BslOperator.NOT_EQUAL || isBooleanLiteral(node.getLeft()) || isBooleanLiteral(node.getRight())) { addDiagnostic(node); } @@ -76,8 +69,8 @@ protected void visitBinaryOperation(BinaryOperationNode node) { @Override protected void visitUnaryOperation(UnaryOperationNode node) { if (node.getOperator() == BslOperator.NOT && - node.getParent() != null && - node.getParent().getNodeType() == ExpressionNodeType.UNARY_OP) { + node.getParent() != null && + node.getParent().getNodeType() == ExpressionNodeType.UNARY_OP) { var unaryParent = node.getParent().cast(); if (unaryParent.getOperator() == BslOperator.NOT) { @@ -88,28 +81,44 @@ protected void visitUnaryOperation(UnaryOperationNode node) { super.visitUnaryOperation(node); } - private boolean isBooleanLiteral(BslExpression node) { - if (node.getNodeType() != ExpressionNodeType.LITERAL) + private static boolean isBooleanLiteral(BslExpression node) { + if (node.getNodeType() != ExpressionNodeType.LITERAL) { return false; + } var constant = (BSLParser.ConstValueContext) node.getRepresentingAst(); return constant.TRUE() != null || constant.FALSE() != null; } private static boolean isNegationOperator(BslExpression parent) { - return parent.getNodeType() == ExpressionNodeType.UNARY_OP && parent.cast().getOperator() == BslOperator.NOT; + return parent.getNodeType() == ExpressionNodeType.UNARY_OP + && parent.cast().getOperator() == BslOperator.NOT; } private void addDiagnostic(BinaryOperationNode node) { - var startToken = Trees.getTokens(node.getParent().getRepresentingAst()).stream().findFirst().orElseThrow(); - var endToken = Trees.getTokens(node.getRight().getRepresentingAst()).stream().reduce((one, two) -> two).orElseThrow(); + var startToken = Trees.getTokens(node.getParent().getRepresentingAst()) + .stream() + .findFirst() + .orElseThrow(); + + var endToken = Trees.getTokens(node.getRight().getRepresentingAst()) + .stream() + .reduce((one, two) -> two) + .orElseThrow(); diagnosticStorage.addDiagnostic(startToken, endToken); } private void addDiagnostic(UnaryOperationNode node) { - var startToken = Trees.getTokens(node.getParent().getRepresentingAst()).stream().findFirst().orElseThrow(); - var endToken = Trees.getTokens(node.getOperand().getRepresentingAst()).stream().reduce((one, two) -> two).orElseThrow(); + var startToken = Trees.getTokens(node.getParent().getRepresentingAst()) + .stream() + .findFirst() + .orElseThrow(); + + var endToken = Trees.getTokens(node.getOperand().getRepresentingAst()) + .stream() + .reduce((one, two) -> two) + .orElseThrow(); diagnosticStorage.addDiagnostic(startToken, endToken); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java index 46d3bd114de..6a9a19338f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java @@ -29,20 +29,16 @@ import com.github._1c_syntax.bsl.languageserver.providers.FormatProvider; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.AbstractCallNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BinaryOperationNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslExpression; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionNodeType; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.NodeEqualityComparer; -import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.TernaryOperatorNode; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.TransitiveOperationsIgnoringComparer; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.UnaryOperationNode; import com.github._1c_syntax.bsl.parser.BSLParser; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.FormattingOptions; import java.util.ArrayList; @@ -228,52 +224,6 @@ private static void fillTokens(BslExpression node, List collection) { } } - private static List flattenBinaryOperations(BslExpression tree) { - var list = new ArrayList(); - gatherBinaryOperations(list, tree); - return list; - } - - private static void gatherBinaryOperations(List list, BslExpression tree) { - switch (tree.getNodeType()) { - case CALL: - for (var expr : tree.cast().arguments()) { - gatherBinaryOperations(list, expr); - } - break; - case UNARY_OP: - gatherBinaryOperations(list, tree.cast().getOperand()); - break; - case TERNARY_OP: - var ternary = (TernaryOperatorNode) tree; - gatherBinaryOperations(list, ternary.getCondition()); - gatherBinaryOperations(list, ternary.getTruePart()); - gatherBinaryOperations(list, ternary.getFalsePart()); - break; - case BINARY_OP: - var binary = (BinaryOperationNode) tree; - var operator = binary.getOperator(); - - // разыменования отбросим, хотя comparer их и не зачтет, но для производительности - // лучше выкинем их сразу - if (operator == BslOperator.DEREFERENCE || operator == BslOperator.INDEX_ACCESS) { - return; - } - - // одинаковые умножения и сложения - не считаем, см. тесты - if (operator != BslOperator.ADD && operator != BslOperator.MULTIPLY) { - list.add(binary); - } - - gatherBinaryOperations(list, binary.getLeft()); - gatherBinaryOperations(list, binary.getRight()); - break; - - default: - break; // для спокойствия сонара - } - } - private static boolean isComplementary(BinaryOperationNode binary) { var operator = binary.getOperator(); if ((operator == BslOperator.OR || operator == BslOperator.AND) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 250ae335c63..53e60bc6fda 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -59,6 +59,7 @@ public int getPriority() { /** * Хелпер построения дерева выражения на основе готового AST выражения + * * @param ctx AST выражения * @return дерево вычисления выражения */ @@ -201,8 +202,9 @@ private void processOperation(OperatorInCode operator) { private boolean hasHigherPriorityOperatorsInFly(OperatorInCode operator) { var lastSeenOperator = operatorsInFly.peek(); - if (lastSeenOperator == null) + if (lastSeenOperator == null) { return false; + } return lastSeenOperator.getPriority() > operator.getPriority(); } From 3a304d2d351dd6498bc656512ff4338e5a7290ac Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jun 2024 10:10:03 +0200 Subject: [PATCH 506/595] Fix qodana inputs --- .github/workflows/qodana.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index dc40d3d41fb..cd2ccc3b726 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -23,8 +23,6 @@ jobs: uses: JetBrains/qodana-action@v2024.1.5 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} - with: - linter: jetbrains/qodana-jvm-community - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json From a22edf9635863f7f02ca6575ca45145d0578170e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jun 2024 10:12:19 +0200 Subject: [PATCH 507/595] =?UTF-8?q?=D0=AF=D0=B2=D0=BD=D0=BE=D0=B5=20=D1=83?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D0=B5=20linter=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20qodana?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qodana.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/qodana.yaml b/qodana.yaml index 69ef158b519..ea928f9ef45 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,5 +1,6 @@ version: "1.0" projectJDK: 17 +linter: jetbrains/qodana-jvm:2024.1 profile: name: qodana.starter include: From 5957be6645b685cff7b95e96e10b571a281760c6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jun 2024 10:42:17 +0200 Subject: [PATCH 508/595] More rules to qodana --- qodana.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qodana.yaml b/qodana.yaml index 69ef158b519..fd6079b4e90 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -4,5 +4,9 @@ profile: name: qodana.starter include: - name: CheckDependencyLicenses + - name: FieldMayBeFinal + - name: NullableProblems + - name: LombokGetterMayBeUsed + - name: SimplifyStreamApiCallChains exclude: - name: OptionalUsedAsFieldOrParameterType From b59bdbaa59306d388a9384ef2665f2b13f221b8d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jun 2024 11:44:15 +0300 Subject: [PATCH 509/595] Add files via upload --- qodana.sarif.json | 76174 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76174 insertions(+) create mode 100644 qodana.sarif.json diff --git a/qodana.sarif.json b/qodana.sarif.json new file mode 100644 index 00000000000..4a74f48f3e2 --- /dev/null +++ b/qodana.sarif.json @@ -0,0 +1,76174 @@ +{ + "$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json", + "version": "2.1.0", + "runs": [ + { + "tool": { + "driver": { + "name": "QDJVM", + "fullName": "Qodana for JVM", + "version": "241.17569.155", + "rules": [], + "taxa": [ + { + "id": "Language injection", + "name": "Language injection" + }, + { + "id": "Kotlin", + "name": "Kotlin" + }, + { + "id": "Kotlin/Style issues", + "name": "Style issues", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JVM languages", + "name": "JVM languages" + }, + { + "id": "Kotlin/Redundant constructs", + "name": "Redundant constructs", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java", + "name": "Java" + }, + { + "id": "Java/Internationalization", + "name": "Internationalization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring", + "name": "Spring" + }, + { + "id": "Spring/Spring Core", + "name": "Spring Core", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring Core/XML", + "name": "XML", + "relationships": [ + { + "target": { + "id": "Spring/Spring Core", + "index": 8, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Performance", + "name": "Performance", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring Core/Code", + "name": "Code", + "relationships": [ + { + "target": { + "id": "Spring/Spring Core", + "index": 8, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Declaration redundancy", + "name": "Declaration redundancy", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Error handling", + "name": "Error handling", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Migration", + "name": "Migration", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring Cloud", + "name": "Spring Cloud", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript", + "name": "JavaScript and TypeScript" + }, + { + "id": "JavaScript and TypeScript/Unit testing", + "name": "Unit testing", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Class structure", + "name": "Class structure", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Serialization issues", + "name": "Serialization issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy", + "name": "Groovy" + }, + { + "id": "Groovy/GPath", + "name": "GPath", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Imports", + "name": "Imports", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSON and JSON5", + "name": "JSON and JSON5" + }, + { + "id": "Maven", + "name": "Maven" + }, + { + "id": "MySQL", + "name": "MySQL" + }, + { + "id": "Kotlin/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Threading issues", + "name": "Threading issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Numeric issues", + "name": "Numeric issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JPA", + "name": "JPA" + }, + { + "id": "Java/Initialization", + "name": "Initialization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Sass_SCSS", + "name": "Sass/SCSS" + }, + { + "id": "HTML", + "name": "HTML" + }, + { + "id": "JavaScript and TypeScript/Unused symbols", + "name": "Unused symbols", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Flow type checker", + "name": "Flow type checker", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Security", + "name": "Security", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Properties files", + "name": "Properties files" + }, + { + "id": "PostCSS", + "name": "PostCSS" + }, + { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "name": "Bitwise operation issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/General", + "name": "General", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Packaging issues", + "name": "Packaging issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Reactive Streams", + "name": "Reactive Streams" + }, + { + "id": "Reactive Streams/Common", + "name": "Common", + "relationships": [ + { + "target": { + "id": "Reactive Streams", + "index": 45, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Verbose or redundant code constructs", + "name": "Verbose or redundant code constructs", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle", + "name": "Gradle" + }, + { + "id": "Gradle/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 48, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "General", + "name": "General" + }, + { + "id": "FreeMarker", + "name": "FreeMarker" + }, + { + "id": "JVM languages/Logging", + "name": "Logging", + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfig", + "name": "EditorConfig" + }, + { + "id": "Gradle/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 48, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Code maturity", + "name": "Code maturity", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "name": "Potentially confusing code constructs", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SQL", + "name": "SQL" + }, + { + "id": "Spring/Spring Data", + "name": "Spring Data", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Other problems", + "name": "Other problems", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Try statement issues", + "name": "Try statement issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Plugin DevKit", + "name": "Plugin DevKit" + }, + { + "id": "Plugin DevKit/Workspace model", + "name": "Workspace model", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ktor", + "name": "Ktor" + }, + { + "id": "CDI (Contexts and Dependency Injection)", + "name": "CDI (Contexts and Dependency Injection)" + }, + { + "id": "Velocity", + "name": "Velocity" + }, + { + "id": "Plugin DevKit/Code", + "name": "Code", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids", + "name": "Java language level migration aids", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS", + "name": "CSS" + }, + { + "id": "CSS/Invalid elements", + "name": "Invalid elements", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "name": "Potentially undesirable code constructs", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Finalization", + "name": "Finalization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Logging", + "name": "Logging", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Modularization issues", + "name": "Modularization issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Javadoc", + "name": "Javadoc", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Java interop issues", + "name": "Java interop issues", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HTTP Client", + "name": "HTTP Client" + }, + { + "id": "Java/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Naming conventions/Class", + "name": "Class", + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Hibernate", + "name": "Hibernate" + }, + { + "id": "Spring/Spring Integration", + "name": "Spring Integration", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Plugin DevKit/Plugin descriptor", + "name": "Plugin descriptor", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Abstraction issues", + "name": "Abstraction issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 9", + "name": "Java 9", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Threading issues", + "name": "Threading issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/JUnit", + "name": "JUnit", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XSLT", + "name": "XSLT" + }, + { + "id": "Groovy/Style", + "name": "Style", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java EE", + "name": "Java EE" + }, + { + "id": "Java/Portability", + "name": "Portability", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/TestNG", + "name": "TestNG", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSP", + "name": "JSP" + }, + { + "id": "Java/Visibility", + "name": "Visibility", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExp", + "name": "RegExp" + }, + { + "id": "Java/Concurrency annotation issues", + "name": "Concurrency annotation issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit", + "name": "JUnit" + }, + { + "id": "JavaScript and TypeScript/TypeScript", + "name": "TypeScript", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok", + "name": "Lombok", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok/Redundant modifiers", + "name": "Redundant modifiers", + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UI form", + "name": "UI form" + }, + { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "name": "ES2015 migration aids", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Naming conventions/Method", + "name": "Method", + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/DOM issues", + "name": "DOM issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Code Coverage", + "name": "Code Coverage" + }, + { + "id": "Groovy/Annotations", + "name": "Annotations", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Proofreading", + "name": "Proofreading" + }, + { + "id": "XML", + "name": "XML" + }, + { + "id": "Java/Cloning issues", + "name": "Cloning issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Manifest", + "name": "Manifest" + }, + { + "id": "Groovy/Potentially confusing code constructs", + "name": "Potentially confusing code constructs", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Error handling", + "name": "Error handling", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 5", + "name": "Java 5", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 8", + "name": "Java 8", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JVM languages/Test frameworks", + "name": "Test frameworks", + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Class metrics", + "name": "Class metrics", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RESTful Web Service (JAX-RS)", + "name": "RESTful Web Service (JAX-RS)" + }, + { + "id": "Java/Encapsulation", + "name": "Encapsulation", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Test frameworks", + "name": "Test frameworks", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Reflective access", + "name": "Reflective access", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 15", + "name": "Java 15", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Code quality tools", + "name": "Code quality tools", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring AOP", + "name": "Spring AOP", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Method metrics", + "name": "Method metrics", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Resource management", + "name": "Resource management", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Switch statement issues", + "name": "Switch statement issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 14", + "name": "Java 14", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Numeric issues/Cast", + "name": "Cast", + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Plugin DevKit/Description file", + "name": "Description file", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/JavaBeans issues", + "name": "JavaBeans issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Pattern validation", + "name": "Pattern validation" + }, + { + "id": "JavaScript and TypeScript/Function metrics", + "name": "Function metrics", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Security", + "name": "Security" + }, + { + "id": "JavaScript and TypeScript/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Dependency issues", + "name": "Dependency issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level issues", + "name": "Java language level issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HTML/Accessibility", + "name": "Accessibility", + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Method metrics", + "name": "Method metrics", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XPath", + "name": "XPath" + }, + { + "id": "Java/Inheritance issues", + "name": "Inheritance issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Security", + "name": "Security", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AOP", + "name": "AOP" + }, + { + "id": "Bean Validation", + "name": "Bean Validation" + }, + { + "id": "Reactive Streams/Reactor", + "name": "Reactor", + "relationships": [ + { + "target": { + "id": "Reactive Streams", + "index": 45, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Oracle", + "name": "Oracle" + }, + { + "id": "Kotlin/Migration/Maven", + "name": "Maven", + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Internationalization", + "name": "Internationalization" + }, + { + "id": "Vue", + "name": "Vue" + }, + { + "id": "Java/Java language level migration aids/Java 10", + "name": "Java 10", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 7", + "name": "Java 7", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Compiler issues", + "name": "Compiler issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Version control", + "name": "Version control" + }, + { + "id": "MongoJS", + "name": "MongoJS" + }, + { + "id": "Kotlin/Migration/Gradle", + "name": "Gradle", + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Memory", + "name": "Memory", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Structural search", + "name": "Structural search" + }, + { + "id": "Spring/Spring Security", + "name": "Spring Security", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle/Style", + "name": "Style", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 48, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAML", + "name": "YAML" + }, + { + "id": "Java/Performance/Embedded", + "name": "Embedded", + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring Boot", + "name": "Spring Boot", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Imports and dependencies", + "name": "Imports and dependencies", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Probable bugs/Nullability problems", + "name": "Nullability problems", + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RELAX NG", + "name": "RELAX NG" + }, + { + "id": "Java/Properties files", + "name": "Properties files", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring Cloud Stream", + "name": "Spring Cloud Stream", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 11", + "name": "Java 11", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostgreSQL", + "name": "PostgreSQL" + }, + { + "id": "SQL server", + "name": "SQL server" + }, + { + "id": "Groovy/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Async code and promises", + "name": "Async code and promises", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Qodana", + "name": "Qodana" + }, + { + "id": "Dependency analysis", + "name": "Dependency analysis" + }, + { + "id": "EL", + "name": "EL" + }, + { + "id": "Java/Java language level migration aids/Java 16", + "name": "Java 16", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Shell script", + "name": "Shell script" + }, + { + "id": "JavaScript and TypeScript/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/React", + "name": "React", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok/Redundant definitions", + "name": "Redundant definitions", + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Spring/Spring MVC", + "name": "Spring MVC", + "relationships": [ + { + "target": { + "id": "Spring", + "index": 7, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 21", + "name": "Java 21", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Less", + "name": "Less" + }, + { + "id": "Groovy/Other", + "name": "Other", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Reactive Streams/Mutiny", + "name": "Mutiny", + "relationships": [ + { + "target": { + "id": "Reactive Streams", + "index": 45, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Bitwise operation issues", + "name": "Bitwise operation issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TOML", + "name": "TOML" + }, + { + "id": "Kotlin/Logging", + "name": "Logging", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Node.js", + "name": "Node.js", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 18, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/toString() issues", + "name": "toString() issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 5, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/React", + "name": "React", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/React/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Kotlin/React", + "index": 202, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle/Best practises", + "name": "Best practises", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 48, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Declaration redundancy", + "name": "Declaration redundancy", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 22, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + "extensions": [ + { + "name": "org.intellij.intelliLang", + "version": "241.17569", + "rules": [ + { + "id": "InjectionNotApplicable", + "shortDescription": { + "text": "Injection Annotation not applicable" + }, + "fullDescription": { + "text": "Reports when a '@Language' annotation is applied to an element with a type other than 'String' or 'String[]'. Example: '@Language(\"HTML\") int i;' After the quick-fix is applied: 'int i;'", + "markdown": "Reports when a `@Language` annotation is applied to an element with a type other than `String` or `String[]`.\n\n**Example:**\n\n\n @Language(\"HTML\") int i;\n\nAfter the quick-fix is applied:\n\n\n int i;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "InjectionNotApplicable", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternOverriddenByNonAnnotatedMethod", + "shortDescription": { + "text": "Non-annotated Method overrides @Pattern Method" + }, + "fullDescription": { + "text": "Reports when a method without any '@Pattern' annotation overrides a '@Pattern' annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime. A quick fix is provided to add a '@Pattern' annotation that matches the one from the superclass method. This ensures the runtime-check instrumentation works correctly. Example: 'abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }'", + "markdown": "Reports when a method without any `@Pattern` annotation overrides a `@Pattern` annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime.\n\n\nA quick fix is provided to add a `@Pattern` annotation that matches the one from the superclass method. This ensures the\nruntime-check instrumentation works correctly.\n\n**Example:**\n\n\n abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PatternOverriddenByNonAnnotatedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 140, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InjectedReferences", + "shortDescription": { + "text": "Injected references" + }, + "fullDescription": { + "text": "Reports unresolved references injected by Language Injections. Example: '@Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist'", + "markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "InjectedReferences", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternNotApplicable", + "shortDescription": { + "text": "Pattern Annotation not applicable" + }, + "fullDescription": { + "text": "Reports when a '@Pattern' annotation is applied to an element with a type other than 'String'. Example: '@Pattern(\"\\\\d\\\\d\") int i;'", + "markdown": "Reports when a `@Pattern` annotation is applied to an element with a type other than `String`.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d\") int i;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PatternNotApplicable", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 140, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnknownLanguage", + "shortDescription": { + "text": "Unknown Language ID" + }, + "fullDescription": { + "text": "Reports when the ID of the language used in a '@Language' annotation is unknown. Example: '@Language(\"HMTL\") String html;'", + "markdown": "Reports when the ID of the language used in a `@Language` annotation is unknown.\n\n**Example:**\n\n\n @Language(\"HMTL\") String html;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnknownLanguage", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternValidation", + "shortDescription": { + "text": "Validate annotated patterns" + }, + "fullDescription": { + "text": "Reports expressions passed as arguments for '@Pattern' parameters and returned from '@Pattern'-annotated methods that do not match the specified pattern. Example: '@Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }' Use the Flag non compile-time constant expressions option to let the inspection report expressions with an unknown value and offer to add a substitution ('@Subst') annotation.", + "markdown": "Reports expressions passed as arguments for `@Pattern` parameters and returned from `@Pattern`-annotated methods that do not match the specified pattern.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }\n\n\nUse the **Flag non compile-time constant expressions** option to let the inspection report expressions with\nan unknown value and offer to add a substitution (`@Subst`) annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PatternValidation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 140, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LanguageMismatch", + "shortDescription": { + "text": "Language mismatch" + }, + "fullDescription": { + "text": "Reports when the language of a reference does not match the expected language of the usage context. Example: '@Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here'", + "markdown": "Reports when the language of a reference does not match the expected language of the usage context.\n\nExample:\n\n\n @Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LanguageMismatch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.kotlin", + "version": "241.17569-IJ", + "rules": [ + { + "id": "RedundantRunCatching", + "shortDescription": { + "text": "Redundant 'runCatching' call" + }, + "fullDescription": { + "text": "Reports 'runCatching' calls that are immediately followed by 'getOrThrow'. Such calls can be replaced with just 'run'. Example: 'fun foo() = runCatching { doSomething() }.getOrThrow()' After the quick-fix is applied: 'fun foo() = run { doSomething() }'", + "markdown": "Reports `runCatching` calls that are immediately followed by `getOrThrow`. Such calls can be replaced with just `run`.\n\n**Example:**\n\n\n fun foo() = runCatching { doSomething() }.getOrThrow()\n\nAfter the quick-fix is applied:\n\n\n fun foo() = run { doSomething() }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantRunCatching", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimpleRedundantLet", + "shortDescription": { + "text": "Redundant receiver-based 'let' call" + }, + "fullDescription": { + "text": "Reports redundant receiver-based 'let' calls. The quick-fix removes the redundant 'let' call. Example: 'fun test(s: String?): Int? = s?.let { it.length }' After the quick-fix is applied: 'fun test(s: String?): Int? = s?.length'", + "markdown": "Reports redundant receiver-based `let` calls.\n\nThe quick-fix removes the redundant `let` call.\n\n**Example:**\n\n\n fun test(s: String?): Int? = s?.let { it.length }\n\nAfter the quick-fix is applied:\n\n\n fun test(s: String?): Int? = s?.length\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimpleRedundantLet", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveSingleExpressionStringTemplate", + "shortDescription": { + "text": "Redundant string template" + }, + "fullDescription": { + "text": "Reports single-expression string templates that can be safely removed. Example: 'val x = \"Hello\"\n val y = \"$x\"' After the quick-fix is applied: 'val x = \"Hello\"\n val y = x // <== Updated'", + "markdown": "Reports single-expression string templates that can be safely removed.\n\n**Example:**\n\n val x = \"Hello\"\n val y = \"$x\"\n\nAfter the quick-fix is applied:\n\n val x = \"Hello\"\n val y = x // <== Updated\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveSingleExpressionStringTemplate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExhaustiveWhenStatementMigration", + "shortDescription": { + "text": "Non-exhaustive 'when' statements will be prohibited since 1.7" + }, + "fullDescription": { + "text": "Reports a non-exhaustive 'when' statements that will lead to compilation error since 1.7. Motivation types: Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors) Code is error-prone Inconsistency in the design (things are done differently in different contexts) Impact types: Compilation. Some code that used to compile won't compile any more There were cases when such code worked with no exceptions Some such code could compile without any warnings More details: KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default The quick-fix adds the missing 'else -> {}' branch. Example: 'sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n }\n }' After the quick-fix is applied: 'sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n else -> {}\n }\n }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.", + "markdown": "Reports a non-exhaustive `when` statements that will lead to compilation error since 1.7.\n\nMotivation types:\n\n* Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)\n * Code is error-prone\n* Inconsistency in the design (things are done differently in different contexts)\n\nImpact types:\n\n* Compilation. Some code that used to compile won't compile any more\n * There were cases when such code worked with no exceptions\n * Some such code could compile without any warnings\n\n**More details:** [KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default](https://youtrack.jetbrains.com/issue/KT-47709)\n\nThe quick-fix adds the missing `else -> {}` branch.\n\n**Example:**\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n else -> {}\n }\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonExhaustiveWhenStatementMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompleteDestructuring", + "shortDescription": { + "text": "Incomplete destructuring declaration" + }, + "fullDescription": { + "text": "Reports incomplete destructuring declaration. Example: 'data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name) = person' The quick fix completes destructuring declaration with new variables: 'data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name, age) = person'", + "markdown": "Reports incomplete destructuring declaration.\n\n**Example:**\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name) = person\n\nThe quick fix completes destructuring declaration with new variables:\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name, age) = person\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncompleteDestructuring", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ScopeFunctionConversion", + "shortDescription": { + "text": "Scope function can be converted to another one" + }, + "fullDescription": { + "text": "Reports scope functions ('let', 'run', 'apply', 'also') that can be converted between each other. Using corresponding functions makes your code simpler. The quick-fix replaces the scope function to another one. Example: 'val x = \"\".let {\n it.length\n }' After the quick-fix is applied: 'val x = \"\".run {\n length\n }'", + "markdown": "Reports scope functions (`let`, `run`, `apply`, `also`) that can be converted between each other.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the scope function to another one.\n\n**Example:**\n\n\n val x = \"\".let {\n it.length\n }\n\nAfter the quick-fix is applied:\n\n\n val x = \"\".run {\n length\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ScopeFunctionConversion", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingComma", + "shortDescription": { + "text": "Trailing comma recommendations" + }, + "fullDescription": { + "text": "Reports trailing commas that do not follow the recommended style guide.", + "markdown": "Reports trailing commas that do not follow the recommended [style guide](https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TrailingComma", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FoldInitializerAndIfToElvis", + "shortDescription": { + "text": "If-Null return/break/... foldable to '?:'" + }, + "fullDescription": { + "text": "Reports an 'if' expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer. Example: 'fun test(foo: Int?, bar: Int): Int {\n var i = foo\n if (i == null) {\n return bar\n }\n return i\n }' The quick-fix converts the 'if' expression with an initializer into an elvis expression: 'fun test(foo: Int?, bar: Int): Int {\n var i = foo ?: return bar\n return i\n }'", + "markdown": "Reports an `if` expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer.\n\n**Example:**\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo\n if (i == null) {\n return bar\n }\n return i\n }\n\nThe quick-fix converts the `if` expression with an initializer into an elvis expression:\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo ?: return bar\n return i\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FoldInitializerAndIfToElvis", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousNonLocalJump", + "shortDescription": { + "text": "Ambiguous non-local 'break' or 'continue'" + }, + "fullDescription": { + "text": "Reports 'break' or 'continue' usages inside of lambdas of loop-like functions. 'break' and 'continue' keywords always apply to the real loops ('for', 'while', 'do-while'). 'break' and 'continue' never apply to any function; for example, 'break' and 'continue' don't apply to 'forEach', 'filter', 'map'. Using 'break' or 'continue' inside a loop-like function (for example, 'forEach') may be confusing. The inspection suggests adding a label to clarify to which statement 'break' or 'continue' applies to. Since Kotlin doesn't have a concept of loop-like functions, the inspection uses the heuristic. It assumes that functions that don't have one of 'callsInPlace(EXACTLY_ONCE)' or 'callsInPlace(AT_LEAST_ONCE)' contracts are loop-like functions. Example: 'for (file in files) {\n file.readLines().forEach { line ->\n if (line == commentMarkerLine) continue\n println(line)\n }\n }' The quick-fix adds clarifying labels: 'loop@ for (file in files) {\n file.readLines().forEach { line ->\n if (line == commentMarkerLine) continue@loop\n println(line)\n }\n }'", + "markdown": "Reports `break` or `continue` usages inside of lambdas of loop-like functions.\n\n\n`break` and `continue` keywords always apply to the real loops (`for`,\n`while`, `do-while`). `break` and `continue` never apply to any function; for example,\n`break` and `continue` don't apply to `forEach`, `filter`, `map`.\n\n\nUsing `break` or `continue` inside a loop-like function (for example, `forEach`) may be confusing.\nThe inspection suggests adding a label to clarify to which statement `break` or `continue` applies to.\n\n\nSince Kotlin doesn't have a concept of loop-like functions, the inspection uses the heuristic. It assumes that functions that don't\nhave one of `callsInPlace(EXACTLY_ONCE)` or `callsInPlace(AT_LEAST_ONCE)` contracts are loop-like functions.\n\n**Example:**\n\n\n for (file in files) {\n file.readLines().forEach { line ->\n if (line == commentMarkerLine) continue\n println(line)\n }\n }\n\nThe quick-fix adds clarifying labels:\n\n\n loop@ for (file in files) {\n file.readLines().forEach { line ->\n if (line == commentMarkerLine) continue@loop\n println(line)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "AmbiguousNonLocalJump", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithStringBuilderAppendRange", + "shortDescription": { + "text": "'StringBuilder.append(CharArray, offset, len)' call on the JVM" + }, + "fullDescription": { + "text": "Reports a 'StringBuilder.append(CharArray, offset, len)' function call on the JVM platform that should be replaced with a 'StringBuilder.appendRange(CharArray, startIndex, endIndex)' function call. The 'append' function behaves differently on the JVM, JS and Native platforms, so using the 'appendRange' function is recommended. Example: 'fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n append(charArray, offset, len)\n }\n }' After the quick-fix is applied: 'fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n appendRange(charArray, offset, offset + len)\n }\n }'", + "markdown": "Reports a `StringBuilder.append(CharArray, offset, len)` function call on the JVM platform that should be replaced with a `StringBuilder.appendRange(CharArray, startIndex, endIndex)` function call.\n\nThe `append` function behaves differently on the JVM, JS and Native platforms, so using the `appendRange` function is recommended.\n\n**Example:**\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n append(charArray, offset, len)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n appendRange(charArray, offset, offset + len)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceWithStringBuilderAppendRange", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinInvalidBundleOrProperty", + "shortDescription": { + "text": "Invalid property key" + }, + "fullDescription": { + "text": "Reports unresolved references to '.properties' file keys and resource bundles in Kotlin files.", + "markdown": "Reports unresolved references to `.properties` file keys and resource bundles in Kotlin files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "InvalidBundleOrProperty", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UselessCallOnCollection", + "shortDescription": { + "text": "Useless call on collection type" + }, + "fullDescription": { + "text": "Reports 'filter…' calls from the standard library on already filtered collections. Several functions from the standard library such as 'filterNotNull()' or 'filterIsInstance' have sense only when they are called on receivers that have types distinct from the resulting one. Otherwise, such calls can be omitted as the result will be the same. Remove redundant call quick-fix can be used to amend the code automatically. Example: 'fun test(list: List) {\n val x = list.filterNotNull() // quick-fix simplifies to 'list'\n val y = list.filterIsInstance() // quick-fix simplifies to 'list'\n }'", + "markdown": "Reports `filter...` calls from the standard library on already filtered collections.\n\nSeveral functions from the standard library such as `filterNotNull()` or `filterIsInstance`\nhave sense only when they are called on receivers that have types distinct from the resulting one. Otherwise,\nsuch calls can be omitted as the result will be the same.\n\n**Remove redundant call** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n val x = list.filterNotNull() // quick-fix simplifies to 'list'\n val y = list.filterIsInstance() // quick-fix simplifies to 'list'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UselessCallOnCollection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantRequireNotNullCall", + "shortDescription": { + "text": "Redundant 'requireNotNull' or 'checkNotNull' call" + }, + "fullDescription": { + "text": "Reports redundant 'requireNotNull' or 'checkNotNull' call on non-nullable expressions. Example: 'fun foo(i: Int) {\n requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n ...\n }' After the quick-fix is applied: 'fun foo(i: Int) {\n ...\n }'", + "markdown": "Reports redundant `requireNotNull` or `checkNotNull` call on non-nullable expressions.\n\n**Example:**\n\n\n fun foo(i: Int) {\n requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n ...\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(i: Int) {\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantRequireNotNullCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectPropertyName", + "shortDescription": { + "text": "Object property naming convention" + }, + "fullDescription": { + "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Top-level properties Properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an uppercase letter, use camel case and no underscores. Example: '// top-level property\n val USER_NAME_FIELD = \"UserName\"\n // top-level property holding reference to singleton object\n val PersonComparator: Comparator = /*...*/\n\n class Person {\n companion object {\n // property in companion object\n val NO_NAME = Person()\n }\n }'", + "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Top-level properties\n* Properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an uppercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n // top-level property\n val USER_NAME_FIELD = \"UserName\"\n // top-level property holding reference to singleton object\n val PersonComparator: Comparator = /*...*/\n\n class Person {\n companion object {\n // property in companion object\n val NO_NAME = Person()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectPropertyName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageDirectoryMismatch", + "shortDescription": { + "text": "Package name does not match containing directory" + }, + "fullDescription": { + "text": "Reports 'package' directives that do not match the location of the file. When applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely: \"Search in comments and strings\" \"Search for text occurrences\"", + "markdown": "Reports `package` directives that do not match the location of the file.\n\n\nWhen applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely:\n\n* \"Search in comments and strings\"\n* \"Search for text occurrences\"" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PackageDirectoryMismatch", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinCovariantEquals", + "shortDescription": { + "text": "Covariant 'equals()'" + }, + "fullDescription": { + "text": "Reports 'equals()' that takes an argument type other than 'Any?' if the class does not have another 'equals()' that takes 'Any?' as its argument type. Example: 'class Foo {\n fun equals(other: Foo?): Boolean {\n return true\n }\n }' To fix the problem create 'equals()' method that takes an argument of type 'Any?'.", + "markdown": "Reports `equals()` that takes an argument type other than `Any?` if the class does not have another `equals()` that takes `Any?` as its argument type.\n\n**Example:**\n\n\n class Foo {\n fun equals(other: Foo?): Boolean {\n return true\n }\n }\n\nTo fix the problem create `equals()` method that takes an argument of type `Any?`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CovariantEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSizeZeroCheckWithIsEmpty", + "shortDescription": { + "text": "Size zero check can be replaced with 'isEmpty()'" + }, + "fullDescription": { + "text": "Reports 'size == 0' checks on 'Collections/Array/String' that should be replaced with 'isEmpty()'. Using 'isEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isEmpty()'. Example: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size == 0\n }' After the quick-fix is applied: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isEmpty()\n }'", + "markdown": "Reports `size == 0` checks on `Collections/Array/String` that should be replaced with `isEmpty()`.\n\nUsing `isEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size == 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isEmpty()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSizeZeroCheckWithIsEmpty", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousExpressionInWhenBranchMigration", + "shortDescription": { + "text": "Ambiguous logical expressions in 'when' branches since 1.7" + }, + "fullDescription": { + "text": "Reports ambiguous logical expressions in 'when' branches which cause compilation errors in Kotlin 1.8 and later. 'fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n this in (4..7) -> true // is ambiguous\n else -> false\n }' After the quick-fix is applied: 'fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n (this in (4..7)) -> true // wrapped in parentheses\n else -> false\n }' Inspection is available for Kotlin language level starting from 1.7.", + "markdown": "Reports ambiguous logical expressions in `when` branches which cause compilation errors in Kotlin 1.8 and later.\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n this in (4..7) -> true // is ambiguous\n else -> false\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n (this in (4..7)) -> true // wrapped in parentheses\n else -> false\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AmbiguousExpressionInWhenBranchMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEnumConstructorInvocation", + "shortDescription": { + "text": "Redundant enum constructor invocation" + }, + "fullDescription": { + "text": "Reports redundant constructor invocation on an enum entry. Example: 'enum class Baz(i: Int = 0) {\n A(1),\n B(),\n C(),\n }' After the quick-fix is applied: 'enum class Baz(i: Int = 0) {\n A(1),\n B,\n C,\n }'", + "markdown": "Reports redundant constructor invocation on an enum entry.\n\n**Example:**\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B(),\n C(),\n }\n\nAfter the quick-fix is applied:\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B,\n C,\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantEnumConstructorInvocation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FakeJvmFieldConstant", + "shortDescription": { + "text": "Kotlin non-const property used as Java constant" + }, + "fullDescription": { + "text": "Reports Kotlin properties that are not 'const' and used as Java annotation arguments. For example, a property with the '@JvmField' annotation has an initializer that can be evaluated at compile-time, and it has a primitive or 'String' type. Such properties have a 'ConstantValue' attribute in bytecode in Kotlin 1.1-1.2. This attribute allows javac to fold usages of the corresponding field and use that field in annotations. This can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code. This behavior is subject to change in Kotlin 1.3 (no 'ConstantValue' attribute any more). Example: Kotlin code in foo.kt file: 'annotation class Ann(val s: String)\n @JvmField val importantString = \"important\"' Java code: 'public class JavaUser {\n // This is dangerous\n @Ann(s = FooKt.importantString)\n public void foo() {}\n }' To fix the problem replace the '@JvmField' annotation with the 'const' modifier on a relevant Kotlin property or inline it.", + "markdown": "Reports Kotlin properties that are not `const` and used as Java annotation arguments.\n\n\nFor example, a property with the `@JvmField` annotation has an initializer that can be evaluated at compile-time,\nand it has a primitive or `String` type.\n\n\nSuch properties have a `ConstantValue` attribute in bytecode in Kotlin 1.1-1.2.\nThis attribute allows javac to fold usages of the corresponding field and use that field in annotations.\nThis can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code.\nThis behavior is subject to change in Kotlin 1.3 (no `ConstantValue` attribute any more).\n\n**Example:**\n\nKotlin code in foo.kt file:\n\n\n annotation class Ann(val s: String)\n @JvmField val importantString = \"important\"\n\nJava code:\n\n\n public class JavaUser {\n // This is dangerous\n @Ann(s = FooKt.importantString)\n public void foo() {}\n }\n\nTo fix the problem replace the `@JvmField` annotation with the `const` modifier on a relevant Kotlin property or inline it." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "FakeJvmFieldConstant", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhenWithOnlyElse", + "shortDescription": { + "text": "'when' has only 'else' branch and can be simplified" + }, + "fullDescription": { + "text": "Reports 'when' expressions with only an 'else' branch that can be simplified. Simplify expression quick-fix can be used to amend the code automatically. Example: 'fun redundant() {\n val x = when { // <== redundant, the quick-fix simplifies the when expression to \"val x = 1\"\n else -> 1\n }\n }'", + "markdown": "Reports `when` expressions with only an `else` branch that can be simplified.\n\n**Simplify expression** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun redundant() {\n val x = when { // <== redundant, the quick-fix simplifies the when expression to \"val x = 1\"\n else -> 1\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "WhenWithOnlyElse", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinTestJUnit", + "shortDescription": { + "text": "kotlin-test-junit could be used" + }, + "fullDescription": { + "text": "Reports usage of 'kotlin-test' and 'junit' dependency without 'kotlin-test-junit'. It is recommended to use 'kotlin-test-junit' dependency to work with Kotlin and JUnit.", + "markdown": "Reports usage of `kotlin-test` and `junit` dependency without `kotlin-test-junit`.\n\nIt is recommended to use `kotlin-test-junit` dependency to work with Kotlin and JUnit." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinTestJUnit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeCastWithReturn", + "shortDescription": { + "text": "Safe cast with 'return' should be replaced with 'if' type check" + }, + "fullDescription": { + "text": "Reports safe cast with 'return' that can be replaced with 'if' type check. Using corresponding functions makes your code simpler. The quick-fix replaces the safe cast with 'if' type check. Example: 'fun test(x: Any) {\n x as? String ?: return\n }' After the quick-fix is applied: 'fun test(x: Any) {\n if (x !is String) return\n }'", + "markdown": "Reports safe cast with `return` that can be replaced with `if` type check.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the safe cast with `if` type check.\n\n**Example:**\n\n\n fun test(x: Any) {\n x as? String ?: return\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(x: Any) {\n if (x !is String) return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SafeCastWithReturn", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssertBooleanWithAssertEquality", + "shortDescription": { + "text": "Assert boolean could be replaced with assert equality" + }, + "fullDescription": { + "text": "Reports calls to 'assertTrue()' and 'assertFalse()' that can be replaced with assert equality functions. 'assertEquals()', 'assertSame()', and their negating counterparts (-Not-) provide more informative messages on failure. Example: 'assertTrue(a == b)' After the quick-fix is applied: 'assertEquals(a, b)'", + "markdown": "Reports calls to `assertTrue()` and `assertFalse()` that can be replaced with assert equality functions.\n\n\n`assertEquals()`, `assertSame()`, and their negating counterparts (-Not-) provide more informative messages on\nfailure.\n\n**Example:**\n\n assertTrue(a == b)\n\nAfter the quick-fix is applied:\n\n assertEquals(a, b)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceAssertBooleanWithAssertEquality", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryOptInAnnotation", + "shortDescription": { + "text": "Unnecessary '@OptIn' annotation" + }, + "fullDescription": { + "text": "Reports unnecessary opt-in annotations that can be safely removed. '@OptIn' annotation is required for the code using experimental APIs that can change any time in the future. This annotation becomes useless and possibly misleading if no such API is used (e.g., when the experimental API becomes stable and does not require opting in its usage anymore). Remove annotation quick-fix can be used to remove the unnecessary '@OptIn' annotation. Example: '@OptIn(ExperimentalApi::class)\n fun foo(x: Bar) {\n x.baz()\n }' After the quick-fix is applied: 'fun foo(x: Bar) {\n x.baz()\n }'", + "markdown": "Reports unnecessary opt-in annotations that can be safely removed.\n\n`@OptIn` annotation is required for the code using experimental APIs that can change\nany time in the future. This annotation becomes useless and possibly misleading if no such API is used\n(e.g., when the experimental API becomes stable and does not require opting in its usage anymore).\n\n\n**Remove annotation** quick-fix can be used to remove the unnecessary `@OptIn` annotation.\n\nExample:\n\n\n @OptIn(ExperimentalApi::class)\n fun foo(x: Bar) {\n x.baz()\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Bar) {\n x.baz()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessaryOptInAnnotation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonVarPropertyInExternalInterface", + "shortDescription": { + "text": "External interface contains val property" + }, + "fullDescription": { + "text": "Reports not var properties in external interface. Read more in the migration guide.", + "markdown": "Reports not var properties in external interface. Read more in the [migration guide](https://kotlinlang.org/docs/js-ir-migration.html#convert-properties-of-external-interfaces-to-var)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NonVarPropertyInExternalInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceStringFormatWithLiteral", + "shortDescription": { + "text": "'String.format' call can be replaced with string templates" + }, + "fullDescription": { + "text": "Reports 'String.format' calls that can be replaced with string templates. Using string templates makes your code simpler. The quick-fix replaces the call with a string template. Example: 'fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = String.format(\"%s_%s_%s\", id, date, id)\n }' After the quick-fix is applied: 'fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = \"${id}_${date}_$id\"\n }'", + "markdown": "Reports `String.format` calls that can be replaced with string templates.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces the call with a string template.\n\n**Example:**\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = String.format(\"%s_%s_%s\", id, date, id)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = \"${id}_${date}_$id\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceStringFormatWithLiteral", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNotNullAssertionWithElvisReturn", + "shortDescription": { + "text": "Not-null assertion can be replaced with 'return'" + }, + "fullDescription": { + "text": "Reports not-null assertion ('!!') calls that can be replaced with the elvis operator and return ('?: return'). A not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of '!!' is good practice. The quick-fix replaces the not-null assertion with 'return' or 'return null'. Example: 'fun test(number: Int?) {\n val x = number!!\n }' After the quick-fix is applied: 'fun test(number: Int?) {\n val x = number ?: return\n }'", + "markdown": "Reports not-null assertion (`!!`) calls that can be replaced with the elvis operator and return (`?: return`).\n\nA not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of `!!` is good practice.\n\nThe quick-fix replaces the not-null assertion with `return` or `return null`.\n\n**Example:**\n\n\n fun test(number: Int?) {\n val x = number!!\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(number: Int?) {\n val x = number ?: return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceNotNullAssertionWithElvisReturn", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithSubstringBefore", + "shortDescription": { + "text": "'substring' call should be replaced with 'substringBefore'" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, s.indexOf(x))' that can be replaced with 's.substringBefore(x)'. Using 'substringBefore()' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringBefore'. Example: 'fun foo(s: String) {\n s.substring(0, s.indexOf('x'))\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.substringBefore('x')\n }'", + "markdown": "Reports calls like `s.substring(0, s.indexOf(x))` that can be replaced with `s.substringBefore(x)`.\n\nUsing `substringBefore()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringBefore`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringBefore('x')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSubstringWithSubstringBefore", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithOperatorAssignment", + "shortDescription": { + "text": "Assignment can be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports modifications of variables with a simple assignment (such as 'y = y + x') that can be replaced with an operator assignment. The quick-fix replaces the assignment with an assignment operator. Example: 'fun foo() {\n val list = mutableListOf(1, 2, 3)\n list = list + 4\n }' After the quick-fix is applied: 'fun foo() {\n val list = mutableListOf(1, 2, 3)\n list += 4\n }'", + "markdown": "Reports modifications of variables with a simple assignment (such as `y = y + x`) that can be replaced with an operator assignment.\n\nThe quick-fix replaces the assignment with an assignment operator.\n\n**Example:**\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list = list + 4\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list += 4\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceWithOperatorAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedSymbol", + "shortDescription": { + "text": "Unused symbol" + }, + "fullDescription": { + "text": "Reports symbols that are not used or not reachable from entry points.", + "markdown": "Reports symbols that are not used or not reachable from entry points." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "unused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceCollectionCountWithSize", + "shortDescription": { + "text": "Collection count can be converted to size" + }, + "fullDescription": { + "text": "Reports calls to 'Collection.count()'. This function call can be replaced with '.size'. '.size' form ensures that the operation is O(1) and won't allocate extra objects, whereas 'count()' could be confused with 'Iterable.count()', which is O(n) and allocating. Example: 'fun foo() {\n var list = listOf(1,2,3)\n list.count() // replaceable 'count()'\n }' After the quick-fix is applied: 'fun foo() {\n var list = listOf(1,2,3)\n list.size\n }'", + "markdown": "Reports calls to `Collection.count()`.\n\n\nThis function call can be replaced with `.size`.\n\n\n`.size` form ensures that the operation is O(1) and won't allocate extra objects, whereas\n`count()` could be confused with `Iterable.count()`, which is O(n) and allocating.\n\n\n**Example:**\n\n fun foo() {\n var list = listOf(1,2,3)\n list.count() // replaceable 'count()'\n }\n\nAfter the quick-fix is applied:\n\n fun foo() {\n var list = listOf(1,2,3)\n list.size\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceCollectionCountWithSize", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceArrayEqualityOpWithArraysEquals", + "shortDescription": { + "text": "Arrays comparison via '==' and '!='" + }, + "fullDescription": { + "text": "Reports usages of '==' or '!=' operator for arrays that should be replaced with 'contentEquals()'. The '==' and '!='operators compare array references instead of their content. Examples: 'fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a == b) // references comparison\n }' After the quick-fix is applied: 'fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a.contentEquals(b))\n }'", + "markdown": "Reports usages of `==` or `!=` operator for arrays that should be replaced with `contentEquals()`.\n\n\nThe `==` and `!=`operators compare array references instead of their content.\n\n**Examples:**\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a == b) // references comparison\n }\n\nAfter the quick-fix is applied:\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a.contentEquals(b))\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceArrayEqualityOpWithArraysEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedGradleDependency", + "shortDescription": { + "text": "Deprecated library is used in Gradle" + }, + "fullDescription": { + "text": "Reports deprecated dependencies in Gradle build scripts. Example: 'dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n }' After the quick-fix applied: 'dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n }'", + "markdown": "Reports deprecated dependencies in Gradle build scripts.\n\n**Example:**\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n }\n\nAfter the quick-fix applied:\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedGradleDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastDueToProgressionResolutionChangeMigration", + "shortDescription": { + "text": "Progression resolution change since 1.9" + }, + "fullDescription": { + "text": "Reports overloaded function calls where an argument requires an explicit cast to resolve to a proper declaration. The current compiler warning (available since Kotlin 1.6.20) will become an error in Kotlin 1.8. Progressions and ranges types ('kotlin.ranges') will start implementing the 'Collection' interface in Kotlin 1.9 and later. This update will cause a change in resolution for overloaded functions. For instance, in the example below, the 'test(1..5)' call will be resolved to 'test(t: Any)' in Kotlin 1.8 and earlier and to 'test(t: Collection<*>)' in Kotlin 1.9 and later. 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n fun invoke() {\n test(1..5) // IntRange becomes Collection in 1.9\n }' The provided quick-fix captures the behaviour specific to the compiler of version 1.8 and earlier: 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test(1..5) // resolved to 'test(t: T)' before Kotlin 1.9\n }' After the quick-fix is applied: 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test((1..5) as Iterable) // resolved to 'test(t: T)' in Kotlin 1.9\n }' Inspection is available for the Kotlin language level starting from 1.6.", + "markdown": "Reports overloaded function calls where an argument requires an explicit cast to resolve to a proper declaration.\nThe current compiler warning (available since Kotlin 1.6.20) will become an error in Kotlin 1.8.\n\n\nProgressions and ranges types (`kotlin.ranges`) will start implementing the `Collection` interface in Kotlin\n1.9 and later. This update will cause a change in resolution for overloaded functions. For instance, in the example below, the\n`test(1..5)` call will be resolved to `test(t: Any)` in Kotlin 1.8 and earlier and to\n`test(t: Collection<*>)` in Kotlin 1.9 and later.\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n fun invoke() {\n test(1..5) // IntRange becomes Collection in 1.9\n }\n\nThe provided quick-fix captures the behaviour specific to the compiler of version 1.8 and earlier:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test(1..5) // resolved to 'test(t: T)' before Kotlin 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test((1..5) as Iterable) // resolved to 'test(t: T)' in Kotlin 1.9\n }\n\nInspection is available for the Kotlin language level starting from 1.6." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CastDueToProgressionResolutionChangeMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertReferenceToLambda", + "shortDescription": { + "text": "Can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports a function reference expression that can be replaced with a function literal (lambda). Sometimes, passing a lambda looks more straightforward and more consistent with the rest of the code. Also, the fix might be handy if you need to replace a simple call with something more complex. Example: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }'", + "markdown": "Reports a function reference expression that can be replaced with a function literal (lambda).\n\n\nSometimes, passing a lambda looks more straightforward and more consistent with the rest of the code.\nAlso, the fix might be handy if you need to replace a simple call with something more complex.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertReferenceToLambda", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnlabeledReturnInsideLambda", + "shortDescription": { + "text": "Unlabeled return inside lambda" + }, + "fullDescription": { + "text": "Reports unlabeled 'return' expressions inside inline lambda. Such expressions can be confusing because it might be unclear which scope belongs to 'return'. Change to return@… quick-fix can be used to amend the code automatically. Example: 'fun test(list: List) {\n list.forEach {\n // This return expression returns from the function test\n // One can change it to return@forEach to change the scope\n if (it == 10) return\n }\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.forEach {\n if (it == 10) return@test\n }\n }'", + "markdown": "Reports unlabeled `return` expressions inside inline lambda.\n\nSuch expressions can be confusing because it might be unclear which scope belongs to `return`.\n\n**Change to return@...** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n list.forEach {\n // This return expression returns from the function test\n // One can change it to return@forEach to change the scope\n if (it == 10) return\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.forEach {\n if (it == 10) return@test\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnlabeledReturnInsideLambda", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddConversionCallMigration", + "shortDescription": { + "text": "Explicit conversion from `Int` needed since 1.9" + }, + "fullDescription": { + "text": "Reports expressions that will be of type 'Int', thus causing compilation errors in Kotlin 1.9 and later. Example: 'fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte(1 + 1) // will be resolved to Int in 1.9\n }' After the quick-fix is applied: 'fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte((1 + 1).toByte()) // will be resolved to Int in 1.9\n }' Inspection is available for Kotlin language level starting from 1.7.", + "markdown": "Reports expressions that will be of type `Int`, thus causing compilation errors in Kotlin 1.9 and later.\n\nExample:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte(1 + 1) // will be resolved to Int in 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte((1 + 1).toByte()) // will be resolved to Int in 1.9\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AddConversionCallMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LateinitVarOverridesLateinitVar", + "shortDescription": { + "text": "'lateinit var' property overrides 'lateinit var' property" + }, + "fullDescription": { + "text": "Reports 'lateinit var' properties that override other 'lateinit var' properties. A subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused. Example: 'open class BaseClass {\n open lateinit var name: String\n }\n\n class RealClass : BaseClass() {\n override lateinit var name: String\n }'", + "markdown": "Reports `lateinit var` properties that override other `lateinit var` properties.\n\nA subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused.\n\n**Example:**\n\n\n open class BaseClass {\n open lateinit var name: String\n }\n\n class RealClass : BaseClass() {\n override lateinit var name: String\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LateinitVarOverridesLateinitVar", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VerboseNullabilityAndEmptiness", + "shortDescription": { + "text": "Verbose nullability and emptiness check" + }, + "fullDescription": { + "text": "Reports combination of 'null' and emptiness checks that can be simplified into a single check. The quick-fix replaces highlighted checks with a combined check call, such as 'isNullOrEmpty()'. Example: 'fun test(list: List?) {\n if (list == null || list.isEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }' After the quick-fix is applied: 'fun test(list: List?) {\n if (list.isNullOrEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }'", + "markdown": "Reports combination of `null` and emptiness checks that can be simplified into a single check.\n\nThe quick-fix replaces highlighted checks with a combined check call, such as `isNullOrEmpty()`.\n\n**Example:**\n\n\n fun test(list: List?) {\n if (list == null || list.isEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List?) {\n if (list.isNullOrEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "VerboseNullabilityAndEmptiness", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentKotlinGradleVersion", + "shortDescription": { + "text": "Kotlin Gradle and IDE plugins versions are different" + }, + "fullDescription": { + "text": "Reports that Gradle plugin version isn't properly supported in the current IDE plugin. This can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior. Example: 'dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n }' To fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin.", + "markdown": "Reports that Gradle plugin version isn't properly supported in the current IDE plugin.\n\nThis can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n }\n\nTo fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DifferentKotlinGradleVersion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinEqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the receiver and the argument are of incompatible primitive, enum, or string types. While such a call might theoretically be useful, most likely it represents a bug. Example: '5.equals(\"\");'", + "markdown": "Reports calls to `equals()` where the receiver and the argument are of incompatible primitive, enum, or string types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n 5.equals(\"\");\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsBetweenInconvertibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JoinDeclarationAndAssignment", + "shortDescription": { + "text": "Join declaration and assignment" + }, + "fullDescription": { + "text": "Reports property declarations that can be joined with the following assignment. Example: 'val x: String\n x = System.getProperty(\"\")' The quick fix joins the declaration with the assignment: 'val x = System.getProperty(\"\")' Configure the inspection: You can disable the option Report with complex initialization of member properties to skip properties with complex initialization. This covers two cases: The property initializer is complex (it is a multiline or a compound/control-flow expression) The property is first initialized and then immediately used in subsequent code (for example, to call additional initialization methods)", + "markdown": "Reports property declarations that can be joined with the following assignment.\n\n**Example:**\n\n\n val x: String\n x = System.getProperty(\"\")\n\nThe quick fix joins the declaration with the assignment:\n\n\n val x = System.getProperty(\"\")\n\nConfigure the inspection:\n\nYou can disable the option **Report with complex initialization of member properties** to skip properties with complex initialization. This covers two cases:\n\n1. The property initializer is complex (it is a multiline or a compound/control-flow expression)\n2. The property is first initialized and then immediately used in subsequent code (for example, to call additional initialization methods)" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JoinDeclarationAndAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HasPlatformType", + "shortDescription": { + "text": "Function or property has platform type" + }, + "fullDescription": { + "text": "Reports functions and properties that have a platform type. To prevent unexpected errors, the type should be declared explicitly. Example: 'fun foo() = java.lang.String.valueOf(1)' The quick fix allows you to specify the return type: 'fun foo(): String = java.lang.String.valueOf(1)'", + "markdown": "Reports functions and properties that have a platform type.\n\nTo prevent unexpected errors, the type should be declared explicitly.\n\n**Example:**\n\n\n fun foo() = java.lang.String.valueOf(1)\n\nThe quick fix allows you to specify the return type:\n\n\n fun foo(): String = java.lang.String.valueOf(1)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "HasPlatformType", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataClassPrivateConstructor", + "shortDescription": { + "text": "Private data class constructor is exposed via the 'copy' method" + }, + "fullDescription": { + "text": "Reports the 'private' primary constructor in data classes. 'data' classes have a 'copy()' factory method that can be used similarly to a constructor. A constructor should not be marked as 'private' to provide enough safety. Example: 'data class User private constructor(val name: String)' The quick-fix changes the constructor visibility modifier to 'public': 'data class User(val name: String)'", + "markdown": "Reports the `private` primary constructor in data classes.\n\n\n`data` classes have a `copy()` factory method that can be used similarly to a constructor.\nA constructor should not be marked as `private` to provide enough safety.\n\n**Example:**\n\n\n data class User private constructor(val name: String)\n\nThe quick-fix changes the constructor visibility modifier to `public`:\n\n\n data class User(val name: String)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DataClassPrivateConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantInnerClassModifier", + "shortDescription": { + "text": "Redundant 'inner' modifier" + }, + "fullDescription": { + "text": "Reports the 'inner' modifier on a class as redundant if it doesn't reference members of its outer class. Example: 'class Foo {\n inner class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }' After the quick-fix is applied: 'class Foo {\n class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }'", + "markdown": "Reports the `inner` modifier on a class as redundant if it doesn't reference members of its outer class.\n\n**Example:**\n\n\n class Foo {\n inner class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantInnerClassModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaCollectionsStaticMethodOnImmutableList", + "shortDescription": { + "text": "Call of Java mutator method on immutable Kotlin collection" + }, + "fullDescription": { + "text": "Reports Java mutator methods calls (like 'fill', 'reverse', 'shuffle', 'sort') on an immutable Kotlin collection. This can lead to 'UnsupportedOperationException' at runtime. Example: 'import java.util.Collections\n\n fun test() {\n val immutableList = listOf(1, 2)\n Collections.reverse(immutableList)\n }' To fix the problem make the list mutable.", + "markdown": "Reports Java mutator methods calls (like `fill`, `reverse`, `shuffle`, `sort`) on an immutable Kotlin collection.\n\nThis can lead to `UnsupportedOperationException` at runtime.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val immutableList = listOf(1, 2)\n Collections.reverse(immutableList)\n }\n\nTo fix the problem make the list mutable." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaCollectionsStaticMethodOnImmutableList", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenCoroutinesDeprecation", + "shortDescription": { + "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Maven" + }, + "fullDescription": { + "text": "Reports kotlinx.coroutines library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later.", + "markdown": "Reports **kotlinx.coroutines** library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MavenCoroutinesDeprecation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration/Maven", + "index": 155, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullableBooleanElvis", + "shortDescription": { + "text": "Equality check can be used instead of elvis for nullable boolean check" + }, + "fullDescription": { + "text": "Reports cases when an equality check should be used instead of the elvis operator. Example: 'fun check(a: Boolean? == null) {\n if (a ?: false) throw IllegalStateException()\n}' After the quick-fix is applied: 'fun check(a: Boolean? == null) {\n if (a == true) throw IllegalStateException()\n}'", + "markdown": "Reports cases when an equality check should be used instead of the elvis operator.\n\n**Example:**\n\n\n fun check(a: Boolean? == null) {\n if (a ?: false) throw IllegalStateException()\n }\n\nAfter the quick-fix is applied:\n\n\n fun check(a: Boolean? == null) {\n if (a == true) throw IllegalStateException()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NullableBooleanElvis", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedMavenDependency", + "shortDescription": { + "text": "Deprecated library is used in Maven" + }, + "fullDescription": { + "text": "Reports deprecated maven dependency. Example: '\n \n org.jetbrains.kotlin\n kotlin-stdlib-jre7\n ${kotlin.version}\n \n ' The quick fix changes the deprecated dependency to a maintained one: '\n \n org.jetbrains.kotlin\n kotlin-stdlib-jdk7\n ${kotlin.version}\n \n '", + "markdown": "Reports deprecated maven dependency.\n\n**Example:**\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jre7\n ${kotlin.version}\n \n \n\nThe quick fix changes the deprecated dependency to a maintained one:\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jdk7\n ${kotlin.version}\n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedMavenDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryVariable", + "shortDescription": { + "text": "Unnecessary local variable" + }, + "fullDescription": { + "text": "Reports local variables that are used only in the very next 'return' statement or are exact copies of other variables. Such variables can be safely inlined to make the code more clear. Example: 'fun sum(a: Int, b: Int): Int {\n val c = a + b\n return c\n }' After the quick-fix is applied: 'fun sum(a: Int, b: Int): Int {\n return a + b\n }' Configure the inspection: Use the Report immediately returned variables option to report immediately returned variables. When given descriptive names, such variables may improve the code readability in some cases, that's why this option is disabled by default.", + "markdown": "Reports local variables that are used only in the very next `return` statement or are exact copies of other variables.\n\nSuch variables can be safely inlined to make the code more clear.\n\n**Example:**\n\n\n fun sum(a: Int, b: Int): Int {\n val c = a + b\n return c\n }\n\nAfter the quick-fix is applied:\n\n\n fun sum(a: Int, b: Int): Int {\n return a + b\n }\n\nConfigure the inspection:\n\nUse the **Report immediately returned variables** option to report immediately returned variables.\nWhen given descriptive names, such variables may improve the code readability in some cases, that's why this option is disabled by default." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessaryVariable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEmptyInitializerBlock", + "shortDescription": { + "text": "Redundant empty initializer block" + }, + "fullDescription": { + "text": "Reports redundant empty initializer blocks. Example: 'class Foo {\n init {\n // Empty init block\n }\n }' After the quick-fix is applied: 'class Foo {\n }'", + "markdown": "Reports redundant empty initializer blocks.\n\n**Example:**\n\n\n class Foo {\n init {\n // Empty init block\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RedundantEmptyInitializerBlock", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GradleKotlinxCoroutinesDeprecation", + "shortDescription": { + "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Gradle" + }, + "fullDescription": { + "text": "Reports 'kotlinx.coroutines' library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+. Example: 'dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n }' The quick fix changes the 'kotlinx.coroutines' library version to a compatible with Kotlin 1.3: 'dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n }'", + "markdown": "Reports `kotlinx.coroutines` library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+.\n\n**Example:**\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n }\n\nThe quick fix changes the `kotlinx.coroutines` library version to a compatible with Kotlin 1.3:\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GradleKotlinxCoroutinesDeprecation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration/Gradle", + "index": 163, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantWith", + "shortDescription": { + "text": "Redundant 'with' call" + }, + "fullDescription": { + "text": "Reports redundant 'with' function calls that don't access anything from the receiver. Examples: 'class MyClass {\n fun f(): String = \"\"\n }\n\n fun testRedundant() {\n with(c) { // <== 'with' is redundant since 'c' isn't used\n println(\"1\")\n }\n }\n\n fun testOk() {\n val c = MyClass()\n with(c) { // <== OK because 'f()' is effectively 'c.f()'\n println(f())\n }\n }'", + "markdown": "Reports redundant `with` function calls that don't access anything from the receiver.\n\n**Examples:**\n\n\n class MyClass {\n fun f(): String = \"\"\n }\n\n fun testRedundant() {\n with(c) { // <== 'with' is redundant since 'c' isn't used\n println(\"1\")\n }\n }\n\n fun testOk() {\n val c = MyClass()\n with(c) { // <== OK because 'f()' is effectively 'c.f()'\n println(f())\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantWith", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WarningOnMainUnusedParameterMigration", + "shortDescription": { + "text": "Unused 'args' on 'main' since 1.4" + }, + "fullDescription": { + "text": "Reports 'main' function with an unused single parameter. Since Kotlin 1.4, it is possible to use the 'main' function without parameter as the entry point to the Kotlin program. The compiler reports a warning for the 'main' function with an unused parameter.", + "markdown": "Reports `main` function with an unused single parameter.\n\nSince Kotlin 1.4, it is possible to use the `main` function without parameter as the entry point to the Kotlin program.\nThe compiler reports a warning for the `main` function with an unused parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "WarningOnMainUnusedParameterMigration", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLabelMigration", + "shortDescription": { + "text": "Redundant label" + }, + "fullDescription": { + "text": "Reports redundant labels which cause compilation errors since Kotlin 1.4. Since Kotlin 1.0, one can mark any statement with a label: 'fun foo() {\n L1@ val x = L2@bar()\n }' However, these labels can be referenced only in a limited number of ways: break / continue from a loop non-local return from an inline lambda or inline anonymous function Such labels are prohibited since Kotlin 1.4. This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports redundant labels which cause compilation errors since Kotlin 1.4.\n\nSince Kotlin 1.0, one can mark any statement with a label:\n\n\n fun foo() {\n L1@ val x = L2@bar()\n }\n\nHowever, these labels can be referenced only in a limited number of ways:\n\n* break / continue from a loop\n* non-local return from an inline lambda or inline anonymous function\n\nSuch labels are prohibited since Kotlin 1.4.\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantLabelMigration", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinRedundantDiagnosticSuppress", + "shortDescription": { + "text": "Redundant diagnostic suppression" + }, + "fullDescription": { + "text": "Reports usages of '@Suppress' annotations that can be safely removed because the compiler diagnostic they affect is no longer applicable in this context. Example: 'fun doSmth(@Suppress(\"UNUSED_PARAMETER\") used: Int) {\n println(used)\n }' After the quick-fix is applied: 'fun doSmth(used: Int) {\n println(used)\n }'", + "markdown": "Reports usages of `@Suppress` annotations that can be safely removed because the compiler diagnostic they affect is no longer applicable in this context.\n\n**Example:**\n\n\n fun doSmth(@Suppress(\"UNUSED_PARAMETER\") used: Int) {\n println(used)\n }\n\nAfter the quick-fix is applied:\n\n\n fun doSmth(used: Int) {\n println(used)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinRedundantDiagnosticSuppress", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNegatedIsEmptyWithIsNotEmpty", + "shortDescription": { + "text": "Negated call can be simplified" + }, + "fullDescription": { + "text": "Reports negation 'isEmpty()' and 'isNotEmpty()' for collections and 'String', or 'isBlank()' and 'isNotBlank()' for 'String'. Using corresponding functions makes your code simpler. The quick-fix replaces the negation call with the corresponding call from the Standard Library. Example: 'fun main() {\n val list = listOf(1,2,3)\n if (!list.isEmpty()) {\n // do smth\n }\n }' After the quick-fix is applied: 'fun main() {\n val list = listOf(1,2,3)\n if (list.isNotEmpty()) {\n // do smth\n }\n }'", + "markdown": "Reports negation `isEmpty()` and `isNotEmpty()` for collections and `String`, or `isBlank()` and `isNotBlank()` for `String`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the negation call with the corresponding call from the Standard Library.\n\n**Example:**\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (!list.isEmpty()) {\n // do smth\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (list.isNotEmpty()) {\n // do smth\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceNegatedIsEmptyWithIsNotEmpty", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DelegationToVarProperty", + "shortDescription": { + "text": "Delegating to 'var' property" + }, + "fullDescription": { + "text": "Reports interface delegation to a 'var' property. Only initial value of a property is used for delegation, any later assignments do not affect it. Example: 'class Example(var text: CharSequence): CharSequence by text' The quick-fix replaces a property with immutable one: 'class Example(val text: CharSequence): CharSequence by text' Alternative way, if you rely on mutability for some reason: 'class Example(text: CharSequence): CharSequence by text {\n var text = text\n }'", + "markdown": "Reports interface delegation to a `var` property.\n\nOnly initial value of a property is used for delegation, any later assignments do not affect it.\n\n**Example:**\n\n\n class Example(var text: CharSequence): CharSequence by text\n\nThe quick-fix replaces a property with immutable one:\n\n\n class Example(val text: CharSequence): CharSequence by text\n\nAlternative way, if you rely on mutability for some reason:\n\n\n class Example(text: CharSequence): CharSequence by text {\n var text = text\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DelegationToVarProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantConditionIf", + "shortDescription": { + "text": "Condition of 'if' expression is constant" + }, + "fullDescription": { + "text": "Reports 'if' expressions that have 'true' or 'false' constant literal condition and can be simplified. While occasionally intended, this construction is confusing and often the result of a typo or previous refactoring. Example: 'fun example() {\n if (true) {\n throw IllegalStateException(\"Unexpected state\")\n }\n }' The quick-fix removes the 'if' condition: 'fun example() {\n throw IllegalStateException(\"Unexpected state\")\n }'", + "markdown": "Reports `if` expressions that have `true` or `false` constant literal condition and can be simplified.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo\nor previous refactoring.\n\n**Example:**\n\n\n fun example() {\n if (true) {\n throw IllegalStateException(\"Unexpected state\")\n }\n }\n\nThe quick-fix removes the `if` condition:\n\n\n fun example() {\n throw IllegalStateException(\"Unexpected state\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConstantConditionIf", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaArrow", + "shortDescription": { + "text": "Redundant lambda arrow" + }, + "fullDescription": { + "text": "Reports redundant lambda arrows in lambdas without parameters. Example: 'fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { -> println(\"Hi!\") }\n }' After the quick-fix is applied: 'fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { println(\"Hi!\") }\n }'", + "markdown": "Reports redundant lambda arrows in lambdas without parameters.\n\n**Example:**\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { -> println(\"Hi!\") }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { println(\"Hi!\") }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantLambdaArrow", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinInternalInJava", + "shortDescription": { + "text": "Usage of Kotlin internal declarations from Java" + }, + "fullDescription": { + "text": "Reports usages of Kotlin 'internal' declarations in Java code that is located in a different module. The 'internal' keyword is designed to restrict access to a class, function, or property from other modules. Due to JVM limitations, 'internal' classes, functions, and properties can still be accessed from outside Kotlin, which may later lead to compatibility problems.", + "markdown": "Reports usages of Kotlin `internal` declarations in Java code that is located in a different module.\n\n\nThe `internal` keyword is designed to restrict access to a class, function, or property from other modules.\nDue to JVM limitations, `internal` classes, functions, and properties can still be\naccessed from outside Kotlin, which may later lead to compatibility problems." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "KotlinInternalInJava", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoConstructorMigration", + "shortDescription": { + "text": "Forbidden constructor call" + }, + "fullDescription": { + "text": "Reports a constructor calls on functional supertypes that will lead to compilation error since 1.9. Motivation types: The implementation does not abide by a published spec or documentation More details: KT-46344: No error for a super class constructor call on a function interface in supertypes list The quick-fix removes a constructor call. Example: 'abstract class A : () -> Int()' After the quick-fix is applied: 'abstract class A : () -> Int' This inspection only reports if the Kotlin language level of the project or module is 1.7 or higher.", + "markdown": "Reports a constructor calls on functional supertypes that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* The implementation does not abide by a published spec or documentation\n\n**More details:** [KT-46344: No error for a super class constructor call on a function interface in supertypes list](https://youtrack.jetbrains.com/issue/KT-46344)\n\nThe quick-fix removes a constructor call.\n\n**Example:**\n\n\n abstract class A : () -> Int()\n\nAfter the quick-fix is applied:\n\n\n abstract class A : () -> Int\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "NoConstructorMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantValueArgument", + "shortDescription": { + "text": "Redundant value argument" + }, + "fullDescription": { + "text": "Reports arguments that are equal to the default values of the corresponding parameters. Example: 'fun foo(x: Int, y: Int = 2) {}\n\nfun bar() {\n foo(1, 2)\n}' After the quick-fix is applied: 'fun bar() {\n foo(1)\n}'", + "markdown": "Reports arguments that are equal to the default values of the corresponding parameters.\n\n**Example:**\n\n\n fun foo(x: Int, y: Int = 2) {}\n\n fun bar() {\n foo(1, 2)\n }\n\nAfter the quick-fix is applied:\n\n\n fun bar() {\n foo(1)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantValueArgument", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseWithIndex", + "shortDescription": { + "text": "Manually incremented index variable can be replaced with use of 'withIndex()'" + }, + "fullDescription": { + "text": "Reports 'for' loops with a manually incremented index variable. 'for' loops with a manually incremented index variable can be simplified with the 'withIndex()' function. Use withIndex() instead of manual index increment quick-fix can be used to amend the code automatically. Example: 'fun foo(list: List): Int? {\n var index = 0\n for (s in list) { <== can be simplified\n val x = s.length * index\n index++\n if (x > 0) return x\n }\n return null\n }' After the quick-fix is applied: 'fun foo(list: List): Int? {\n for ((index, s) in list.withIndex()) {\n val x = s.length * index\n if (x > 0) return x\n }\n return null\n }'", + "markdown": "Reports `for` loops with a manually incremented index variable.\n\n`for` loops with a manually incremented index variable can be simplified with the `withIndex()` function.\n\n**Use withIndex() instead of manual index increment** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun foo(list: List): Int? {\n var index = 0\n for (s in list) { <== can be simplified\n val x = s.length * index\n index++\n if (x > 0) return x\n }\n return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): Int? {\n for ((index, s) in list.withIndex()) {\n val x = s.length * index\n if (x > 0) return x\n }\n return null\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UseWithIndex", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitThis", + "shortDescription": { + "text": "Implicit 'this'" + }, + "fullDescription": { + "text": "Reports usages of implicit this. Example: 'class Foo {\n fun s() = \"\"\n\n fun test() {\n s()\n }\n }' The quick fix specifies this explicitly: 'class Foo {\n fun s() = \"\"\n\n fun test() {\n this.s()\n }\n }'", + "markdown": "Reports usages of implicit **this** .\n\n**Example:**\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n s()\n }\n }\n\nThe quick fix specifies **this** explicitly:\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n this.s()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ImplicitThis", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinCatchMayIgnoreException", + "shortDescription": { + "text": "'catch' block may ignore exception" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. The inspection won't report any 'catch' parameters named 'ignore', 'ignored', or '_'. You can use the quick-fix to change the exception name to '_'. Example: 'try {\n throwingMethod()\n } catch (ex: IOException) {\n\n }' After the quick-fix is applied: 'try {\n throwingMethod()\n } catch (_: IOException) {\n\n }' Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments.", + "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\n\n\nThe inspection won't report any `catch` parameters named `ignore`, `ignored`, or `_`.\n\n\nYou can use the quick-fix to change the exception name to `_`.\n\n**Example:**\n\n\n try {\n throwingMethod()\n } catch (ex: IOException) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throwingMethod()\n } catch (_: IOException) {\n\n }\n\nUse the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CatchMayIgnoreException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentStdlibGradleVersion", + "shortDescription": { + "text": "Kotlin library and Gradle plugin versions are different" + }, + "fullDescription": { + "text": "Reports different Kotlin stdlib and compiler versions. Example: 'dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n }' To fix the problem change the kotlin stdlib version to match the kotlin compiler version.", + "markdown": "Reports different Kotlin stdlib and compiler versions.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n }\n\nTo fix the problem change the kotlin stdlib version to match the kotlin compiler version." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DifferentStdlibGradleVersion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeVal", + "shortDescription": { + "text": "Local 'var' is never modified and can be declared as 'val'" + }, + "fullDescription": { + "text": "Reports local variables declared with the 'var' keyword that are never modified. Kotlin encourages to declare practically immutable variables using the 'val' keyword, ensuring that their value will never change. Example: 'fun example() {\n var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }' The quick-fix replaces the 'var' keyword with 'val': 'fun example() {\n val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }'", + "markdown": "Reports local variables declared with the `var` keyword that are never modified.\n\nKotlin encourages to declare practically immutable variables using the `val` keyword, ensuring that their value will never change.\n\n**Example:**\n\n\n fun example() {\n var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n\nThe quick-fix replaces the `var` keyword with `val`:\n\n\n fun example() {\n val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CanBeVal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithIgnoreCaseEquals", + "shortDescription": { + "text": "Should be replaced with 'equals(..., ignoreCase = true)'" + }, + "fullDescription": { + "text": "Reports case-insensitive comparisons that can be replaced with 'equals(..., ignoreCase = true)'. By using 'equals()' you don't have to allocate extra strings with 'toLowerCase()' or 'toUpperCase()' to compare strings. The quick-fix replaces the case-insensitive comparison that uses 'toLowerCase()' or 'toUpperCase()' with 'equals(..., ignoreCase = true)'. Note: May change semantics for some locales. Example: 'fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.toLowerCase() == b.toLowerCase())\n }' After the quick-fix is applied: 'fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.equals(b, ignoreCase = true))\n }'", + "markdown": "Reports case-insensitive comparisons that can be replaced with `equals(..., ignoreCase = true)`.\n\nBy using `equals()` you don't have to allocate extra strings with `toLowerCase()` or `toUpperCase()` to compare strings.\n\nThe quick-fix replaces the case-insensitive comparison that uses `toLowerCase()` or `toUpperCase()` with `equals(..., ignoreCase = true)`.\n\n**Note:** May change semantics for some locales.\n\n**Example:**\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.toLowerCase() == b.toLowerCase())\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.equals(b, ignoreCase = true))\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceWithIgnoreCaseEquals", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithSubstringAfter", + "shortDescription": { + "text": "'substring' call should be replaced with 'substringAfter'" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(s.indexOf(x))' that can be replaced with 's.substringAfter(x)'. Using 's.substringAfter(x)' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringAfter'. Example: 'fun foo(s: String) {\n s.substring(s.indexOf('x'))\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.substringAfter('x')\n }'", + "markdown": "Reports calls like `s.substring(s.indexOf(x))` that can be replaced with `s.substringAfter(x)`.\n\nUsing `s.substringAfter(x)` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringAfter`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringAfter('x')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSubstringWithSubstringAfter", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompanionReference", + "shortDescription": { + "text": "Redundant 'Companion' reference" + }, + "fullDescription": { + "text": "Reports redundant 'Companion' reference. Example: 'class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.Companion.create()\n }' After the quick-fix is applied: 'class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.create()\n }'", + "markdown": "Reports redundant `Companion` reference.\n\n**Example:**\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.Companion.create()\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.create()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantCompanionReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KDocUnresolvedReference", + "shortDescription": { + "text": "Unresolved reference in KDoc" + }, + "fullDescription": { + "text": "Reports unresolved references in KDoc comments. Example: '/**\n * [unresolvedLink]\n */\n fun foo() {}' To fix the problem make the link valid.", + "markdown": "Reports unresolved references in KDoc comments.\n\n**Example:**\n\n\n /**\n * [unresolvedLink]\n */\n fun foo() {}\n\nTo fix the problem make the link valid." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "KDocUnresolvedReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedLambdaShadowedImplicitParameter", + "shortDescription": { + "text": "Nested lambda has shadowed implicit parameter" + }, + "fullDescription": { + "text": "Reports nested lambdas with shadowed implicit parameters. Example: 'fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach {\n println(it)\n }\n }\n}' After the quick-fix is applied: 'fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach { it1 ->\n println(it1)\n }\n }\n}'", + "markdown": "Reports nested lambdas with shadowed implicit parameters.\n\n**Example:**\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach {\n println(it)\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach { it1 ->\n println(it1)\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NestedLambdaShadowedImplicitParameter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSamConstructor", + "shortDescription": { + "text": "Redundant SAM constructor" + }, + "fullDescription": { + "text": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas. Example: 'fun main() {\n foo(Runnable { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}' After the quick-fix is applied: 'fun main() {\n foo( { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}'", + "markdown": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas.\n\n**Example:**\n\n\n fun main() {\n foo(Runnable { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n foo( { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSamConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentCommentForJavaParameter", + "shortDescription": { + "text": "Inconsistent comment for Java parameter" + }, + "fullDescription": { + "text": "Reports inconsistent parameter names for Java method calls specified in a comment block. Examples: '// Java\n public class JavaService {\n public void invoke(String command) {}\n }' '// Kotlin\n fun main() {\n JavaService().invoke(/* name = */ \"fix\")\n }' The quick fix corrects the parameter name in the comment block: 'fun main() {\n JavaService().invoke(/* command = */ \"fix\")\n }'", + "markdown": "Reports inconsistent parameter names for **Java** method calls specified in a comment block.\n\n**Examples:**\n\n\n // Java\n public class JavaService {\n public void invoke(String command) {}\n }\n\n\n // Kotlin\n fun main() {\n JavaService().invoke(/* name = */ \"fix\")\n }\n\nThe quick fix corrects the parameter name in the comment block:\n\n\n fun main() {\n JavaService().invoke(/* command = */ \"fix\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentCommentForJavaParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantCallsOfConversionMethods", + "shortDescription": { + "text": "Redundant call of conversion method" + }, + "fullDescription": { + "text": "Reports redundant calls to conversion methods (for example, 'toString()' on a 'String' or 'toDouble()' on a 'Double'). Use the 'Remove redundant calls of the conversion method' quick-fix to clean up the code.", + "markdown": "Reports redundant calls to conversion methods (for example, `toString()` on a `String` or `toDouble()` on a `Double`).\n\nUse the 'Remove redundant calls of the conversion method' quick-fix to clean up the code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveRedundantCallsOfConversionMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinThrowableNotThrown", + "shortDescription": { + "text": "Throwable not thrown" + }, + "fullDescription": { + "text": "Reports instantiations of 'Throwable' or its subclasses, when the created 'Throwable' is never actually thrown. The reported code indicates mistakes that are hard to catch in tests. Also, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the resulting 'Throwable' instance is not thrown. Example: 'fun check(condition: Boolean) {\n if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n }\n\n fun createError() = RuntimeException()\n\n fun foo() {\n /* throw is missing here */ createError()\n }'", + "markdown": "Reports instantiations of `Throwable` or its subclasses, when the created `Throwable` is never actually thrown.\n\nThe reported code indicates mistakes that are hard to catch in tests.\n\n\nAlso, this inspection reports method calls that return instances of `Throwable` or its subclasses,\nwhen the resulting `Throwable` instance is not thrown.\n\n**Example:**\n\n\n fun check(condition: Boolean) {\n if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n }\n\n fun createError() = RuntimeException()\n\n fun foo() {\n /* throw is missing here */ createError()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowableNotThrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinSealedInheritorsInJava", + "shortDescription": { + "text": "Inheritance of Kotlin sealed interface/class from Java" + }, + "fullDescription": { + "text": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code. Example: '// Kotlin file: MathExpression.kt\n\nsealed class MathExpression\n\ndata class Const(val number: Double) : MathExpression()\ndata class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()' '// Java file: NotANumber.java\n\npublic class NotANumber extends MathExpression {\n}'", + "markdown": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code.\n\n**Example:**\n\n\n // Kotlin file: MathExpression.kt\n\n sealed class MathExpression\n\n data class Const(val number: Double) : MathExpression()\n data class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()\n\n\n // Java file: NotANumber.java\n\n public class NotANumber extends MathExpression {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "KotlinSealedInheritorsInJava", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyNegatedBinaryExpression", + "shortDescription": { + "text": "Negated boolean expression can be simplified" + }, + "fullDescription": { + "text": "Reports negated boolean expressions that can be simplified. The quick-fix simplifies the boolean expression. Example: 'fun test(n: Int) {\n !(0 == 1)\n }' After the quick-fix is applied: 'fun test(n: Int) {\n 0 != 1\n }' Please note that this action may change code semantics if IEEE-754 NaN values are involved: 'fun main() {\n println(!(Double.NaN >= 0)) // true\n }' After the quick-fix is applied: 'fun main() {\n println(Double.NaN < 0) // false\n }'", + "markdown": "Reports negated boolean expressions that can be simplified.\n\nThe quick-fix simplifies the boolean expression.\n\n**Example:**\n\n\n fun test(n: Int) {\n !(0 == 1)\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(n: Int) {\n 0 != 1\n }\n\nPlease note that this action may change code semantics if IEEE-754 NaN values are involved:\n\n\n fun main() {\n println(!(Double.NaN >= 0)) // true\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n println(Double.NaN < 0) // false\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyNegatedBinaryExpression", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MemberVisibilityCanBePrivate", + "shortDescription": { + "text": "Class member can have 'private' visibility" + }, + "fullDescription": { + "text": "Reports declarations that can be made 'private' to follow the encapsulation principle. Example: 'class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n}' After the quick-fix is applied (considering there are no usages of 'url' outside of 'Service' class): 'class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n}'", + "markdown": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MemberVisibilityCanBePrivate", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SelfAssignment", + "shortDescription": { + "text": "Redundant assignment" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself. The quick-fix removes the redundant assignment. Example: 'fun test() {\n var bar = 1\n bar = bar\n }' After the quick-fix is applied: 'fun test() {\n var bar = 1\n }'", + "markdown": "Reports assignments of a variable to itself.\n\nThe quick-fix removes the redundant assignment.\n\n**Example:**\n\n\n fun test() {\n var bar = 1\n bar = bar\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n var bar = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SelfAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecursiveEqualsCall", + "shortDescription": { + "text": "Recursive equals call" + }, + "fullDescription": { + "text": "Reports recursive 'equals'('==') calls. In Kotlin, '==' compares object values by calling 'equals' method under the hood. '===', on the other hand, compares objects by reference. '===' is commonly used in 'equals' method implementation. But '===' may be mistakenly mixed up with '==' leading to infinite recursion. Example: 'class X {\n override fun equals(other: Any?): Boolean {\n if (this == other) return true\n return false\n }\n }' After the quick-fix is applied: 'class X {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n return false\n }\n }'", + "markdown": "Reports recursive `equals`(`==`) calls.\n\n\nIn Kotlin, `==` compares object values by calling `equals` method under the hood.\n`===`, on the other hand, compares objects by reference.\n\n\n`===` is commonly used in `equals` method implementation.\nBut `===` may be mistakenly mixed up with `==` leading to infinite recursion.\n\n**Example:**\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this == other) return true\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n return false\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RecursiveEqualsCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitThis", + "shortDescription": { + "text": "Redundant explicit 'this'" + }, + "fullDescription": { + "text": "Reports an explicit 'this' when it can be omitted. Example: 'class C {\n private val i = 1\n fun f() = this.i\n }' The quick-fix removes the redundant 'this': 'class C {\n private val i = 1\n fun f() = i\n }'", + "markdown": "Reports an explicit `this` when it can be omitted.\n\n**Example:**\n\n\n class C {\n private val i = 1\n fun f() = this.i\n }\n\nThe quick-fix removes the redundant `this`:\n\n\n class C {\n private val i = 1\n fun f() = i\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ExplicitThis", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullChecksToSafeCall", + "shortDescription": { + "text": "Null-checks can be replaced with safe-calls" + }, + "fullDescription": { + "text": "Reports chained null-checks that can be replaced with safe-calls. Example: 'fun test(my: My?) {\n if (my != null && my.foo() != null) {}\n }' After the quick-fix is applied: 'fun test(my: My?) {\n if (my?.foo() != null) {}\n }'", + "markdown": "Reports chained null-checks that can be replaced with safe-calls.\n\n**Example:**\n\n\n fun test(my: My?) {\n if (my != null && my.foo() != null) {}\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(my: My?) {\n if (my?.foo() != null) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NullChecksToSafeCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedMainParameter", + "shortDescription": { + "text": "Main parameter is not necessary" + }, + "fullDescription": { + "text": "Reports 'main' function with an unused single parameter.", + "markdown": "Reports `main` function with an unused single parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnusedMainParameter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithLambdaExpressionBody", + "shortDescription": { + "text": "Function with '= { ... }' and inferred return type" + }, + "fullDescription": { + "text": "Reports functions with '= { ... }' and inferred return type. Example: 'fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.' The quick fix removes braces: 'fun sum(a: Int, b: Int) = a + b'", + "markdown": "Reports functions with `= { ... }` and inferred return type.\n\n**Example:**\n\n\n fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.\n\nThe quick fix removes braces:\n\n\n fun sum(a: Int, b: Int) = a + b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FunctionWithLambdaExpressionBody", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayInDataClass", + "shortDescription": { + "text": "Array property in data class" + }, + "fullDescription": { + "text": "Reports properties with an 'Array' type in a 'data' class without overridden 'equals()' or 'hashCode()'. Array parameters are compared by reference equality, which is likely an unexpected behavior. It is strongly recommended to override 'equals()' and 'hashCode()' in such cases. Example: 'data class Text(val lines: Array)' The quick-fix generates missing 'equals()' and 'hashCode()' implementations: 'data class Text(val lines: Array) {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n\n other as Text\n\n if (!lines.contentEquals(other.lines)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return lines.contentHashCode()\n }\n }'", + "markdown": "Reports properties with an `Array` type in a `data` class without overridden `equals()` or `hashCode()`.\n\n\nArray parameters are compared by reference equality, which is likely an unexpected behavior.\nIt is strongly recommended to override `equals()` and `hashCode()` in such cases.\n\n**Example:**\n\n\n data class Text(val lines: Array)\n\nThe quick-fix generates missing `equals()` and `hashCode()` implementations:\n\n\n data class Text(val lines: Array) {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n\n other as Text\n\n if (!lines.contentEquals(other.lines)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return lines.contentHashCode()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ArrayInDataClass", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertTwoComparisonsToRangeCheck", + "shortDescription": { + "text": "Two comparisons should be converted to a range check" + }, + "fullDescription": { + "text": "Reports two consecutive comparisons that can be converted to a range check. Checking against a range makes code simpler by removing test subject duplication. Example: 'fun checkMonth(month: Int): Boolean {\n return month >= 1 && month <= 12\n }' The quick-fix replaces the comparison-based check with a range one: 'fun checkMonth(month: Int): Boolean {\n return month in 1..12\n }'", + "markdown": "Reports two consecutive comparisons that can be converted to a range check.\n\nChecking against a range makes code simpler by removing test subject duplication.\n\n**Example:**\n\n\n fun checkMonth(month: Int): Boolean {\n return month >= 1 && month <= 12\n }\n\nThe quick-fix replaces the comparison-based check with a range one:\n\n\n fun checkMonth(month: Int): Boolean {\n return month in 1..12\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertTwoComparisonsToRangeCheck", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableName", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with a lowercase letter, use camel case and no underscores. Example: 'fun fibonacciNumber(index: Int): Long = when(index) {\n 0 -> 0\n else -> {\n // does not follow naming conventions: contains underscore symbol (`_`)\n var number_one: Long = 0\n // does not follow naming conventions: starts with an uppercase letter\n var NUMBER_TWO: Long = 1\n // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n var numberThree: Long = number_one + NUMBER_TWO\n\n for(currentIndex in 2..index) {\n numberThree = number_one + NUMBER_TWO\n number_one = NUMBER_TWO\n NUMBER_TWO = numberThree\n }\n numberThree\n }\n }'", + "markdown": "Reports local variables that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#function-names): it has to start with a lowercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n fun fibonacciNumber(index: Int): Long = when(index) {\n 0 -> 0\n else -> {\n // does not follow naming conventions: contains underscore symbol (`_`)\n var number_one: Long = 0\n // does not follow naming conventions: starts with an uppercase letter\n var NUMBER_TWO: Long = 1\n // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n var numberThree: Long = number_one + NUMBER_TWO\n\n for(currentIndex in 2..index) {\n numberThree = number_one + NUMBER_TWO\n number_one = NUMBER_TWO\n NUMBER_TWO = numberThree\n }\n numberThree\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LocalVariableName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceUntilWithRangeUntil", + "shortDescription": { + "text": "Replace 'until' with '..<' operator" + }, + "fullDescription": { + "text": "Reports 'until' that can be replaced with '..<' operator. Every 'until' to '..<' replacement doesn't change the semantic in any way. The UX research shows that developers make ~20-30% fewer errors when reading code containing '..<' compared to 'until'. Example: 'fun main(args: Array) {\n for (index in 0 until args.size) {\n println(index)\n }\n }' After the quick-fix is applied: 'fun main(args: Array) {\n for (index in 0..) {\n for (index in 0 until args.size) {\n println(index)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (index in 0.. Int) {\n b(a * a)\n}\n\nfun foo() {\n square(2, { it })\n}' After the quick-fix is applied: 'fun foo() {\n square(2){ it }\n}'", + "markdown": "Reports lambda expressions in parentheses which can be moved outside.\n\n**Example:**\n\n\n fun square(a: Int, b: (Int) -> Int) {\n b(a * a)\n }\n\n fun foo() {\n square(2, { it })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n square(2){ it }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MoveLambdaOutsideParentheses", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitTypeParametersForLocalVariablesMigration", + "shortDescription": { + "text": "Local variable with type parameters" + }, + "fullDescription": { + "text": "Reports local variables with type parameters. A type parameter for a local variable doesn't make sense because it can't be specialized. Example: 'fun main() {\n val x = \"\"\n }' After the quick-fix is applied: 'fun main() {\n val x = \"\"\n }' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports local variables with type parameters.\n\nA type parameter for a local variable doesn't make sense because it can't be specialized.\n\n**Example:**\n\n\n fun main() {\n val x = \"\"\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val x = \"\"\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ProhibitTypeParametersForLocalVariablesMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestFunctionName", + "shortDescription": { + "text": "Test function naming convention" + }, + "fullDescription": { + "text": "Reports test function names that do not follow the recommended naming conventions.", + "markdown": "Reports test function names that do not follow the [recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#names-for-test-methods)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TestFunctionName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecursivePropertyAccessor", + "shortDescription": { + "text": "Recursive property accessor" + }, + "fullDescription": { + "text": "Reports recursive property accessor calls which can end up with a 'StackOverflowError'. Such calls are usually confused with backing field access. Example: 'var counter: Int = 0\n set(value) {\n counter = if (value < 0) 0 else value\n }' After the quick-fix is applied: 'var counter: Int = 0\n set(value) {\n field = if (value < 0) 0 else value\n }'", + "markdown": "Reports recursive property accessor calls which can end up with a `StackOverflowError`.\nSuch calls are usually confused with backing field access.\n\n**Example:**\n\n\n var counter: Int = 0\n set(value) {\n counter = if (value < 0) 0 else value\n }\n\nAfter the quick-fix is applied:\n\n\n var counter: Int = 0\n set(value) {\n field = if (value < 0) 0 else value\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RecursivePropertyAccessor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnitExpression", + "shortDescription": { + "text": "Redundant 'Unit'" + }, + "fullDescription": { + "text": "Reports redundant 'Unit' expressions. 'Unit' in Kotlin can be used as the return type of functions that do not return anything meaningful. The 'Unit' type has only one possible value, which is the 'Unit' object. Examples: 'fun redundantA(): Unit {\n return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n }\n\n fun requiredA(condition: Boolean): Any {\n if (condition) return \"hello\"\n return Unit // explicit 'Unit' is required since the expected type is 'Any'\n }\n\n fun redundantB(condition: Boolean): Any = if (condition) {\n fun ancillary(): Int = 1\n println(\"${ancillary()}\")\n Unit // redundant since the last expression is already of type 'Unit'\n } else {\n println(\"else\")\n }\n\n fun requiredB(condition: Boolean): Any = if (condition) {\n 1024\n Unit // required, otherwise '1024' (Int) would be the return value\n } else {\n println(\"else\")\n }'", + "markdown": "Reports redundant `Unit` expressions.\n\n\n`Unit` in Kotlin can be used as the return type of functions that do not return anything meaningful.\nThe `Unit` type has only one possible value, which is the `Unit` object.\n\n**Examples:**\n\n\n fun redundantA(): Unit {\n return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n }\n\n fun requiredA(condition: Boolean): Any {\n if (condition) return \"hello\"\n return Unit // explicit 'Unit' is required since the expected type is 'Any'\n }\n\n fun redundantB(condition: Boolean): Any = if (condition) {\n fun ancillary(): Int = 1\n println(\"${ancillary()}\")\n Unit // redundant since the last expression is already of type 'Unit'\n } else {\n println(\"else\")\n }\n\n fun requiredB(condition: Boolean): Any = if (condition) {\n 1024\n Unit // required, otherwise '1024' (Int) would be the return value\n } else {\n println(\"else\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantUnitExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PlatformExtensionReceiverOfInline", + "shortDescription": { + "text": "'inline fun' with nullable receiver until Kotlin 1.2" + }, + "fullDescription": { + "text": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). It's recommended to add an explicit '!!' you want an exception to be thrown, or consider changing the function's receiver type to nullable if it should work without exceptions. Example: 'inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property.removePrefix(\"/home\"))\n }' After the quick-fix is applied: 'inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property!!.removePrefix(\"/home\"))\n }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.", + "markdown": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nIt's recommended to add an explicit `!!` you want an exception to be thrown,\nor consider changing the function's receiver type to nullable if it should work without exceptions.\n\n**Example:**\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property.removePrefix(\"/home\"))\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property!!.removePrefix(\"/home\"))\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PlatformExtensionReceiverOfInline", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousEqualsCombination", + "shortDescription": { + "text": "Suspicious combination of == and ===" + }, + "fullDescription": { + "text": "Reports '==' and '===' comparisons that are both used on the same variable within a single expression. Due to similarities '==' and '===' could be mixed without notice, and it takes a close look to check that '==' used instead of '===' Example: 'if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n type === LAMBDA_EXPRESSION) return'", + "markdown": "Reports `==` and `===` comparisons that are both used on the same variable within a single expression.\n\nDue to similarities `==` and `===` could be mixed without notice, and\nit takes a close look to check that `==` used instead of `===`\n\nExample:\n\n\n if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n type === LAMBDA_EXPRESSION) return\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "SuspiciousEqualsCombination", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedDataClassCopyResult", + "shortDescription": { + "text": "Unused result of data class copy" + }, + "fullDescription": { + "text": "Reports calls to data class 'copy' function without using its result.", + "markdown": "Reports calls to data class `copy` function without using its result." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedDataClassCopyResult", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantElseInIf", + "shortDescription": { + "text": "Redundant 'else' in 'if'" + }, + "fullDescription": { + "text": "Reports redundant 'else' in 'if' with 'return' Example: 'fun foo(arg: Boolean): Int {\n if (arg) return 0\n else { // This else is redundant, code in braces could be just shifted left\n someCode()\n }\n }' After the quick-fix is applied: 'fun foo(arg: Boolean): Int {\n if (arg) return 0\n someCode()\n }'", + "markdown": "Reports redundant `else` in `if` with `return`\n\n**Example:**\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n else { // This else is redundant, code in braces could be just shifted left\n someCode()\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n someCode()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantElseInIf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplacePutWithAssignment", + "shortDescription": { + "text": "'map.put()' can be converted to assignment" + }, + "fullDescription": { + "text": "Reports 'map.put' function calls that can be replaced with indexing operator ('[]'). Using syntactic sugar makes your code simpler. The quick-fix replaces 'put' call with the assignment. Example: 'fun foo(map: MutableMap) {\n map.put(42, \"foo\")\n }' After the quick-fix is applied: 'fun foo(map: MutableMap) {\n map[42] = \"foo\"\n }'", + "markdown": "Reports `map.put` function calls that can be replaced with indexing operator (`[]`).\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces `put` call with the assignment.\n\n**Example:**\n\n\n fun foo(map: MutableMap) {\n map.put(42, \"foo\")\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(map: MutableMap) {\n map[42] = \"foo\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplacePutWithAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaIoSerializableObjectMustHaveReadResolve", + "shortDescription": { + "text": "Serializable object must implement 'readResolve'" + }, + "fullDescription": { + "text": "Reports 'object's ('data object' including) that implement 'java.io.Serializable' but don't implement readResolve Example: 'import java.io.Serializable\n\n object Foo : Serializable' The quick fix implements 'readResolve' method: 'import java.io.Serializable\n\n object Foo : Serializable {\n private fun readResolve() = Foo\n }'", + "markdown": "Reports `object`s (`data object` including) that implement `java.io.Serializable` but don't implement\n[readResolve](https://docs.oracle.com/en/java/javase/11/docs/specs/serialization/input.html#the-readresolve-method)\n\n**Example:**\n\n\n import java.io.Serializable\n\n object Foo : Serializable\n\nThe quick fix implements `readResolve` method:\n\n\n import java.io.Serializable\n\n object Foo : Serializable {\n private fun readResolve() = Foo\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaIoSerializableObjectMustHaveReadResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinDoubleNegation", + "shortDescription": { + "text": "Redundant double negation" + }, + "fullDescription": { + "text": "Reports redundant double negations. Example: 'val truth = !!true'", + "markdown": "Reports redundant double negations.\n\n**Example:**\n\n val truth = !!true\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DoubleNegation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionName", + "shortDescription": { + "text": "Function naming convention" + }, + "fullDescription": { + "text": "Reports function names that do not follow the recommended naming conventions. Example: 'fun Foo() {}' To fix the problem change the name of the function to match the recommended naming conventions.", + "markdown": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FunctionName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentKotlinMavenVersion", + "shortDescription": { + "text": "Maven and IDE plugins versions are different" + }, + "fullDescription": { + "text": "Reports that Maven plugin version isn't properly supported in the current IDE plugin. This inconsistency may lead to different error reporting behavior in the IDE and the compiler", + "markdown": "Reports that Maven plugin version isn't properly supported in the current IDE plugin.\n\nThis inconsistency may lead to different error reporting behavior in the IDE and the compiler" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DifferentKotlinMavenVersion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnitReturnType", + "shortDescription": { + "text": "Redundant 'Unit' return type" + }, + "fullDescription": { + "text": "Reports a redundant 'Unit' return type which can be omitted.", + "markdown": "Reports a redundant `Unit` return type which can be omitted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantUnitReturnType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeToWithUntil", + "shortDescription": { + "text": "'rangeTo' or the '..' call should be replaced with 'until'" + }, + "fullDescription": { + "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to 'until'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with 'until'. Example: 'fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }' After the quick-fix is applied: 'fun foo(a: Int) {\n for (i in 0 until a) {\n\n }\n }'", + "markdown": "Reports calls to `rangeTo` or the `..` operator instead of calls to `until`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `until`.\n\n**Example:**\n\n\n fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int) {\n for (i in 0 until a) {\n\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceRangeToWithUntil", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedEquals", + "shortDescription": { + "text": "Unused equals expression" + }, + "fullDescription": { + "text": "Reports unused 'equals'('==') expressions.", + "markdown": "Reports unused `equals`(`==`) expressions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnclearPrecedenceOfBinaryExpression", + "shortDescription": { + "text": "Multiple operators with different precedence" + }, + "fullDescription": { + "text": "Reports binary expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example: fun foo(b: Boolean?, i: Int?) {\n val x = b ?: i == null // evaluated as `(b ?: i) == null`\n val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n }", + "markdown": "Reports binary expressions that consist of different operators without parentheses.\n\nSuch expressions can be less readable due to different [precedence rules](https://kotlinlang.org/docs/reference/grammar.html#expressions) of operators.\n\nExample:\n\n```\n fun foo(b: Boolean?, i: Int?) {\n val x = b ?: i == null // evaluated as `(b ?: i) == null`\n val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n }\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnclearPrecedenceOfBinaryExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLambdaExpressionBody", + "shortDescription": { + "text": "Unused return value of a function with lambda expression body" + }, + "fullDescription": { + "text": "Reports calls with an unused return value when the called function returns a lambda from an expression body. If there is '=' between function header and body block, code from the function will not be evaluated which can lead to incorrect behavior. Remove = token from function declaration can be used to amend the code automatically. Example: 'fun printHello() = { println(\"Hello\") }\n\n fun main() {\n printHello() // This function doesn't print anything\n }' After the quick-fix is applied: 'fun printHello() { println(\"Hello\") }\n\n fun main() {\n printHello()\n }'", + "markdown": "Reports calls with an unused return value when the called function returns a lambda from an expression body.\n\n\nIf there is `=` between function header and body block,\ncode from the function will not be evaluated which can lead to incorrect behavior.\n\n**Remove = token from function declaration** can be used to amend the code automatically.\n\nExample:\n\n\n fun printHello() = { println(\"Hello\") }\n\n fun main() {\n printHello() // This function doesn't print anything\n }\n\nAfter the quick-fix is applied:\n\n\n fun printHello() { println(\"Hello\") }\n\n fun main() {\n printHello()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedLambdaExpressionBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertLambdaToReference", + "shortDescription": { + "text": "Can be replaced with function reference" + }, + "fullDescription": { + "text": "Reports function literal expressions that can be replaced with function references. Replacing lambdas with function references often makes code look more concise and understandable. Example: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }'", + "markdown": "Reports function literal expressions that can be replaced with function references.\n\nReplacing lambdas with function references often makes code look more concise and understandable.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertLambdaToReference", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSetter", + "shortDescription": { + "text": "Redundant property setter" + }, + "fullDescription": { + "text": "Reports redundant property setters. Setter is considered to be redundant in one of the following cases: Setter has no body. Accessor visibility isn't changed, declaration isn't 'external' and has no annotations. 'var myPropWithRedundantSetter: Int = 0\n set // redundant\n\n var myPropA: Int = 0\n private set // OK - property visibility is changed to private\n\n var myPropB: Int = 0\n external set // OK - implemented not in Kotlin (external)\n\n var myPropC: Int = 0\n @Inject set // OK - accessor is annotated' Setter body is a block with a single statement assigning the parameter to the backing field. 'var prop: Int = 0\n set(value) { // redundant\n field = value\n }'", + "markdown": "Reports redundant property setters.\n\n\nSetter is considered to be redundant in one of the following cases:\n\n1. Setter has no body. Accessor visibility isn't changed, declaration isn't `external` and has no annotations.\n\n\n var myPropWithRedundantSetter: Int = 0\n set // redundant\n\n var myPropA: Int = 0\n private set // OK - property visibility is changed to private\n\n var myPropB: Int = 0\n external set // OK - implemented not in Kotlin (external)\n\n var myPropC: Int = 0\n @Inject set // OK - accessor is annotated\n \n2. Setter body is a block with a single statement assigning the parameter to the backing field.\n\n\n var prop: Int = 0\n set(value) { // redundant\n field = value\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantSetter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanSealedSubClassBeObject", + "shortDescription": { + "text": "Sealed subclass without state and overridden equals" + }, + "fullDescription": { + "text": "Reports direct inheritors of 'sealed' classes that have no state and overridden 'equals()' method. It's highly recommended to override 'equals()' to provide comparison stability, or convert the 'class' to an 'object' to reach the same effect. Example: 'sealed class Receiver {\n class Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }' The quick-fix converts a 'class' into an 'object': 'sealed class Receiver {\n object Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }'", + "markdown": "Reports direct inheritors of `sealed` classes that have no state and overridden `equals()` method.\n\nIt's highly recommended to override `equals()` to provide comparison stability, or convert the `class` to an `object` to reach the same effect.\n\n**Example:**\n\n\n sealed class Receiver {\n class Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n\nThe quick-fix converts a `class` into an `object`:\n\n\n sealed class Receiver {\n object Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "CanSealedSubClassBeObject", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InlineClassDeprecatedMigration", + "shortDescription": { + "text": "Inline classes are deprecated since 1.5" + }, + "fullDescription": { + "text": "Reports inline classes that are deprecated and cause compilation warnings in Kotlin 1.5 and later. See What's new in Kotlin 1.5.0 Example: 'inline class Password(val s: String)' After the quick-fix is applied: '@JvmInline\n value class Password(val s: String)' Inspection is available for Kotlin language level starting from 1.5.", + "markdown": "Reports inline classes that are deprecated and cause compilation warnings in Kotlin 1.5 and later.\nSee [What's new in Kotlin 1.5.0](https://kotlinlang.org/docs/whatsnew15.html#inline-classes)\n\nExample:\n\n\n inline class Password(val s: String)\n\nAfter the quick-fix is applied:\n\n\n @JvmInline\n value class Password(val s: String)\n\nInspection is available for Kotlin language level starting from 1.5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InlineClassDeprecatedMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PropertyName", + "shortDescription": { + "text": "Property naming convention" + }, + "fullDescription": { + "text": "Reports property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, property names should start with a lowercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val My_Cool_Property = \"\"' The quick-fix renames the class according to the Kotlin naming conventions: 'val myCoolProperty = \"\"'", + "markdown": "Reports property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nproperty names should start with a lowercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val My_Cool_Property = \"\"\n\nThe quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val myCoolProperty = \"\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PropertyName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinMavenPluginPhase", + "shortDescription": { + "text": "Kotlin Maven Plugin misconfigured" + }, + "fullDescription": { + "text": "Reports kotlin-maven-plugin configuration issues", + "markdown": "Reports kotlin-maven-plugin configuration issues" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinMavenPluginPhase", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertToStringTemplate", + "shortDescription": { + "text": "String concatenation that can be converted to string template" + }, + "fullDescription": { + "text": "Reports string concatenation that can be converted to a string template. Using string templates is recommended as it makes code easier to read. Example: 'fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(capital + \" is a capital of \" + country)\n }\n }' After the quick-fix is applied: 'fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(\"$capital is a capital of $country\")\n }\n }'", + "markdown": "Reports string concatenation that can be converted to a string template.\n\nUsing string templates is recommended as it makes code easier to read.\n\n**Example:**\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(capital + \" is a capital of \" + country)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(\"$capital is a capital of $country\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertToStringTemplate", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableCall", + "shortDescription": { + "text": "Library function call could be simplified" + }, + "fullDescription": { + "text": "Reports library function calls which could be replaced by simplified one. Using corresponding functions makes your code simpler. The quick-fix replaces the function calls with another one. Example: 'fun test(list: List) {\n list.filter { it is String }\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.filterIsInstance()\n }'", + "markdown": "Reports library function calls which could be replaced by simplified one.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the function calls with another one.\n\n**Example:**\n\n\n fun test(list: List) {\n list.filter { it is String }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.filterIsInstance()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifiableCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectLiteralToLambda", + "shortDescription": { + "text": "Object literal can be converted to lambda" + }, + "fullDescription": { + "text": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression. Example: 'class SomeService {\n val threadPool = Executors.newCachedThreadPool()\n \n fun foo() {\n threadPool.submit(object : Runnable {\n override fun run() {\n println(\"hello\")\n }\n })\n }\n}' After the quick-fix is applied: 'fun foo() {\n threadPool.submit { println(\"hello\") }\n }'", + "markdown": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.\n\n**Example:**\n\n\n class SomeService {\n val threadPool = Executors.newCachedThreadPool()\n \n fun foo() {\n threadPool.submit(object : Runnable {\n override fun run() {\n println(\"hello\")\n }\n })\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n threadPool.submit { println(\"hello\") }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectLiteralToLambda", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaOrAnonymousFunction", + "shortDescription": { + "text": "Redundant creation of lambda or anonymous function" + }, + "fullDescription": { + "text": "Reports lambdas or anonymous functions that are created and used immediately. 'fun test() {\n ({ println() })() // redundant\n (fun() { println() })() // redundant\n }'", + "markdown": "Reports lambdas or anonymous functions that are created and used immediately.\n\n\n fun test() {\n ({ println() })() // redundant\n (fun() { println() })() // redundant\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantLambdaOrAnonymousFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertObjectToDataObject", + "shortDescription": { + "text": "Convert 'object' to 'data object'" + }, + "fullDescription": { + "text": "Reports 'object' that can be converted to 'data object' 'data object' auto-generates 'toString', 'equals' and 'hashCode' The inspection suggests to convert 'object' to 'data object' in 2 cases: When custom 'toString' returns name of the class When 'object' inherits sealed 'class'/'interface' Example: 'object Foo {\n override fun toString(): String = \"Foo\"\n }' After the quick-fix is applied: 'data object Foo' This inspection only reports if the Kotlin language level of the project or module is 1.9 or higher", + "markdown": "Reports `object` that can be converted to `data object`\n\n`data object` auto-generates `toString`, `equals` and `hashCode`\n\nThe inspection suggests to convert `object` to `data object` in 2 cases:\n\n* When custom `toString` returns name of the class\n* When `object` inherits sealed `class`/`interface`\n\n**Example:**\n\n\n object Foo {\n override fun toString(): String = \"Foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n data object Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.9 or higher" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ConvertObjectToDataObject", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanLiteralArgument", + "shortDescription": { + "text": "Boolean literal argument without parameter name" + }, + "fullDescription": { + "text": "Reports call arguments with 'Boolean' type without explicit parameter names specified. When multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes. Explicit parameter names allow for easier code reading and understanding. Example: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(true, false, true) // What does this mean?\n }' The quick-fix adds missing parameter names: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(checkName = true, checkAddress = false, checkPhone = true)\n }'", + "markdown": "Reports call arguments with `Boolean` type without explicit parameter names specified.\n\n\nWhen multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes.\nExplicit parameter names allow for easier code reading and understanding.\n\n**Example:**\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(true, false, true) // What does this mean?\n }\n\nThe quick-fix adds missing parameter names:\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(checkName = true, checkAddress = false, checkPhone = true)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "BooleanLiteralArgument", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertArgumentToSet", + "shortDescription": { + "text": "Argument could be converted to 'Set' to improve performance" + }, + "fullDescription": { + "text": "Detects the function calls that could work faster with an argument converted to 'Set'. Operations like 'minus' or 'intersect' are more effective when their argument is a set. An explicit conversion of an 'Iterable' or an 'Array' into a 'Set' can often make code more effective. The quick-fix adds an explicit conversion to the function call. Example: 'fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b).size' After the quick-fix is applied: 'fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b.toSet()).size'", + "markdown": "Detects the function calls that could work faster with an argument converted to `Set`.\n\n\nOperations like 'minus' or 'intersect' are more effective when their argument is a set.\nAn explicit conversion of an `Iterable` or an `Array`\ninto a `Set` can often make code more effective.\n\n\nThe quick-fix adds an explicit conversion to the function call.\n\n**Example:**\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b).size\n\nAfter the quick-fix is applied:\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b.toSet()).size\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ConvertArgumentToSet", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceGuardClauseWithFunctionCall", + "shortDescription": { + "text": "Guard clause can be replaced with Kotlin's function call" + }, + "fullDescription": { + "text": "Reports guard clauses that can be replaced with a function call. Example: 'fun test(foo: Int?) {\n if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n }' After the quick-fix is applied: 'fun test(foo: Int?) {\n checkNotNull(foo)\n }'", + "markdown": "Reports guard clauses that can be replaced with a function call.\n\n**Example:**\n\n fun test(foo: Int?) {\n if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n }\n\nAfter the quick-fix is applied:\n\n fun test(foo: Int?) {\n checkNotNull(foo)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceGuardClauseWithFunctionCall", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceToStringWithStringTemplate", + "shortDescription": { + "text": "Call of 'toString' could be replaced with string template" + }, + "fullDescription": { + "text": "Reports 'toString' function calls that can be replaced with a string template. Using string templates makes your code simpler. The quick-fix replaces 'toString' with a string template. Example: 'fun test(): String {\n val x = 1\n return x.toString()\n }' After the quick-fix is applied: 'fun test(): String {\n val x = 1\n return \"$x\"\n }'", + "markdown": "Reports `toString` function calls that can be replaced with a string template.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces `toString` with a string template.\n\n**Example:**\n\n\n fun test(): String {\n val x = 1\n return x.toString()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(): String {\n val x = 1\n return \"$x\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceToStringWithStringTemplate", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedInFinal", + "shortDescription": { + "text": "'protected' visibility is effectively 'private' in a final class" + }, + "fullDescription": { + "text": "Reports 'protected' visibility used inside of a 'final' class. In such cases 'protected' members are accessible only in the class itself, so they are effectively 'private'. Example: 'class FinalClass {\n protected fun foo() {}\n }' After the quick-fix is applied: 'class FinalClass {\n private fun foo() {}\n }'", + "markdown": "Reports `protected` visibility used inside of a `final` class. In such cases `protected` members are accessible only in the class itself, so they are effectively `private`.\n\n**Example:**\n\n\n class FinalClass {\n protected fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class FinalClass {\n private fun foo() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ProtectedInFinal", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeStartEndInclusiveWithFirstLast", + "shortDescription": { + "text": "Boxed properties should be replaced with unboxed" + }, + "fullDescription": { + "text": "Reports boxed 'Range.start' and 'Range.endInclusive' properties. These properties can be replaced with unboxed 'first' and 'last' properties to avoid redundant calls. The quick-fix replaces 'start' and 'endInclusive' properties with the corresponding 'first' and 'last'. Example: 'fun foo(range: CharRange) {\n val lastElement = range.endInclusive\n }' After the quick-fix is applied: 'fun foo(range: CharRange) {\n val lastElement = range.last\n }'", + "markdown": "Reports **boxed** `Range.start` and `Range.endInclusive` properties.\n\nThese properties can be replaced with **unboxed** `first` and `last` properties to avoid redundant calls.\n\nThe quick-fix replaces `start` and `endInclusive` properties with the corresponding `first` and `last`.\n\n**Example:**\n\n\n fun foo(range: CharRange) {\n val lastElement = range.endInclusive\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(range: CharRange) {\n val lastElement = range.last\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceRangeStartEndInclusiveWithFirstLast", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSizeCheckWithIsNotEmpty", + "shortDescription": { + "text": "Size check can be replaced with 'isNotEmpty()'" + }, + "fullDescription": { + "text": "Reports size checks of 'Collections/Array/String' that should be replaced with 'isNotEmpty()'. Using 'isNotEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isNotEmpty()'. Example: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size > 0\n }' After the quick-fix is applied: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isNotEmpty()\n }'", + "markdown": "Reports size checks of `Collections/Array/String` that should be replaced with `isNotEmpty()`.\n\nUsing `isNotEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isNotEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size > 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isNotEmpty()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSizeCheckWithIsNotEmpty", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSemicolon", + "shortDescription": { + "text": "Redundant semicolon" + }, + "fullDescription": { + "text": "Reports redundant semicolons (';') that can be safely removed. Kotlin does not require a semicolon at the end of each statement or expression. The quick-fix is suggested to remove redundant semicolons. Example: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n myMap.forEach { (key, value) -> print(\"$key -> $value\")};' After the quick-fix is applied: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n myMap.forEach { (key, value) -> print(\"$key -> $value\")}' There are two cases though where a semicolon is required: Several statements placed on a single line need to be separated with semicolons: 'map.forEach { val (key, value) = it; println(\"$key -> $value\") }' 'enum' classes that also declare properties or functions, require a semicolon after the list of enum constants: 'enum class Mode {\n SILENT, VERBOSE;\n\n fun isSilent(): Boolean = this == SILENT\n }'", + "markdown": "Reports redundant semicolons (`;`) that can be safely removed.\n\n\nKotlin does not require a semicolon at the end of each statement or expression.\nThe quick-fix is suggested to remove redundant semicolons.\n\n**Example:**\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n myMap.forEach { (key, value) -> print(\"$key -> $value\")};\n\nAfter the quick-fix is applied:\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n myMap.forEach { (key, value) -> print(\"$key -> $value\")}\n\nThere are two cases though where a semicolon is required:\n\n1. Several statements placed on a single line need to be separated with semicolons:\n\n\n map.forEach { val (key, value) = it; println(\"$key -> $value\") }\n\n2. `enum` classes that also declare properties or functions, require a semicolon after the list of enum constants:\n\n\n enum class Mode {\n SILENT, VERBOSE;\n\n fun isSilent(): Boolean = this == SILENT\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntroduceWhenSubject", + "shortDescription": { + "text": "'when' that can be simplified by introducing an argument" + }, + "fullDescription": { + "text": "Reports a 'when' expression that can be simplified by introducing a subject argument. Example: 'fun test(obj: Any): String {\n return when {\n obj is String -> \"string\"\n obj is Int -> \"int\"\n else -> \"unknown\"\n }\n }' The quick fix introduces a subject argument: 'fun test(obj: Any): String {\n return when (obj) {\n is String -> \"string\"\n is Int -> \"int\"\n else -> \"unknown\"\n }\n }'", + "markdown": "Reports a `when` expression that can be simplified by introducing a subject argument.\n\n**Example:**\n\n\n fun test(obj: Any): String {\n return when {\n obj is String -> \"string\"\n obj is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n\nThe quick fix introduces a subject argument:\n\n\n fun test(obj: Any): String {\n return when (obj) {\n is String -> \"string\"\n is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IntroduceWhenSubject", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedCallableAddReplaceWith", + "shortDescription": { + "text": "@Deprecated annotation without 'replaceWith' argument" + }, + "fullDescription": { + "text": "Reports deprecated functions and properties that do not have the 'kotlin.ReplaceWith' argument in its 'kotlin.deprecated' annotation and suggests to add one based on their body. Kotlin provides the 'ReplaceWith' argument to replace deprecated declarations automatically. It is recommended to use the argument to fix deprecation issues in code. Example: '@Deprecated(\"Use refined() instead.\")\n fun deprecated() = refined()\n\n fun refined() = 42' The quick-fix adds the 'ReplaceWith()' argument: '@Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n fun deprecated() = refined()\n\n fun refined() = 42'", + "markdown": "Reports deprecated functions and properties that do not have the `kotlin.ReplaceWith` argument in its `kotlin.deprecated` annotation and suggests to add one based on their body.\n\n\nKotlin provides the `ReplaceWith` argument to replace deprecated declarations automatically.\nIt is recommended to use the argument to fix deprecation issues in code.\n\n**Example:**\n\n\n @Deprecated(\"Use refined() instead.\")\n fun deprecated() = refined()\n\n fun refined() = 42\n\nThe quick-fix adds the `ReplaceWith()` argument:\n\n\n @Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n fun deprecated() = refined()\n\n fun refined() = 42\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "DeprecatedCallableAddReplaceWith", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComplexRedundantLet", + "shortDescription": { + "text": "Redundant argument-based 'let' call" + }, + "fullDescription": { + "text": "Reports a redundant argument-based 'let' call. 'let' is redundant when the lambda parameter is only used as a qualifier in a call expression. If you need to give a name to the qualifying expression, declare a local variable. Example: 'fun splitNumbers() {\n \"1,2,3\".let { it.split(',') }\n }' The quick-fix removes the extra 'let()' call: 'fun example() {\n \"1,2,3\".split(',')\n }' Alternative: 'fun splitNumbers() {\n val numbers = \"1,2,3\"\n numbers.split(',')\n }'", + "markdown": "Reports a redundant argument-based `let` call.\n\n`let` is redundant when the lambda parameter is only used as a qualifier in a call expression.\n\nIf you need to give a name to the qualifying expression, declare a local variable.\n\n**Example:**\n\n\n fun splitNumbers() {\n \"1,2,3\".let { it.split(',') }\n }\n\nThe quick-fix removes the extra `let()` call:\n\n\n fun example() {\n \"1,2,3\".split(',')\n }\n\nAlternative:\n\n\n fun splitNumbers() {\n val numbers = \"1,2,3\"\n numbers.split(',')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ComplexRedundantLet", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantSpreadOperator", + "shortDescription": { + "text": "Redundant spread operator" + }, + "fullDescription": { + "text": "Reports the use of a redundant spread operator for a family of 'arrayOf' function calls. Use the 'Remove redundant spread operator' quick-fix to clean up the code. Examples: 'fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(*arrayOf(\"abc\")) // for the both calls of 'foo', array creation\n foo(*arrayOf(*ss, \"zzz\")) // and its subsequent \"spreading\" is redundant\n }' After the quick-fix is applied: 'fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(\"abc\")\n foo(*ss, \"zzz\")\n }'", + "markdown": "Reports the use of a redundant spread operator for a family of `arrayOf` function calls.\n\nUse the 'Remove redundant spread operator' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(*arrayOf(\"abc\")) // for the both calls of 'foo', array creation\n foo(*arrayOf(*ss, \"zzz\")) // and its subsequent \"spreading\" is redundant\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(\"abc\")\n foo(*ss, \"zzz\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveRedundantSpreadOperator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration", + "shortDescription": { + "text": "'@JvmOverloads' annotation cannot be used on constructors of annotation classes since 1.4" + }, + "fullDescription": { + "text": "Reports '@JvmOverloads' on constructors of annotation classes because it's meaningless. There is no footprint of '@JvmOverloads' in the generated bytecode and Kotlin metadata, so '@JvmOverloads' doesn't affect the generated bytecode and the code behavior. '@JvmOverloads' on constructors of annotation classes causes a compilation error since Kotlin 1.4. Example: 'annotation class A @JvmOverloads constructor(val x: Int = 1)' After the quick-fix is applied: 'annotation class A constructor(val x: Int = 1)'", + "markdown": "Reports `@JvmOverloads` on constructors of annotation classes because it's meaningless.\n\n\nThere is no footprint of `@JvmOverloads` in the generated bytecode and Kotlin metadata,\nso `@JvmOverloads` doesn't affect the generated bytecode and the code behavior.\n\n`@JvmOverloads` on constructors of annotation classes causes a compilation error since Kotlin 1.4.\n\n**Example:**\n\n\n annotation class A @JvmOverloads constructor(val x: Int = 1)\n\nAfter the quick-fix is applied:\n\n\n annotation class A constructor(val x: Int = 1)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveSetterParameterType", + "shortDescription": { + "text": "Redundant setter parameter type" + }, + "fullDescription": { + "text": "Reports explicitly specified parameter types in property setters. Setter parameter type always matches the property type, so it's not required to be explicit. The 'Remove explicit type specification' quick-fix allows amending the code accordingly. Examples: 'fun process(x: Int) {}\n\n var x: Int = 0\n set(value: Int) = process(value) // <== 'Int' specification can be safely omitted' After the quick-fix is applied: 'fun process(x: Int) {}\n\n var x: Int = 0\n set(value) = process(value)'", + "markdown": "Reports explicitly specified parameter types in property setters.\n\n\nSetter parameter type always matches the property type, so it's not required to be explicit.\nThe 'Remove explicit type specification' quick-fix allows amending the code accordingly.\n\n**Examples:**\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value: Int) = process(value) // <== 'Int' specification can be safely omitted\n\nAfter the quick-fix is applied:\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value) = process(value)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveSetterParameterType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectPrivatePropertyName", + "shortDescription": { + "text": "Object private property naming convention" + }, + "fullDescription": { + "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Private properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an underscore or an uppercase letter, use camel case. Example: 'class Person {\n companion object {\n // property in companion object\n private val NO_NAME = Person()\n }\n }'", + "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Private properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an underscore or an uppercase letter, use camel case.\n\n**Example:**\n\n\n class Person {\n companion object {\n // property in companion object\n private val NO_NAME = Person()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectPrivatePropertyName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfThenToElvis", + "shortDescription": { + "text": "If-Then foldable to '?:'" + }, + "fullDescription": { + "text": "Reports 'if-then' expressions that can be folded into elvis ('?:') expressions. Example: 'fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = if (foo == null) \"hello\" else foo' The quick fix converts the 'if-then' expression into an elvis ('?:') expression: 'fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = foo ?: \"hello\"'", + "markdown": "Reports `if-then` expressions that can be folded into elvis (`?:`) expressions.\n\n**Example:**\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = if (foo == null) \"hello\" else foo\n\nThe quick fix converts the `if-then` expression into an elvis (`?:`) expression:\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = foo ?: \"hello\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IfThenToElvis", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrapUnaryOperator", + "shortDescription": { + "text": "Ambiguous unary operator use with number constant" + }, + "fullDescription": { + "text": "Reports an unary operator followed by a dot qualifier such as '-1.inc()'. Code like '-1.inc()' can be misleading because '-' has a lower precedence than '.inc()'. As a result, '-1.inc()' evaluates to '-2' and not '0' as it might be expected. Wrap unary operator and value with () quick-fix can be used to amend the code automatically.", + "markdown": "Reports an unary operator followed by a dot qualifier such as `-1.inc()`.\n\nCode like `-1.inc()` can be misleading because `-` has a lower precedence than `.inc()`.\nAs a result, `-1.inc()` evaluates to `-2` and not `0` as it might be expected.\n\n**Wrap unary operator and value with ()** quick-fix can be used to amend the code automatically." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "WrapUnaryOperator", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConflictingExtensionProperty", + "shortDescription": { + "text": "Extension property conflicting with synthetic one" + }, + "fullDescription": { + "text": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java 'get' or 'set' methods. Such properties should be either removed or renamed to avoid breaking code by future changes in the compiler. The quick-fix deletes an extention property. Example: 'val File.name: String\n get() = getName()' The quick-fix adds the '@Deprecated' annotation: '@Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n val File.name: String\n get() = getName()'", + "markdown": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java `get` or `set` methods.\n\nSuch properties should be either removed or renamed to avoid breaking code by future changes in the compiler.\n\nThe quick-fix deletes an extention property.\n\n**Example:**\n\n\n val File.name: String\n get() = getName()\n\nThe quick-fix adds the `@Deprecated` annotation:\n\n\n @Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n val File.name: String\n get() = getName()\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConflictingExtensionProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceJavaStaticMethodWithKotlinAnalog", + "shortDescription": { + "text": "Java methods should be replaced with Kotlin analog" + }, + "fullDescription": { + "text": "Reports a Java method call that can be replaced with a Kotlin function, for example, 'System.out.println()'. Replacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code. The quick-fix replaces the Java method calls on the same Kotlin call. Example: 'import java.util.Arrays\n\n fun main() {\n val a = Arrays.asList(1, 3, null)\n }' After the quick-fix is applied: 'fun main() {\n val a = listOf(1, 3, null)\n }'", + "markdown": "Reports a Java method call that can be replaced with a Kotlin function, for example, `System.out.println()`.\n\nReplacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code.\n\nThe quick-fix replaces the Java method calls on the same Kotlin call.\n\n**Example:**\n\n\n import java.util.Arrays\n\n fun main() {\n val a = Arrays.asList(1, 3, null)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = listOf(1, 3, null)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceJavaStaticMethodWithKotlinAnalog", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyParenthesesFromLambdaCall", + "shortDescription": { + "text": "Unnecessary parentheses in function call with lambda" + }, + "fullDescription": { + "text": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses. Use the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code. Examples: 'fun foo() {\n listOf(1).forEach() { }\n }' After the quick-fix is applied: 'fun foo() {\n listOf(1).forEach { }\n }'", + "markdown": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses.\n\nUse the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo() {\n listOf(1).forEach() { }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n listOf(1).forEach { }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveEmptyParenthesesFromLambdaCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveExplicitSuperQualifier", + "shortDescription": { + "text": "Unnecessary supertype qualification" + }, + "fullDescription": { + "text": "Reports 'super' member calls with redundant supertype qualification. Code in a derived class can call its superclass functions and property accessors implementations using the 'super' keyword. To specify the supertype from which the inherited implementation is taken, 'super' can be qualified by the supertype name in angle brackets, e.g. 'super'. Sometimes this qualification is redundant and can be omitted. Use the 'Remove explicit supertype qualification' quick-fix to clean up the code. Examples: 'open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== redundant because 'B' is the only supertype\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo() // <== here qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n }\n }' After the quick-fix is applied: 'open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== Updated\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo()\n }\n }'", + "markdown": "Reports `super` member calls with redundant supertype qualification.\n\n\nCode in a derived class can call its superclass functions and property accessors implementations using the `super` keyword.\nTo specify the supertype from which the inherited implementation is taken, `super` can be qualified by the supertype name in\nangle brackets, e.g. `super`. Sometimes this qualification is redundant and can be omitted.\nUse the 'Remove explicit supertype qualification' quick-fix to clean up the code.\n\n**Examples:**\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== redundant because 'B' is the only supertype\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo() // <== here qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== Updated\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveExplicitSuperQualifier", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitType", + "shortDescription": { + "text": "Obvious explicit type" + }, + "fullDescription": { + "text": "Reports local variables' explicitly given types which are obvious and thus redundant, like 'val f: Foo = Foo()'. Example: 'class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t: Boolean = true\n val p: Point = Point(1, 2)\n val i: Int = 42\n }' After the quick-fix is applied: 'class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t = true\n val p = Point(1, 2)\n val i = 42\n }'", + "markdown": "Reports local variables' explicitly given types which are obvious and thus redundant, like `val f: Foo = Foo()`.\n\n**Example:**\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t: Boolean = true\n val p: Point = Point(1, 2)\n val i: Int = 42\n }\n\nAfter the quick-fix is applied:\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t = true\n val p = Point(1, 2)\n val i = 42\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantExplicitType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousVarProperty", + "shortDescription": { + "text": "Suspicious 'var' property: its setter does not influence its getter result" + }, + "fullDescription": { + "text": "Reports 'var' properties with default setter and getter that do not reference backing field. Such properties do not affect calling its setter; therefore, it will be clearer to change such property to 'val' and delete the initializer. Change to val and delete initializer quick-fix can be used to amend the code automatically. Example: '// This property always returns '1' and it doesn't important that the property is a 'var'\n var foo: Int = 0\n get() = 1'", + "markdown": "Reports `var` properties with default setter and getter that do not reference backing field.\n\n\nSuch properties do not affect calling its setter; therefore, it will be clearer to change such property to `val` and delete the initializer.\n\n**Change to val and delete initializer** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // This property always returns '1' and it doesn't important that the property is a 'var'\n var foo: Int = 0\n get() = 1\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousVarProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaCollectionsStaticMethod", + "shortDescription": { + "text": "Java Collections static method call can be replaced with Kotlin stdlib" + }, + "fullDescription": { + "text": "Reports a Java 'Collections' static method call that can be replaced with Kotlin stdlib. Example: 'import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n Collections.fill(mutableList, 3)\n }' The quick fix replaces Java 'Collections' static method call with the corresponding Kotlin stdlib method call: 'import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n mutableList.fill(3)\n }'", + "markdown": "Reports a Java `Collections` static method call that can be replaced with Kotlin stdlib.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n Collections.fill(mutableList, 3)\n }\n\nThe quick fix replaces Java `Collections` static method call with the corresponding Kotlin stdlib method call:\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n mutableList.fill(3)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JavaCollectionsStaticMethod", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MoveVariableDeclarationIntoWhen", + "shortDescription": { + "text": "Variable declaration could be moved inside 'when'" + }, + "fullDescription": { + "text": "Reports variable declarations that can be moved inside a 'when' expression. Example: 'fun someCalc(x: Int) = x * 42\n\nfun foo(x: Int): Int {\n val a = someCalc(x)\n return when (a) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n}' After the quick-fix is applied: 'fun foo(x: Int): Int {\n return when (val a = someCalc(x)) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n}'", + "markdown": "Reports variable declarations that can be moved inside a `when` expression.\n\n**Example:**\n\n\n fun someCalc(x: Int) = x * 42\n\n fun foo(x: Int): Int {\n val a = someCalc(x)\n return when (a) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Int): Int {\n return when (val a = someCalc(x)) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MoveVariableDeclarationIntoWhen", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyParenthesesFromAnnotationEntry", + "shortDescription": { + "text": "Remove unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports redundant empty parentheses in annotation entries. Use the 'Remove unnecessary parentheses' quick-fix to clean up the code. Examples: 'annotation class MyAnnotationA\n annotation class MyAnnotationB(val x: Int)\n annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n @MyAnnotationA() // <== parentheses are redundant\n fun testA() {\n }\n\n @MyAnnotationB() // <== missing argument, parentheses are required\n fun testB() {\n }\n\n @MyAnnotationC() // <== parentheses are redundant\n fun testC() {\n }'", + "markdown": "Reports redundant empty parentheses in annotation entries.\n\nUse the 'Remove unnecessary parentheses' quick-fix to clean up the code.\n\n**Examples:**\n\n\n annotation class MyAnnotationA\n annotation class MyAnnotationB(val x: Int)\n annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n @MyAnnotationA() // <== parentheses are redundant\n fun testA() {\n }\n\n @MyAnnotationB() // <== missing argument, parentheses are required\n fun testB() {\n }\n\n @MyAnnotationC() // <== parentheses are redundant\n fun testC() {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveEmptyParenthesesFromAnnotationEntry", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableCallChain", + "shortDescription": { + "text": "Call chain on collection type can be simplified" + }, + "fullDescription": { + "text": "Reports two-call chains replaceable by a single call. It can help you to avoid redundant code execution. The quick-fix replaces the call chain with a single call. Example: 'fun main() {\n listOf(1, 2, 3).filter { it > 1 }.count()\n }' After the quick-fix is applied: 'fun main() {\n listOf(1, 2, 3).count { it > 1 }\n }'", + "markdown": "Reports two-call chains replaceable by a single call.\n\nIt can help you to avoid redundant code execution.\n\nThe quick-fix replaces the call chain with a single call.\n\n**Example:**\n\n\n fun main() {\n listOf(1, 2, 3).filter { it > 1 }.count()\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n listOf(1, 2, 3).count { it > 1 }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifiableCallChain", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceCallWithBinaryOperator", + "shortDescription": { + "text": "Can be replaced with binary operator" + }, + "fullDescription": { + "text": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones. Example: 'fun test(): Boolean {\n return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n }' After the quick-fix is applied: 'fun test(): Boolean {\n return 2 > 1\n }'", + "markdown": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones.\n\n**Example:**\n\n fun test(): Boolean {\n return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n }\n\nAfter the quick-fix is applied:\n\n fun test(): Boolean {\n return 2 > 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceCallWithBinaryOperator", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplacePrintlnWithLogging", + "shortDescription": { + "text": "Uses of {0} should probably be replaced with more robust logging" + }, + "fullDescription": { + "text": "Reports usages of 'print' or 'println'. Such statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust logging facility.", + "markdown": "Reports usages of `print` or `println`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust\nlogging facility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReplacePrintlnWithLogging", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedUnaryOperator", + "shortDescription": { + "text": "Unused unary operator" + }, + "fullDescription": { + "text": "Reports unary operators for number types on unused expressions. Unary operators break previous expression if they are used without braces. As a result, mathematical expressions spanning multi lines can be misleading. Example: 'fun main() {\n val result = 1 + 2 * 3\n + 3 // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n println(\"Result = $result\") // The result is '7' and not '10' as it might be expected\n }'", + "markdown": "Reports unary operators for number types on unused expressions.\n\nUnary operators break previous expression if they are used without braces.\nAs a result, mathematical expressions spanning multi lines can be misleading.\n\nExample:\n\n\n fun main() {\n val result = 1 + 2 * 3\n + 3 // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n println(\"Result = $result\") // The result is '7' and not '10' as it might be expected\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedUnaryOperator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassName", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports class names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, class names should start with an uppercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'class user(val name: String)' The quick-fix renames the class according to the Kotlin naming conventions: 'class User(val name: String)'", + "markdown": "Reports class names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nclass names should start with an uppercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n class user(val name: String)\n\nThe quick-fix renames the class according to the Kotlin naming conventions:\n\n\n class User(val name: String)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ClassName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyPrimaryConstructor", + "shortDescription": { + "text": "Redundant empty primary constructor" + }, + "fullDescription": { + "text": "Reports empty primary constructors when they are implicitly available anyway. A primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers. Use the 'Remove empty primary constructor' quick-fix to clean up the code. Examples: 'class MyClassA constructor() // redundant, can be replaced with 'class MyClassA'\n\n annotation class MyAnnotation\n class MyClassB @MyAnnotation constructor() // required because of annotation\n\n class MyClassC private constructor() // required because of visibility modifier'", + "markdown": "Reports empty primary constructors when they are implicitly available anyway.\n\n\nA primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers.\nUse the 'Remove empty primary constructor' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class MyClassA constructor() // redundant, can be replaced with 'class MyClassA'\n\n annotation class MyAnnotation\n class MyClassB @MyAnnotation constructor() // required because of annotation\n\n class MyClassC private constructor() // required because of visibility modifier\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveEmptyPrimaryConstructor", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptySecondaryConstructorBody", + "shortDescription": { + "text": "Redundant constructor body" + }, + "fullDescription": { + "text": "Reports empty bodies of secondary constructors.", + "markdown": "Reports empty bodies of secondary constructors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveEmptySecondaryConstructorBody", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FloatingPointLiteralPrecision", + "shortDescription": { + "text": "Floating-point literal exceeds the available precision" + }, + "fullDescription": { + "text": "Reports floating-point literals that cannot be represented with the required precision using IEEE 754 'Float' and 'Double' types. For example, '1.9999999999999999999' has too many significant digits, so its representation as a 'Double' will be rounded to '2.0'. Specifying excess digits may be misleading as it hides the fact that computations use rounded values instead. The quick-fix replaces the literal with a rounded value that matches the actual representation of the constant. Example: 'val x: Float = 3.14159265359f' After the quick-fix is applied: 'val x: Float = 3.1415927f'", + "markdown": "Reports floating-point literals that cannot be represented with the required precision using [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) `Float` and `Double` types.\n\n\nFor example, `1.9999999999999999999` has too many significant digits,\nso its representation as a `Double` will be rounded to `2.0`.\nSpecifying excess digits may be misleading as it hides the fact that computations\nuse rounded values instead.\n\n\nThe quick-fix replaces the literal with a rounded value that matches the actual representation\nof the constant.\n\n**Example:**\n\n\n val x: Float = 3.14159265359f\n\nAfter the quick-fix is applied:\n\n\n val x: Float = 3.1415927f\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "FloatingPointLiteralPrecision", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertPairConstructorToToFunction", + "shortDescription": { + "text": "Convert Pair constructor to 'to' function" + }, + "fullDescription": { + "text": "Reports a 'Pair' constructor invocation that can be replaced with a 'to()' infix function call. Explicit constructor invocations may add verbosity, especially if they are used multiple times. Replacing constructor calls with 'to()' makes code easier to read and maintain. Example: 'val countries = mapOf(\n Pair(\"France\", \"Paris\"),\n Pair(\"Spain\", \"Madrid\"),\n Pair(\"Germany\", \"Berlin\")\n )' After the quick-fix is applied: 'val countries = mapOf(\n \"France\" to \"Paris\",\n \"Spain\" to \"Madrid\",\n \"Germany\" to \"Berlin\"\n )'", + "markdown": "Reports a `Pair` constructor invocation that can be replaced with a `to()` infix function call.\n\n\nExplicit constructor invocations may add verbosity, especially if they are used multiple times.\nReplacing constructor calls with `to()` makes code easier to read and maintain.\n\n**Example:**\n\n\n val countries = mapOf(\n Pair(\"France\", \"Paris\"),\n Pair(\"Spain\", \"Madrid\"),\n Pair(\"Germany\", \"Berlin\")\n )\n\nAfter the quick-fix is applied:\n\n\n val countries = mapOf(\n \"France\" to \"Paris\",\n \"Spain\" to \"Madrid\",\n \"Germany\" to \"Berlin\"\n )\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertPairConstructorToToFunction", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantGetter", + "shortDescription": { + "text": "Redundant property getter" + }, + "fullDescription": { + "text": "Reports redundant property getters. Example: 'class Test {\n val a = 1\n get\n val b = 1\n get() = field\n }' After the quick-fix is applied: 'class Test {\n val a = 1\n val b = 1\n }'", + "markdown": "Reports redundant property getters.\n\n**Example:**\n\n\n class Test {\n val a = 1\n get\n val b = 1\n get() = field\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n val a = 1\n val b = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantGetter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements which can be simplified to a single statement. Example: 'fun test(): Boolean {\n if (foo()) {\n return true\n } else {\n return false\n }\n }' After the quick-fix is applied: 'fun test(): Boolean {\n return foo()\n }'", + "markdown": "Reports `if` statements which can be simplified to a single statement.\n\n**Example:**\n\n\n fun test(): Boolean {\n if (foo()) {\n return true\n } else {\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(): Boolean {\n return foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantIf", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KDocMissingDocumentation", + "shortDescription": { + "text": "Missing KDoc comments for public declarations" + }, + "fullDescription": { + "text": "Reports public declarations that do not have KDoc comments. Example: 'class A' The quick fix generates the comment block above the declaration: '/**\n *\n */\n class A'", + "markdown": "Reports public declarations that do not have KDoc comments.\n\n**Example:**\n\n\n class A\n\nThe quick fix generates the comment block above the declaration:\n\n\n /**\n *\n */\n class A\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KDocMissingDocumentation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveExplicitTypeArguments", + "shortDescription": { + "text": "Unnecessary type argument" + }, + "fullDescription": { + "text": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted. Use the 'Remove explicit type arguments' quick-fix to clean up the code. Examples: '// 'String' type can be inferred here\n fun foo(): MutableList = mutableListOf()\n\n // Here 'String' cannot be inferred, type argument is required.\n fun bar() = mutableListOf()' After the quick-fix is applied: 'fun foo(): MutableList = mutableListOf() <== Updated\n\n fun bar() = mutableListOf()'", + "markdown": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted.\n\nUse the 'Remove explicit type arguments' quick-fix to clean up the code.\n\n**Examples:**\n\n\n // 'String' type can be inferred here\n fun foo(): MutableList = mutableListOf()\n\n // Here 'String' cannot be inferred, type argument is required.\n fun bar() = mutableListOf()\n\nAfter the quick-fix is applied:\n\n\n fun foo(): MutableList = mutableListOf() <== Updated\n\n fun bar() = mutableListOf()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveExplicitTypeArguments", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantVisibilityModifier", + "shortDescription": { + "text": "Redundant visibility modifier" + }, + "fullDescription": { + "text": "Reports visibility modifiers that match the default visibility of an element ('public' for most elements, 'protected' for members that override a protected member).", + "markdown": "Reports visibility modifiers that match the default visibility of an element (`public` for most elements, `protected` for members that override a protected member)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantVisibilityModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumValuesSoftDeprecateInJava", + "shortDescription": { + "text": "'Enum.values()' is recommended to be replaced by 'Enum.getEntries()' since Kotlin 1.9" + }, + "fullDescription": { + "text": "Reports calls from Java to 'values()' method of Kotlin enum classes that can be replaced with 'getEntries()'. Use of 'Enum.getEntries()' may improve performance of your code. More details: KT-48872 Provide modern and performant replacement for Enum.values()", + "markdown": "Reports calls from Java to `values()` method of Kotlin enum classes that can be replaced with `getEntries()`.\n\n\nUse of `Enum.getEntries()` may improve performance of your code.\n\n\n**More details:** [KT-48872 Provide modern and performant replacement for Enum.values()](https://youtrack.jetbrains.com/issue/KT-48872)" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EnumValuesSoftDeprecateInJava", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePropertyAccessSyntax", + "shortDescription": { + "text": "Accessor call that can be replaced with property access syntax" + }, + "fullDescription": { + "text": "Reports Java 'get' and 'set' method calls that can be replaced with the Kotlin synthetic properties. Use property access syntax quick-fix can be used to amend the code automatically. Example: '// Java:\n public class JavaClassWithGetter {\n private final String expr = \"result\";\n\n // ...\n\n public String getExpr() {\n return expr;\n }\n }' '// Kotlin:\n fun test(j: JavaClassWithGetter) {\n // ...\n j.getExpr() // <== The quick-fix simplifies the expression to 'j.expr'\n }'", + "markdown": "Reports Java `get` and `set` method calls that can be replaced with the Kotlin synthetic properties.\n\n**Use property access syntax** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // Java:\n public class JavaClassWithGetter {\n private final String expr = \"result\";\n\n // ...\n\n public String getExpr() {\n return expr;\n }\n }\n\n\n // Kotlin:\n fun test(j: JavaClassWithGetter) {\n // ...\n j.getExpr() // <== The quick-fix simplifies the expression to 'j.expr'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UsePropertyAccessSyntax", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseExpressionBody", + "shortDescription": { + "text": "Expression body syntax is preferable here" + }, + "fullDescription": { + "text": "Reports 'return' expressions (one-liners or 'when') that can be replaced with expression body syntax. Expression body syntax is recommended by the style guide. Convert to expression body quick-fix can be used to amend the code automatically. Example: 'fun sign(x: Int): Int {\n return when { // <== can be simplified\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n }' After the quick-fix is applied: 'fun sign(x: Int): Int = when {\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }'", + "markdown": "Reports `return` expressions (one-liners or `when`) that can be replaced with expression body syntax.\n\nExpression body syntax is recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#functions).\n\n**Convert to expression body** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun sign(x: Int): Int {\n return when { // <== can be simplified\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun sign(x: Int): Int = when {\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UseExpressionBody", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MapGetWithNotNullAssertionOperator", + "shortDescription": { + "text": "'map.get()' with not-null assertion operator (!!)" + }, + "fullDescription": { + "text": "Reports 'map.get()!!' that can be replaced with 'map.getValue()', 'map.getOrElse()', and so on. Example: 'fun test(map: Map): String = map.get(0)!!' After the quick-fix is applied: 'fun test(map: Map): String = map.getValue(0)'", + "markdown": "Reports `map.get()!!` that can be replaced with `map.getValue()`, `map.getOrElse()`, and so on.\n\n**Example:**\n\n\n fun test(map: Map): String = map.get(0)!!\n\nAfter the quick-fix is applied:\n\n\n fun test(map: Map): String = map.getValue(0)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MapGetWithNotNullAssertionOperator", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SortModifiers", + "shortDescription": { + "text": "Non-canonical modifier order" + }, + "fullDescription": { + "text": "Reports modifiers that do not follow the order recommended by the style guide. Sort modifiers quick-fix can be used to amend the code automatically. Examples: 'private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"'", + "markdown": "Reports modifiers that do not follow the order recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#modifiers-order).\n\n**Sort modifiers** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SortModifiers", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumEntryName", + "shortDescription": { + "text": "Enum entry naming convention" + }, + "fullDescription": { + "text": "Reports enum entry names that do not follow the recommended naming conventions. Example: 'enum class Foo {\n _Foo,\n foo\n }' To fix the problem rename enum entries to match the recommended naming conventions.", + "markdown": "Reports enum entry names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n enum class Foo {\n _Foo,\n foo\n }\n\nTo fix the problem rename enum entries to match the recommended naming conventions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EnumEntryName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithDropLast", + "shortDescription": { + "text": "'substring' call should be replaced with 'dropLast' call" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, s.length - x)' that can be replaced with 's.dropLast(x)'. Using corresponding functions makes your code simpler. The quick-fix replaces the 'substring' call with 'dropLast'. Example: 'fun foo(s: String) {\n s.substring(0, s.length - 5)\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.dropLast(5)\n }'", + "markdown": "Reports calls like `s.substring(0, s.length - x)` that can be replaced with `s.dropLast(x)`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `dropLast`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.length - 5)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.dropLast(5)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSubstringWithDropLast", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SetterBackingFieldAssignment", + "shortDescription": { + "text": "Existing backing field without assignment" + }, + "fullDescription": { + "text": "Reports property setters that don't update the backing field. The quick-fix adds an assignment to the backing field. Example: 'class Test {\n var foo: Int = 1\n set(value) {\n }\n }' After the quick-fix is applied: 'class Test {\n var foo: Int = 1\n set(value) {\n field = value\n }\n }'", + "markdown": "Reports property setters that don't update the backing field.\n\nThe quick-fix adds an assignment to the backing field.\n\n**Example:**\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n field = value\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SetterBackingFieldAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CopyWithoutNamedArguments", + "shortDescription": { + "text": "'copy' method of data class is called without named arguments" + }, + "fullDescription": { + "text": "Reports calls to a data class' 'copy()' method without named arguments. As all arguments of the 'copy()' function are optional, it might be hard to understand what properties are modified. Providing parameter names explicitly makes code easy to understand without navigating to the 'data class' declaration. Example: 'data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(\"John\")\n }' The quick-fix provides parameter names to all 'copy()' arguments: 'data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(name = \"John\")\n }'", + "markdown": "Reports calls to a data class' `copy()` method without named arguments.\n\n\nAs all arguments of the `copy()` function are optional, it might be hard to understand what properties are modified.\nProviding parameter names explicitly makes code easy to understand without navigating to the `data class` declaration.\n\n**Example:**\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(\"John\")\n }\n\nThe quick-fix provides parameter names to all `copy()` arguments:\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(name = \"John\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CopyWithoutNamedArguments", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantConstructorKeyword", + "shortDescription": { + "text": "Redundant 'constructor' keyword" + }, + "fullDescription": { + "text": "Reports a redundant 'constructor' keyword on primary constructors. Example: 'class Foo constructor(x: Int, y: Int)' After the quick-fix is applied: 'class Foo(x: Int, y: Int)'", + "markdown": "Reports a redundant 'constructor' keyword on primary constructors.\n\n**Example:**\n\n\n class Foo constructor(x: Int, y: Int)\n\nAfter the quick-fix is applied:\n\n\n class Foo(x: Int, y: Int)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantConstructorKeyword", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinDeprecation", + "shortDescription": { + "text": "Usage of redundant or deprecated syntax or deprecated symbols" + }, + "fullDescription": { + "text": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (Code | Code Cleanup). The quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax. It also replaces deprecated symbols with their proposed substitutions.", + "markdown": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (**Code \\| Code Cleanup** ).\n\n\nThe quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax.\n\n\nIt also replaces deprecated symbols with their proposed substitutions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithTake", + "shortDescription": { + "text": "'substring' call should be replaced with 'take' call" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, x)' that can be replaced with 's.take(x)'. Using 'take()' makes your code simpler. The quick-fix replaces the 'substring' call with 'take()'. Example: 'fun foo(s: String) {\n s.substring(0, 10)\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.take(10)\n }'", + "markdown": "Reports calls like `s.substring(0, x)` that can be replaced with `s.take(x)`.\n\nUsing `take()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `take()`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, 10)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.take(10)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceSubstringWithTake", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeToWithRangeUntil", + "shortDescription": { + "text": "'rangeTo' or the '..' call should be replaced with '..<'" + }, + "fullDescription": { + "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to '..<'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with '..<'. Example: 'fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }' After the quick-fix is applied: 'fun foo(a: Int) {\n for (i in 0..) = lines\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }' The quick-fix wraps call chain into 'asSequence()' and 'toList()': 'class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .asSequence()\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n .toList()'", + "markdown": "Reports call chain on a `Collection` that should be converted into **Sequence** .\n\nEach `Collection` transforming function (such as `map()` or `filter()`) creates a new\n`Collection` (typically `List` or `Set`) under the hood.\nIn case of multiple consequent calls, and a huge number of items in `Collection`, memory traffic might be significant.\nIn such a case, using `Sequence` is preferred.\n\n**Example:**\n\n\n class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n\nThe quick-fix wraps call chain into `asSequence()` and `toList()`:\n\n\n class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .asSequence()\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n .toList()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertCallChainIntoSequence", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddOperatorModifier", + "shortDescription": { + "text": "Function should have 'operator' modifier" + }, + "fullDescription": { + "text": "Reports a function that matches one of the operator conventions but lacks the 'operator' keyword. By adding the 'operator' modifier, you might allow function consumers to write idiomatic Kotlin code. Example: 'class Complex(val real: Double, val imaginary: Double) {\n fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a.plus(b)\n }' The quick-fix adds the 'operator' modifier keyword: 'class Complex(val real: Double, val imaginary: Double) {\n operator fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a + b\n }'", + "markdown": "Reports a function that matches one of the operator conventions but lacks the `operator` keyword.\n\nBy adding the `operator` modifier, you might allow function consumers to write idiomatic Kotlin code.\n\n**Example:**\n\n\n class Complex(val real: Double, val imaginary: Double) {\n fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a.plus(b)\n }\n\nThe quick-fix adds the `operator` modifier keyword:\n\n\n class Complex(val real: Double, val imaginary: Double) {\n operator fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a + b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AddOperatorModifier", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MayBeConstant", + "shortDescription": { + "text": "Might be 'const'" + }, + "fullDescription": { + "text": "Reports top-level 'val' properties in objects that might be declared as 'const' for better performance and Java interoperability. Example: 'object A {\n val foo = 1\n }' After the quick-fix is applied: 'object A {\n const val foo = 1\n }'", + "markdown": "Reports top-level `val` properties in objects that might be declared as `const` for better performance and Java interoperability.\n\n**Example:**\n\n\n object A {\n val foo = 1\n }\n\nAfter the quick-fix is applied:\n\n\n object A {\n const val foo = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MayBeConstant", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceIsEmptyWithIfEmpty", + "shortDescription": { + "text": "'if' condition can be replaced with lambda call" + }, + "fullDescription": { + "text": "Reports 'isEmpty', 'isBlank', 'isNotEmpty', or 'isNotBlank' calls in an 'if' statement to assign a default value. The quick-fix replaces the 'if' condition with 'ifEmpty' or 'ifBlank' calls. Example: 'fun test(list: List): List {\n return if (list.isEmpty()) {\n println()\n foo()\n } else {\n list\n }\n }' After the quick-fix is applied: 'fun test(list: List): List {\n return list.ifEmpty {\n println()\n foo()\n }\n }' This inspection only reports if the Kotlin language version of the project or module is 1.3 or higher.", + "markdown": "Reports `isEmpty`, `isBlank`, `isNotEmpty`, or `isNotBlank` calls in an `if` statement to assign a default value.\n\nThe quick-fix replaces the `if` condition with `ifEmpty` or `ifBlank` calls.\n\n**Example:**\n\n\n fun test(list: List): List {\n return if (list.isEmpty()) {\n println()\n foo()\n } else {\n list\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List): List {\n return list.ifEmpty {\n println()\n foo()\n }\n }\n\nThis inspection only reports if the Kotlin language version of the project or module is 1.3 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceIsEmptyWithIfEmpty", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithImportAlias", + "shortDescription": { + "text": "Fully qualified name can be replaced with existing import alias" + }, + "fullDescription": { + "text": "Reports fully qualified names that can be replaced with an existing import alias. Example: 'import foo.Foo as Bar\nfun main() {\n foo.Foo()\n}' After the quick-fix is applied: 'import foo.Foo as Bar\nfun main() {\n Bar()\n}'", + "markdown": "Reports fully qualified names that can be replaced with an existing import alias.\n\n**Example:**\n\n\n import foo.Foo as Bar\n fun main() {\n foo.Foo()\n }\n\nAfter the quick-fix is applied:\n\n\n import foo.Foo as Bar\n fun main() {\n Bar()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceWithImportAlias", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyBooleanWithConstants", + "shortDescription": { + "text": "Boolean expression can be simplified" + }, + "fullDescription": { + "text": "Reports boolean expression parts that can be reduced to constants. The quick-fix simplifies the condition. Example: 'fun use(arg: Boolean) {\n if (false == arg) {\n\n }\n }' After the quick-fix is applied: 'fun use(arg: Boolean) {\n if (!arg) {\n\n }\n }'", + "markdown": "Reports boolean expression parts that can be reduced to constants.\n\nThe quick-fix simplifies the condition.\n\n**Example:**\n\n\n fun use(arg: Boolean) {\n if (false == arg) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun use(arg: Boolean) {\n if (!arg) {\n\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyBooleanWithConstants", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverrideDeprecatedMigration", + "shortDescription": { + "text": "Do not propagate method deprecation through overrides since 1.9" + }, + "fullDescription": { + "text": "Reports a declarations that are propagated by '@Deprecated' annotation that will lead to compilation error since 1.9. Motivation types: Implementation changes are required for implementation design/architectural reasons Inconsistency in the design (things are done differently in different contexts) More details: KT-47902: Do not propagate method deprecation through overrides The quick-fix copies '@Deprecated' annotation from the parent declaration. Example: 'open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n override fun foo() {}\n }' After the quick-fix is applied: 'open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n @Deprecated(\"Don't use\")\n override fun foo() {}\n }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.", + "markdown": "Reports a declarations that are propagated by `@Deprecated` annotation that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* Implementation changes are required for implementation design/architectural reasons\n* Inconsistency in the design (things are done differently in different contexts)\n\n**More details:** [KT-47902: Do not propagate method deprecation through overrides](https://youtrack.jetbrains.com/issue/KT-47902)\n\nThe quick-fix copies `@Deprecated` annotation from the parent declaration.\n\n**Example:**\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n override fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n @Deprecated(\"Don't use\")\n override fun foo() {}\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "OverrideDeprecatedMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModalityModifier", + "shortDescription": { + "text": "Redundant modality modifier" + }, + "fullDescription": { + "text": "Reports the modality modifiers that match the default modality of an element ('final' for most elements, 'open' for members with an 'override'). Example: 'final class Foo\n\n open class Bar : Comparable {\n open override fun compareTo(other: Bar): Int = 0\n }' After the quick-fix is applied: 'class Foo\n\n open class Bar : Comparable {\n override fun compareTo(other: Bar): Int = 0\n }'", + "markdown": "Reports the modality modifiers that match the default modality of an element (`final` for most elements, `open` for members with an `override`).\n\n**Example:**\n\n\n final class Foo\n\n open class Bar : Comparable {\n open override fun compareTo(other: Bar): Int = 0\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo\n\n open class Bar : Comparable {\n override fun compareTo(other: Bar): Int = 0\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantModalityModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyAssertNotNull", + "shortDescription": { + "text": "'assert' call can be replaced with '!!' or '?:'" + }, + "fullDescription": { + "text": "Reports 'assert' calls that check a not null value of the declared variable. Using '!!' or '?:' makes your code simpler. The quick-fix replaces 'assert' with '!!' or '?:' operator in the variable initializer. Example: 'fun foo(p: Array) {\n val v = p[0]\n assert(v != null, { \"Should be not null\" })\n }' After the quick-fix is applied: 'fun foo(p: Array) {\n val v = p[0] ?: error(\"Should be not null\")\n }'", + "markdown": "Reports `assert` calls that check a not null value of the declared variable.\n\nUsing `!!` or `?:` makes your code simpler.\n\nThe quick-fix replaces `assert` with `!!` or `?:` operator in the variable initializer.\n\n**Example:**\n\n\n fun foo(p: Array) {\n val v = p[0]\n assert(v != null, { \"Should be not null\" })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(p: Array) {\n val v = p[0] ?: error(\"Should be not null\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyAssertNotNull", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertNaNEquality", + "shortDescription": { + "text": "Convert equality check with 'NaN' to 'isNaN' call" + }, + "fullDescription": { + "text": "Reports an equality check with 'Float.NaN' or 'Double.NaN' that should be replaced with an 'isNaN()' check. According to IEEE 754, equality check against NaN always returns 'false', even for 'NaN == NaN'. Therefore, such a check is likely to be a mistake. The quick-fix replaces comparison with 'isNaN()' check that uses a different comparison technique and handles 'NaN' values correctly. Example: 'fun check(value: Double): Boolean {\n return Double.NaN == value\n }' After the fix is applied: 'fun check(value: Double): Boolean {\n return value.isNaN()\n }'", + "markdown": "Reports an equality check with `Float.NaN` or `Double.NaN` that should be replaced with an `isNaN()` check.\n\n\nAccording to IEEE 754, equality check against NaN always returns `false`, even for `NaN == NaN`.\nTherefore, such a check is likely to be a mistake.\n\nThe quick-fix replaces comparison with `isNaN()` check that uses a different comparison technique and handles `NaN` values correctly.\n\n**Example:**\n\n\n fun check(value: Double): Boolean {\n return Double.NaN == value\n }\n\nAfter the fix is applied:\n\n\n fun check(value: Double): Boolean {\n return value.isNaN()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConvertNaNEquality", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceManualRangeWithIndicesCalls", + "shortDescription": { + "text": "Range can be converted to indices or iteration" + }, + "fullDescription": { + "text": "Reports 'until' and 'rangeTo' operators that can be replaced with 'Collection.indices' or iteration over collection inside 'for' loop. Using syntactic sugar makes your code simpler. The quick-fix replaces the manual range with the corresponding construction. Example: 'fun main(args: Array) {\n for (index in 0..args.size - 1) {\n println(args[index])\n }\n }' After the quick-fix is applied: 'fun main(args: Array) {\n for (element in args) {\n println(element)\n }\n }'", + "markdown": "Reports `until` and `rangeTo` operators that can be replaced with `Collection.indices` or iteration over collection inside `for` loop.\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces the manual range with the corresponding construction.\n\n**Example:**\n\n\n fun main(args: Array) {\n for (index in 0..args.size - 1) {\n println(args[index])\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (element in args) {\n println(element)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceManualRangeWithIndicesCalls", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinLoggerInitializedWithForeignClass", + "shortDescription": { + "text": "Logger initialized with foreign class" + }, + "fullDescription": { + "text": "Reports 'Logger' instances initialized with a class literal other than the class the 'Logger' resides in. This can happen when copy-pasting from another class. It may result in logging events under an unexpected category and incorrect filtering. Use the inspection options to specify the logger factory classes and methods recognized by this inspection. Example: 'class AnotherService\nclass MyService {\n private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n}' After the quick-fix is applied: 'class MyService {\n private val logger = LoggerFactory.getLogger(MyService::class.java)\n}'", + "markdown": "Reports `Logger` instances initialized with a class literal other than the class the `Logger` resides in.\n\n\nThis can happen when copy-pasting from another class.\nIt may result in logging events under an unexpected category and incorrect filtering.\n\n\nUse the inspection options to specify the logger factory classes and methods recognized by this inspection.\n\n**Example:**\n\n\n class AnotherService\n class MyService {\n private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n }\n\nAfter the quick-fix is applied:\n\n\n class MyService {\n private val logger = LoggerFactory.getLogger(MyService::class.java)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinLoggerInitializedWithForeignClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Logging", + "index": 199, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveToStringInStringTemplate", + "shortDescription": { + "text": "Redundant call to 'toString()' in string template" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' in string templates that can be safely removed. Example: 'fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4)}\"\n }'", + "markdown": "Reports calls to `toString()` in string templates that can be safely removed.\n\n**Example:**\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n }\n\nAfter the quick-fix is applied:\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4)}\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveToStringInStringTemplate", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantAsSequence", + "shortDescription": { + "text": "Redundant 'asSequence' call" + }, + "fullDescription": { + "text": "Reports redundant 'asSequence()' call that can never have a positive performance effect. 'asSequence()' speeds up collection processing that includes multiple operations because it performs operations lazily and doesn't create intermediate collections. However, if a terminal operation (such as 'toList()') is used right after 'asSequence()', this doesn't give you any positive performance effect. Example: 'fun test(list: List) {\n list.asSequence().last()\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.last()\n }'", + "markdown": "Reports redundant `asSequence()` call that can never have a positive performance effect.\n\n\n`asSequence()` speeds up collection processing that includes multiple operations because it performs operations lazily\nand doesn't create intermediate collections.\n\n\nHowever, if a terminal operation (such as `toList()`) is used right after `asSequence()`, this doesn't give\nyou any positive performance effect.\n\n**Example:**\n\n\n fun test(list: List) {\n list.asSequence().last()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.last()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantAsSequence", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinUnusedImport", + "shortDescription": { + "text": "Unused import directive" + }, + "fullDescription": { + "text": "Reports redundant 'import' statements. Default and unused imports can be safely removed. Example: 'import kotlin.*\n import kotlin.collections.*\n import kotlin.comparisons.*\n import kotlin.io.*\n import kotlin.ranges.*\n import kotlin.sequences.*\n import kotlin.text.*\n\n // jvm specific\n import java.lang.*\n import kotlin.jvm.*\n\n // js specific\n import kotlin.js.*\n\n import java.io.* // this import is unused and could be removed\n import java.util.*\n\n fun foo(list: ArrayList) {\n list.add(\"\")\n }'", + "markdown": "Reports redundant `import` statements.\n\nDefault and unused imports can be safely removed.\n\n**Example:**\n\n\n import kotlin.*\n import kotlin.collections.*\n import kotlin.comparisons.*\n import kotlin.io.*\n import kotlin.ranges.*\n import kotlin.sequences.*\n import kotlin.text.*\n\n // jvm specific\n import java.lang.*\n import kotlin.jvm.*\n\n // js specific\n import kotlin.js.*\n\n import java.io.* // this import is unused and could be removed\n import java.util.*\n\n fun foo(list: ArrayList) {\n list.add(\"\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBePrimaryConstructorProperty", + "shortDescription": { + "text": "Property is explicitly assigned to constructor parameter" + }, + "fullDescription": { + "text": "Reports properties that are explicitly assigned to primary constructor parameters. Properties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability. Example: 'class User(name: String) {\n val name = name\n }' The quick-fix joins the parameter and property declaration into a primary constructor parameter: 'class User(val name: String) {\n }'", + "markdown": "Reports properties that are explicitly assigned to primary constructor parameters.\n\nProperties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability.\n\n**Example:**\n\n\n class User(name: String) {\n val name = name\n }\n\nThe quick-fix joins the parameter and property declaration into a primary constructor parameter:\n\n\n class User(val name: String) {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CanBePrimaryConstructorProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaMapForEach", + "shortDescription": { + "text": "Java Map.forEach method call should be replaced with Kotlin's forEach" + }, + "fullDescription": { + "text": "Reports a Java Map.'forEach' method call that can be replaced with Kotlin's forEach. Example: 'fun test(map: HashMap) {\n map.forEach { key, value ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}' The quick-fix adds parentheses: 'fun test(map: HashMap) {\n map.forEach { (key, value) ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}'", + "markdown": "Reports a Java Map.`forEach` method call that can be replaced with Kotlin's **forEach** .\n\n**Example:**\n\n\n fun test(map: HashMap) {\n map.forEach { key, value ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n\nThe quick-fix adds parentheses:\n\n\n fun test(map: HashMap) {\n map.forEach { (key, value) ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JavaMapForEach", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantObjectTypeCheck", + "shortDescription": { + "text": "Non-idiomatic 'is' type check for an object" + }, + "fullDescription": { + "text": "Reports non-idiomatic 'is' type checks for an object. It's recommended to replace such checks with reference comparison. Example: 'object Foo\n\n fun foo(arg: Any) = when {\n arg is Foo -> ...\n arg !is Foo -> ...\n }' After the quick-fix is applied: 'object Foo\n\n fun foo(arg: Any) = when {\n arg === Foo -> ...\n arg !== Foo -> ...\n }'", + "markdown": "Reports non-idiomatic `is` type checks for an object.\n\nIt's recommended to replace such checks with reference comparison.\n\n**Example:**\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg is Foo -> ...\n arg !is Foo -> ...\n }\n\nAfter the quick-fix is applied:\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg === Foo -> ...\n arg !== Foo -> ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantObjectTypeCheck", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspendFunctionOnCoroutineScope", + "shortDescription": { + "text": "Ambiguous coroutineContext due to CoroutineScope receiver of suspend function" + }, + "fullDescription": { + "text": "Reports calls and accesses of 'CoroutineScope' extensions or members inside suspend functions with 'CoroutineScope' receiver. When a function is 'suspend' and has 'CoroutineScope' receiver, it has ambiguous access to 'CoroutineContext' via 'kotlin.coroutines.coroutineContext' and via 'CoroutineScope.coroutineContext', and two these contexts are different in general. To improve this situation, one can wrap suspicious call inside 'coroutineScope { ... }' or get rid of 'CoroutineScope' function receiver.", + "markdown": "Reports calls and accesses of `CoroutineScope` extensions or members inside suspend functions with `CoroutineScope` receiver.\n\nWhen a function is `suspend` and has `CoroutineScope` receiver,\nit has ambiguous access to `CoroutineContext` via `kotlin.coroutines.coroutineContext` and via `CoroutineScope.coroutineContext`,\nand two these contexts are different in general.\n\n\nTo improve this situation, one can wrap suspicious call inside `coroutineScope { ... }` or\nget rid of `CoroutineScope` function receiver." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspendFunctionOnCoroutineScope", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentMavenStdlibVersion", + "shortDescription": { + "text": "Library and maven plugin versions are different" + }, + "fullDescription": { + "text": "Reports different Kotlin stdlib and compiler versions. Using different versions of the Kotlin compiler and the standard library can lead to unpredictable runtime problems and should be avoided.", + "markdown": "Reports different Kotlin stdlib and compiler versions.\n\nUsing different versions of the Kotlin compiler and the standard library can lead to unpredictable\nruntime problems and should be avoided." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DifferentMavenStdlibVersion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 1, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitNullableNothingType", + "shortDescription": { + "text": "Implicit 'Nothing?' type" + }, + "fullDescription": { + "text": "Reports variables and functions with the implicit Nothing? type. Example: 'fun foo() = null' The quick fix specifies the return type explicitly: 'fun foo(): Nothing? = null'", + "markdown": "Reports variables and functions with the implicit **Nothing?** type.\n\n**Example:**\n\n\n fun foo() = null\n\nThe quick fix specifies the return type explicitly:\n\n\n fun foo(): Nothing? = null\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ImplicitNullableNothingType", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssociateFunction", + "shortDescription": { + "text": "'associate' can be replaced with 'associateBy' or 'associateWith'" + }, + "fullDescription": { + "text": "Reports calls to 'associate()' and 'associateTo()' that can be replaced with 'associateBy()' or 'associateWith()'. Both functions accept a transformer function applied to elements of a given sequence or collection (as a receiver). The pairs are then used to build the resulting 'Map'. Given the transformer refers to 'it', the 'associate[To]()' call can be replaced with more performant 'associateBy()' or 'associateWith()'. Examples: 'fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associate { getKey(it) to it } // replaceable 'associate()'\n listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n }' After the quick-fix is applied: 'fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associateBy { getKey(it) }\n listOf(1).associateWith { getValue(it) }\n }'", + "markdown": "Reports calls to `associate()` and `associateTo()` that can be replaced with `associateBy()` or `associateWith()`.\n\n\nBoth functions accept a transformer function applied to elements of a given sequence or collection (as a receiver).\nThe pairs are then used to build the resulting `Map`.\n\n\nGiven the transformer refers to `it`, the `associate[To]()` call can be replaced with more performant `associateBy()`\nor `associateWith()`.\n\n**Examples:**\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associate { getKey(it) to it } // replaceable 'associate()'\n listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n }\n\nAfter the quick-fix is applied:\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associateBy { getKey(it) }\n listOf(1).associateWith { getValue(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceAssociateFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteExperimentalCoroutines", + "shortDescription": { + "text": "Experimental coroutines usages are deprecated since 1.3" + }, + "fullDescription": { + "text": "Reports code that uses experimental coroutines. Such usages are incompatible with Kotlin 1.3+ and should be updated.", + "markdown": "Reports code that uses experimental coroutines.\n\nSuch usages are incompatible with Kotlin 1.3+ and should be updated." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ObsoleteExperimentalCoroutines", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LiftReturnOrAssignment", + "shortDescription": { + "text": "Return or assignment can be lifted out" + }, + "fullDescription": { + "text": "Reports 'if', 'when', and 'try' statements that can be converted to expressions by lifting the 'return' statement or an assignment out. Example: 'fun foo(arg: Int): String {\n when (arg) {\n 0 -> return \"Zero\"\n 1 -> return \"One\"\n else -> return \"Multiple\"\n }\n }' After the quick-fix is applied: 'fun foo(arg: Int): String {\n return when (arg) {\n 0 -> \"Zero\"\n 1 -> \"One\"\n else -> \"Multiple\"\n }\n }' If you would like this inspection to highlight more complex code with multi-statement branches, uncheck the option \"Report only if each branch is a single statement\".", + "markdown": "Reports `if`, `when`, and `try` statements that can be converted to expressions by lifting the `return` statement or an assignment out.\n\n**Example:**\n\n\n fun foo(arg: Int): String {\n when (arg) {\n 0 -> return \"Zero\"\n 1 -> return \"One\"\n else -> return \"Multiple\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Int): String {\n return when (arg) {\n 0 -> \"Zero\"\n 1 -> \"One\"\n else -> \"Multiple\"\n }\n }\n\nIf you would like this inspection to highlight more complex code with multi-statement branches, uncheck the option \"Report only if each branch is a single statement\"." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LiftReturnOrAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyWhenWithBooleanConstantCondition", + "shortDescription": { + "text": "Simplifiable 'when'" + }, + "fullDescription": { + "text": "Reports 'when' expressions with the constant 'true' or 'false' branches. Simplify \"when\" quick-fix can be used to amend the code automatically. Examples: 'fun redundant() {\n when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n true -> println(\"true\")\n else -> println(\"false\")\n }\n }'", + "markdown": "Reports `when` expressions with the constant `true` or `false` branches.\n\n**Simplify \"when\"** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun redundant() {\n when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n true -> println(\"true\")\n else -> println(\"false\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyWhenWithBooleanConstantCondition", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinConstantConditions", + "shortDescription": { + "text": "Constant conditions" + }, + "fullDescription": { + "text": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable 'when' branches and some expressions that are statically known to fail always. Examples: 'fun process(x: Int?) {\n val isNull = x == null\n if (!isNull) {\n if (x != null) {} // condition is always true\n require(x!! < 0 && x > 10) // condition is always false\n } else {\n println(x!!) // !! operator will always fail\n }\n}\nfun process(v: Any) {\n when(v) {\n is CharSequence -> println(v as Int) // cast will always fail\n is String -> println(v) // branch is unreachable\n }\n}' Uncheck the \"Warn when constant is stored in variable\" option to avoid reporting of variables having constant values not in conditions. New in 2021.3", + "markdown": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable `when` branches and some expressions that are statically known to fail always.\n\nExamples:\n\n\n fun process(x: Int?) {\n val isNull = x == null\n if (!isNull) {\n if (x != null) {} // condition is always true\n require(x!! < 0 && x > 10) // condition is always false\n } else {\n println(x!!) // !! operator will always fail\n }\n }\n fun process(v: Any) {\n when(v) {\n is CharSequence -> println(v as Int) // cast will always fail\n is String -> println(v) // branch is unreachable\n }\n }\n\n\nUncheck the \"Warn when constant is stored in variable\" option to avoid reporting of variables having constant values not in conditions.\n\nNew in 2021.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinConstantConditions", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForEachParameterNotUsed", + "shortDescription": { + "text": "Iterated elements are not used in forEach" + }, + "fullDescription": { + "text": "Reports 'forEach' loops that do not use iterable values. Example: 'listOf(1, 2, 3).forEach { }' The quick fix introduces anonymous parameter in the 'forEach' section: 'listOf(1, 2, 3).forEach { _ -> }'", + "markdown": "Reports `forEach` loops that do not use iterable values.\n\n**Example:**\n\n\n listOf(1, 2, 3).forEach { }\n\nThe quick fix introduces anonymous parameter in the `forEach` section:\n\n\n listOf(1, 2, 3).forEach { _ -> }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ForEachParameterNotUsed", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LeakingThis", + "shortDescription": { + "text": "Leaking 'this' in constructor" + }, + "fullDescription": { + "text": "Reports unsafe operations with 'this' during object construction including: Accessing a non-final property during class initialization: from a constructor or property initialization Calling a non-final function during class initialization Using 'this' as a function argument in a constructor of a non-final class If other classes inherit from the given class, they may not be fully initialized at the moment when an unsafe operation is carried out. Example: 'abstract class Base {\n val code = calculate()\n abstract fun calculate(): Int\n }\n\n class Derived(private val x: Int) : Base() {\n override fun calculate() = x\n }\n\n fun testIt() {\n println(Derived(42).code) // Expected: 42, actual: 0\n }'", + "markdown": "Reports unsafe operations with `this` during object construction including:\n\n* Accessing a non-final property during class initialization: from a constructor or property initialization\n* Calling a non-final function during class initialization\n* Using `this` as a function argument in a constructor of a non-final class\n\n\nIf other classes inherit from the given class,\nthey may not be fully initialized at the moment when an unsafe operation is carried out.\n\n**Example:**\n\n\n abstract class Base {\n val code = calculate()\n abstract fun calculate(): Int\n }\n\n class Derived(private val x: Int) : Base() {\n override fun calculate() = x\n }\n\n fun testIt() {\n println(Derived(42).code) // Expected: 42, actual: 0\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LeakingThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddVarianceModifier", + "shortDescription": { + "text": "Type parameter can have 'in' or 'out' variance" + }, + "fullDescription": { + "text": "Reports type parameters that can have 'in' or 'out' variance. Using 'in' and 'out' variance provides more precise type inference in Kotlin and clearer code semantics. Example: 'class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) {\n consumeString(box)\n consumeCharSequence(box) // Compilation error\n }' The quick-fix adds the matching variance modifier: 'class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) ++{\n consumeString(box)\n consumeCharSequence(box) // OK\n }'", + "markdown": "Reports type parameters that can have `in` or `out` variance.\n\nUsing `in` and `out` variance provides more precise type inference in Kotlin and clearer code semantics.\n\n**Example:**\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) {\n consumeString(box)\n consumeCharSequence(box) // Compilation error\n }\n\nThe quick-fix adds the matching variance modifier:\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) ++{\n consumeString(box)\n consumeCharSequence(box) // OK\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AddVarianceModifier", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveForLoopIndices", + "shortDescription": { + "text": "Unused loop index" + }, + "fullDescription": { + "text": "Reports 'for' loops iterating over a collection using the 'withIndex()' function and not using the index variable. Use the \"Remove indices in 'for' loop\" quick-fix to clean up the code. Examples: 'fun foo(bar: List) {\n for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n println(value)\n }\n }' After the quick-fix is applied: 'fun foo(bar: List) {\n for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n println(value)\n }\n }'", + "markdown": "Reports `for` loops iterating over a collection using the `withIndex()` function and not using the index variable.\n\nUse the \"Remove indices in 'for' loop\" quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(bar: List) {\n for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n println(value)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(bar: List) {\n for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n println(value)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveForLoopIndices", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSuspendModifier", + "shortDescription": { + "text": "Redundant 'suspend' modifier" + }, + "fullDescription": { + "text": "Reports 'suspend' modifier as redundant if no other suspending functions are called inside.", + "markdown": "Reports `suspend` modifier as redundant if no other suspending functions are called inside." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSuspendModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousAsDynamic", + "shortDescription": { + "text": "Suspicious 'asDynamic' member invocation" + }, + "fullDescription": { + "text": "Reports usages of 'asDynamic' function on a receiver of dynamic type. 'asDynamic' function has no effect for expressions of dynamic type. 'asDynamic' function on a receiver of dynamic type can lead to runtime problems because 'asDynamic' will be executed in JavaScript environment, and such function may not be present at runtime. The intended way is to use this function on usual Kotlin type. Remove \"asDynamic\" invocation quick-fix can be used to amend the code automatically. Example: 'fun wrongUsage(d: Dynamic) {\n d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n }'", + "markdown": "Reports usages of `asDynamic` function on a receiver of dynamic type.\n\n`asDynamic` function has no effect for expressions of dynamic type.\n\n`asDynamic` function on a receiver of dynamic type can lead to runtime problems because `asDynamic`\nwill be executed in JavaScript environment, and such function may not be present at runtime.\nThe intended way is to use this function on usual Kotlin type.\n\n**Remove \"asDynamic\" invocation** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun wrongUsage(d: Dynamic) {\n d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SuspiciousAsDynamic", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FilterIsInstanceCallWithClassLiteralArgument", + "shortDescription": { + "text": "'filterIsInstance' call with a class literal argument" + }, + "fullDescription": { + "text": "Reports calls of the Kotlin standard library function 'filterIsInstance' with a class literal argument. It is more idiomatic to use a version of this function with a reified type parameter, to avoid the '::class.java' syntax. Note: inspection is not reported for generic class literals because the 'Class<*, *>' syntax in the type argument list may be undesirable. Example: 'fun foo(list: List<*>) {\n list.filterIsInstance(Int::class.java)\n }' After the quick-fix is applied: 'fun foo(list: List<*>) {\n list.filterIsInstance()\n }'", + "markdown": "Reports calls of the Kotlin standard library function `filterIsInstance` with a class literal argument. It is more idiomatic to use a version of this function with a reified type parameter, to avoid the `::class.java` syntax.\n\nNote: inspection is not reported for generic class literals because the `Class<*, *>` syntax in the type argument list may be undesirable.\n\nExample:\n\n\n fun foo(list: List<*>) {\n list.filterIsInstance(Int::class.java)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List<*>) {\n list.filterIsInstance()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FilterIsInstanceCallWithClassLiteralArgument", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FromClosedRangeMigration", + "shortDescription": { + "text": "MIN_VALUE step in fromClosedRange() since 1.3" + }, + "fullDescription": { + "text": "Reports 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. It is prohibited to call 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. All such calls should be checked during migration to Kotlin 1.3+. Example: 'IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)' To fix the problem change the step of the progression.", + "markdown": "Reports `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with `MIN_VALUE` step.\n\n\nIt is prohibited to call `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with\n`MIN_VALUE` step. All such calls should be checked during migration to Kotlin 1.3+.\n\n**Example:**\n\n\n IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)\n\nTo fix the problem change the step of the progression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FromClosedRangeMigration", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantBackticks", + "shortDescription": { + "text": "Redundant backticks" + }, + "fullDescription": { + "text": "Reports redundant backticks in references. Some of the Kotlin keywords are valid identifiers in Java, for example: 'in', 'object', 'is'. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick character ('`'), for example, 'foo.`is`(bar)'. Sometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is paired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code. Examples: 'fun `is`(x: String) {}\n fun foo() {\n `is`(\"bar\") // 'is' is a keyword, backticks are required\n }\n\n fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n val `a` = 1 // no need for backticks'", + "markdown": "Reports redundant backticks in references.\n\n\nSome of the Kotlin keywords are valid identifiers in Java, for example: `in`, `object`, `is`.\nIf a Java library uses a Kotlin keyword for a method, you can still call the method escaping it\nwith the backtick character (`````), for example, ``foo.`is`(bar)``.\nSometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is\npaired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code.\n\n**Examples:**\n\n\n fun `is`(x: String) {}\n fun foo() {\n `is`(\"bar\") // 'is' is a keyword, backticks are required\n }\n\n fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n val `a` = 1 // no need for backticks\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RemoveRedundantBackticks", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceReadLineWithReadln", + "shortDescription": { + "text": "'readLine' can be replaced with 'readln' or 'readlnOrNull'" + }, + "fullDescription": { + "text": "Reports calls to 'readLine()' that can be replaced with 'readln()' or 'readlnOrNull()'. Using corresponding functions makes your code simpler. The quick-fix replaces 'readLine()!!' with 'readln()' and 'readLine()' with 'readlnOrNull()'. Examples: 'val x = readLine()!!\n val y = readLine()?.length' After the quick-fix is applied: 'val x = readln()\n val y = readlnOrNull()?.length'", + "markdown": "Reports calls to `readLine()` that can be replaced with `readln()` or `readlnOrNull()`.\n\n\nUsing corresponding functions makes your code simpler.\n\n\nThe quick-fix replaces `readLine()!!` with `readln()` and `readLine()` with `readlnOrNull()`.\n\n**Examples:**\n\n\n val x = readLine()!!\n val y = readLine()?.length\n\nAfter the quick-fix is applied:\n\n\n val x = readln()\n val y = readlnOrNull()?.length\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceReadLineWithReadln", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyNestedEachInScopeFunction", + "shortDescription": { + "text": "Scope function with nested forEach can be simplified" + }, + "fullDescription": { + "text": "Reports 'forEach' functions in the scope functions such as 'also' or 'apply' that can be simplified. Convert forEach call to onEach quick-fix can be used to amend the code automatically. Examples: 'fun test(list: List) {\n val x = list.also { it.forEach { it + 4 } }.toString()\n val y = list.apply { forEach { println(it) } }\n }' After the quick-fix is applied: 'fun test(list: List) {\n val x = list.onEach { it + 4 }.toString()\n val y = list.onEach { println(it) }\n }'", + "markdown": "Reports `forEach` functions in the scope functions such as `also` or `apply` that can be simplified.\n\n**Convert forEach call to onEach** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(list: List) {\n val x = list.also { it.forEach { it + 4 } }.toString()\n val y = list.apply { forEach { println(it) } }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n val x = list.onEach { it + 4 }.toString()\n val y = list.onEach { println(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyNestedEachInScopeFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeCastFromDynamic", + "shortDescription": { + "text": "Implicit (unsafe) cast from dynamic type" + }, + "fullDescription": { + "text": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type.", + "markdown": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "UnsafeCastFromDynamic", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicApiImplicitType", + "shortDescription": { + "text": "Public API declaration with implicit return type" + }, + "fullDescription": { + "text": "Reports 'public' and 'protected' functions and properties that have an implicit return type. For API stability reasons, it's recommended to specify such types explicitly. Example: 'fun publicFunctionWhichAbusesTypeInference() =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()' After the quick-fix is applied: 'fun publicFunctionWhichAbusesTypeInference(): Api =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()'", + "markdown": "Reports `public` and `protected` functions and properties that have an implicit return type.\nFor API stability reasons, it's recommended to specify such types explicitly.\n\n**Example:**\n\n\n fun publicFunctionWhichAbusesTypeInference() =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n\nAfter the quick-fix is applied:\n\n\n fun publicFunctionWhichAbusesTypeInference(): Api =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PublicApiImplicitType", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeclaringClassMigration", + "shortDescription": { + "text": "Deprecated 'Enum.declaringClass' property" + }, + "fullDescription": { + "text": "Reports 'declaringClass' property calls on Enum that will lead to compilation error since 1.9. 'Enum.getDeclaringClass' is among \"hidden\" Java functions which aren't normally visible by resolve. However, it's visible via synthetic property that is a front-end bug. More details: KT-49653 Deprecate and remove Enum.declaringClass synthetic property The quick-fix replaces a call with 'declaringJavaClass'. Example: 'fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringClass)\n }' After the quick-fix is applied: 'fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringJavaClass)\n }' This inspection only reports if the Kotlin language level of the project or module is 1.7 or higher.", + "markdown": "Reports 'declaringClass' property calls on Enum that will lead to compilation error since 1.9.\n\n'Enum.getDeclaringClass' is among \"hidden\" Java functions which aren't normally visible by resolve. However, it's visible via synthetic\nproperty that is a front-end bug.\n\n**More details:** [KT-49653 Deprecate and remove Enum.declaringClass synthetic\nproperty](https://youtrack.jetbrains.com/issue/KT-49653)\n\nThe quick-fix replaces a call with 'declaringJavaClass'.\n\n**Example:**\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringClass)\n }\n\nAfter the quick-fix is applied:\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringJavaClass)\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DeclaringClassMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceMapIndexedWithListGenerator", + "shortDescription": { + "text": "Replace 'mapIndexed' with List generator" + }, + "fullDescription": { + "text": "Reports a 'mapIndexed' call that can be replaced by 'List' generator. Example: 'val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n i + 42\n }' After the quick-fix is applied: 'val a = List(listOf(1, 2, 3).size) { i ->\n i + 42\n }'", + "markdown": "Reports a `mapIndexed` call that can be replaced by `List` generator.\n\n**Example:**\n\n\n val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n i + 42\n }\n\nAfter the quick-fix is applied:\n\n\n val a = List(listOf(1, 2, 3).size) { i ->\n i + 42\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceMapIndexedWithListGenerator", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ControlFlowWithEmptyBody", + "shortDescription": { + "text": "Control flow with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing and often the result of a typo. The quick-fix removes a statement. Example: 'if (a > b) {}'", + "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo.\n\nThe quick-fix removes a statement.\n\n**Example:**\n\n\n if (a > b) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ControlFlowWithEmptyBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopToCallChain", + "shortDescription": { + "text": "Loop can be replaced with stdlib operations" + }, + "fullDescription": { + "text": "Reports 'for' loops that can be replaced with a sequence of stdlib operations (like 'map', 'filter', and so on). Example: 'fun foo(list: List): List {\n val result = ArrayList()\n for (s in list) {\n if (s.length > 0)\n result.add(s.hashCode())\n }\n return result\n}' After the quick-fix is applied: 'fun foo(list: List): List {\n val result = list\n .filter { it.length > 0 }\n .map { it.hashCode() }\n return result\n}'", + "markdown": "Reports `for` loops that can be replaced with a sequence of stdlib operations (like `map`, `filter`, and so on).\n\n**Example:**\n\n\n fun foo(list: List): List {\n val result = ArrayList()\n for (s in list) {\n if (s.length > 0)\n result.add(s.hashCode())\n }\n return result\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): List {\n val result = list\n .filter { it.length > 0 }\n .map { it.hashCode() }\n return result\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LoopToCallChain", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyClassBody", + "shortDescription": { + "text": "Replace empty class body" + }, + "fullDescription": { + "text": "Reports declarations of classes and objects with an empty body. Use the 'Remove redundant empty class body' quick-fix to clean up the code. Examples: 'class EmptyA() {} // <== empty body\n\n class EmptyB {\n companion object {} // <== empty body\n }\n\n fun emptyC() {\n object {} // <== anonymous object, it's ok (not reported)\n }' After the quick fix is applied: 'class EmptyA()\n\n class EmptyB {\n companion object\n }\n\n fun emptyC() {\n object {}\n }'", + "markdown": "Reports declarations of classes and objects with an empty body.\n\nUse the 'Remove redundant empty class body' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class EmptyA() {} // <== empty body\n\n class EmptyB {\n companion object {} // <== empty body\n }\n\n fun emptyC() {\n object {} // <== anonymous object, it's ok (not reported)\n }\n\nAfter the quick fix is applied:\n\n\n class EmptyA()\n\n class EmptyB {\n companion object\n }\n\n fun emptyC() {\n object {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveEmptyClassBody", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeParameter", + "shortDescription": { + "text": "Constructor parameter is never used as a property" + }, + "fullDescription": { + "text": "Reports primary constructor parameters that can have 'val' or 'var' removed. Class properties declared in the constructor increase memory consumption. If the parameter value is only used in the constructor, you can omit them. Note that the referenced object might be garbage-collected earlier. Example: 'class Task(val name: String) {\n init {\n print(\"Task created: $name\")\n }\n }' The quick-fix removes the extra 'val' or 'var' keyword: 'class Task(name: String) {\n init {\n print(\"Task created: $name\")\n }\n }'", + "markdown": "Reports primary constructor parameters that can have `val` or `var` removed.\n\n\nClass properties declared in the constructor increase memory consumption.\nIf the parameter value is only used in the constructor, you can omit them.\n\nNote that the referenced object might be garbage-collected earlier.\n\n**Example:**\n\n\n class Task(val name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n\nThe quick-fix removes the extra `val` or `var` keyword:\n\n\n class Task(name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CanBeParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantReturnLabel", + "shortDescription": { + "text": "Redundant 'return' label" + }, + "fullDescription": { + "text": "Reports redundant return labels outside of lambda expressions. Example: 'fun test() {\n return@test\n }' After the quick-fix is applied: 'fun test() {\n return\n }'", + "markdown": "Reports redundant return labels outside of lambda expressions.\n\n**Example:**\n\n\n fun test() {\n return@test\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantReturnLabel", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageName", + "shortDescription": { + "text": "Package naming convention" + }, + "fullDescription": { + "text": "Reports package names that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: names of packages are always lowercase and should not contain underscores. Example: 'org.example.project' Using multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case Example: 'org.example.myProject'", + "markdown": "Reports package names that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): names of packages are always lowercase and should not contain underscores.\n\n**Example:**\n`org.example.project`\n\nUsing multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case\n\n**Example:**\n`org.example.myProject`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PackageName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration", + "shortDescription": { + "text": "Meaningless annotations targets on superclass" + }, + "fullDescription": { + "text": "Reports meaningless annotation targets on superclasses since Kotlin 1.4. Annotation targets such as '@get:' are meaningless on superclasses and are prohibited. Example: 'interface Foo\n\n annotation class Ann\n\n class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo' After the quick-fix is applied: 'interface Foo\n\n annotation class Ann\n\n class E : Foo' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports meaningless annotation targets on superclasses since Kotlin 1.4.\n\nAnnotation targets such as `@get:` are meaningless on superclasses and are prohibited.\n\n**Example:**\n\n\n interface Foo\n\n annotation class Ann\n\n class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo\n\nAfter the quick-fix is applied:\n\n\n interface Foo\n\n annotation class Ann\n\n class E : Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithEnumMap", + "shortDescription": { + "text": "'HashMap' can be replaced with 'EnumMap'" + }, + "fullDescription": { + "text": "Reports 'hashMapOf' function or 'HashMap' constructor calls that can be replaced with an 'EnumMap' constructor call. Using 'EnumMap' constructor makes your code simpler. The quick-fix replaces the function call with the 'EnumMap' constructor call. Example: 'enum class E {\n A, B\n }\n\n fun getMap(): Map = hashMapOf()' After the quick-fix is applied: 'enum class E {\n A, B\n }\n\n fun getMap(): Map = EnumMap(E::class.java)'", + "markdown": "Reports `hashMapOf` function or `HashMap` constructor calls that can be replaced with an `EnumMap` constructor call.\n\nUsing `EnumMap` constructor makes your code simpler.\n\nThe quick-fix replaces the function call with the `EnumMap` constructor call.\n\n**Example:**\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = hashMapOf()\n\nAfter the quick-fix is applied:\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = EnumMap(E::class.java)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceWithEnumMap", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumValuesSoftDeprecate", + "shortDescription": { + "text": "'Enum.values()' is recommended to be replaced by 'Enum.entries' since 1.9" + }, + "fullDescription": { + "text": "Reports calls from Kotlin to 'values()' method in enum classes that can be replaced with 'entries' property read. Use of 'Enum.entries' may improve performance of your code. The quick-fix replaces 'values()' with 'entries'. More details: KT-48872 Provide modern and performant replacement for Enum.values() Note: 'entries' property type is different from the return type of 'values()' method ('EnumEntries' which inherits from 'List' instead of 'Array'). Due to this in some cases quick fix inserts extra '.toTypedArray()' conversion to not break the code, but for most common cases replacement will be done without it (e.g. in 'for' loop). Example: 'enum class Version {\n V1, V2\n }\n\n Version.values().forEach { /* .. */ }\n val firstVersion = Version.values()[0]\n functionExpectingArray(Version.values())' After the quick-fix is applied: 'enum class Version {\n V1, V2\n }\n\n Version.entries.forEach { /* .. */ }\n val firstVersion = Version.entries[0]\n functionExpectingArray(Version.entries.toTypedArray())'", + "markdown": "Reports calls from Kotlin to `values()` method in enum classes that can be replaced with `entries` property read.\n\n\nUse of `Enum.entries` may improve performance of your code.\n\n\nThe quick-fix replaces `values()` with `entries`.\n\n\n**More details:** [KT-48872 Provide modern and performant replacement for Enum.values()](https://youtrack.jetbrains.com/issue/KT-48872)\n\n\n**Note:** `entries` property type is different from the return type of `values()` method\n(`EnumEntries` which inherits from `List` instead of `Array`).\nDue to this in some cases quick fix inserts extra `.toTypedArray()` conversion to not break the code, but\nfor most common cases replacement will be done without it (e.g. in `for` loop).\n\n**Example:**\n\n\n enum class Version {\n V1, V2\n }\n\n Version.values().forEach { /* .. */ }\n val firstVersion = Version.values()[0]\n functionExpectingArray(Version.values())\n\nAfter the quick-fix is applied:\n\n\n enum class Version {\n V1, V2\n }\n\n Version.entries.forEach { /* .. */ }\n val firstVersion = Version.entries[0]\n functionExpectingArray(Version.entries.toTypedArray())\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EnumValuesSoftDeprecate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousCollectionReassignment", + "shortDescription": { + "text": "Augmented assignment creates a new collection under the hood" + }, + "fullDescription": { + "text": "Reports augmented assignment ('+=') expressions on a read-only 'Collection'. Augmented assignment ('+=') expression on a read-only 'Collection' temporarily allocates a new collection, which may hurt performance. Change type to mutable quick-fix can be used to amend the code automatically. Example: 'fun test() {\n var list = listOf(0)\n list += 42 // A new list is allocated here, equivalent to list = list + 42\n }' After the quick-fix is applied: 'fun test() {\n val list = mutableListOf(0)\n list += 42\n }'", + "markdown": "Reports augmented assignment (`+=`) expressions on a read-only `Collection`.\n\nAugmented assignment (`+=`) expression on a read-only `Collection` temporarily allocates a new collection,\nwhich may hurt performance.\n\n**Change type to mutable** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test() {\n var list = listOf(0)\n list += 42 // A new list is allocated here, equivalent to list = list + 42\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n val list = mutableListOf(0)\n list += 42\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "SuspiciousCollectionReassignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantNotNullExtensionReceiverOfInline", + "shortDescription": { + "text": "'inline fun' extension receiver can be explicitly nullable until Kotlin 1.2" + }, + "fullDescription": { + "text": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). Thus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's recommended to make such functions to have nullable receiver. Example: 'inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }' After the quick-fix is applied: 'inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.", + "markdown": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nThus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's\nrecommended to make such functions to have nullable receiver.\n\n**Example:**\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantNotNullExtensionReceiverOfInline", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantElvisReturnNull", + "shortDescription": { + "text": "Redundant '?: return null'" + }, + "fullDescription": { + "text": "Reports redundant '?: return null' Example: 'fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo() ?: return null\n }' After the quick-fix is applied: 'fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo()\n }'", + "markdown": "Reports redundant `?: return null`\n\n**Example:**\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo() ?: return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantElvisReturnNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrivatePropertyName", + "shortDescription": { + "text": "Private property naming convention" + }, + "fullDescription": { + "text": "Reports private property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, private property names should start with a lowercase letter and use camel case. Optionally, underscore prefix is allowed but only for private properties. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val _My_Cool_Property = \"\"' The quick-fix renames the class according to the Kotlin naming conventions: 'val _myCoolProperty = \"\"'", + "markdown": "Reports private property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nprivate property names should start with a lowercase letter and use camel case.\nOptionally, underscore prefix is allowed but only for **private** properties.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val _My_Cool_Property = \"\"\n\nThe quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val _myCoolProperty = \"\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PrivatePropertyName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinJvmAnnotationInJava", + "shortDescription": { + "text": "Kotlin JVM annotation in Java" + }, + "fullDescription": { + "text": "Reports useless Kotlin JVM annotations in Java code. Example: 'import kotlin.jvm.Volatile;\n\n public class Test {\n @Volatile\n public int i;\n }'", + "markdown": "Reports useless Kotlin JVM annotations in Java code.\n\n**Example:**\n\n\n import kotlin.jvm.Volatile;\n\n public class Test {\n @Volatile\n public int i;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "KotlinJvmAnnotationInJava", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 79, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteKotlinJsPackages", + "shortDescription": { + "text": "'kotlin.browser' and 'kotlin.dom' packages are deprecated since 1.4" + }, + "fullDescription": { + "text": "Reports usages of 'kotlin.dom' and 'kotlin.browser' packages. These packages were moved to 'kotlinx.dom' and 'kotlinx.browser' respectively in Kotlin 1.4+.", + "markdown": "Reports usages of `kotlin.dom` and `kotlin.browser` packages.\n\nThese packages were moved to `kotlinx.dom` and `kotlinx.browser`\nrespectively in Kotlin 1.4+." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ObsoleteKotlinJsPackages", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CascadeIf", + "shortDescription": { + "text": "Cascade 'if' can be replaced with 'when'" + }, + "fullDescription": { + "text": "Reports 'if' statements with three or more branches that can be replaced with the 'when' expression. Example: 'fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n if (id.isEmpty()) {\n print(\"Identifier is empty\")\n } else if (!id.first().isIdentifierStart()) {\n print(\"Identifier should start with a letter\")\n } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n print(\"Identifier should contain only letters and numbers\")\n }\n }' The quick-fix converts the 'if' expression to 'when': 'fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n when {\n id.isEmpty() -> {\n print(\"Identifier is empty\")\n }\n !id.first().isIdentifierStart() -> {\n print(\"Identifier should start with a letter\")\n }\n !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n }'", + "markdown": "Reports `if` statements with three or more branches that can be replaced with the `when` expression.\n\n**Example:**\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n if (id.isEmpty()) {\n print(\"Identifier is empty\")\n } else if (!id.first().isIdentifierStart()) {\n print(\"Identifier should start with a letter\")\n } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n\nThe quick-fix converts the `if` expression to `when`:\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n when {\n id.isEmpty() -> {\n print(\"Identifier is empty\")\n }\n !id.first().isIdentifierStart() -> {\n print(\"Identifier should start with a letter\")\n }\n !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CascadeIf", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyRange", + "shortDescription": { + "text": "Range with start greater than endInclusive is empty" + }, + "fullDescription": { + "text": "Reports ranges that are empty because the 'start' value is greater than the 'endInclusive' value. Example: 'val range = 2..1' The quick-fix changes the '..' operator to 'downTo': 'val range = 2 downTo 1'", + "markdown": "Reports ranges that are empty because the `start` value is greater than the `endInclusive` value.\n\n**Example:**\n\n\n val range = 2..1\n\nThe quick-fix changes the `..` operator to `downTo`:\n\n\n val range = 2 downTo 1\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyRange", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExternalClassifierExtendingStateOrProps", + "shortDescription": { + "text": "Non-external classifier extending State or Props" + }, + "fullDescription": { + "text": "Reports non-external classifier extending State or Props. Read more in the migration guide.", + "markdown": "Reports non-external classifier extending State or Props. Read more in the [migration guide](https://kotlinlang.org/docs/js-ir-migration.html#convert-js-and-react-related-classes-and-interfaces-to-external-interfaces)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NonExternalClassifierExtendingStateOrProps", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/React/Probable bugs", + "index": 203, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalExpectation", + "shortDescription": { + "text": "Optionally expected annotation has no actual annotation" + }, + "fullDescription": { + "text": "Reports optionally expected annotations without actual annotation in some platform modules. Example: '// common code\n@OptionalExpectation\nexpect annotation class JvmName(val name: String)\n\n@JvmName(name = \"JvmFoo\")\nfun foo() { }\n\n// jvm code\nactual annotation class JvmName(val name: String)' The inspection also reports cases when 'actual annotation class JvmName' is omitted for non-JVM platforms (for example, Native).", + "markdown": "Reports optionally expected annotations without actual annotation in some platform modules.\n\n**Example:**\n\n // common code\n @OptionalExpectation\n expect annotation class JvmName(val name: String)\n\n @JvmName(name = \"JvmFoo\")\n fun foo() { }\n\n // jvm code\n actual annotation class JvmName(val name: String)\n\nThe inspection also reports cases when `actual annotation class JvmName` is omitted for non-JVM platforms (for example, Native)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "OptionalExpectation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DestructuringWrongName", + "shortDescription": { + "text": "Variable in destructuring declaration uses name of a wrong data class property" + }, + "fullDescription": { + "text": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class. Example: 'data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, c) = f\n }' The quick-fix changes variable's name to match the name of the corresponding class field: 'data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, b) = f\n }'", + "markdown": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class.\n\n**Example:**\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, c) = f\n }\n\nThe quick-fix changes variable's name to match the name of the corresponding class field:\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, b) = f\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DestructuringWrongName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfThenToSafeAccess", + "shortDescription": { + "text": "If-Then foldable to '?.'" + }, + "fullDescription": { + "text": "Reports 'if-then' expressions that can be folded into safe-access ('?.') expressions. Example: 'fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n if (a != null) bar(a) else null\n }' The quick fix converts the 'if-then' expression into a safe-access ('?.') expression: 'fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n a?.let { bar(it) }\n }'", + "markdown": "Reports `if-then` expressions that can be folded into safe-access (`?.`) expressions.\n\n**Example:**\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n if (a != null) bar(a) else null\n }\n\nThe quick fix converts the `if-then` expression into a safe-access (`?.`) expression:\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n a?.let { bar(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IfThenToSafeAccess", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RestrictReturnStatementTargetMigration", + "shortDescription": { + "text": "Target label does not denote a function since 1.4" + }, + "fullDescription": { + "text": "Reports labels that don't points to a functions. It's forbidden to declare a target label that does not denote a function. The quick-fix removes the label. Example: 'fun testValLabelInReturn() {\n L@ val fn = { return@L }\n fn()\n }' After the quick-fix is applied: 'fun testValLabelInReturn() {\n L@ val fn = { return }\n fn()\n }' This inspection only reports if the language level of the project or module is 1.4 or higher.", + "markdown": "Reports labels that don't points to a functions.\n\nIt's forbidden to declare a target label that does not denote a function.\n\nThe quick-fix removes the label.\n\n**Example:**\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return@L }\n fn()\n }\n\nAfter the quick-fix is applied:\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return }\n fn()\n }\n\nThis inspection only reports if the language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "RestrictReturnStatementTargetMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MigrateDiagnosticSuppression", + "shortDescription": { + "text": "Diagnostic name should be replaced" + }, + "fullDescription": { + "text": "Reports suppressions with old diagnostic names, for example '@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")'. Some of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant. Example: '@Suppress(\"HEADER_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n // ...\n}' After the quick-fix is applied: '@Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n // ...\n}'", + "markdown": "Reports suppressions with old diagnostic names, for example `@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")`.\n\n\nSome of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant.\n\n**Example:**\n\n\n @Suppress(\"HEADER_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n\nAfter the quick-fix is applied:\n\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MigrateDiagnosticSuppression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 61, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonNullableBooleanPropertyInExternalInterface", + "shortDescription": { + "text": "External interface contains non-nullable boolean property" + }, + "fullDescription": { + "text": "Reports non-nullable boolean properties in external interface. Read more in the migration guide.", + "markdown": "Reports non-nullable boolean properties in external interface. Read more in the [migration guide](https://kotlinlang.org/docs/js-ir-migration.html#make-boolean-properties-nullable-in-external-interfaces)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonNullableBooleanPropertyInExternalInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeferredResultUnused", + "shortDescription": { + "text": "'@Deferred' result is unused" + }, + "fullDescription": { + "text": "Reports function calls with the 'Deferred' result type if the return value is not used. If the 'Deferred' return value is not used, the call site would not wait to complete this function. Example: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n calcEverythingAsync()\n }' The quick-fix provides a variable with the 'Deferred' initializer: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n val answer = calcEverythingAsync()\n }'", + "markdown": "Reports function calls with the `Deferred` result type if the return value is not used.\n\nIf the `Deferred` return value is not used, the call site would not wait to complete this function.\n\n**Example:**\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n calcEverythingAsync()\n }\n\nThe quick-fix provides a variable with the `Deferred` initializer:\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n val answer = calcEverythingAsync()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DeferredResultUnused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SelfReferenceConstructorParameter", + "shortDescription": { + "text": "Constructor can never be complete" + }, + "fullDescription": { + "text": "Reports constructors with a non-null self-reference parameter. Such constructors never instantiate a class. The quick-fix converts the parameter type to nullable. Example: 'class SelfRef(val ref: SelfRef)' After the quick-fix is applied: 'class SelfRef(val ref: SelfRef?)'", + "markdown": "Reports constructors with a non-null self-reference parameter.\n\nSuch constructors never instantiate a class.\n\nThe quick-fix converts the parameter type to nullable.\n\n**Example:**\n\n\n class SelfRef(val ref: SelfRef)\n\nAfter the quick-fix is applied:\n\n\n class SelfRef(val ref: SelfRef?)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SelfReferenceConstructorParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MainFunctionReturnUnit", + "shortDescription": { + "text": "Main function should return 'Unit'" + }, + "fullDescription": { + "text": "Reports when a main function does not have a return type of 'Unit'. Example: 'fun main() = \"Hello world!\"'", + "markdown": "Reports when a main function does not have a return type of `Unit`.\n\n**Example:**\n`fun main() = \"Hello world!\"`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MainFunctionReturnUnit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousCallableReferenceInLambda", + "shortDescription": { + "text": "Suspicious callable reference used as lambda result" + }, + "fullDescription": { + "text": "Reports lambda expressions with one callable reference. It is a common error to replace a lambda with a callable reference without changing curly braces to parentheses. Example: 'listOf(1,2,3).map { it::toString }' After the quick-fix is applied: 'listOf(1,2,3).map(Int::toString)'", + "markdown": "Reports lambda expressions with one callable reference.\n\nIt is a common error to replace a lambda with a callable reference without changing curly braces to parentheses.\n\n**Example:**\n\n listOf(1,2,3).map { it::toString }\n\nAfter the quick-fix is applied:\n\n listOf(1,2,3).map(Int::toString)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "SuspiciousCallableReferenceInLambda", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertSecondaryConstructorToPrimary", + "shortDescription": { + "text": "Convert to primary constructor" + }, + "fullDescription": { + "text": "Reports a secondary constructor that can be replaced with a more concise primary constructor. Example: 'class User {\n val name: String\n\n constructor(name: String) {\n this.name = name\n }\n }' The quick-fix converts code automatically: 'class User(val name: String) {\n }'", + "markdown": "Reports a secondary constructor that can be replaced with a more concise primary constructor.\n\n**Example:**\n\n\n class User {\n val name: String\n\n constructor(name: String) {\n this.name = name\n }\n }\n\nThe quick-fix converts code automatically:\n\n\n class User(val name: String) {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConvertSecondaryConstructorToPrimary", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceGetOrSet", + "shortDescription": { + "text": "Explicit 'get' or 'set' call" + }, + "fullDescription": { + "text": "Reports explicit calls to 'get' or 'set' functions which can be replaced by an indexing operator '[]'. Kotlin allows custom implementations for the predefined set of operators on types. To overload an operator, you can mark the corresponding function with the 'operator' modifier: 'operator fun get(index: Int) {}\n operator fun set(index: Int, value: Int) {}' The functions above correspond to the indexing operator. Example: 'class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test().get(0) // replaceable 'get()'\n }' After the quick-fix is applied: 'class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test()[0]\n }'", + "markdown": "Reports explicit calls to `get` or `set` functions which can be replaced by an indexing operator `[]`.\n\n\nKotlin allows custom implementations for the predefined set of operators on types.\nTo overload an operator, you can mark the corresponding function with the `operator` modifier:\n\n\n operator fun get(index: Int) {}\n operator fun set(index: Int, value: Int) {}\n \nThe functions above correspond to the indexing operator.\n\n**Example:**\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test().get(0) // replaceable 'get()'\n }\n\nAfter the quick-fix is applied:\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test()[0]\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceGetOrSet", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitRepeatedUseSiteTargetAnnotationsMigration", + "shortDescription": { + "text": "Repeated annotation which is not marked as '@Repeatable'" + }, + "fullDescription": { + "text": "Reports the repeated use of a non-'@Repeatable' annotation on property accessors. As a result of using non-'@Repeatable' annotation multiple times, both annotation usages will appear in the bytecode leading to an ambiguity in reflection calls. Since Kotlin 1.4 it's mandatory to either mark annotation as '@Repeatable' or not repeat the annotation, otherwise it will lead to compilation error. Example: 'annotation class Foo(val x: Int)\n\n @get:Foo(10)\n val a: String\n @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports the repeated use of a non-`@Repeatable` annotation on property accessors.\n\n\nAs a result of using non-`@Repeatable` annotation multiple times, both annotation usages\nwill appear in the bytecode leading to an ambiguity in reflection calls.\n\n\nSince Kotlin 1.4 it's mandatory to either mark annotation as `@Repeatable` or not\nrepeat the annotation, otherwise it will lead to compilation error.\n\n**Example:**\n\n\n annotation class Foo(val x: Int)\n\n @get:Foo(10)\n val a: String\n @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ProhibitRepeatedUseSiteTargetAnnotationsMigration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Destructure", + "shortDescription": { + "text": "Use destructuring declaration" + }, + "fullDescription": { + "text": "Reports declarations that can be destructured. Example: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { my ->\n println(my.second)\n println(my.third)\n }\n }' The quick-fix destructures the declaration and introduces new variables with names from the corresponding class: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { (_, second, third) ->\n println(second)\n println(third)\n }\n }'", + "markdown": "Reports declarations that can be destructured.\n\n**Example:**\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { my ->\n println(my.second)\n println(my.third)\n }\n }\n\nThe quick-fix destructures the declaration and introduces new variables with names from the corresponding class:\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { (_, second, third) ->\n println(second)\n println(third)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "Destructure", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedReceiverParameter", + "shortDescription": { + "text": "Unused receiver parameter" + }, + "fullDescription": { + "text": "Reports receiver parameter of extension functions and properties that is not used. Remove redundant receiver parameter can be used to amend the code automatically.", + "markdown": "Reports receiver parameter of extension functions and properties that is not used.\n\n**Remove redundant receiver parameter** can be used to amend the code automatically." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedReceiverParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertTryFinallyToUseCall", + "shortDescription": { + "text": "Convert try / finally to use() call" + }, + "fullDescription": { + "text": "Reports a 'try-finally' block with 'resource.close()' in 'finally' which can be converted to a 'resource.use()' call. 'use()' is easier to read and less error-prone as there is no need in explicit 'close()' call. Example: 'fun example() {\n val reader = File(\"file.txt\").bufferedReader()\n try {\n reader.lineSequence().forEach(::print)\n } finally {\n reader.close()\n }\n }' After the quick-fix applied: 'fun example() {\n File(\"file.txt\").bufferedReader().use { reader ->\n reader.lineSequence().forEach(::print)\n }\n }'", + "markdown": "Reports a `try-finally` block with `resource.close()` in `finally` which can be converted to a `resource.use()` call.\n\n`use()` is easier to read and less error-prone as there is no need in explicit `close()` call.\n\n**Example:**\n\n\n fun example() {\n val reader = File(\"file.txt\").bufferedReader()\n try {\n reader.lineSequence().forEach(::print)\n } finally {\n reader.close()\n }\n }\n\nAfter the quick-fix applied:\n\n\n fun example() {\n File(\"file.txt\").bufferedReader().use { reader ->\n reader.lineSequence().forEach(::print)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertTryFinallyToUseCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinRedundantOverride", + "shortDescription": { + "text": "Redundant overriding method" + }, + "fullDescription": { + "text": "Reports redundant overriding declarations. An override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility. Example: 'open class Foo {\n open fun singleExpression() {\n }\n }\n\n class Bar : Foo() {\n override fun singleExpression() = super.singleExpression()\n }' After the quick-fix is applied: 'class Bar : Foo() {\n }'", + "markdown": "Reports redundant overriding declarations.\n\n\nAn override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility.\n\n**Example:**\n\n\n open class Foo {\n open fun singleExpression() {\n }\n }\n\n class Bar : Foo() {\n override fun singleExpression() = super.singleExpression()\n }\n\nAfter the quick-fix is applied:\n\n\n class Bar : Foo() {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantOverride", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceArrayOfWithLiteral", + "shortDescription": { + "text": "'arrayOf' call can be replaced with array literal [...]" + }, + "fullDescription": { + "text": "Reports 'arrayOf' calls that can be replaced with array literals '[...]'. Examples: 'annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n class MyClass' After the quick-fix is applied: 'annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n class MyClass'", + "markdown": "Reports `arrayOf` calls that can be replaced with array literals `[...]`.\n\n**Examples:**\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n class MyClass\n\nAfter the quick-fix is applied:\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n class MyClass\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceArrayOfWithLiteral", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceToWithInfixForm", + "shortDescription": { + "text": "'to' call should be replaced with infix form" + }, + "fullDescription": { + "text": "Reports 'to' function calls that can be replaced with the infix form. Using the infix form makes your code simpler. The quick-fix replaces 'to' with the infix form. Example: 'fun foo(a: Int, b: Int) {\n val pair = a.to(b)\n }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) {\n val pair = a to b\n }'", + "markdown": "Reports `to` function calls that can be replaced with the infix form.\n\nUsing the infix form makes your code simpler.\n\nThe quick-fix replaces `to` with the infix form.\n\n**Example:**\n\n\n fun foo(a: Int, b: Int) {\n val pair = a.to(b)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int, b: Int) {\n val pair = a to b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceToWithInfixForm", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 2, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstPropertyName", + "shortDescription": { + "text": "Const property naming convention" + }, + "fullDescription": { + "text": "Reports 'const' property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, 'const' properties should use uppercase underscore-separated names. Example: 'const val Planck: Double = 6.62607015E-34' The quick-fix renames the property: 'const val PLANCK: Double = 6.62607015E-34'", + "markdown": "Reports `const` property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#property-names),\n`const` properties should use uppercase underscore-separated names.\n\n**Example:**\n\n\n const val Planck: Double = 6.62607015E-34\n\nThe quick-fix renames the property:\n\n\n const val PLANCK: Double = 6.62607015E-34\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConstPropertyName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 71, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantNullableReturnType", + "shortDescription": { + "text": "Redundant nullable return type" + }, + "fullDescription": { + "text": "Reports functions and variables with nullable return type which never return or become 'null'. Example: 'fun greeting(user: String): String? = \"Hello, $user!\"' After the quick-fix is applied: 'fun greeting(user: String): String = \"Hello, $user!\"'", + "markdown": "Reports functions and variables with nullable return type which never return or become `null`.\n\n**Example:**\n\n\n fun greeting(user: String): String? = \"Hello, $user!\"\n\nAfter the quick-fix is applied:\n\n\n fun greeting(user: String): String = \"Hello, $user!\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantNullableReturnType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 4, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UselessCallOnNotNull", + "shortDescription": { + "text": "Useless call on not-null type" + }, + "fullDescription": { + "text": "Reports calls on not-null receiver that make sense only for nullable receiver. Several functions from the standard library such as 'orEmpty()' or 'isNullOrEmpty' have sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same. Remove redundant call and Change call to … quick-fixes can be used to amend the code automatically. Examples: 'fun test(s: String) {\n val x = s.orEmpty() // quick-fix simplifies to 's'\n val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n }'", + "markdown": "Reports calls on not-null receiver that make sense only for nullable receiver.\n\nSeveral functions from the standard library such as `orEmpty()` or `isNullOrEmpty`\nhave sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same.\n\n**Remove redundant call** and **Change call to ...** quick-fixes can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(s: String) {\n val x = s.orEmpty() // quick-fix simplifies to 's'\n val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UselessCallOnNotNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsOrHashCode", + "shortDescription": { + "text": "'equals()' and 'hashCode()' not paired" + }, + "fullDescription": { + "text": "Reports classes that override 'equals()' but do not override 'hashCode()', or vice versa. It also reports object declarations that override either 'equals()' or 'hashCode()'. This can lead to undesired behavior when a class is added to a 'Collection' Example: 'class C1 {\n override fun equals(other: Any?) = true\n }\n\n class C2 {\n override fun hashCode() = 0\n }\n\n object O1 {\n override fun equals(other: Any?) = true\n }\n\n object O2 {\n override fun hashCode() = 0\n }' The quick-fix overrides 'equals()' or 'hashCode()' for classes and deletes these methods for objects: 'class C1 {\n override fun equals(other: Any?) = true\n override fun hashCode(): Int {\n return javaClass.hashCode()\n }\n }\n\n class C2 {\n override fun hashCode() = 0\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n return true\n }\n }\n\n object O1 {\n }\n\n object O2 {\n }'", + "markdown": "Reports classes that override `equals()` but do not override `hashCode()`, or vice versa. It also reports object declarations that override either `equals()` or `hashCode()`.\n\nThis can lead to undesired behavior when a class is added to a `Collection`\n\n**Example:**\n\n\n class C1 {\n override fun equals(other: Any?) = true\n }\n\n class C2 {\n override fun hashCode() = 0\n }\n\n object O1 {\n override fun equals(other: Any?) = true\n }\n\n object O2 {\n override fun hashCode() = 0\n }\n\nThe quick-fix overrides `equals()` or `hashCode()` for classes and deletes these methods for objects:\n\n\n class C1 {\n override fun equals(other: Any?) = true\n override fun hashCode(): Int {\n return javaClass.hashCode()\n }\n }\n\n class C2 {\n override fun hashCode() = 0\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n return true\n }\n }\n\n object O1 {\n }\n\n object O2 {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsOrHashCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 28, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.java", + "version": "241.17569", + "rules": [ + { + "id": "OverrideOnly", + "shortDescription": { + "text": "Method can only be overridden" + }, + "fullDescription": { + "text": "Reports calls to API methods marked with '@ApiStatus.OverrideOnly'. The '@ApiStatus.OverrideOnly' annotation indicates that the method is part of SPI (Service Provider Interface). Clients of the declaring library should implement or override such methods, not call them directly. Marking a class or interface with this annotation is the same as marking every method with it.", + "markdown": "Reports calls to API methods marked with `@ApiStatus.OverrideOnly`.\n\n\nThe `@ApiStatus.OverrideOnly` annotation indicates that the method is part of SPI (Service Provider Interface).\nClients of the declaring library should implement or override such methods, not call them directly.\nMarking a class or interface with this annotation is the same as marking every method with it." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OverrideOnly", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSuspiciousStringMethod", + "shortDescription": { + "text": "Call to suspicious 'String' method" + }, + "fullDescription": { + "text": "Reports calls of: 'equals()' 'equalsIgnoreCase()' 'compareTo()' 'compareToIgnoreCase()' and 'trim()' on 'String' objects. Comparison of internationalized strings should probably use a 'java.text.Collator' instead. 'String.trim()' only removes control characters between 0x00 and 0x20. The 'String.strip()' method introduced in Java 11 is more Unicode aware and can be used as a replacement.", + "markdown": "Reports calls of:\n\n* `equals()`\n* `equalsIgnoreCase()`\n* `compareTo()`\n* `compareToIgnoreCase()` and\n* `trim()`\n\n\non `String` objects.\nComparison of internationalized strings should probably use a `java.text.Collator` instead.\n`String.trim()` only removes control characters between 0x00 and 0x20.\nThe `String.strip()` method introduced in Java 11 is more Unicode aware and can be used as a replacement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSuspiciousStringMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KeySetIterationMayUseEntrySet", + "shortDescription": { + "text": "Iteration over 'keySet()' can be optimized" + }, + "fullDescription": { + "text": "Reports iterations over the 'keySet()' of a 'java.util.Map' instance, where the iterated keys are used to retrieve the values from the map. Such iteration may be more efficient when replaced with an iteration over the 'entrySet()' or 'values()' (if the key is not actually used). Similarly, 'keySet().forEach(key -> ...)' can be replaced with 'forEach((key, value) -> ...)' if values are retrieved inside a lambda. Example: 'for (Object key : map.keySet()) {\n Object val = map.get(key);\n }' After the quick-fix is applied: 'for (Object val : map.values()) {}'", + "markdown": "Reports iterations over the `keySet()` of a `java.util.Map` instance, where the iterated keys are used to retrieve the values from the map.\n\n\nSuch iteration may be more efficient when replaced with an iteration over the\n`entrySet()` or `values()` (if the key is not actually used).\n\n\nSimilarly, `keySet().forEach(key -> ...)`\ncan be replaced with `forEach((key, value) -> ...)` if values are retrieved\ninside a lambda.\n\n**Example:**\n\n\n for (Object key : map.keySet()) {\n Object val = map.get(key);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Object val : map.values()) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KeySetIterationMayUseEntrySet", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryQualifierForThis", + "shortDescription": { + "text": "Unnecessary qualifier for 'this' or 'super'" + }, + "fullDescription": { + "text": "Reports unnecessary qualification of 'this' or 'super'. Using a qualifier on 'this' or 'super' to disambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity. Example: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }' After the quick-fix is applied: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }'", + "markdown": "Reports unnecessary qualification of `this` or `super`.\n\n\nUsing a qualifier on `this` or `super` to\ndisambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryQualifierForThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedReturnValue", + "shortDescription": { + "text": "Method can be made 'void'" + }, + "fullDescription": { + "text": "Reports methods whose return values are never used when called. The return type of such methods can be made 'void'. Methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. The quick-fix updates the method signature and removes 'return' statements from inside the method. Example: '// reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }' After the quick-fix is applied to both methods: 'protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...' NOTE: Some methods might not be reported during in-editor highlighting due to performance reasons. To see all results, run the inspection using Code | Inspect Code or Code | Analyze Code | Run Inspection by Name> Use the Ignore chainable methods option to ignore unused return values from chainable calls. Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported.", + "markdown": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n // reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }\n\nAfter the quick-fix is applied to both methods:\n\n\n protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore chainable methods** option to ignore unused return values from chainable calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedReturnValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UncheckedExceptionClass", + "shortDescription": { + "text": "Unchecked 'Exception' class" + }, + "fullDescription": { + "text": "Reports subclasses of 'java.lang.RuntimeException'. Some coding standards require that all user-defined exception classes are checked. Example: 'class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException''", + "markdown": "Reports subclasses of `java.lang.RuntimeException`.\n\nSome coding standards require that all user-defined exception classes are checked.\n\n**Example:**\n\n\n class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException'\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UncheckedExceptionClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SizeReplaceableByIsEmpty", + "shortDescription": { + "text": "'size() == 0' can be replaced with 'isEmpty()'" + }, + "fullDescription": { + "text": "Reports '.size()' or '.length()' comparisons with a '0' literal that can be replaced with a call to '.isEmpty()'. Example: 'boolean emptyList = list.size() == 0;' After the quick-fix is applied: 'boolean emptyList = list.isEmpty();' Use the Ignored classes table to add classes for which any '.size()' or '.length()' comparisons should not be replaced. Use the Ignore expressions which would be replaced with '!isEmpty()' option to ignore any expressions which would be replaced with '!isEmpty()'.", + "markdown": "Reports `.size()` or `.length()` comparisons with a `0` literal that can be replaced with a call to `.isEmpty()`.\n\n**Example:**\n\n\n boolean emptyList = list.size() == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean emptyList = list.isEmpty();\n \n\nUse the **Ignored classes** table to add classes for which any `.size()` or `.length()` comparisons should not be replaced.\n\nUse the **Ignore expressions which would be replaced with `!isEmpty()`** option to ignore any expressions which would be replaced with `!isEmpty()`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SizeReplaceableByIsEmpty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsupportedChronoFieldUnitCall", + "shortDescription": { + "text": "Call methods with unsupported 'java.time.temporal.ChronoUnit' and 'java.time.temporal.ChronoField'" + }, + "fullDescription": { + "text": "Reports 'java.time' method calls ('get()', 'getLong()', 'with()', 'plus()', 'minus()') with unsupported 'java.time.temporal.ChronoField' or 'java.time.temporal.ChronoUnit' enum constants as arguments. Such calls will throw a 'UnsupportedTemporalTypeException' at runtime. Example: 'LocalTime localTime = LocalTime.now();\nint year = localTime.get(ChronoField.YEAR);' New in 2023.2", + "markdown": "Reports `java.time` method calls (`get()`, `getLong()`, `with()`, `plus()`, `minus()`) with unsupported `java.time.temporal.ChronoField` or `java.time.temporal.ChronoUnit` enum constants as arguments. Such calls will throw a `UnsupportedTemporalTypeException` at runtime.\n\nExample:\n\n\n LocalTime localTime = LocalTime.now();\n int year = localTime.get(ChronoField.YEAR);\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnsupportedChronoFieldUnitCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumberEquality", + "shortDescription": { + "text": "Number comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses == or != instead of 'equals()' to test for 'Number' equality. With auto-boxing, it is easy to make the mistake of comparing two instances of a wrapper type instead of two primitives, for example 'Integer' instead of 'int'. Example: 'void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }' If 'a' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }'", + "markdown": "Reports code that uses **==** or **!=** instead of `equals()` to test for `Number` equality.\n\n\nWith auto-boxing, it is easy\nto make the mistake of comparing two instances of a wrapper type instead of two primitives, for example `Integer` instead of\n`int`.\n\n**Example:**\n\n void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }\n\nIf `a` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NumberEquality", + "cweIds": [ + 480 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithOnlyPrivateConstructors", + "shortDescription": { + "text": "Class with only 'private' constructors should be declared 'final'" + }, + "fullDescription": { + "text": "Reports classes with only 'private' constructors. A class that only has 'private' constructors cannot be extended outside a file and should be declared as 'final'.", + "markdown": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithOnlyPrivateConstructors", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorNotSerializable", + "shortDescription": { + "text": "'Comparator' class not declared 'Serializable'" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.lang.Comparator', but do not implement 'java.io.Serializable'. If a non-serializable comparator is used to construct an ordered collection such as a 'java.util.TreeMap' or 'java.util.TreeSet', then the collection will also be non-serializable. This can result in unexpected and difficult-to-diagnose bugs. Since subclasses of 'java.lang.Comparator' are often stateless, simply marking them serializable is a small cost to avoid such issues. Example: 'class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }' After the quick-fix is applied: 'class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }'", + "markdown": "Reports classes that implement `java.lang.Comparator`, but do not implement `java.io.Serializable`.\n\n\nIf a non-serializable comparator is used to construct an ordered collection such\nas a `java.util.TreeMap` or `java.util.TreeSet`, then the\ncollection will also be non-serializable. This can result in unexpected and\ndifficult-to-diagnose bugs.\n\n\nSince subclasses of `java.lang.Comparator` are often stateless,\nsimply marking them serializable is a small cost to avoid such issues.\n\n**Example:**\n\n\n class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ComparatorNotSerializable", + "cweIds": [ + 502 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UNUSED_IMPORT", + "shortDescription": { + "text": "Unused import" + }, + "fullDescription": { + "text": "Reports redundant 'import' statements. Regular 'import' statements are unnecessary when not using imported classes and packages in the source file. The same applies to imported 'static' fields and methods that aren't used in the source file. Example: 'import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }' After the quick fix is applied: 'public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }'", + "markdown": "Reports redundant `import` statements.\n\nRegular `import` statements are unnecessary when not using imported classes and packages in the source file.\nThe same applies to imported `static` fields and methods that aren't used in the source file.\n\n**Example:**\n\n\n import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n\nAfter the quick fix is applied:\n\n\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UNUSED_IMPORT", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldAccessedSynchronizedAndUnsynchronized", + "shortDescription": { + "text": "Field accessed in both 'synchronized' and unsynchronized contexts" + }, + "fullDescription": { + "text": "Reports non-final fields that are accessed in both 'synchronized' and non-'synchronized' contexts. 'volatile' fields as well as accesses in constructors and initializers are ignored by this inspection. Such \"partially synchronized\" access is often the result of a coding oversight and may lead to unexpectedly inconsistent data structures. Example: 'public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }'\n Use the option to specify if simple getters and setters are counted as accesses too.", + "markdown": "Reports non-final fields that are accessed in both `synchronized` and non-`synchronized` contexts. `volatile` fields as well as accesses in constructors and initializers are ignored by this inspection.\n\n\nSuch \"partially synchronized\" access is often the result of a coding oversight\nand may lead to unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }\n\n\nUse the option to specify if simple getters and setters are counted as accesses too." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldAccessedSynchronizedAndUnsynchronized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedEqualityExpression", + "shortDescription": { + "text": "Negated equality expression" + }, + "fullDescription": { + "text": "Reports equality expressions which are negated by a prefix expression. Such expressions can be simplified using the '!=' operator. Example: '!(i == 1)' After the quick-fix is applied: 'i != 1'", + "markdown": "Reports equality expressions which are negated by a prefix expression.\n\nSuch expressions can be simplified using the `!=` operator.\n\nExample:\n\n\n !(i == 1)\n\nAfter the quick-fix is applied:\n\n\n i != 1\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedEqualityExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveLiteralUnderscores", + "shortDescription": { + "text": "Underscores in numeric literal" + }, + "fullDescription": { + "text": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level. The quick-fix removes underscores from numeric literals. For example '1_000_000' will be converted to '1000000'. Numeric literals with underscores appeared in Java 7. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2020.2", + "markdown": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level.\n\nThe quick-fix removes underscores from numeric literals. For example `1_000_000` will be converted to `1000000`.\n\n\n*Numeric literals with underscores* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RemoveLiteralUnderscores", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MathRandomCastToInt", + "shortDescription": { + "text": "'Math.random()' cast to 'int'" + }, + "fullDescription": { + "text": "Reports calls to 'Math.random()' which are immediately cast to 'int'. Casting a 'double' between '0.0' (inclusive) and '1.0' (exclusive) to 'int' will always round down to zero. The value should first be multiplied by some factor before casting it to an 'int' to get a value between zero (inclusive) and the multiplication factor (exclusive). Another possible solution is to use the 'nextInt()' method of 'java.util.Random'. Example: 'int r = (int)Math.random() * 10;' After the quick fix is applied: 'int r = (int)(Math.random() * 10);'", + "markdown": "Reports calls to `Math.random()` which are immediately cast to `int`.\n\nCasting a `double` between `0.0` (inclusive) and\n`1.0` (exclusive) to `int` will always round down to zero. The value\nshould first be multiplied by some factor before casting it to an `int` to\nget a value between zero (inclusive) and the multiplication factor (exclusive).\nAnother possible solution is to use the `nextInt()` method of\n`java.util.Random`.\n\n**Example:**\n\n int r = (int)Math.random() * 10;\n\nAfter the quick fix is applied:\n\n int r = (int)(Math.random() * 10);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MathRandomCastToInt", + "cweIds": [ + 330, + 681 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleBraceInitialization", + "shortDescription": { + "text": "Double brace initialization" + }, + "fullDescription": { + "text": "Reports Double Brace Initialization. Double brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class that will reference the surrounding object. Compared to regular initialization, double brace initialization provides worse performance since it requires loading an additional class. It may also cause failure of 'equals()' comparisons if the 'equals()' method doesn't accept subclasses as parameters. In addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible with anonymous classes. Example: 'List list = new ArrayList<>() {{\n add(1);\n add(2);\n }};' After the quick-fix is applied: 'List list = new ArrayList<>();\n list.add(1);\n list.add(2);'", + "markdown": "Reports [Double Brace Initialization](https://www.c2.com/cgi/wiki?DoubleBraceInitialization).\n\nDouble brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class\nthat will reference the surrounding object.\n\nCompared to regular initialization, double brace initialization provides worse performance since it requires loading an\nadditional class.\n\nIt may also cause failure of `equals()` comparisons if the `equals()` method doesn't accept subclasses as\nparameters.\n\nIn addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible\nwith anonymous classes.\n\n**Example:**\n\n\n List list = new ArrayList<>() {{\n add(1);\n add(2);\n }};\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n list.add(1);\n list.add(2);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DoubleBraceInitialization", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInLoops", + "shortDescription": { + "text": "String concatenation in loop" + }, + "fullDescription": { + "text": "Reports String concatenation in loops. As every String concatenation copies the whole string, usually it is preferable to replace it with explicit calls to 'StringBuilder.append()' or 'StringBuffer.append()'. Example: 'String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }' After the quick-fix is applied: 'String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();' Sometimes, the quick-fixes allow you to convert a 'String' variable to a 'StringBuilder' or introduce a new 'StringBuilder'. Be careful if the original code specially handles the 'null' value, as the replacement may change semantics. If 'null' is possible, null-safe fixes that generate necessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant.", + "markdown": "Reports String concatenation in loops.\n\n\nAs every String concatenation copies the whole\nstring, usually it is preferable to replace it with explicit calls to `StringBuilder.append()` or\n`StringBuffer.append()`.\n\n**Example:**\n\n\n String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }\n\nAfter the quick-fix is applied:\n\n\n String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();\n\n\nSometimes, the quick-fixes allow you to convert a `String` variable to a `StringBuilder` or\nintroduce a new `StringBuilder`. Be careful if the original code specially handles the `null` value, as the\nreplacement may change semantics. If `null` is possible, null-safe fixes that generate\nnecessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenationInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneableClassInSecureContext", + "shortDescription": { + "text": "Cloneable class in secure context" + }, + "fullDescription": { + "text": "Reports classes which may be cloned. A class may be cloned if it supports the 'Cloneable' interface, and its 'clone()' method is not defined to immediately throw an error. Cloneable classes may be dangerous in code intended for secure use. Example: 'class SecureBean implements Cloneable {}' After the quick-fix is applied: 'class SecureBean {}' When the class extends an existing cloneable class or implements a cloneable interface, then after the quick-fix is applied, the code may look like: 'class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n}'", + "markdown": "Reports classes which may be cloned.\n\n\nA class\nmay be cloned if it supports the `Cloneable` interface,\nand its `clone()` method is not defined to immediately\nthrow an error. Cloneable classes may be dangerous in code intended for secure use.\n\n**Example:**\n`class SecureBean implements Cloneable {}`\n\nAfter the quick-fix is applied:\n`class SecureBean {}`\n\n\nWhen the class extends an existing cloneable class or implements a cloneable interface,\nthen after the quick-fix is applied, the code may look like:\n\n class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CloneableClassInSecureContext", + "cweIds": [ + 498 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentTextBlockIndent", + "shortDescription": { + "text": "Inconsistent whitespace indentation in text block" + }, + "fullDescription": { + "text": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally by the text block processing. In the following example, spaces and tabs are visualized as '·' and '␉' respectively, and a tab is equal to 4 spaces in the editor. Example: 'String colors = \"\"\"\n········red\n␉ ␉ green\n········blue\"\"\";' After printing such a string, the result will be: '······red\ngreen\n······blue' After the compiler removes an equal amount of spaces or tabs from the beginning of each line, some lines remain with leading spaces. This inspection depends on the Java feature 'Text block literals' which is available since Java 15. New in 2021.1", + "markdown": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally by the text block processing.\n\nIn the following example, spaces and tabs are visualized as `·` and `␉` respectively,\nand a tab is equal to 4 spaces in the editor.\n\n**Example:**\n\n\n String colors = \"\"\"\n ········red\n ␉ ␉ green\n ········blue\"\"\";\n\nAfter printing such a string, the result will be:\n\n\n ······red\n green\n ······blue\n\nAfter the compiler removes an equal amount of spaces or tabs from the beginning of each line,\nsome lines remain with leading spaces.\n\nThis inspection depends on the Java feature 'Text block literals' which is available since Java 15.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentTextBlockIndent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertionCanBeIf", + "shortDescription": { + "text": "Assertion can be replaced with 'if' statement" + }, + "fullDescription": { + "text": "Reports 'assert' statements and suggests replacing them with 'if' statements that throw 'java.lang.AssertionError'. Example: 'assert param != null;' After the quick-fix is applied: 'if (param == null) throw new AssertionError();' This inspection depends on the Java feature 'Assertions' which is available since Java 4.", + "markdown": "Reports `assert` statements and suggests replacing them with `if` statements that throw `java.lang.AssertionError`.\n\nExample:\n\n\n assert param != null;\n\nAfter the quick-fix is applied:\n\n\n if (param == null) throw new AssertionError();\n\nThis inspection depends on the Java feature 'Assertions' which is available since Java 4." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AssertionCanBeIf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleNegation", + "shortDescription": { + "text": "Double negation" + }, + "fullDescription": { + "text": "Reports double negations that can be simplified. Example: 'if (!!functionCall()) {}' After the quick-fix is applied: 'if (functionCall()) {}' Example: 'if (!(a != b)) {}' After the quick-fix is applied: 'if (a == b) {}'", + "markdown": "Reports double negations that can be simplified.\n\nExample:\n\n\n if (!!functionCall()) {}\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n\nExample:\n\n\n if (!(a != b)) {}\n\nAfter the quick-fix is applied:\n\n\n if (a == b) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DoubleNegation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageWithTooFewClasses", + "shortDescription": { + "text": "Package with too few classes" + }, + "fullDescription": { + "text": "Reports packages that contain fewer classes than the specified minimum. Packages which contain subpackages are not reported. Overly small packages may indicate a fragmented design. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum allowed number of classes in a package.", + "markdown": "Reports packages that contain fewer classes than the specified minimum.\n\nPackages which contain subpackages are not reported. Overly small packages may indicate a fragmented design.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum allowed number of classes in a package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageWithTooFewClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceOnLiteralHasNoEffect", + "shortDescription": { + "text": "Replacement operation has no effect" + }, + "fullDescription": { + "text": "Reports calls to the 'String' methods 'replace()', 'replaceAll()' or 'replaceFirst()' that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error. Example: '// replacement does nothing\n \"hello\".replace(\"$value$\", value);' New in 2022.1", + "markdown": "Reports calls to the `String` methods `replace()`, `replaceAll()` or `replaceFirst()` that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error.\n\n**Example:**\n\n\n // replacement does nothing\n \"hello\".replace(\"$value$\", value);\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceOnLiteralHasNoEffect", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleClassImport", + "shortDescription": { + "text": "Single class import" + }, + "fullDescription": { + "text": "Reports 'import' statements that import single classes (as opposed to entire packages). Some coding standards prohibit such 'import' statements. You can configure IntelliJ IDEA to detect and fix such statements with its Optimize Imports command. Go to Settings | Editor | Code Style | Java | Imports and clear the Use single class import checkbox. Thus this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that import single classes (as opposed to entire packages).\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports** command. Go to\n[Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import)\nand clear the **Use single class import** checkbox. Thus this inspection is mostly useful for\noffline reporting on code bases that you don't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SingleClassImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadOddness", + "shortDescription": { + "text": "Suspicious oddness check" + }, + "fullDescription": { + "text": "Reports odd-even checks of the following form: 'x % 2 == 1'. Such checks fail when used with negative odd values. Consider using 'x % 2 != 0' or '(x & 1) == 1' instead.", + "markdown": "Reports odd-even checks of the following form: `x % 2 == 1`. Such checks fail when used with negative odd values. Consider using `x % 2 != 0` or `(x & 1) == 1` instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BadOddness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggingConditionDisagreesWithLogLevelStatement", + "shortDescription": { + "text": "Log condition does not match logging call" + }, + "fullDescription": { + "text": "Reports is log enabled for conditions of 'if' statements that do not match the log level of the contained logging call. For example: 'if (LOG.isTraceEnabled()) {\n // debug level logged, but checked for trace level\n LOG.debug(\"some log message\");\n }' This inspection understands the java.util.logging, Log4j, Log4j2, Apache Commons Logging and the SLF4J logging frameworks.", + "markdown": "Reports *is log enabled for* conditions of `if` statements that do not match the log level of the contained logging call.\n\n\nFor example:\n\n\n if (LOG.isTraceEnabled()) {\n // debug level logged, but checked for trace level\n LOG.debug(\"some log message\");\n }\n\nThis inspection understands the *java.util.logging* , *Log4j* , *Log4j2* , *Apache Commons Logging*\nand the *SLF4J* logging frameworks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoggingConditionDisagreesWithLogLevelStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Logging", + "index": 52, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemOutErr", + "shortDescription": { + "text": "Use of 'System.out' or 'System.err'" + }, + "fullDescription": { + "text": "Reports usages of 'System.out' or 'System.err'. Such statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust logging facility.", + "markdown": "Reports usages of `System.out` or `System.err`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust\nlogging facility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfSystemOutOrSystemErr", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckedExceptionClass", + "shortDescription": { + "text": "Checked exception class" + }, + "fullDescription": { + "text": "Reports checked exception classes (that is, subclasses of 'java.lang.Exception' that are not subclasses of 'java.lang.RuntimeException'). Some coding standards suppress checked user-defined exception classes. Example: 'class IllegalMoveException extends Exception {}'", + "markdown": "Reports checked exception classes (that is, subclasses of `java.lang.Exception` that are not subclasses of `java.lang.RuntimeException`).\n\nSome coding standards suppress checked user-defined exception classes.\n\n**Example:**\n\n\n class IllegalMoveException extends Exception {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckedExceptionClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableStoresNonSerializable", + "shortDescription": { + "text": "'Serializable' object implicitly stores non-'Serializable' object" + }, + "fullDescription": { + "text": "Reports any references to local non-'Serializable' variables outside 'Serializable' lambdas, local and anonymous classes. When a local variable is referenced from an anonymous class, its value is stored in an implicit field of that class. The same happens for local classes and lambdas. If the variable is of a non-'Serializable' type, serialization will fail. Example: 'interface A extends Serializable {\n abstract void foo();\n }\n class B {}\n class C {\n void foo() {\n B b = new B();\n A a = new A() {\n @Override\n public void foo() {\n System.out.println(b); // warning\n }\n };\n }\n }'", + "markdown": "Reports any references to local non-`Serializable` variables outside `Serializable` lambdas, local and anonymous classes.\n\n\nWhen a local variable is referenced from an anonymous class, its value\nis stored in an implicit field of that class. The same happens\nfor local classes and lambdas. If the variable is of a\nnon-`Serializable` type, serialization will fail.\n\n**Example:**\n\n\n interface A extends Serializable {\n abstract void foo();\n }\n class B {}\n class C {\n void foo() {\n B b = new B();\n A a = new A() {\n @Override\n public void foo() {\n System.out.println(b); // warning\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableStoresNonSerializable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InsertLiteralUnderscores", + "shortDescription": { + "text": "Unreadable numeric literal" + }, + "fullDescription": { + "text": "Reports long numeric literals without underscores and suggests adding them. Underscores make such literals easier to read. Example: '1000000' After the quick-fix is applied: '1_000_000' This inspection only reports if the language level of the project of module is 7 or higher. New in 2020.2", + "markdown": "Reports long numeric literals without underscores and suggests adding them. Underscores make such literals easier to read.\n\nExample:\n\n\n 1000000\n\nAfter the quick-fix is applied:\n\n\n 1_000_000\n\nThis inspection only reports if the language level of the project of module is 7 or higher.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "InsertLiteralUnderscores", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatement", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements that are used in places other than at the end of a 'switch' statement branch. 'break' statements complicate refactoring and can be confusing. Example: 'void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"stop\")) break;\n handleStr(str);\n }\n}'", + "markdown": "Reports `break` statements that are used in places other than at the end of a `switch` statement branch.\n\n`break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"stop\")) break;\n handleStr(str);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCExecuteWithNonConstantString", + "shortDescription": { + "text": "Call to 'Statement.execute()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.sql.Statement.execute()' or any of its variants which take a dynamically-constructed string as the query to execute. Constructed SQL statements are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'ResultSet execute(Statement statement, String name) throws SQLException {\n return statement.executeQuery(\"select * from \" + name); // reports warning\n }' Use the inspection options to consider any 'static' 'final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'private static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";'", + "markdown": "Reports calls to `java.sql.Statement.execute()` or any of its variants which take a dynamically-constructed string as the query to execute.\n\nConstructed SQL statements are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n ResultSet execute(Statement statement, String name) throws SQLException {\n return statement.executeQuery(\"select * from \" + name); // reports warning\n }\n\n\nUse the inspection options to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JDBCExecuteWithNonConstantString", + "cweIds": [ + 89, + 564 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantValueVariableUse", + "shortDescription": { + "text": "Use of variable whose value is known to be constant" + }, + "fullDescription": { + "text": "Reports any usages of variables which are known to be constant. This is the case if the (read) use of the variable is surrounded by an 'if', 'while', or 'for' statement with an '==' condition which compares the variable with a constant. In this case, the use of a variable which is known to be constant can be replaced with an actual constant. Example: 'private static void foo(double number) {\n if (number == 1.0) {\n f(number);\n }\n }\n private static void f(double number) {}' After the quick-fix is applied: 'private static void foo(double number) {\n if (number == 1.0) {\n f(1.0);\n }\n }\n private static void f(double number) {}'", + "markdown": "Reports any usages of variables which are known to be constant.\n\nThis is the case if the (read) use of the variable is surrounded by an\n`if`, `while`, or `for`\nstatement with an `==` condition which compares the variable with a constant.\nIn this case, the use of a variable which is known to be constant can be replaced with\nan actual constant.\n\nExample:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(number);\n }\n }\n private static void f(double number) {}\n\nAfter the quick-fix is applied:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(1.0);\n }\n }\n private static void f(double number) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantValueVariableUse", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewStringBufferWithCharArgument", + "shortDescription": { + "text": "StringBuilder constructor call with 'char' argument" + }, + "fullDescription": { + "text": "Reports calls to 'StringBuffer' and 'StringBuilder' constructors with 'char' as the argument. In this case, 'char' is silently cast to an integer and interpreted as the initial capacity of the buffer. Example: 'new StringBuilder('(').append(\"1\").append(')');' After the quick-fix is applied: 'new StringBuilder(\"(\").append(\"1\").append(')');'", + "markdown": "Reports calls to `StringBuffer` and `StringBuilder` constructors with `char` as the argument. In this case, `char` is silently cast to an integer and interpreted as the initial capacity of the buffer.\n\n**Example:**\n\n\n new StringBuilder('(').append(\"1\").append(')');\n\nAfter the quick-fix is applied:\n\n\n new StringBuilder(\"(\").append(\"1\").append(')');\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NewStringBufferWithCharArgument", + "cweIds": [ + 628, + 704 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ResultOfObjectAllocationIgnored", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way. Such allocation expressions are legal in Java, but are usually either unintended, or evidence of a very odd object initialization strategy. Use the options to list classes whose allocations should be ignored by this inspection.", + "markdown": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way.\n\n\nSuch allocation expressions are legal in Java, but are usually either unintended, or\nevidence of a very odd object initialization strategy.\n\n\nUse the options to list classes whose allocations should be ignored by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ResultOfObjectAllocationIgnored", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassGetClass", + "shortDescription": { + "text": "Suspicious 'Class.getClass()' call" + }, + "fullDescription": { + "text": "Reports 'getClass()' methods that are called on a 'java.lang.Class' instance. This is usually a mistake as the result is always equivalent to 'Class.class'. If it's a mistake, then it's better to remove the 'getClass()' call and use the qualifier directly. If the behavior is intended, then it's better to write 'Class.class' explicitly to avoid confusion. Example: 'void test(Class clazz) {\n String name = clazz.getClass().getName();\n }' After one of the possible quick-fixes is applied: 'void test(Class clazz) {\n String name = clazz.getName();\n }' New in 2018.2", + "markdown": "Reports `getClass()` methods that are called on a `java.lang.Class` instance.\n\nThis is usually a mistake as the result is always equivalent to `Class.class`.\nIf it's a mistake, then it's better to remove the `getClass()` call and use the qualifier directly.\nIf the behavior is intended, then it's better to write `Class.class` explicitly to avoid confusion.\n\nExample:\n\n\n void test(Class clazz) {\n String name = clazz.getClass().getName();\n }\n\nAfter one of the possible quick-fixes is applied:\n\n\n void test(Class clazz) {\n String name = clazz.getName();\n }\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ClassGetClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLibrary", + "shortDescription": { + "text": "Unused library" + }, + "fullDescription": { + "text": "Reports libraries attached to the specified inspection scope that are not used directly in code.", + "markdown": "Reports libraries attached to the specified inspection scope that are not used directly in code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedLibrary", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteCollection", + "shortDescription": { + "text": "Use of obsolete collection type" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Vector', 'java.util.Hashtable' and 'java.util.Stack'. Usages of these classes can often be replaced with usages of 'java.util.ArrayList', 'java.util.HashMap' and 'java.util.ArrayDeque' respectively. While still supported, the former classes were made obsolete by the JDK1.2 collection classes, and should probably not be used in new development. Use the Ignore obsolete collection types where they are required option to ignore any cases where the obsolete collections are used as method arguments or assigned to a variable that requires the obsolete type. Enabling this option may consume significant processor resources.", + "markdown": "Reports usages of `java.util.Vector`, `java.util.Hashtable` and `java.util.Stack`.\n\nUsages of these classes can often be replaced with usages of\n`java.util.ArrayList`, `java.util.HashMap` and `java.util.ArrayDeque` respectively.\nWhile still supported,\nthe former classes were made obsolete by the JDK1.2 collection classes, and should probably\nnot be used in new development.\n\n\nUse the **Ignore obsolete collection types where they are required** option to ignore any cases where the obsolete collections are used\nas method arguments or assigned to a variable that requires the obsolete type.\nEnabling this option may consume significant processor resources." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfObsoleteCollectionType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForEachWithRecordPatternCanBeUsed", + "shortDescription": { + "text": "Enhanced 'for' with a record pattern can be used" + }, + "fullDescription": { + "text": "Reports local variable declarations and accessors to record components that can be replaced with pattern variables in enhanced `for` statements, which are usually more compact. Example: 'record Record(Integer x, String y) {\n}\n\npublic static void test(List records) {\n for (Record record : records) {\n System.out.println(record.y());\n Integer x = record.x;\n System.out.println(x);\n }\n}' Can be replaced with: 'record Record(Integer x, String y) {\n}\n\npublic static void test(List records) {\n for (Record(Integer x, String y) : records) {\n System.out.println(y);\n System.out.println(x);\n }\n}' Use the Nesting depth limit option to specify the maximum number of nested deconstruction patterns to report Use the Maximum number of record components to deconstruct option to specify the maximum number of components, which a record can contain to be used in deconstruction patterns Use the Maximum number of not-used record components option to specify the maximum number of components, which are not used in 'for' statement This inspection depends on the Java feature 'Record patterns in for-each loops' which is available since Java X. New in 2023.1", + "markdown": "Reports local variable declarations and accessors to record components that can be replaced with pattern variables in enhanced \\`for\\` statements, which are usually more compact.\n\n**Example:**\n\n\n record Record(Integer x, String y) {\n }\n\n public static void test(List records) {\n for (Record record : records) {\n System.out.println(record.y());\n Integer x = record.x;\n System.out.println(x);\n }\n }\n\nCan be replaced with:\n\n\n record Record(Integer x, String y) {\n }\n\n public static void test(List records) {\n for (Record(Integer x, String y) : records) {\n System.out.println(y);\n System.out.println(x);\n }\n }\n\n* Use the **Nesting depth limit** option to specify the maximum number of nested deconstruction patterns to report\n* Use the **Maximum number of record components to deconstruct** option to specify the maximum number of components, which a record can contain to be used in deconstruction patterns\n* Use the **Maximum number of not-used record components** option to specify the maximum number of components, which are not used in `for` statement\n\nThis inspection depends on the Java feature 'Record patterns in for-each loops' which is available since Java X.\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForEachWithRecordPatternCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedStringBuilderQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports 'StringBuilder', 'StringBuffer' or 'StringJoiner' objects whose contents are read but not written to, or written to but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete, or erroneous code. Example: 'public void m1() {\n StringBuilder sb = new StringBuilder();\n sb.append(\"a\");\n }'", + "markdown": "Reports `StringBuilder`, `StringBuffer` or `StringJoiner` objects whose contents are read but not written to, or written to but not read.\n\nSuch inconsistent reads and writes are pointless and probably indicate\ndead, incomplete, or erroneous code.\n\n**Example:**\n\n\n public void m1() {\n StringBuilder sb = new StringBuilder();\n sb.append(\"a\");\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedQueryAndUpdateOfStringBuilder", + "cweIds": [ + 561, + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalizeNotProtected", + "shortDescription": { + "text": "'finalize()' should be protected, not public" + }, + "fullDescription": { + "text": "Reports any implementations of the 'Object.finalize()' method that are declared 'public'. According to the contract of the 'Object.finalize()', only the garbage collector calls this method. Making this method public may be confusing, because it means that the method can be used from other code. A quick-fix is provided to make the method 'protected', to prevent it from being invoked from other classes. Example: 'class X {\n public void finalize() {\n /* ... */\n }\n }' After the quick-fix is applied: 'class X {\n protected void finalize() {\n /* ... */\n }\n }'", + "markdown": "Reports any implementations of the `Object.finalize()` method that are declared `public`.\n\n\nAccording to the contract of the `Object.finalize()`, only the garbage\ncollector calls this method. Making this method public may be confusing, because it\nmeans that the method can be used from other code.\n\n\nA quick-fix is provided to make the method `protected`, to prevent it from being invoked\nfrom other classes.\n\n**Example:**\n\n\n class X {\n public void finalize() {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n protected void finalize() {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "FinalizeNotProtected", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 75, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LogStatementGuardedByLogCondition", + "shortDescription": { + "text": "Logging call not guarded by log condition" + }, + "fullDescription": { + "text": "Reports logging calls with non-constant arguments that are not surrounded by a guard condition. The evaluation of the arguments of a logging call can be expensive. Surrounding a logging call with a guard clause prevents that cost when logging is disabled for the level used by the logging statement. This is especially useful for the least serious level (trace, debug, finest) of logging calls, because those are most often disabled in a production environment. Example: 'public class Principal {\n void bad(Object object) {\n if (true) {\n LOG.debug(\"log log log \" + expensiveCalculation(object));\n }\n LOG.debug(\"some more logging \" + expensiveCalculation(1));\n }\n\n void good(Object) {\n if (LOG.isDebug()) {\n LOG.debug(\"value: \" + expensiveCalculation(object));\n }\n }\n }' Configure the inspection: Use the Logger class name field to specify the logger class name used. Use the table to specify the logging methods this inspection should warn on, with the corresponding log condition text. Use the Flag all unguarded logging calls option to have the inspection flag all unguarded log calls, not only those with non-constant arguments.", + "markdown": "Reports logging calls with non-constant arguments that are not surrounded by a guard condition. The evaluation of the arguments of a logging call can be expensive. Surrounding a logging call with a guard clause prevents that cost when logging is disabled for the level used by the logging statement. This is especially useful for the least serious level (trace, debug, finest) of logging calls, because those are most often disabled in a production environment.\n\n**Example:**\n\n\n public class Principal {\n void bad(Object object) {\n if (true) {\n LOG.debug(\"log log log \" + expensiveCalculation(object));\n }\n LOG.debug(\"some more logging \" + expensiveCalculation(1));\n }\n\n void good(Object) {\n if (LOG.isDebug()) {\n LOG.debug(\"value: \" + expensiveCalculation(object));\n }\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** field to specify the logger class name used.\n*\n Use the table to specify the logging methods this inspection should warn on, with the corresponding log condition text.\n\n* Use the **Flag all unguarded logging calls** option to have the inspection flag all unguarded log calls, not only those with non-constant arguments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LogStatementGuardedByLogCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ModuleWithTooManyClasses", + "shortDescription": { + "text": "Module with too many classes" + }, + "fullDescription": { + "text": "Reports modules that contain too many classes. Overly large modules may indicate a lack of design clarity. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Maximum number of classes field to specify the maximum number of classes a module may have.", + "markdown": "Reports modules that contain too many classes. Overly large modules may indicate a lack of design clarity. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum number of classes a module may have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ModuleWithTooManyClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 77, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteLoopStatement", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports 'for', 'while', or 'do' statements that can only exit by throwing an exception. While such statements may be correct, they often happen due to coding errors. Example: 'for (;;) {\n }' Use the Ignore when placed in Thread.run option to ignore the infinite loop statements inside 'Thread.run'. It may be useful for the daemon threads. Example: 'new Thread(() -> {\n while (true) {\n }\n }).start();'", + "markdown": "Reports `for`, `while`, or `do` statements that can only exit by throwing an exception. While such statements may be correct, they often happen due to coding errors.\n\nExample:\n\n\n for (;;) {\n }\n\n\nUse the **Ignore when placed in Thread.run** option to ignore the\ninfinite loop statements inside `Thread.run`.\nIt may be useful for the daemon threads.\n\nExample:\n\n\n new Thread(() -> {\n while (true) {\n }\n }).start();\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteLoopStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocHtmlLint", + "shortDescription": { + "text": "HTML problems in Javadoc (DocLint)" + }, + "fullDescription": { + "text": "Reports the same HTML issues in the Javadoc comments that have been reported by DocLint since Java 8. The inspection detects the following issues: Self-closed, unclosed, unknown, misplaced, or empty tag Unknown or wrong attribute Misplaced text Example: '/**\n * Unknown tag: List\n * Unclosed tag: error\n * Misplaced text or tag:
    • one
    • ,
    • two
    \n * Wrong or empty attribute: \n * Self-closed tag:
    \n * ...\n */\nvoid sample(){ }'", + "markdown": "Reports the same HTML issues in the Javadoc comments that have been reported by DocLint since Java 8.\n\nThe inspection detects the following issues:\n\n* Self-closed, unclosed, unknown, misplaced, or empty tag\n* Unknown or wrong attribute\n* Misplaced text\n\nExample:\n\n\n /**\n * Unknown tag: List\n * Unclosed tag: error
    \n * Misplaced text or tag:
    • one
    • ,
    • two
    \n * Wrong or empty attribute: \n * Self-closed tag:
    \n * ...\n */\n void sample(){ }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JavadocHtmlLint", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassUnconnectedToPackage", + "shortDescription": { + "text": "Class independent of its package" + }, + "fullDescription": { + "text": "Reports classes that don't depend on any other class in their package and are not a dependency for any other class in their package. Such classes indicate ad-hoc or incoherent packaging strategies and often may be profitably moved. Classes that are the only class in their package are not reported. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that don't depend on any other class in their package and are not a dependency for any other class in their package. Such classes indicate ad-hoc or incoherent packaging strategies and often may be profitably moved. Classes that are the only class in their package are not reported.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassUnconnectedToPackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionNameDoesntEndWithException", + "shortDescription": { + "text": "Exception class name does not end with 'Exception'" + }, + "fullDescription": { + "text": "Reports exception classes whose names don't end with 'Exception'. Example: 'class NotStartedEx extends Exception {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports exception classes whose names don't end with `Exception`.\n\n**Example:** `class NotStartedEx extends Exception {}`\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExceptionClassNameDoesntEndWithException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 82, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalStaticVariableUsedInClassInitialization", + "shortDescription": { + "text": "Non-final static field is used during class initialization" + }, + "fullDescription": { + "text": "Reports the use of non-'final' 'static' variables during class initialization. In such cases, the code semantics may become dependent on the class creation order. Additionally, such cases may lead to the use of variables before their initialization, and generally cause difficult and confusing bugs. Example: 'class Foo {\n public static int bar = 0;\n\n static {\n System.out.println(bar);\n }\n }'", + "markdown": "Reports the use of non-`final` `static` variables during class initialization.\n\nIn such cases, the code semantics may become dependent on the class creation order. Additionally, such cases may lead to the use of\nvariables before their initialization, and generally cause difficult and confusing bugs.\n\n**Example:**\n\n\n class Foo {\n public static int bar = 0;\n\n static {\n System.out.println(bar);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalStaticVariableUsedInClassInitialization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadStopSuspendResume", + "shortDescription": { + "text": "Call to 'Thread.stop()', 'suspend()' or 'resume()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.stop()', 'Thread.suspend()', and 'Thread.resume()'. These calls are inherently prone to data corruption and deadlocks, and their use is strongly discouraged. It is better to use cooperative cancellation instead of 'stop', and interruption instead of direct calls to 'suspend' and 'resume'.", + "markdown": "Reports calls to `Thread.stop()`, `Thread.suspend()`, and `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlocks, and their use is strongly discouraged.\nIt is better to use cooperative cancellation instead of `stop`, and\ninterruption instead of direct calls to `suspend` and `resume`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadStopSuspendOrResumeManager", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryTemporaryOnConversionFromString", + "shortDescription": { + "text": "Unnecessary temporary object in conversion from 'String'" + }, + "fullDescription": { + "text": "Reports unnecessary creation of temporary objects when converting from 'String' to primitive types. Example: 'new Integer(\"3\").intValue()' After the quick-fix is applied: 'Integer.valueOf(\"3\")'", + "markdown": "Reports unnecessary creation of temporary objects when converting from `String` to primitive types.\n\n**Example:**\n\n\n new Integer(\"3\").intValue()\n\nAfter the quick-fix is applied:\n\n\n Integer.valueOf(\"3\")\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryTemporaryOnConversionFromString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfConcreteClass", + "shortDescription": { + "text": "Use of concrete class" + }, + "fullDescription": { + "text": "Reports usages of concrete classes, rather than interfaces. Such declarations may represent a failure of abstraction and may make testing more difficult. Declarations whose classes come from system or third-party libraries will not be reported by this inspection. Casts, instanceofs, and local variables are not reported in 'equals()' method implementations. Also, casts are not reported in 'clone()' method implementations. Example: 'interface Entity {}\n class EntityImpl implements Entity {}\n\n void processObject(Object obj) {\n // warning: instanceof of the concrete class\n if (obj instanceof EntityImpl) {\n // warning: cast to the concrete class,\n // rather than the interface\n processEntity((EntityImpl)obj);\n }\n }\n // warning: parameter of concrete class\n void processEntity(EntityImpl obj) {\n }' Use the Ignore abstract class type option to ignore casts to abstract classes. Use the subsequent options to control contexts where the problem is reported.", + "markdown": "Reports usages of concrete classes, rather than interfaces. Such declarations may represent a failure of abstraction and may make testing more difficult.\n\n\nDeclarations whose classes come from system or third-party libraries will not be reported by this inspection.\nCasts, instanceofs, and local variables are not reported in `equals()` method implementations.\nAlso, casts are not reported in `clone()` method implementations.\n\nExample:\n\n\n interface Entity {}\n class EntityImpl implements Entity {}\n\n void processObject(Object obj) {\n // warning: instanceof of the concrete class\n if (obj instanceof EntityImpl) {\n // warning: cast to the concrete class,\n // rather than the interface\n processEntity((EntityImpl)obj);\n }\n }\n // warning: parameter of concrete class\n void processEntity(EntityImpl obj) {\n }\n\n\nUse the **Ignore abstract class type** option to ignore casts to abstract classes.\n\nUse the subsequent options to control contexts where the problem is reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfConcreteClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLabeledSwitchRuleCodeBlock", + "shortDescription": { + "text": "Labeled switch rule has redundant code block" + }, + "fullDescription": { + "text": "Reports labeled rules of 'switch' statements or 'switch' expressions that have a redundant code block. Example: 'String s = switch (n) {\n case 1 -> { yield Integer.toString(n); }\n default -> \"default\";\n };' After the quick-fix is applied: 'String s = switch (n) {\n case 1 -> Integer.toString(n);\n default -> \"default\";\n };' This inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14. New in 2019.1", + "markdown": "Reports labeled rules of `switch` statements or `switch` expressions that have a redundant code block.\n\nExample:\n\n\n String s = switch (n) {\n case 1 -> { yield Integer.toString(n); }\n default -> \"default\";\n };\n\nAfter the quick-fix is applied:\n\n\n String s = switch (n) {\n case 1 -> Integer.toString(n);\n default -> \"default\";\n };\n\nThis inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantLabeledSwitchRuleCodeBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IOStreamConstructor", + "shortDescription": { + "text": "'InputStream' and 'OutputStream' can be constructed using 'Files' methods" + }, + "fullDescription": { + "text": "Reports 'new FileInputStream()' or 'new FileOutputStream()' expressions that can be replaced with 'Files.newInputStream()' or 'Files.newOutputStream()' calls respectively. The streams created using 'Files' methods are usually more efficient than those created by stream constructors. Example: 'InputStream is = new BufferedInputStream(new FileInputStream(file));' After the quick-fix is applied: 'InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()));' This inspection does not show warning if the language level 10 or higher, but the quick-fix is still available. This inspection only reports if the language level of the project or module is 7 or higher. New in 2022.1", + "markdown": "Reports `new FileInputStream()` or `new FileOutputStream()` expressions that can be replaced with `Files.newInputStream()` or `Files.newOutputStream()` calls respectively. \nThe streams created using `Files` methods are usually more efficient than those created by stream constructors.\n\nExample:\n\n\n InputStream is = new BufferedInputStream(new FileInputStream(file));\n\nAfter the quick-fix is applied:\n\n\n InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()));\n\nThis inspection does not show warning if the language level 10 or higher, but the quick-fix is still available.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IOStreamConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToForLoopParameter", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of a 'for' loop parameter inside the body of the loop. Although occasionally intended, this construct may be confusing and is often the result of a typo or a wrong variable being used. The quick-fix adds a declaration of a new variable. Example: 'for (String s : list) {\n // Warning: s is changed inside the loop\n s = s.trim();\n System.out.println(\"String: \" + s);\n }' After the quick-fix is applied: 'for (String s : list) {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n }' Assignments in basic 'for' loops without an update statement are not reported. In such cases the assignment is probably intended and can't be easily moved to the update part of the 'for' loop. Example: 'for (int i = 0; i < list.size(); ) {\n if (element.equals(list.get(i))) {\n list.remove(i);\n } else {\n // modification of for loop parameter is not reported\n // as there's no update statement\n i++;\n }\n }' Use the Check enhanced 'for' loop parameters option to specify whether modifications of enhanced 'for' loop parameters should be also reported.", + "markdown": "Reports assignment to, or modification of a `for` loop parameter inside the body of the loop.\n\nAlthough occasionally intended, this construct may be confusing and is often the result of a typo or a wrong variable being used.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n for (String s : list) {\n // Warning: s is changed inside the loop\n s = s.trim();\n System.out.println(\"String: \" + s);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String s : list) {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n }\n\nAssignments in basic `for` loops without an update statement are not reported.\nIn such cases the assignment is probably intended and can't be easily moved to the update part of the `for` loop.\n\n**Example:**\n\n\n for (int i = 0; i < list.size(); ) {\n if (element.equals(list.get(i))) {\n list.remove(i);\n } else {\n // modification of for loop parameter is not reported\n // as there's no update statement\n i++;\n }\n }\n\nUse the **Check enhanced 'for' loop parameters** option to specify whether modifications of enhanced `for` loop parameters\nshould be also reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToForLoopParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9CollectionFactory", + "shortDescription": { + "text": "Immutable collection creation can be replaced with collection factory call" + }, + "fullDescription": { + "text": "Reports 'java.util.Collections' unmodifiable collection calls that can be converted to newer collection factory methods. These can be replaced with e.g. 'List.of()' or 'Set.of()' introduced in Java 9 or 'List.copyOf()' introduced in Java 10. Note that in contrast to 'java.util.Collections' methods, Java 9 collection factory methods: Do not accept 'null' values. Require unique set elements and map keys. Do not accept 'null' arguments to query methods like 'List.contains()' or 'Map.get()' of the collections returned. When these cases are violated, exceptions are thrown. This can change the semantics of the code after the migration. Example: 'List even = Collections.unmodifiableList(\n Arrays.asList(2, 4, 6, 8, 10, 2));\n List evenCopy = Collections.unmodifiableList(\n new ArrayList<>(list1));' After the quick-fix is applied: 'List even = List.of(2, 4, 6, 8, 10, 2);\n List evenCopy = List.copyOf(list);' Use the Do not warn when content is non-constant option to report only in cases when the supplied arguments are compile-time constants. This reduces the chances that the behavior changes, because it's not always possible to statically check whether original elements are unique and not 'null'. Use the Suggest 'Map.ofEntries' option to suggest replacing unmodifiable maps with more than 10 entries with 'Map.ofEntries()'. This inspection depends on the Java feature 'Collection factory methods' which is available since Java 9. New in 2017.2", + "markdown": "Reports `java.util.Collections` unmodifiable collection calls that can be converted to newer collection factory methods. These can be replaced with e.g. `List.of()` or `Set.of()` introduced in Java 9 or `List.copyOf()` introduced in Java 10.\n\nNote that in contrast to `java.util.Collections` methods, Java 9 collection factory methods:\n\n* Do not accept `null` values.\n* Require unique set elements and map keys.\n* Do not accept `null` arguments to query methods like `List.contains()` or `Map.get()` of the collections returned.\n\nWhen these cases are violated, exceptions are thrown.\nThis can change the semantics of the code after the migration.\n\nExample:\n\n\n List even = Collections.unmodifiableList(\n Arrays.asList(2, 4, 6, 8, 10, 2));\n List evenCopy = Collections.unmodifiableList(\n new ArrayList<>(list1));\n\nAfter the quick-fix is applied:\n\n\n List even = List.of(2, 4, 6, 8, 10, 2);\n List evenCopy = List.copyOf(list);\n\n\nUse the **Do not warn when content is non-constant** option to report only in cases when the supplied arguments are compile-time constants.\nThis reduces the chances that the behavior changes,\nbecause it's not always possible to statically check whether original elements are unique and not `null`.\n\n\nUse the **Suggest 'Map.ofEntries'** option to suggest replacing unmodifiable maps with more than 10 entries with `Map.ofEntries()`.\n\nThis inspection depends on the Java feature 'Collection factory methods' which is available since Java 9.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "Java9CollectionFactory", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 88, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MetaAnnotationWithoutRuntimeRetention", + "shortDescription": { + "text": "Test annotation without '@Retention(RUNTIME)' annotation" + }, + "fullDescription": { + "text": "Reports annotations with a 'SOURCE' or 'CLASS' retention policy that are supposed to be used by JUnit 5. Such annotations are not available at runtime and most probably their retention policy should be fixed to be accessible through reflection. Note that if the retention policy is not specified, then the default retention policy 'CLASS' is used. Example: '@Testable\n public @interface UnitTest {}' After the quick-fix is applied: '@Retention(RetentionPolicy.RUNTIME)\n @Testable\n public @interface UnitTest {}'", + "markdown": "Reports annotations with a `SOURCE` or `CLASS` retention policy that are supposed to be used by JUnit 5. Such annotations are not available at runtime and most probably their retention policy should be fixed to be accessible through reflection.\n\nNote that if the retention policy is not specified, then the default retention policy `CLASS` is used.\n\n**Example:**\n\n\n @Testable\n public @interface UnitTest {}\n\nAfter the quick-fix is applied:\n\n\n @Retention(RetentionPolicy.RUNTIME)\n @Testable\n public @interface UnitTest {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MetaAnnotationWithoutRuntimeRetention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 91, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryContinue", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements if they are the last reachable statements in the loop. These 'continue' statements are unnecessary and can be safely removed. Example: 'for (String element: elements) {\n System.out.println();\n continue;\n }' After the quick-fix is applied: 'for (String element: elements) {\n System.out.println();\n }' The inspection doesn't analyze JSP files. Use the Ignore in then branch of 'if' statement with 'else' branch option to ignore 'continue' statements when they are placed in a 'then' branch of a complete 'if'-'else' statement. Example: 'for (String element: elements) {\n if(element.isEmpty()) {\n continue;\n } else {\n //...\n }\n }'", + "markdown": "Reports `continue` statements if they are the last reachable statements in the loop. These `continue` statements are unnecessary and can be safely removed.\n\nExample:\n\n\n for (String element: elements) {\n System.out.println();\n continue;\n }\n\nAfter the quick-fix is applied:\n\n\n for (String element: elements) {\n System.out.println();\n }\n\nThe inspection doesn't analyze JSP files.\n\n\nUse the **Ignore in then branch of 'if' statement with 'else' branch** option to ignore\n`continue` statements when they are placed in a `then` branch of a complete\n`if`-`else` statement.\n\nExample:\n\n\n for (String element: elements) {\n if(element.isEmpty()) {\n continue;\n } else {\n //...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryContinue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CStyleArrayDeclaration", + "shortDescription": { + "text": "C-style array declaration" + }, + "fullDescription": { + "text": "Reports array declarations written in C-style syntax, where the array brackets are placed after a variable name or after a method parameter list. Most code styles prefer Java-style array declarations, where the array brackets are placed after the type name. Example: 'public String process(String value[])[] {\n return value;\n }' After the quick-fix is applied: 'public String[] process(String[] value) {\n return value;\n }' Configure the inspection: Use the Ignore C-style declarations in variables option to report C-style array declaration of method return types only.", + "markdown": "Reports array declarations written in C-style syntax, where the array brackets are placed after a variable name or after a method parameter list. Most code styles prefer Java-style array declarations, where the array brackets are placed after the type name.\n\n**Example:**\n\n\n public String process(String value[])[] {\n return value;\n }\n\nAfter the quick-fix is applied:\n\n\n public String[] process(String[] value) {\n return value;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore C-style declarations in variables** option to report C-style array declaration of method return types only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CStyleArrayDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemExit", + "shortDescription": { + "text": "Call to 'System.exit()' or related methods" + }, + "fullDescription": { + "text": "Reports calls to 'System.exit()', 'Runtime.exit()', and 'Runtime.halt()'. Invoking 'System.exit()' or 'Runtime.exit()' calls the shutdown hooks and terminates the currently running Java virtual machine. Invoking 'Runtime.halt()' forcibly terminates the JVM without causing shutdown hooks to be started. Each of these methods should be used with extreme caution. Calls to these methods make the calling code unportable to most application servers. Use the option to ignore calls in main methods.", + "markdown": "Reports calls to `System.exit()`, `Runtime.exit()`, and `Runtime.halt()`.\n\n\nInvoking `System.exit()` or `Runtime.exit()`\ncalls the shutdown hooks and terminates the currently running Java\nvirtual machine. Invoking `Runtime.halt()` forcibly\nterminates the JVM without causing shutdown hooks to be started.\nEach of these methods should be used with extreme caution. Calls\nto these methods make the calling code unportable to most\napplication servers.\n\n\nUse the option to ignore calls in main methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSystemExit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeclareCollectionAsInterface", + "shortDescription": { + "text": "Collection declared by class, not interface" + }, + "fullDescription": { + "text": "Reports declarations of 'Collection' variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error. Example: '// Warning: concrete collection class ArrayList used.\n int getTotalLength(ArrayList list) {\n return list.stream().mapToInt(String::length).sum();\n }\n\n // No warning, as trimToSize() method is not\n // available in the List interface\n void addData(ArrayList data) {\n data.add(\"Hello\");\n data.add(\"World\");\n data.trimToSize();\n }' A quick-fix is suggested to use the appropriate collection interface (e.g. 'Collection', 'Set', or 'List').", + "markdown": "Reports declarations of `Collection` variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error.\n\nExample:\n\n\n // Warning: concrete collection class ArrayList used.\n int getTotalLength(ArrayList list) {\n return list.stream().mapToInt(String::length).sum();\n }\n\n // No warning, as trimToSize() method is not\n // available in the List interface\n void addData(ArrayList data) {\n data.add(\"Hello\");\n data.add(\"World\");\n data.trimToSize();\n }\n\nA quick-fix is suggested to use the appropriate collection interface (e.g. `Collection`, `Set`, or `List`)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CollectionDeclaredAsConcreteClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialStringConcatenation", + "shortDescription": { + "text": "Concatenation with empty string" + }, + "fullDescription": { + "text": "Reports empty string operands in string concatenations. Concatenation with the empty string can be used to convert non-'String' objects or primitives into 'String's, but it can be clearer to use a 'String.valueOf()' method call. A quick-fix is suggested to simplify the concatenation. Example: 'void foo(int x, int y) {\n String s = \"\" + x + \" ; \" + y;\n }' After the quick-fix is applied: 'void foo(int x, int y) {\n String s = x + \" ; \" + y;\n }' Use the Report only where empty strings can be removed without other changes option to ignore cases cases where removing the empty string will require adding a 'String.valueOf()' conversion of another operand.", + "markdown": "Reports empty string operands in string concatenations. Concatenation with the empty string can be used to convert non-`String` objects or primitives into `String`s, but it can be clearer to use a `String.valueOf()` method call.\n\n\nA quick-fix is suggested to simplify the concatenation.\n\n**Example:**\n\n\n void foo(int x, int y) {\n String s = \"\" + x + \" ; \" + y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(int x, int y) {\n String s = x + \" ; \" + y;\n }\n\n\nUse the **Report only where empty strings can be removed without other changes**\noption to ignore cases cases where removing the empty string\nwill require adding a `String.valueOf()` conversion of another operand." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConcatenationWithEmptyString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousInvocationHandlerImplementation", + "shortDescription": { + "text": "Suspicious 'InvocationHandler' implementation" + }, + "fullDescription": { + "text": "Reports implementations of 'InvocationHandler' that do not proxy standard 'Object' methods like 'hashCode()', 'equals()', and 'toString()'. Failing to handle these methods might cause unexpected problems upon calling them on a proxy instance. Example: 'InvocationHandler myHandler = (proxy, method, params) -> {\n System.out.println(\"Hello World!\");\n return null;\n };\n Runnable myProxy = (Runnable) Proxy.newProxyInstance(\n Thread.currentThread().getContextClassLoader(),\n new Class[] {Runnable.class}, myHandler\n );' This code snippet is designed to only proxy the 'Runnable.run()' method. However, calls to any 'Object' methods, like 'hashCode()', are proxied as well. This can lead to problems like a 'NullPointerException', for example, when adding 'myProxy' to a 'HashSet'. New in 2020.2", + "markdown": "Reports implementations of `InvocationHandler` that do not proxy standard `Object` methods like `hashCode()`, `equals()`, and `toString()`.\n\nFailing to handle these methods might cause unexpected problems upon calling them on a proxy instance.\n\n**Example:**\n\n\n InvocationHandler myHandler = (proxy, method, params) -> {\n System.out.println(\"Hello World!\");\n return null;\n };\n Runnable myProxy = (Runnable) Proxy.newProxyInstance(\n Thread.currentThread().getContextClassLoader(),\n new Class[] {Runnable.class}, myHandler\n );\n\n\nThis code snippet is designed to only proxy the `Runnable.run()` method.\nHowever, calls to any `Object` methods, like `hashCode()`, are proxied as well.\nThis can lead to problems like a `NullPointerException`, for example, when adding `myProxy` to a `HashSet`.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousInvocationHandlerImplementation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnreachableCode", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports the code which is never reached according to data flow analysis. It can be the result of previous always-true or always-false condition, unreachable loop body or catch section. Usually (though not always) unreachable code is a consequence of a previous warning, so check inspection warnings form \"Nullability and data flow problems\", \"Constant values\", or \"Redundant operation on empty container\" to better understand the cause. Example: 'void finishApplication() {\n System.exit(0);\n System.out.println(\"Application is terminated\"); // Unreachable code\n }' Note that this inspection relies on method contract inference. In particular, if you call a static or final method that always throws an exception, then the \"always failing\" contract will be inferred, and code after the method call will be considered unreachable. For example: 'void run() {\n performAction();\n System.out.println(\"Action is performed\"); // Unreachable code\n }\n \n static void performAction() {\n throw new AssertionError();\n }' This may cause false-positives if any kind of code postprocessing is used, for example, if an annotation processor later replaces the method body with something useful. To avoid false-positive warnings, one may suppress the automatic contract inference with explicit '@org.jetbrains.annotations.Contract' annotation from 'org.jetbrains:annotations' package: 'void run() {\n performAction();\n System.out.println(\"Action is performed\"); // No warning anymore\n }\n\n @Contract(\"-> _\") // implementation will be replaced\n static void performAction() {\n throw new AssertionError();\n }' New in 2024.1", + "markdown": "Reports the code which is never reached according to data flow analysis. It can be the result of previous always-true or always-false condition, unreachable loop body or catch section. Usually (though not always) unreachable code is a consequence of a previous warning, so check inspection warnings form \"Nullability and data flow problems\", \"Constant values\", or \"Redundant operation on empty container\" to better understand the cause.\n\nExample:\n\n\n void finishApplication() {\n System.exit(0);\n System.out.println(\"Application is terminated\"); // Unreachable code\n }\n\n\nNote that this inspection relies on method contract inference. In particular, if you call a static or final method\nthat always throws an exception, then the \"always failing\" contract will be inferred, and code after the method call\nwill be considered unreachable. For example:\n\n\n void run() {\n performAction();\n System.out.println(\"Action is performed\"); // Unreachable code\n }\n \n static void performAction() {\n throw new AssertionError();\n }\n\n\nThis may cause false-positives if any kind of code postprocessing is used, for example, if an annotation processor\nlater replaces the method body with something useful. To avoid false-positive warnings, one may suppress the automatic\ncontract inference with explicit `@org.jetbrains.annotations.Contract` annotation from\n`org.jetbrains:annotations` package:\n\n\n void run() {\n performAction();\n System.out.println(\"Action is performed\"); // No warning anymore\n }\n\n @Contract(\"-> _\") // implementation will be replaced\n static void performAction() {\n throw new AssertionError();\n }\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnreachableCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlTagCanBeJavadocTag", + "shortDescription": { + "text": "'...' can be replaced with '{@code ...}'" + }, + "fullDescription": { + "text": "Reports usages of '' tags in Javadoc comments. Since Java 5, these tags can be replaced with '{@code ...}' constructs. This allows using angle brackets '<' and '>' inside the comment instead of HTML character entities. Example: '/**\n * @return empty ArrayList<Integer>\n */\n List getList(){ ... }' After the quick-fix is applied: '/**\n * @return empty {@code ArrayList}\n */\n List getList(){ ... }'", + "markdown": "Reports usages of `` tags in Javadoc comments. Since Java 5, these tags can be replaced with `{@code ...}` constructs. This allows using angle brackets `<` and `>` inside the comment instead of HTML character entities.\n\n**Example:**\n\n\n /**\n * @return empty ArrayList<Integer>\n */\n List getList(){ ... }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @return empty {@code ArrayList}\n */\n List getList(){ ... }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlTagCanBeJavadocTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassEscapesItsScope", + "shortDescription": { + "text": "Class is exposed outside of its visibility scope" + }, + "fullDescription": { + "text": "Reports usages of classes in a field or method signature where the class has less visibility than the member that uses it. While legal Java, such members cannot be used outside of the visibility scope of the class type they reference. Example: 'public class Parent {\n public Child getChild() {\n return new Child();\n }\n\n private class Child {}\n }' Additionally, in Java 9 and higher, a module may hide some of its classes from other modules by not exporting their packages. However, if a member that is part of the exported API references a non-exported class in its signature, such a member cannot be used outside of the module. Configure the inspection: Use the Report non-exported classes exposed in module API (Java 9+) option to report module API members that expose non-exported classes. Note that the language level of the project or module needs to be 9 or higher for this option. Use the Report non-accessible classes exposed in public API option to report on public members that expose classes with a smaller visibility scope. Use the Report private classes exposed in package-local API option to report on package-local members that expose 'private' classes.", + "markdown": "Reports usages of classes in a field or method signature where the class has less visibility than the member that uses it. While legal Java, such members cannot be used outside of the visibility scope of the class type they reference.\n\n**Example:**\n\n\n public class Parent {\n public Child getChild() {\n return new Child();\n }\n\n private class Child {}\n }\n\n\nAdditionally, in Java 9 and higher, a module may hide some of its classes from other modules by not exporting their packages.\nHowever, if a member that is part of the exported API references a non-exported class in its signature,\nsuch a member cannot be used outside of the module.\n\nConfigure the inspection:\n\n* Use the **Report non-exported classes exposed in module API (Java 9+)** option to report module API members that expose non-exported classes. \n Note that the language level of the project or module needs to be 9 or higher for this option.\n* Use the **Report non-accessible classes exposed in public API** option to report on public members that expose classes with a smaller visibility scope.\n* Use the **Report private classes exposed in package-local API** option to report on package-local members that expose `private` classes." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ClassEscapesDefinedScope", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'equals()'" + }, + "fullDescription": { + "text": "Reports implementations of 'equals()' that access non-'final' variables. Such access may result in 'equals()' returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes. Example: 'public class Person {\n private String lastName;\n\n @Override\n public boolean equals(Object obj) {\n ...\n Person other = (Person) obj;\n if (lastName == null) {\n if (!lastName.equals(other.lastName)) {\n return false;\n ...\n }\n }\n }'", + "markdown": "Reports implementations of `equals()` that access non-`final` variables. Such access may result in `equals()` returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes.\n\n**Example:**\n\n\n public class Person {\n private String lastName;\n\n @Override\n public boolean equals(Object obj) {\n ...\n Person other = (Person) obj;\n if (lastName == null) {\n if (!lastName.equals(other.lastName)) {\n return false;\n ...\n }\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalFieldReferenceInEquals", + "cweIds": [ + 697 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedAssignment", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports assignment expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing. Example: 'String userName;\n // Warning: result of assignment to 'userName' is used\n String message = \"Hello \" + (userName = \"Alice\") + \"!\"\n System.out.println(message);\n System.out.println(\"Goodbye \" + userName);'", + "markdown": "Reports assignment expressions that are nested inside other expressions.\n\nSuch expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\n**Example:**\n\n\n String userName;\n // Warning: result of assignment to 'userName' is used\n String message = \"Hello \" + (userName = \"Alice\") + \"!\"\n System.out.println(message);\n System.out.println(\"Goodbye \" + userName);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoUnboxing", + "shortDescription": { + "text": "Auto-unboxing" + }, + "fullDescription": { + "text": "Reports expressions that are affected by unboxing conversion (automatic unwrapping of objects into primitive values). Try not to use objects instead of primitives. It might significantly affect the performance. Example: 'int x = new Integer(42);' The quick-fix makes the conversion explicit: 'int x = new Integer(42).intValue();' AutoUnboxing appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports expressions that are affected by unboxing conversion (automatic unwrapping of objects into primitive values). Try not to use objects instead of primitives. It might significantly affect the performance.\n\n**Example:**\n\n int x = new Integer(42);\n\nThe quick-fix makes the conversion explicit:\n\n int x = new Integer(42).intValue();\n\n\n*AutoUnboxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AutoUnboxing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldInImmutable", + "shortDescription": { + "text": "Non-final field in '@Immutable' class" + }, + "fullDescription": { + "text": "Reports any non-final field in a class with the '@Immutable' annotation. This violates the contract of the '@Immutable' annotation. Example: 'import javax.annotation.concurrent.Immutable;\n @Immutable\n class Foo {\n String bar = \"foo\";\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports any non-final field in a class with the `@Immutable` annotation. This violates the contract of the `@Immutable` annotation.\n\nExample:\n\n\n import javax.annotation.concurrent.Immutable;\n @Immutable\n class Foo {\n String bar = \"foo\";\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalFieldInImmutable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInMessageFormatCall", + "shortDescription": { + "text": "String concatenation as argument to 'MessageFormat.format()' call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations used as an argument to a call to 'MessageFormat.format()'. While occasionally intended, this is usually a misuse of the formatting method and may even cause unexpected exceptions if the variables used in the concatenated string contain special characters like '{'. Also, sometimes this could be the result of mistakenly concatenating a string format argument by typing a '+' when a ',' was meant. Example: 'String formatGreeting(String userName, int balance) {\n return MessageFormat.format(\"Hello, \" + userName + \"! Your balance is {0}.\", balance);\n }' Here, the 'userName' will be interpreted as a part of the format string, which may result in 'IllegalArgumentException' (for example, if 'userName' is '\"{\"'). This call should be probably replaced with 'MessageFormat.format(\"Hello, {0}! Your balance is {1}.\", userName, balance)'.", + "markdown": "Reports non-constant string concatenations used as an argument to a call to `MessageFormat.format()`.\n\n\nWhile occasionally intended, this is usually a misuse of the formatting method\nand may even cause unexpected exceptions if the variables used in the concatenated string contain\nspecial characters like `{`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n String formatGreeting(String userName, int balance) {\n return MessageFormat.format(\"Hello, \" + userName + \"! Your balance is {0}.\", balance);\n }\n\n\nHere, the `userName` will be interpreted as a part of the format string, which may result\nin `IllegalArgumentException` (for example, if `userName` is `\"{\"`).\nThis call should be probably replaced with `MessageFormat.format(\"Hello, {0}! Your balance is {1}.\", userName, balance)`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenationInMessageFormatCall", + "cweIds": [ + 116, + 134 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToStringConcatCanBeReplacedByOperator", + "shortDescription": { + "text": "Call to 'String.concat()' can be replaced with '+'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.String.concat()'. Such calls can be replaced with the '+' operator for clarity and possible increased performance if the method was invoked on a constant with a constant argument. Example: 'String foo(String name) {\n return name.concat(\"foo\");\n }' After the quick-fix is applied: 'String foo(String name) {\n return name + \"foo\";\n }'", + "markdown": "Reports calls to `java.lang.String.concat()`.\n\n\nSuch calls can be replaced with the `+` operator for clarity and possible increased\nperformance if the method was invoked on a constant with a constant argument.\n\n**Example:**\n\n\n String foo(String name) {\n return name.concat(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n String foo(String name) {\n return name + \"foo\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToStringConcatCanBeReplacedByOperator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardcodedFileSeparators", + "shortDescription": { + "text": "Hardcoded file separator" + }, + "fullDescription": { + "text": "Reports the forward ('/') or backward ('\\') slash in a string or character literal. These characters are commonly used as file separators, and portability may suffer if they are hardcoded. The inspection will not report backward slashes inside escape sequences and forward slashes immediately following the '<' character or immediately preceding the '>' character, as those often indicate XML or HTML tags rather than file names. Strings representing a 'java.util.TimeZone' ID, strings that are valid regular expressions, or strings that equal IANA-registered MIME media types will not be reported either. Example: 'new File(\"C:\\\\Users\\\\Name\");' Use the option to include 'example/*' in the set of recognized media types. Normally, usage of the 'example/*' MIME media type outside of an example (e.g. in a 'Content-Type' header) is an error.", + "markdown": "Reports the forward (`/`) or backward (`\\`) slash in a string or character literal. These characters are commonly used as file separators, and portability may suffer if they are hardcoded.\n\n\nThe inspection will not report backward slashes inside escape sequences and forward slashes immediately following the '\\<' character\nor immediately preceding the '\\>' character, as those often indicate XML or HTML tags rather than file names.\nStrings representing a `java.util.TimeZone` ID, strings that are valid regular expressions,\nor strings that equal IANA-registered MIME media types will not be reported either.\n\n**Example:**\n\n\n new File(\"C:\\\\Users\\\\Name\");\n\n\nUse the option to include `example/*` in the set of recognized media types.\nNormally, usage of the `example/*` MIME media type outside of an example (e.g. in a `Content-Type`\nheader) is an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HardcodedFileSeparator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingFloatingPointLiteral", + "shortDescription": { + "text": "Confusing floating-point literal" + }, + "fullDescription": { + "text": "Reports any floating point numbers that don't have a decimal point, numbers before the decimal point, or numbers after the decimal point. Such literals may be confusing, and violate several coding standards. Example: 'double d = .03;' After the quick-fix is applied: 'double d = 0.03;' Use the Ignore floating point literals in scientific notation option to ignore floating point numbers in scientific notation.", + "markdown": "Reports any floating point numbers that don't have a decimal point, numbers before the decimal point, or numbers after the decimal point.\n\nSuch literals may be confusing, and violate several coding standards.\n\n**Example:**\n\n double d = .03;\n\nAfter the quick-fix is applied:\n\n double d = 0.03;\n\n\nUse the **Ignore floating point literals in scientific notation** option to ignore floating point numbers in scientific notation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingFloatingPointLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocReference", + "shortDescription": { + "text": "Declaration has problems in Javadoc references" + }, + "fullDescription": { + "text": "Reports unresolved references inside Javadoc comments. In the following example, the 'someParam' parameter is missing, so it will be highlighted: 'class A {\n /**\n * @param someParam description\n **/\n void foo() {\n }\n}' Disable the Report inaccessible symbols option to ignore the tags that reference missing method parameters, classes, fields and methods.", + "markdown": "Reports unresolved references inside Javadoc comments.\n\nIn the following example, the `someParam` parameter is missing, so it will be highlighted:\n\n\n class A {\n /**\n * @param someParam description\n **/\n void foo() {\n }\n }\n\n\nDisable the **Report inaccessible symbols** option to ignore the tags that reference missing method parameters,\nclasses, fields and methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavadocReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggingPlaceholderCountMatchesArgumentCount", + "shortDescription": { + "text": "Number of placeholders does not match number of arguments in logging call" + }, + "fullDescription": { + "text": "Reports SLF4J, Log4j2 and akka.event.LoggingAdapter logging calls, such as 'logger.info(\"{}: {}\", key)' where the number of '{}' placeholders in the logger message doesn't match the number of other arguments to the logging call. Use the inspection option to specify which implementation SLF4J uses. If Check automatically is chosen, then 'org.apache.logging.slf4j.Log4jLogger' is searched in the classpath. If this file is founded or Yes is chosen, then cases, when the last parameter with an exception type has a placeholder, will not be reported for SLFJ4 API. For example: '//this case will not be reported with \"Yes\" option\nlog.error(\"For id {}: {}\", \"1\", new RuntimeException());' In this case 'new RuntimeException()' will be printed using 'toString()', (its stacktrace will not be printed): 'For id 1: java.lang.RuntimeException' Otherwise, it will be highlighted because the last placeholder is not used: 'For id 1: {}\njava.lang.RuntimeException: null' No option can be used to always highlight such cases when a placeholder is used for an exception even if 'org.apache.logging.slf4j.Log4jLogger' is used as a backend. This option works only for SLF4J.", + "markdown": "Reports SLF4J, Log4j2 and akka.event.LoggingAdapter logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call.\n\n\nUse the inspection option to specify which implementation SLF4J uses.\nIf **Check automatically** is chosen, then `org.apache.logging.slf4j.Log4jLogger` is searched in the classpath.\nIf this file is founded or **Yes** is chosen, then cases, when the last parameter with an exception type has a placeholder,\nwill not be reported for SLFJ4 API. \n\nFor example:\n\n\n //this case will not be reported with \"Yes\" option\n log.error(\"For id {}: {}\", \"1\", new RuntimeException());\n\nIn this case 'new RuntimeException()' will be printed using 'toString()', (its stacktrace will not be printed):\n\n\n For id 1: java.lang.RuntimeException\n\nOtherwise, it will be highlighted because the last placeholder is not used:\n\n\n For id 1: {}\n java.lang.RuntimeException: null\n\n**No** option can be used to always highlight such cases when a placeholder is used for an exception even if `org.apache.logging.slf4j.Log4jLogger` is used as a backend. \nThis option works only for SLF4J." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LoggingPlaceholderCountMatchesArgumentCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Logging", + "index": 52, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitArrayToString", + "shortDescription": { + "text": "Call to 'toString()' on array" + }, + "fullDescription": { + "text": "Reports arrays used in 'String' concatenations or passed as parameters to 'java.io.PrintStream' methods, such as 'System.out.println()'. Usually, the content of the array is meant to be used and not the array object itself. Example: 'void print(Object[] objects) {\n System.out.println(objects);\n }' After the quick-fix is applied: 'void print(Object[] objects) {\n System.out.println(Arrays.toString(objects));\n }'", + "markdown": "Reports arrays used in `String` concatenations or passed as parameters to `java.io.PrintStream` methods, such as `System.out.println()`.\n\n\nUsually, the content of the array is meant to be used and not the array object itself.\n\n**Example:**\n\n\n void print(Object[] objects) {\n System.out.println(objects);\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Object[] objects) {\n System.out.println(Arrays.toString(objects));\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ImplicitArrayToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReuseOfLocalVariable", + "shortDescription": { + "text": "Reuse of local variable" + }, + "fullDescription": { + "text": "Reports local variables that are \"reused\" overwriting their values with new values unrelated to their original use. Such a local variable reuse may be confusing, as the intended semantics of the local variable may vary with each use. It may also be prone to bugs if due to the code changes, the values that have been considered overwritten actually appear to be alive. It is a good practice to keep variable lifetimes as short as possible, and not to reuse local variables for the sake of brevity. Example: 'void x() {\n String s = \"one\";\n System.out.println(\"s = \" + s);\n s = \"two\"; //reuse of local variable 's'\n System.out.println(\"s = \" + s);\n }'", + "markdown": "Reports local variables that are \"reused\" overwriting their values with new values unrelated to their original use.\n\nSuch a local variable reuse may be confusing,\nas the intended semantics of the local variable may vary with each use. It may also be\nprone to bugs if due to the code changes, the values that have been considered overwritten actually\nappear to be alive. It is a good practice to keep variable lifetimes as short as possible, and not\nto reuse local variables for the sake of brevity.\n\nExample:\n\n\n void x() {\n String s = \"one\";\n System.out.println(\"s = \" + s);\n s = \"two\"; //reuse of local variable 's'\n System.out.println(\"s = \" + s);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReuseOfLocalVariable", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanMethodNameMustStartWithQuestion", + "shortDescription": { + "text": "Boolean method name must start with question word" + }, + "fullDescription": { + "text": "Reports boolean methods whose names do not start with a question word. Boolean methods that override library methods are ignored by this inspection. Example: 'boolean empty(List list) {\n return list.isEmpty();\n}' A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the Boolean method name prefixes list to specify acceptable question words to start boolean method names with. Use the Ignore methods with 'java.lang.Boolean' return type option to ignore methods with the 'java.lang.Boolean' return type. Use the Ignore boolean methods in an @interface option to ignore boolean methods in annotation types ('@interface'). Use the Ignore methods overriding/implementing a super method to ignore methods the have supers.", + "markdown": "Reports boolean methods whose names do not start with a question word.\n\nBoolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n boolean empty(List list) {\n return list.isEmpty();\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify acceptable question words to start boolean method names with.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with the `java.lang.Boolean` return type.\n* Use the **Ignore boolean methods in an @interface** option to ignore boolean methods in annotation types (`@interface`).\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods the have supers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BooleanMethodNameMustStartWithQuestion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnLocalVariableOrMethodParameter", + "shortDescription": { + "text": "Synchronization on local variable or method parameter" + }, + "fullDescription": { + "text": "Reports synchronization on a local variable or parameter. It is very difficult to guarantee correct operation when such synchronization is used. It may be possible to improve such code, for example, by controlling access using a synchronized wrapper class or by synchronizing on a field. Example: 'void bar() {\n final Object lock = new Object();\n synchronized (lock) { }\n }'", + "markdown": "Reports synchronization on a local variable or parameter.\n\n\nIt is very difficult to guarantee correct operation when such synchronization is used.\nIt may be possible to improve such code, for example, by controlling access using a synchronized wrapper class or by synchronizing on a\nfield.\n\n**Example:**\n\n\n void bar() {\n final Object lock = new Object();\n synchronized (lock) { }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizationOnLocalVariableOrMethodParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditionalExpression", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions which are negated with a prefix expression, as such constructions may be confusing. There is a fix that propagates the outer negation to both branches. Example: '!(i == 1 ? a : b)' After the quick-fix is applied: 'i == 1 ? !a : !b'", + "markdown": "Reports conditional expressions which are negated with a prefix expression, as such constructions may be confusing.\n\nThere is a fix that propagates the outer negation to both branches.\n\nExample:\n\n\n !(i == 1 ? a : b)\n\nAfter the quick-fix is applied:\n\n\n i == 1 ? !a : !b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedConditionalExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalMethod", + "shortDescription": { + "text": "Method can't be overridden" + }, + "fullDescription": { + "text": "Reports methods that are declared 'final'. Such methods can't be overridden and may indicate a lack of object-oriented design. Some coding standards discourage 'final' methods.", + "markdown": "Reports methods that are declared `final`. Such methods can't be overridden and may indicate a lack of object-oriented design. Some coding standards discourage `final` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousSystemArraycopy", + "shortDescription": { + "text": "Suspicious 'System.arraycopy()' call" + }, + "fullDescription": { + "text": "Reports suspicious calls to 'System.arraycopy()'. Such calls are suspicious when: the source or destination is not of an array type the source and destination are of different types the copied chunk length is greater than 'src.length - srcPos' the copied chunk length is greater than 'dest.length - destPos' the ranges always intersect when the source and destination are the same array Example: 'void foo() {\n int[] src = new int[] { 1, 2, 3, 4 };\n System.arraycopy(src, 0, src, 1, 2); // warning: Copying to the same array with intersecting ranges\n }'", + "markdown": "Reports suspicious calls to `System.arraycopy()`.\n\nSuch calls are suspicious when:\n\n* the source or destination is not of an array type\n* the source and destination are of different types\n* the copied chunk length is greater than `src.length - srcPos`\n* the copied chunk length is greater than `dest.length - destPos`\n* the ranges always intersect when the source and destination are the same array\n\n**Example:**\n\n\n void foo() {\n int[] src = new int[] { 1, 2, 3, 4 };\n System.arraycopy(src, 0, src, 1, 2); // warning: Copying to the same array with intersecting ranges\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousSystemArraycopy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbsoluteAlignmentInUserInterface", + "shortDescription": { + "text": "Absolute alignment in AWT/Swing code" + }, + "fullDescription": { + "text": "Reports usages of absolute alignment constants from AWT and Swing. Internationalized applications use relative alignment because it respects the locale component orientation settings. Example: 'JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.NORTH);' After the quick-fix is applied: 'JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.PAGE_START);'", + "markdown": "Reports usages of absolute alignment constants from AWT and Swing. Internationalized applications use relative alignment because it respects the locale component orientation settings.\n\n**Example:**\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.NORTH);\n\nAfter the quick-fix is applied:\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.PAGE_START);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbsoluteAlignmentInUserInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaParameterType", + "shortDescription": { + "text": "Redundant lambda parameter types" + }, + "fullDescription": { + "text": "Reports lambda formal parameter types that are redundant because they can be inferred from the context. Example: 'Map map = ...\n map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));' The quick-fix removes the parameter types from the lambda. 'Map map = ...\n map.forEach((s, i) -> log.info(s + \"=\" + i));'", + "markdown": "Reports lambda formal parameter types that are redundant because they can be inferred from the context.\n\n**Example:**\n\n\n Map map = ...\n map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));\n\nThe quick-fix removes the parameter types from the lambda.\n\n\n Map map = ...\n map.forEach((s, i) -> log.info(s + \"=\" + i));\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantLambdaParameterType", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpression", + "shortDescription": { + "text": "Conditional expression" + }, + "fullDescription": { + "text": "Reports usages of the ternary condition operator and suggests converting them to 'if'/'else' statements. Some code standards prohibit the use of the condition operator. Example: 'Object result = (condition) ? foo() : bar();' After the quick-fix is applied: 'Object result;\n if (condition) {\n comp = foo();\n }\n else {\n comp = bar();\n }' Configure the inspection: Use the Ignore for simple assignments and returns option to ignore simple assignments and returns and allow the following constructs: 'String s = (foo == null) ? \"\" : foo.toString();' Use the Ignore places where an if statement is not possible option to ignore conditional expressions in contexts in which automatic replacement with an if statement is not possible (for example, when the conditional expression is used as an argument to a 'super()' constructor call).", + "markdown": "Reports usages of the ternary condition operator and suggests converting them to `if`/`else` statements.\n\nSome code standards prohibit the use of the condition operator.\n\nExample:\n\n\n Object result = (condition) ? foo() : bar();\n\nAfter the quick-fix is applied:\n\n\n Object result;\n if (condition) {\n comp = foo();\n }\n else {\n comp = bar();\n }\n\nConfigure the inspection:\n\nUse the **Ignore for simple assignments and returns** option to ignore simple assignments and returns and allow the following constructs:\n\n\n String s = (foo == null) ? \"\" : foo.toString();\n\n\nUse the **Ignore places where an if statement is not possible** option to ignore conditional expressions in contexts in which automatic\nreplacement with an if statement is not possible (for example, when the conditional expression is used as an argument to a\n`super()` constructor call)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConditionalExpression", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousReturnByteInputStream", + "shortDescription": { + "text": "Suspicious byte value returned from 'InputStream.read()'" + }, + "fullDescription": { + "text": "Reports expressions of 'byte' type returned from a method implementing the 'InputStream.read()' method. This is suspicious because 'InputStream.read()' should return a value in the range from '0' to '255', while an expression of byte type contains a value from '-128' to '127'. The quick-fix converts the expression into an unsigned 'byte' by applying the bitmask '0xFF'. Example: 'class MyInputStream extends InputStream {\n int pos = 0;\n byte[] data;\n\n MyInputStream(byte[] input) {\n data = input;\n }\n\n @Override\n public int read() {\n if (pos == data.length) {\n return -1;\n }\n return data[pos++]; // problem\n }\n}' After applying the quick-fix: 'class MyInputStream extends InputStream {\n int pos = 0;\n byte[] data;\n\n MyInputStream(byte[] input) {\n data = input;\n }\n\n @Override\n public int read() {\n if (pos == data.length) {\n return -1;\n }\n return data[pos++] & 0xFF;\n }\n}' New in 2023.2", + "markdown": "Reports expressions of `byte` type returned from a method implementing the `InputStream.read()` method.\n\n\nThis is suspicious because `InputStream.read()` should return a value in the range from `0` to `255`,\nwhile an expression of byte type contains a value from `-128` to `127`.\nThe quick-fix converts the expression into an unsigned `byte` by applying the bitmask `0xFF`.\n\n**Example:**\n\n\n class MyInputStream extends InputStream {\n int pos = 0;\n byte[] data;\n\n MyInputStream(byte[] input) {\n data = input;\n }\n\n @Override\n public int read() {\n if (pos == data.length) {\n return -1;\n }\n return data[pos++]; // problem\n }\n }\n\nAfter applying the quick-fix:\n\n\n class MyInputStream extends InputStream {\n int pos = 0;\n byte[] data;\n\n MyInputStream(byte[] input) {\n data = input;\n }\n\n @Override\n public int read() {\n if (pos == data.length) {\n return -1;\n }\n return data[pos++] & 0xFF;\n }\n }\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousReturnByteInputStream", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfClone", + "shortDescription": { + "text": "Use of 'clone()' or 'Cloneable'" + }, + "fullDescription": { + "text": "Reports implementations of, and calls to, the 'clone()' method and uses of the 'java.lang.Cloneable' interface. Some coding standards prohibit the use of 'clone()', and recommend using a copy constructor or a 'static' factory method instead. The inspection ignores calls to 'clone()' on arrays because it's a correct and compact way to copy an array. Example: 'class Copy implements Cloneable /*warning*/ {\n\n public Copy clone() /*warning*/ {\n try {\n return (Copy) super.clone(); // warning\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }'", + "markdown": "Reports implementations of, and calls to, the `clone()` method and uses of the `java.lang.Cloneable` interface.\n\nSome coding standards prohibit the use of `clone()`, and recommend using a copy constructor or\na `static` factory method instead.\n\nThe inspection ignores calls to `clone()` on arrays because it's a correct and compact way to copy an array.\n\n**Example:**\n\n\n class Copy implements Cloneable /*warning*/ {\n\n public Copy clone() /*warning*/ {\n try {\n return (Copy) super.clone(); // warning\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfClone", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingFinalNewline", + "shortDescription": { + "text": "Missing final new line" + }, + "fullDescription": { + "text": "Reports if manifest files do not end with a final newline as required by the JAR file specification.", + "markdown": "Reports if manifest files do not end with a final newline as required by the JAR file specification." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MissingFinalNewline", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Manifest", + "index": 117, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedTryStatement", + "shortDescription": { + "text": "Nested 'try' statement" + }, + "fullDescription": { + "text": "Reports nested 'try' statements. Nested 'try' statements may result in unclear code and should probably have their 'catch' and 'finally' sections merged.", + "markdown": "Reports nested `try` statements.\n\nNested `try` statements\nmay result in unclear code and should probably have their `catch` and `finally` sections\nmerged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedTryStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonStaticFinalLogger", + "shortDescription": { + "text": "Non-constant logger" + }, + "fullDescription": { + "text": "Reports logger fields that are not declared 'static' and/or 'final'. Ensuring that every class logger is effectively constant and bound to that class simplifies the task of providing a unified logging implementation for an application. A quick-fix is provided to change the logger modifiers to 'static final'. Example: 'public class Significant {\n private Logger LOG = Logger.getLogger(Critical.class);\n }' After the quick-fix is applied: 'public class Significant {\n private static final Logger LOG = Logger.getLogger(Critical.class);\n }' Configure the inspection: Use the Logger class name table to specify logger class names. The inspection will report the fields that are not 'static' and 'final' and are of the type equal to one of the specified class names.", + "markdown": "Reports logger fields that are not declared `static` and/or `final`. Ensuring that every class logger is effectively constant and bound to that class simplifies the task of providing a unified logging implementation for an application.\n\nA quick-fix is provided to change the logger modifiers to `static final`.\n\n**Example:**\n\n\n public class Significant {\n private Logger LOG = Logger.getLogger(Critical.class);\n }\n\nAfter the quick-fix is applied:\n\n\n public class Significant {\n private static final Logger LOG = Logger.getLogger(Critical.class);\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** table to specify logger class names. The inspection will report the fields that are not `static` and `final` and are of the type equal to one of the specified class names." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonConstantLogger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionWithIdenticalBranches", + "shortDescription": { + "text": "Conditional expression with identical branches" + }, + "fullDescription": { + "text": "Reports conditional expressions with identical 'then' and 'else' branches. Such expressions almost certainly indicate bugs. The inspection provides a fix that collapses conditional expressions. Example: 'int y = x == 10 ? 4 : 4;' After the quick-fix is applied: 'int y = 4;'", + "markdown": "Reports conditional expressions with identical `then` and `else` branches.\n\nSuch expressions almost certainly indicate bugs. The inspection provides a fix that collapses conditional expressions.\n\nExample:\n\n\n int y = x == 10 ? 4 : 4;\n\nAfter the quick-fix is applied:\n\n\n int y = 4;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionWithIdenticalBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OnlyOneElementUsed", + "shortDescription": { + "text": "Only one element is used" + }, + "fullDescription": { + "text": "Reports lists, arrays, and strings where exactly one element is queried right upon the creation. Such expressions may appear after refactoring and usually could be replaced with an accessed element. Example: 'System.out.println(new int[] {1,2,3,4,5}[2]);' After the quick-fix is applied: 'System.out.println(3);' New in 2022.3", + "markdown": "Reports lists, arrays, and strings where exactly one element is queried right upon the creation. Such expressions may appear after refactoring and usually could be replaced with an accessed element.\n\nExample:\n\n\n System.out.println(new int[] {1,2,3,4,5}[2]);\n\nAfter the quick-fix is applied:\n\n\n System.out.println(3);\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OnlyOneElementUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBoxing", + "shortDescription": { + "text": "Unnecessary boxing" + }, + "fullDescription": { + "text": "Reports explicit boxing, that is wrapping of primitive values in objects. Explicit manual boxing is unnecessary as of Java 5 and later, and can safely be removed. Examples: 'Integer i = new Integer(1);' → 'Integer i = Integer.valueOf(1);' 'int i = Integer.valueOf(1);' → 'int i = 1;' Use the Only report truly superfluously boxed expressions option to report only truly superfluous boxing, where a boxed value is immediately unboxed either implicitly or explicitly. In this case, the entire boxing-unboxing step can be removed. The inspection doesn't report simple explicit boxing. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports explicit boxing, that is wrapping of primitive values in objects.\n\nExplicit manual boxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = new Integer(1);` → `Integer i = Integer.valueOf(1);`\n* `int i = Integer.valueOf(1);` → `int i = 1;`\n\n\nUse the **Only report truly superfluously boxed expressions** option to report only truly superfluous boxing,\nwhere a boxed value is immediately unboxed either implicitly or explicitly.\nIn this case, the entire boxing-unboxing step can be removed. The inspection doesn't report simple explicit boxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryBoxing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExceptionThrown", + "shortDescription": { + "text": "Prohibited exception thrown" + }, + "fullDescription": { + "text": "Reports 'throw' statements that throw an inappropriate exception. For example an exception can be inappropriate because it is overly generic, such as 'java.lang.Exception' or 'java.io.IOException'. Example: 'void setup(Mode mode) {\n if (mode == null)\n throw new RuntimeException(\"Problem during setup\"); // warning: Prohibited exception 'RuntimeException' thrown\n ...\n }' Use the Prohibited exceptions list to specify which exceptions should be reported.", + "markdown": "Reports `throw` statements that throw an inappropriate exception. For example an exception can be inappropriate because it is overly generic, such as `java.lang.Exception` or `java.io.IOException`.\n\n**Example:**\n\n\n void setup(Mode mode) {\n if (mode == null)\n throw new RuntimeException(\"Problem during setup\"); // warning: Prohibited exception 'RuntimeException' thrown\n ...\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProhibitedExceptionThrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Anonymous2MethodRef", + "shortDescription": { + "text": "Anonymous type can be replaced with method reference" + }, + "fullDescription": { + "text": "Reports anonymous classes which can be replaced with method references. Note that if an anonymous class is converted into an unbound method reference, the same method reference object can be reused by the Java runtime during subsequent invocations. On the other hand, when an anonymous class is used, separate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases, e.g. when anonymous class instances are used as 'HashMap' keys. Example: 'Runnable r = new Runnable() {\n @Override\n public void run() {\n System.out.println();\n }\n };' After the quick-fix is applied: 'Runnable r = System.out::println;' Use the Report when interface is not annotated with @FunctionalInterface option to enable this inspection for interfaces which are not annotated with '@FunctionalInterface'. This inspection depends on the Java feature 'Method references' which is available since Java 8.", + "markdown": "Reports anonymous classes which can be replaced with method references.\n\n\nNote that if an anonymous class is converted into an unbound method reference, the same method reference object\ncan be reused by the Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\n**Example:**\n\n\n Runnable r = new Runnable() {\n @Override\n public void run() {\n System.out.println();\n }\n };\n\nAfter the quick-fix is applied:\n\n\n Runnable r = System.out::println;\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to enable this inspection for\ninterfaces which are not annotated with `@FunctionalInterface`.\n\nThis inspection depends on the Java feature 'Method references' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Anonymous2MethodRef", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicMethodNotExposedInInterface", + "shortDescription": { + "text": "'public' method not exposed in interface" + }, + "fullDescription": { + "text": "Reports 'public' methods in classes which are not exposed in an interface. Exposing all 'public' methods via an interface is important for maintaining loose coupling, and may be necessary for certain component-based programming styles. Example: 'interface Person {\n String getName();\n}\n\nclass PersonImpl implements Person {\n private String name;\n\n // ok: method is exposed in interface\n @Override\n public String getName() {\n return name;\n }\n\n // warning: method is public\n // but not exposed in interface\n public void setName() {\n this.name = name;\n }\n}' Use the Ignore if annotated by list to specify special annotations. Methods annotated with one of these annotations will be ignored by this inspection. Use the Ignore if the containing class does not implement a non-library interface option to ignore methods from classes which do not implement any interface from the project.", + "markdown": "Reports `public` methods in classes which are not exposed in an interface.\n\nExposing all `public` methods via an interface is important for\nmaintaining loose coupling, and may be necessary for certain component-based programming styles.\n\nExample:\n\n\n interface Person {\n String getName();\n }\n\n class PersonImpl implements Person {\n private String name;\n\n // ok: method is exposed in interface\n @Override\n public String getName() {\n return name;\n }\n\n // warning: method is public\n // but not exposed in interface\n public void setName() {\n this.name = name;\n }\n }\n\n\nUse the **Ignore if annotated by** list to specify special annotations. Methods annotated with one of\nthese annotations will be ignored by this inspection.\n\n\nUse the **Ignore if the containing class does not implement a non-library interface** option to ignore methods from classes which do not\nimplement any interface from the project." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicMethodNotExposedInInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableHasSerialVersionUIDField", + "shortDescription": { + "text": "Serializable class without 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports classes that implement 'Serializable' and do not declare a 'serialVersionUID' field. Without a 'serialVersionUID' field, any change to the class will make previously serialized versions unreadable. Example: 'class Main implements Serializable {\n }' After the quick-fix is applied: 'class Main implements Serializable {\n private static final long serialVersionUID = -1446398935944895849L;\n }' When using a language level of JDK 14 or higher, the quickfix will also add the 'java.io.Serial' annotation. Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports classes that implement `Serializable` and do not declare a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously serialized versions unreadable.\n\n**Example:**\n\n\n class Main implements Serializable {\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = -1446398935944895849L;\n }\n\nWhen using a language level of JDK 14 or higher, the quickfix will also add the `java.io.Serial` annotation.\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "serial", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestCaseWithNoTestMethods", + "shortDescription": { + "text": "Test class without tests" + }, + "fullDescription": { + "text": "Reports non-'abstract' test cases without any test methods. Such test cases usually indicate unfinished code or could be a refactoring leftover that should be removed. Example: 'public class CrucialTest {\n @Before\n public void setUp() {\n System.out.println(\"setting up\");\n }\n }' Use the Ignore test cases which have superclasses with test methods option to ignore test cases which have super classes with test methods.", + "markdown": "Reports non-`abstract` test cases without any test methods. Such test cases usually indicate unfinished code or could be a refactoring leftover that should be removed.\n\nExample:\n\n\n public class CrucialTest {\n @Before\n public void setUp() {\n System.out.println(\"setting up\");\n }\n }\n\n\nUse the **Ignore test cases which have superclasses with test methods** option to ignore test cases which have super classes\nwith test methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnitTestCaseWithNoTests", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedArrayReadWrite", + "shortDescription": { + "text": "Mismatched read and write of array" + }, + "fullDescription": { + "text": "Reports arrays whose contents are read but not updated, or updated but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete or erroneous code. Example: 'final int[] bar = new int[3];\n bar[2] = 3;'", + "markdown": "Reports arrays whose contents are read but not updated, or updated but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete or erroneous code.\n\n**Example:**\n\n\n final int[] bar = new int[3];\n bar[2] = 3;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedReadAndWriteOfArray", + "cweIds": [ + 561, + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedStaticUsage", + "shortDescription": { + "text": "Unnecessarily qualified static access" + }, + "fullDescription": { + "text": "Reports usages of static members unnecessarily qualified with the class name. Qualification with the class is unnecessary when the static member is available in a surrounding class or in a super class of a surrounding class. Such qualification may be safely removed. Example: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }' After the quick-fix is applied: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }' Use the inspection options to toggle the reporting for: Static fields access: 'void bar() { System.out.println(Foo.x); }' Calls to static methods: 'void bar() { Foo.foo(); }' Also, you can configure the inspection to only report static member usage in a static context. In this case, only 'static void baz() { Foo.foo(); }' will be reported.", + "markdown": "Reports usages of static members unnecessarily qualified with the class name.\n\n\nQualification with the class is unnecessary when the static member is available in a surrounding class\nor in a super class of a surrounding class. Such qualification may be safely removed.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* Static fields access: \n `void bar() { System.out.println(Foo.x); }`\n\n* Calls to static methods: \n `void bar() { Foo.foo(); }`\n\n\nAlso, you can configure the inspection to only report static member usage\nin a static context. In this case, only `static void baz() { Foo.foo(); }` will be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessarilyQualifiedStaticUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemGetProperty", + "shortDescription": { + "text": "Call to 'System.getProperty(str)' could be simplified" + }, + "fullDescription": { + "text": "Reports the usage of method 'System.getProperty(str)' and suggests a fix in 2 cases: 'System.getProperty(\"path.separator\")' -> 'File.pathSeparator' 'System.getProperty(\"line.separator\")' -> 'System.lineSeparator()' The second one is not only less error-prone but is likely to be faster, as 'System.lineSeparator()' returns cached value, while 'System.getProperty(\"line.separator\")' each time calls to Properties (Hashtable or CHM depending on implementation).", + "markdown": "Reports the usage of method `System.getProperty(str)` and suggests a fix in 2 cases:\n\n* `System.getProperty(\"path.separator\")` -\\> `File.pathSeparator`\n* `System.getProperty(\"line.separator\")` -\\> `System.lineSeparator()`\n\nThe second one is not only less error-prone but is likely to be faster, as `System.lineSeparator()` returns cached value, while `System.getProperty(\"line.separator\")` each time calls to Properties (Hashtable or CHM depending on implementation)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SystemGetProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionsMustHaveInitialCapacity", + "shortDescription": { + "text": "Collection without initial capacity" + }, + "fullDescription": { + "text": "Reports attempts to instantiate a new 'Collection' object without specifying an initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify initial capacities for collections may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. This inspection checks allocations of classes listed in the inspection's settings. Example: 'new HashMap();' Use the following options to configure the inspection: List collection classes that should be checked. Whether to ignore field initializers.", + "markdown": "Reports attempts to instantiate a new `Collection` object without specifying an initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing\nto specify initial capacities for collections may result in performance issues if space needs to be reallocated and\nmemory copied when the initial capacity is exceeded.\nThis inspection checks allocations of classes listed in the inspection's settings.\n\n**Example:**\n\n\n new HashMap();\n\nUse the following options to configure the inspection:\n\n* List collection classes that should be checked.\n* Whether to ignore field initializers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CollectionWithoutInitialCapacity", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassOnlyUsedInOneModule", + "shortDescription": { + "text": "Class only used from one other module" + }, + "fullDescription": { + "text": "Reports classes that: do not depend on any other class in their module depend on classes from a different module are a dependency only for classes from this other module Such classes could be moved into the module on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that:\n\n* do not depend on any other class in their module\n* depend on classes from a different module\n* are a dependency only for classes from this other module\n\nSuch classes could be moved into the module on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassOnlyUsedInOneModule", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 77, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryStatementWithMultipleResources", + "shortDescription": { + "text": "'try' statement with multiple resources can be split" + }, + "fullDescription": { + "text": "Reports 'try' statements with multiple resources that can be automatically split into multiple try-with-resources statements. This conversion can be useful for further refactoring (for example, for extracting the nested 'try' statement into a separate method). Example: 'try (FileInputStream in = new FileInputStream(\"in.txt\");\n FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }' After the quick-fix is applied: 'try (FileInputStream in = new FileInputStream(\"in.txt\")) {\n try (FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n }'", + "markdown": "Reports `try` statements with multiple resources that can be automatically split into multiple try-with-resources statements.\n\nThis conversion can be useful for further refactoring\n(for example, for extracting the nested `try` statement into a separate method).\n\nExample:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\");\n FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n\nAfter the quick-fix is applied:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\")) {\n try (FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TryStatementWithMultipleResources", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneableImplementsClone", + "shortDescription": { + "text": "Cloneable class without 'clone()' method" + }, + "fullDescription": { + "text": "Reports classes implementing the 'Cloneable' interface that don't override the 'clone()' method. Such classes use the default implementation of 'clone()', which isn't 'public' but 'protected', and which does not copy the mutable state of the class. A quick-fix is available to generate a basic 'clone()' method, which can be used as a basis for a properly functioning 'clone()' method expected from a 'Cloneable' class. Example: 'public class Data implements Cloneable {\n private String[] names;\n }' After the quick-fix is applied: 'public class Data implements Cloneable {\n private String[] names;\n\n @Override\n public Data clone() {\n try {\n Data clone = (Data) super.clone();\n // TODO: copy mutable state here, so the clone can't change the internals of the original\n return clone;\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }' Use the Ignore classes cloneable due to inheritance option to ignore classes that are 'Cloneable' because they inherit from the 'Cloneable' class. Use the Ignore when Cloneable is necessary to call clone() method of super class option to ignore classes that require implementing 'Cloneable' because they call the 'clone()' method from a superclass.", + "markdown": "Reports classes implementing the `Cloneable` interface that don't override the `clone()` method.\n\nSuch classes use the default implementation of `clone()`,\nwhich isn't `public` but `protected`, and which does not copy the mutable state of the class.\n\nA quick-fix is available to generate a basic `clone()` method,\nwhich can be used as a basis for a properly functioning `clone()` method\nexpected from a `Cloneable` class.\n\n**Example:**\n\n\n public class Data implements Cloneable {\n private String[] names;\n }\n\nAfter the quick-fix is applied:\n\n\n public class Data implements Cloneable {\n private String[] names;\n\n @Override\n public Data clone() {\n try {\n Data clone = (Data) super.clone();\n // TODO: copy mutable state here, so the clone can't change the internals of the original\n return clone;\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nUse the **Ignore classes cloneable due to inheritance** option to ignore classes that are\n`Cloneable` because they inherit from the `Cloneable` class.\n\nUse the **Ignore when Cloneable is necessary to call clone() method of super class**\noption to ignore classes that require implementing `Cloneable` because they call the `clone()` method from a superclass." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CloneableClassWithoutClone", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeMayBeWeakened", + "shortDescription": { + "text": "Type may be weakened" + }, + "fullDescription": { + "text": "Reports variable and method return types that can be changed to a more abstract (weaker) type. This allows making the code more abstract, hence more reusable. Example: '// Type of parameter can be weakened to java.util.List\n void processList(ArrayList list) {\n if (list.isEmpty()) return;\n System.out.println(\"Processing\");\n for (String s : list) {\n System.out.println(\"String: \" + s);\n }\n }' Enable the Only weaken to an interface checkbox below to only report a problem when the type can be weakened to an interface type. Enable the Do not suggest weakening variable declared as 'var' checkbox below to prevent reporting on local variables declared using the 'var' keyword (Java 10+) Stop classes are intended to prevent weakening to classes lower than stop classes, even if it is possible. In some cases, this may improve readability.", + "markdown": "Reports variable and method return types that can be changed to a more abstract (weaker) type. This allows making the code more abstract, hence more reusable.\n\nExample:\n\n\n // Type of parameter can be weakened to java.util.List\n void processList(ArrayList list) {\n if (list.isEmpty()) return;\n System.out.println(\"Processing\");\n for (String s : list) {\n System.out.println(\"String: \" + s);\n }\n }\n\n\nEnable the **Only weaken to an interface** checkbox below\nto only report a problem when the type can be weakened to an interface type.\n\n\nEnable the **Do not suggest weakening variable declared as 'var'** checkbox below\nto prevent reporting on local variables declared using the 'var' keyword (Java 10+)\n\n\n**Stop classes** are intended to prevent weakening to classes\nlower than stop classes, even if it is possible.\nIn some cases, this may improve readability." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeMayBeWeakened", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OctalAndDecimalIntegersMixed", + "shortDescription": { + "text": "Octal and decimal integers in same array" + }, + "fullDescription": { + "text": "Reports mixed octal and decimal integer literals in a single array initializer. This situation might happen when you copy a list of numbers into an array initializer. Some numbers in the array might be zero-padded and the compiler will interpret them as octal. Example: 'int[] elapsed = {1, 13, 052};' After the quick-fix that removes a leading zero is applied: 'int[] elapsed = {1, 13, 52};' If it is an octal number (for example, after a variable inline), then you can use another quick-fix that converts octal to decimal: 'int[] elapsed = {1, 13, 42};'", + "markdown": "Reports mixed octal and decimal integer literals in a single array initializer. This situation might happen when you copy a list of numbers into an array initializer. Some numbers in the array might be zero-padded and the compiler will interpret them as octal.\n\n**Example:**\n\n int[] elapsed = {1, 13, 052};\n\nAfter the quick-fix that removes a leading zero is applied:\n\n int[] elapsed = {1, 13, 52};\n\nIf it is an octal number (for example, after a variable inline), then you can use another quick-fix that converts octal to decimal:\n`int[] elapsed = {1, 13, 42};`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OctalAndDecimalIntegersInSameArray", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Deprecation", + "shortDescription": { + "text": "Deprecated API usage" + }, + "fullDescription": { + "text": "Reports usages of deprecated classes, fields, and methods. A quick-fix is available to automatically convert the deprecated usage, when the necessary information can be extracted from the Javadoc of the deprecated member. Example: 'class Interesting {\n\n /**\n * @deprecated Use {@link #newHotness()} instead\n */\n @Deprecated\n public void oldAndBusted() {}\n\n public void newHotness() {}\n }\n class ElseWhere {\n void x(Interesting i) {\n i.oldAndBusted(); // deprecated warning here\n }\n }' After the quick-fix is applied: 'class Interesting {\n\n /**\n * @deprecated Use {@link #newHotness()} instead\n */\n @Deprecated\n public void oldAndBusted() {}\n\n public void newHotness() {}\n }\n class ElseWhere {\n void x(Interesting i) {\n i.newHotness();\n }\n }' By default, the inspection doesn't produce a warning if it's impossible or hard to avoid it. For example, the following code won't be reported: 'abstract class A { //library code\n @Deprecated\n abstract void m();\n }\n class B extends A { //project code\n @Override\n void m() {\n //doSmth;\n }\n }' Configure the inspection: Use the options to disable this inspection inside deprecated members, overrides of abstract deprecated methods, non-static import statements, methods of deprecated classes, or same top-level classes.", + "markdown": "Reports usages of deprecated classes, fields, and methods. A quick-fix is available to automatically convert the deprecated usage, when the necessary information can be extracted from the Javadoc of the deprecated member.\n\n**Example:**\n\n\n class Interesting {\n\n /**\n * @deprecated Use {@link #newHotness()} instead\n */\n @Deprecated\n public void oldAndBusted() {}\n\n public void newHotness() {}\n }\n class ElseWhere {\n void x(Interesting i) {\n i.oldAndBusted(); // deprecated warning here\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Interesting {\n\n /**\n * @deprecated Use {@link #newHotness()} instead\n */\n @Deprecated\n public void oldAndBusted() {}\n\n public void newHotness() {}\n }\n class ElseWhere {\n void x(Interesting i) {\n i.newHotness();\n }\n }\n\nBy default, the inspection doesn't produce a warning if it's impossible or hard to avoid it. For example,\nthe following code won't be reported:\n\n\n abstract class A { //library code\n @Deprecated\n abstract void m();\n }\n class B extends A { //project code\n @Override\n void m() {\n //doSmth;\n }\n }\n\nConfigure the inspection:\n\n\nUse the options to disable this inspection inside deprecated members,\noverrides of abstract deprecated methods, non-static import statements, methods of deprecated classes, or same top-level classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "deprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionSignal", + "shortDescription": { + "text": "Call to 'signal()' instead of 'signalAll()'" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.concurrent.locks.Condition.signal()'. While occasionally useful, in almost all cases 'signalAll()' is a better and safer choice.", + "markdown": "Reports calls to `java.util.concurrent.locks.Condition.signal()`. While occasionally useful, in almost all cases `signalAll()` is a better and safer choice." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSignalInsteadOfSignalAll", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicMethodWithoutLogging", + "shortDescription": { + "text": "'public' method without logging" + }, + "fullDescription": { + "text": "Reports any public methods that do not contain a logging statement. This inspection does not report simple getters and setters. For example: 'public class Crucial {\n private static final Logger LOG = LoggerFactory.getLogger(Crucial.class);\n public void doImportantStuff() {\n // warning on this method\n }\n\n public void doOtherStuff() {\n LOG.info(\"do other stuff\");\n }\n }' Use the table below to specify Logger class names. Public methods that do not use instance methods of the specified classes will be reported by this inspection.", + "markdown": "Reports any public methods that do not contain a logging statement. This inspection does not report simple getters and setters.\n\nFor example:\n\n\n public class Crucial {\n private static finalLogger LOG = LoggerFactory.getLogger(Crucial.class);\n public void doImportantStuff() {\n // warning on this method\n }\n\n public void doOtherStuff() {\n LOG.info(\"do other stuff\");\n }\n }\n\n\nUse the table below to specify Logger class names.\nPublic methods that do not use instance methods of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicMethodWithoutLogging", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNestingDepth", + "shortDescription": { + "text": "Inner class too deeply nested" + }, + "fullDescription": { + "text": "Reports classes whose number of nested inner classes exceeds the specified maximum. Nesting inner classes inside other inner classes is confusing and indicates that a refactoring may be necessary. Use the Nesting limit field to specify the maximum allowed nesting depth for a class.", + "markdown": "Reports classes whose number of nested inner classes exceeds the specified maximum.\n\nNesting inner classes inside other inner classes is confusing and indicates that a refactoring may be necessary.\n\nUse the **Nesting limit** field to specify the maximum allowed nesting depth for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InnerClassTooDeeplyNested", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterTypeCanBeSpecified", + "shortDescription": { + "text": "Lambda parameter type can be specified" + }, + "fullDescription": { + "text": "Reports lambda parameters that do not have their type specified and suggests adding the missing type declarations. Example: 'Function length = a -> a.length();' After the quick-fix is applied: 'Function length = (String a) -> a.length();' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambda parameters that do not have their type specified and suggests adding the missing type declarations.\n\nExample:\n\n\n Function length = a -> a.length();\n\nAfter the quick-fix is applied:\n\n\n Function length = (String a) -> a.length();\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LambdaParameterTypeCanBeSpecified", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextLabelInSwitchStatement", + "shortDescription": { + "text": "Text label in 'switch' statement" + }, + "fullDescription": { + "text": "Reports labeled statements inside of 'switch' statements. While occasionally intended, this construction is often the result of a typo. Example: 'switch (x) {\n case 1:\n case2: //warning: Text label 'case2:' in 'switch' statement\n case 3:\n break;\n }'", + "markdown": "Reports labeled statements inside of `switch` statements. While occasionally intended, this construction is often the result of a typo.\n\n**Example:**\n\n\n switch (x) {\n case 1:\n case2: //warning: Text label 'case2:' in 'switch' statement\n case 3:\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "TextLabelInSwitchStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageVisibleInnerClass", + "shortDescription": { + "text": "Package-visible nested class" + }, + "fullDescription": { + "text": "Reports nested classes that are declared without any access modifier (also known as package-private). Example: 'public class Outer {\n static class Nested {} // warning\n class Inner {} // warning\n enum Mode {} // warning depends on the setting\n interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore package-visible inner enums option to ignore package-private inner enums. Use the Ignore package-visible inner interfaces option to ignore package-private inner interfaces.", + "markdown": "Reports nested classes that are declared without any access modifier (also known as package-private).\n\n**Example:**\n\n\n public class Outer {\n static class Nested {} // warning\n class Inner {} // warning\n enum Mode {} // warning depends on the setting\n interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore package-visible inner enums** option to ignore package-private inner enums.\n* Use the **Ignore package-visible inner interfaces** option to ignore package-private inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageVisibleInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnaryMinus", + "shortDescription": { + "text": "Unnecessary unary minus" + }, + "fullDescription": { + "text": "Reports unnecessary unary minuses. Such expressions might be hard to understand and might contain errors. For example: 'void unaryMinus(int i) {\n int x = - -i;\n }' The following quick fixes are suggested here: Remove '-' operators before the 'i' variable: 'void unaryMinus(int i) {\n int x = i;\n }' Replace '-' operators with the prefix decrement operator: 'void unaryMinus(int i) {\n int x = --i;\n }' Another example: 'void unaryMinus(int i) {\n i += - 8;\n }' After the quick-fix is applied: 'void unaryMinus(int i) {\n i -= 8;\n }'", + "markdown": "Reports unnecessary unary minuses. Such expressions might be hard to understand and might contain errors.\n\n**For example:**\n\n void unaryMinus(int i) {\n int x = - -i;\n }\n\nThe following quick fixes are suggested here:\n\n* Remove `-` operators before the `i` variable:\n\n void unaryMinus(int i) {\n int x = i;\n }\n\n* Replace `-` operators with the prefix decrement operator:\n\n void unaryMinus(int i) {\n int x = --i;\n }\n\n**Another example:**\n\n void unaryMinus(int i) {\n i += - 8;\n }\n\nAfter the quick-fix is applied:\n\n void unaryMinus(int i) {\n i -= 8;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryUnaryMinus", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodMayBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports methods that can safely be made 'static'. Making methods static when possible can reduce memory consumption and improve your code quality. A method can be 'static' if: it is not 'synchronized', 'native' or 'abstract', does not reference any of non-static methods and non-static fields from the containing class, is not an override and is not overridden in a subclass. Use the following options to configure the inspection: Whether to report only 'private' and 'final' methods, which increases the performance of this inspection. Whether to ignore empty methods. Whether to ignore default methods in interface when using Java 8 or higher. Whether to let the quick-fix replace instance qualifiers with class references in calls to methods which are made 'static', that is, call 'myClass.m()' would be replaced with 'MyClass.m()'.", + "markdown": "Reports methods that can safely be made `static`. Making methods static when possible can reduce memory consumption and improve your code quality.\n\nA method can be `static` if:\n\n* it is not `synchronized`, `native` or `abstract`,\n* does not reference any of non-static methods and non-static fields from the containing class,\n* is not an override and is not overridden in a subclass.\n\nUse the following options to configure the inspection:\n\n* Whether to report only `private` and `final` methods, which increases the performance of this inspection.\n* Whether to ignore empty methods.\n* Whether to ignore default methods in interface when using Java 8 or higher.\n* Whether to let the quick-fix replace instance qualifiers with class references in calls to methods which are made `static`, that is, call `myClass.m()` would be replaced with `MyClass.m()`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestMethodWithoutAssertion", + "shortDescription": { + "text": "Test method without assertions" + }, + "fullDescription": { + "text": "Reports test methods that do not contain any assertions. Such methods may indicate either incomplete or weak test cases. Example: 'public class ExtensiveTest {\n\n @Test\n public void testAlive() {\n System.out.println(\"nothing\");\n }\n }' Configure the inspection: Use the table to specify the combinations of fully qualified class name and method name regular expression that should qualify as assertions. Class names also match subclasses. Use the 'assert' keyword is considered an assertion option to specify if the Java 'assert' statements using the 'assert' keyword should be considered an assertion. Use the Ignore test methods which declare exceptions option to ignore the test methods that declare exceptions. This can be useful when you have tests that will throw an exception on failure and thus don't need any assertions.", + "markdown": "Reports test methods that do not contain any assertions. Such methods may indicate either incomplete or weak test cases.\n\n**Example:**\n\n\n public class ExtensiveTest {\n\n @Test\n public void testAlive() {\n System.out.println(\"nothing\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the combinations of fully qualified class name and method name regular expression that should qualify as assertions. Class names also match subclasses.\n* Use the **'assert' keyword is considered an assertion** option to specify if the Java `assert` statements using the `assert` keyword should be considered an assertion.\n* Use the **Ignore test methods which declare exceptions** option to ignore the test methods that declare exceptions. This can be useful when you have tests that will throw an exception on failure and thus don't need any assertions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TestMethodWithoutAssertion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EscapedSpace", + "shortDescription": { + "text": "Non-terminal use of '\\s' escape sequence" + }, + "fullDescription": { + "text": "Reports '\\s' escape sequences anywhere except at text-block line endings or within a series of several escaped spaces. Such usages can be confusing or a mistake, especially if the string is interpreted as a regular expression. The '\\s' escape sequence is intended to encode a space at the end of text-block lines where normal spaces are trimmed. In other locations, as well as in regular string or char literals, '\\s' is identical to an ordinary space character ('\" \"'). Example: 'if (str.matches(\"\\s+\")) {...}' Here it's likely that '\"\\\\s+\"' was intended (to match any whitespace character). If not, using 'str.matches(\" +\")' would be less confusing. A quick-fix is provided that replaces '\\s' escapes with space characters. This inspection depends on the Java feature ''\\s' escape sequences' which is available since Java 15. New in 2022.3", + "markdown": "Reports `\\s` escape sequences anywhere except at text-block line endings or within a series of several escaped spaces. Such usages can be confusing or a mistake, especially if the string is interpreted as a regular expression. The `\\s` escape sequence is intended to encode a space at the end of text-block lines where normal spaces are trimmed. In other locations, as well as in regular string or char literals, `\\s` is identical to an ordinary space character (`\" \"`).\n\n**Example:**\n\n\n if (str.matches(\"\\s+\")) {...}\n\nHere it's likely that `\"\\\\s+\"` was intended (to match any whitespace character). If not, using `str.matches(\" +\")` would be less confusing.\n\n\nA quick-fix is provided that replaces `\\s` escapes with space characters.\n\nThis inspection depends on the Java feature ''\\\\s' escape sequences' which is available since Java 15.\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EscapedSpace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatement", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements. 'continue' statements complicate refactoring and can be confusing. Example: 'void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"skip\")) continue;\n handleStr(str);\n }\n }'", + "markdown": "Reports `continue` statements.\n\n`continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"skip\")) continue;\n handleStr(str);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisorderedAssertEqualsArguments", + "shortDescription": { + "text": "Misordered 'assertEquals()' arguments" + }, + "fullDescription": { + "text": "Reports calls to 'assertEquals()' that have the expected argument and the actual argument in the wrong order. For JUnit 3, 4, and 5 the correct order is '(expected, actual)'. For TestNG the correct order is '(actual, expected)'. Such calls will behave fine for assertions that pass, but may give confusing error reports on failure. Use the quick-fix to flip the order of the arguments. Example (JUnit): 'assertEquals(actual, expected)' After the quick-fix is applied: 'assertEquals(expected, actual)'", + "markdown": "Reports calls to `assertEquals()` that have the expected argument and the actual argument in the wrong order.\n\n\nFor JUnit 3, 4, and 5 the correct order is `(expected, actual)`.\nFor TestNG the correct order is `(actual, expected)`.\n\n\nSuch calls will behave fine for assertions that pass, but may give confusing error reports on failure.\nUse the quick-fix to flip the order of the arguments.\n\n**Example (JUnit):**\n\n\n assertEquals(actual, expected)\n\nAfter the quick-fix is applied:\n\n\n assertEquals(expected, actual)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MisorderedAssertEqualsArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 128, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticVariableInitialization", + "shortDescription": { + "text": "Static field may not be initialized" + }, + "fullDescription": { + "text": "Reports 'static' variables that may be uninitialized upon class initialization. Example: 'class Foo {\n public static int bar;\n\n static { }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report 'static' variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports `static` variables that may be uninitialized upon class initialization.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticVariableMayNotBeInitialized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantAssertCondition", + "shortDescription": { + "text": "Constant condition in 'assert' statement" + }, + "fullDescription": { + "text": "Reports 'assert' statement conditions that are constants. 'assert' statements with constant conditions will either always fail or always succeed. Such statements might be left over after a refactoring and are probably not intended. Example: 'void foo() {\n assert true;\n }'", + "markdown": "Reports `assert` statement conditions that are constants. `assert` statements with constant conditions will either always fail or always succeed. Such statements might be left over after a refactoring and are probably not intended.\n\n**Example:**\n\n\n void foo() {\n assert true;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantAssertCondition", + "cweIds": [ + 570, + 571 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaReflectionInvocation", + "shortDescription": { + "text": "Reflective invocation arguments mismatch" + }, + "fullDescription": { + "text": "Reports cases in which the arguments provided to 'Method.invoke()' and 'Constructor.newInstance()' do not match the signature specified in 'Class.getMethod()' and 'Class.getConstructor()'. Example: 'Method m = myObj.getClass().getMethod(\"myMethod\", int.class);\n // the argument should be an int value\n m.invoke(myObj, \"abc\");' New in 2017.2", + "markdown": "Reports cases in which the arguments provided to `Method.invoke()` and `Constructor.newInstance()` do not match the signature specified in `Class.getMethod()` and `Class.getConstructor()`.\n\nExample:\n\n\n Method m = myObj.getClass().getMethod(\"myMethod\", int.class);\n // the argument should be an **int** value\n m.invoke(myObj, \"abc\");\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaReflectionInvocation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 129, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CaughtExceptionImmediatelyRethrown", + "shortDescription": { + "text": "Caught exception is immediately rethrown" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that immediately rethrow the caught exception without performing any action on it. Such 'catch' blocks are unnecessary and have no error handling. Example: 'try {\n new FileInputStream(\"\");\n } catch (FileNotFoundException e) {\n throw e;\n }'", + "markdown": "Reports `catch` blocks that immediately rethrow the caught exception without performing any action on it. Such `catch` blocks are unnecessary and have no error handling.\n\n**Example:**\n\n\n try {\n new FileInputStream(\"\");\n } catch (FileNotFoundException e) {\n throw e;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CaughtExceptionImmediatelyRethrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayHashCode", + "shortDescription": { + "text": "'hashCode()' called on array" + }, + "fullDescription": { + "text": "Reports incorrect hash code calculation for arrays. In order to correctly calculate the hash code for an array, use: 'Arrays.hashcode()' for linear arrays 'Arrays.deepHashcode()' for multidimensional arrays These methods should also be used with 'Objects.hash()' when the sequence of input values includes arrays, for example: 'Objects.hash(string, Arrays.hashcode(array))'", + "markdown": "Reports incorrect hash code calculation for arrays.\n\nIn order to\ncorrectly calculate the hash code for an array, use:\n\n* `Arrays.hashcode()` for linear arrays\n* `Arrays.deepHashcode()` for multidimensional arrays\n\nThese methods should also be used with `Objects.hash()` when the sequence of input values includes arrays, for example: `Objects.hash(string, Arrays.hashcode(array))`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ArrayHashCode", + "cweIds": [ + 328 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitNotInLoop", + "shortDescription": { + "text": "'wait()' not called in loop" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' that are not made inside a loop. 'wait()' is normally used to suspend a thread until some condition becomes true. As the thread could have been waken up for a different reason, the condition should be checked after the 'wait()' call returns. A loop is a simple way to achieve this. Example: 'class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n if (count >= 10) wait();\n ++count;\n }\n }' Good code should look like this: 'class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n while (count >= 10) wait();\n ++count;\n }\n }'", + "markdown": "Reports calls to `wait()` that are not made inside a loop.\n\n\n`wait()` is normally used to suspend a thread until some condition becomes true.\nAs the thread could have been waken up for a different reason,\nthe condition should be checked after the `wait()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n if (count >= 10) wait();\n ++count;\n }\n }\n\nGood code should look like this:\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n while (count >= 10) wait();\n ++count;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WaitNotInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExternalizableWithSerializationMethods", + "shortDescription": { + "text": "Externalizable class with 'readObject()' or 'writeObject()'" + }, + "fullDescription": { + "text": "Reports 'Externalizable' classes that define 'readObject()' or 'writeObject()' methods. These methods are not called for serialization of 'Externalizable' objects. Example: 'abstract class Crucial implements Externalizable {\n int value;\n private void readObject(ObjectInputStream in) {\n value = in.readInt();\n }\n }'", + "markdown": "Reports `Externalizable` classes that define `readObject()` or `writeObject()` methods. These methods are not called for serialization of `Externalizable` objects.\n\n**Example:**\n\n\n abstract class Crucial implements Externalizable {\n int value;\n private void readObject(ObjectInputStream in) {\n value = in.readInt();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExternalizableClassWithSerializationMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeLock", + "shortDescription": { + "text": "Lock acquired but not safely unlocked" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.locks.Lock' resources that are not acquired in front of a 'try' block or not unlocked in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. Example: 'lock.lock(); // will be reported since the 'finally' block is missing\n try {\n doSmthWithLock();\n } catch (IOException e) {\n throw new UncheckedIOException(e);\n }\n lock.unlock();'", + "markdown": "Reports `java.util.concurrent.locks.Lock` resources that are not acquired in front of a `try` block or not unlocked in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n lock.lock(); // will be reported since the 'finally' block is missing\n try {\n doSmthWithLock();\n } catch (IOException e) {\n throw new UncheckedIOException(e);\n }\n lock.unlock();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LockAcquiredButNotSafelyReleased", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaLangInvokeHandleSignature", + "shortDescription": { + "text": "MethodHandle/VarHandle type mismatch" + }, + "fullDescription": { + "text": "Reports 'MethodHandle' and 'VarHandle' factory method calls that don't match any method or field. Also reports arguments to 'MethodHandle.invoke()' and similar methods, that don't match the 'MethodHandle' signature and arguments to 'VarHandle.set()' that don't match the 'VarHandle' type. Examples: MethodHandle mh = MethodHandles.lookup().findVirtual(\n MyClass.class, \"foo\", MethodType.methodType(void.class, int.class));\n // the argument should be an int value\n mh.invoke(myObj, \"abc\");\n // the argument should be String.class\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", int.class);\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", String.class);\n // the argument should be a String value\n vh.set(myObj, 42);\n New in 2017.2", + "markdown": "Reports `MethodHandle` and `VarHandle` factory method calls that don't match any method or field.\n\nAlso reports arguments to `MethodHandle.invoke()` and similar methods, that don't match the `MethodHandle` signature\nand arguments to `VarHandle.set()` that don't match the `VarHandle` type.\n\n\nExamples:\n\n```\n MethodHandle mh = MethodHandles.lookup().findVirtual(\n MyClass.class, \"foo\", MethodType.methodType(void.class, int.class));\n // the argument should be an int value\n mh.invoke(myObj, \"abc\");\n```\n\n```\n // the argument should be String.class\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", int.class);\n```\n\n```\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", String.class);\n // the argument should be a String value\n vh.set(myObj, 42);\n```\n\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaLangInvokeHandleSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 129, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnThis", + "shortDescription": { + "text": "Return of 'this'" + }, + "fullDescription": { + "text": "Reports methods returning 'this'. While such a return is valid, it is rarely necessary, and usually indicates that the method is intended to be used as part of a chain of similar method calls (for example, 'buffer.append(\"foo\").append(\"bar\").append(\"baz\")'). Such chains are frowned upon by many coding standards. Example: 'public Builder append(String str) {\n // [...]\n return this;\n }'", + "markdown": "Reports methods returning `this`.\n\n\nWhile such a return is valid, it is rarely necessary, and usually indicates that the method is intended to be used\nas part of a chain of similar method calls (for example, `buffer.append(\"foo\").append(\"bar\").append(\"baz\")`).\nSuch chains are frowned upon by many coding standards.\n\n**Example:**\n\n\n public Builder append(String str) {\n // [...]\n return this;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReturnOfThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeFinal", + "shortDescription": { + "text": "Declaration can have 'final' modifier" + }, + "fullDescription": { + "text": "Reports fields, methods, or classes that may have the 'final' modifier added to their declarations. Final classes can't be extended, final methods can't be overridden, and final fields can't be reassigned. Example: 'public class Person {\n private String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n\n public String toString() {\n return getName();\n }\n }' After the quick-fix is applied: 'public final class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public final String getName() {\n return name;\n }\n\n public final String toString() {\n return getName();\n }\n }' Use the Report classes and Report methods options to define which declarations are to be reported.", + "markdown": "Reports fields, methods, or classes that may have the `final` modifier added to their declarations.\n\nFinal classes can't be extended, final methods can't be overridden, and final fields can't be reassigned.\n\n**Example:**\n\n\n public class Person {\n private String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public final class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public final String getName() {\n return name;\n }\n\n public final String toString() {\n return getName();\n }\n }\n\nUse the **Report classes** and **Report methods** options to define which declarations are to be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CanBeFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnBreakStatement", + "shortDescription": { + "text": "Unnecessary label on 'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements with unnecessary labels. Such labels do not change the control flow but make the code difficult to follow. Example: 'label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break label;\n //doSmth\n }' After the quick-fix is applied: 'label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break;\n //doSmth\n }'", + "markdown": "Reports `break` statements with unnecessary labels. Such labels do not change the control flow but make the code difficult to follow.\n\n**Example:**\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break label;\n //doSmth\n }\n\nAfter the quick-fix is applied:\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break;\n //doSmth\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnBreakStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NakedNotify", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' without corresponding state change" + }, + "fullDescription": { + "text": "Reports 'Object.notify()' or 'Object.notifyAll()' being called without any detectable state change occurring. Normally, 'Object.notify()' and 'Object.notifyAll()' are used to inform other threads that a state change has occurred. That state change should occur in a synchronized context that contains the 'Object.notify()' or 'Object.notifyAll()' call, and prior to the call. While not having such a state change isn't necessarily incorrect, it is certainly worth examining. Example: 'synchronized (this) {\n notify();\n }\n // no state change\n synchronized (this) {\n notify(); // this notify might be redundant\n }'", + "markdown": "Reports `Object.notify()` or `Object.notifyAll()` being called without any detectable state change occurring.\n\n\nNormally, `Object.notify()` and `Object.notifyAll()` are used to inform other threads that a state change has\noccurred. That state change should occur in a synchronized context that contains the `Object.notify()` or\n`Object.notifyAll()` call, and prior to the call. While not having such a state change isn't necessarily incorrect, it is\ncertainly worth examining.\n\n**Example:**\n\n\n synchronized (this) {\n notify();\n }\n // no state change\n synchronized (this) {\n notify(); // this notify might be redundant\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NakedNotify", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassCoupling", + "shortDescription": { + "text": "Overly coupled class" + }, + "fullDescription": { + "text": "Reports classes that reference too many other classes. Classes with too high coupling can be very fragile, and should probably be split into smaller classes. Configure the inspection: Use the Class coupling limit field to specify the maximum allowed coupling for a class. Use the Include couplings to java system classes option to specify whether references to system classes (those in the 'java.'or 'javax.' packages) should be counted. Use the Include couplings to library classes option to specify whether references to any library classes should be counted.", + "markdown": "Reports classes that reference too many other classes.\n\nClasses with too high coupling can be very fragile, and should probably be split into smaller classes.\n\nConfigure the inspection:\n\n* Use the **Class coupling limit** field to specify the maximum allowed coupling for a class.\n* Use the **Include couplings to java system classes** option to specify whether references to system classes (those in the `java.`or `javax.` packages) should be counted.\n* Use the **Include couplings to library classes** option to specify whether references to any library classes should be counted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyCoupledClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptySynchronizedStatement", + "shortDescription": { + "text": "Empty 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements with empty bodies. Empty 'synchronized' statements are sometimes used to wait for other threads to release a particular resource. However, there is no guarantee that the same resource won't be acquired again right after the empty 'synchronized' statement finishes. For proper synchronization, the resource should be utilized inside the 'synchronized' block. Also, an empty 'synchronized' block may appear after a refactoring when redundant code was removed. In this case, the 'synchronized' block itself will be redundant and should be removed as well. Example: 'synchronized(lock) {}' A quick-fix is suggested to remove the empty synchronized statement. This inspection is disabled in JSP files.", + "markdown": "Reports `synchronized` statements with empty bodies.\n\n\nEmpty `synchronized` statements are sometimes used to wait for other threads to\nrelease a particular resource. However, there is no guarantee that the same resource\nwon't be acquired again right after the empty `synchronized` statement finishes.\nFor proper synchronization, the resource should be utilized inside the `synchronized` block.\n\n\nAlso, an empty `synchronized` block may appear after a refactoring\nwhen redundant code was removed. In this case, the `synchronized` block\nitself will be redundant and should be removed as well.\n\nExample:\n\n\n synchronized(lock) {}\n\n\nA quick-fix is suggested to remove the empty synchronized statement.\n\n\nThis inspection is disabled in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EmptySynchronizedStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextBlockMigration", + "shortDescription": { + "text": "Text block can be used" + }, + "fullDescription": { + "text": "Reports 'String' concatenations that can be simplified by replacing them with text blocks. Requirements: '\\n' occurs two or more times. Text blocks are not concatenated. Use the Report single string literals option to highlight single literals containing line breaks. The quick-fix will still be available even when this option is disabled. Example: 'String html = \"\\n\" +\n \" \\n\" +\n \"

    Hello, world

    \\n\" +\n \" \\n\" +\n \"\\n\";' After the quick-fix is applied: 'String html = \"\"\"\n \n \n

    Hello, world

    \n \n \n \"\"\";' This inspection depends on the Java feature 'Text block literals' which is available since Java 15. New in 2019.3", + "markdown": "Reports `String` concatenations that can be simplified by replacing them with text blocks.\n\nRequirements:\n\n* `\\n` occurs two or more times.\n* Text blocks are not concatenated.\n\n\nUse the **Report single string literals** option to highlight single literals containing line breaks.\nThe quick-fix will still be available even when this option is disabled.\n\n\n**Example:**\n\n\n String html = \"\\n\" +\n \" \\n\" +\n \"

    Hello, world

    \\n\" +\n \" \\n\" +\n \"\\n\";\n\nAfter the quick-fix is applied:\n\n\n String html = \"\"\"\n \n \n

    Hello, world

    \n \n \n \"\"\";\n\nThis inspection depends on the Java feature 'Text block literals' which is available since Java 15.\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TextBlockMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 15", + "index": 130, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectAllocationInLoop", + "shortDescription": { + "text": "Object allocation in loop" + }, + "fullDescription": { + "text": "Reports object or array allocations inside loops. While not necessarily a problem, an object allocation inside a loop is a great place to look for memory leaks and performance issues. The inspection reports the following constructs: Explicit allocations via 'new' operator Methods known to return new object Instance-bound method references Lambdas that capture variables or 'this' reference Example: '// Explicit allocation\n for (Status status : Status.values()) {\n declarationsMap.put(status, new ArrayList<>());\n }\n\n // Lambda captures variable\n String message = \"Engine running.\";\n for (Engine engine : engines) {\n if (!isRunning(engine)) {\n logger.warn(() -> {\n return String.format(message);\n });\n }\n }\n\n // Instance-bound method reference\n for(Node node : nodes) {\n descriptor = node.getDescription();\n descriptor.ifPresent(dynamicTestExecutor::execute);\n }'", + "markdown": "Reports object or array allocations inside loops. While not necessarily a problem, an object allocation inside a loop is a great place to look for memory leaks and performance issues.\n\n\nThe inspection reports the following constructs:\n\n* Explicit allocations via `new` operator\n* Methods known to return new object\n* Instance-bound method references\n* Lambdas that capture variables or `this` reference\n\n**Example:**\n\n\n // Explicit allocation\n for (Status status : Status.values()) {\n declarationsMap.put(status, new ArrayList<>());\n }\n\n // Lambda captures variable\n String message = \"Engine running.\";\n for (Engine engine : engines) {\n if (!isRunning(engine)) {\n logger.warn(() -> {\n return String.format(message);\n });\n }\n }\n\n // Instance-bound method reference\n for(Node node : nodes) {\n descriptor = node.getDescription();\n descriptor.ifPresent(dynamicTestExecutor::execute);\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObjectAllocationInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedEquality", + "shortDescription": { + "text": "Chained equality comparisons" + }, + "fullDescription": { + "text": "Reports chained equality comparisons. Such comparisons may be confusing: 'a == b == c' means '(a == b) == c', but possibly 'a == b && a == c' is intended. Example: 'boolean chainedEquality(boolean a, boolean b, boolean c) {\n return a == b == c;\n }' You can use parentheses to make the comparison less confusing: 'boolean chainedEquality(boolean a, boolean b, boolean c) {\n return (a == b) == c;\n }'", + "markdown": "Reports chained equality comparisons.\n\nSuch comparisons may be confusing: `a == b == c` means `(a == b) == c`,\nbut possibly `a == b && a == c` is intended.\n\n**Example:**\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return a == b == c;\n }\n\nYou can use parentheses to make the comparison less confusing:\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return (a == b) == c;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainedEqualityComparisons", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalClone", + "shortDescription": { + "text": "Non-final 'clone()' in secure context" + }, + "fullDescription": { + "text": "Reports 'clone()' methods without the 'final' modifier. Since 'clone()' can be used to instantiate objects without using a constructor, allowing the 'clone()' method to be overridden may result in corrupted objects, and even in security exploits. This may be prevented by making the 'clone()' method or the enclosing class itself 'final'. Example: 'class Main implements Cloneable {\n @Override\n protected Object clone() throws CloneNotSupportedException {\n return super.clone();\n }\n }'", + "markdown": "Reports `clone()` methods without the `final` modifier.\n\n\nSince `clone()` can be used to instantiate objects without using a constructor, allowing the `clone()`\nmethod to be overridden may result in corrupted objects, and even in security exploits. This may be prevented by making the\n`clone()` method or the enclosing class itself `final`.\n\n**Example:**\n\n\n class Main implements Cloneable {\n @Override\n protected Object clone() throws CloneNotSupportedException {\n return super.clone();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalClone", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LossyConversionCompoundAssignment", + "shortDescription": { + "text": "Possibly lossy implicit cast in compound assignment" + }, + "fullDescription": { + "text": "Reports compound assignments if the type of the right-hand operand is not assignment compatible with the type of the variable. During such compound assignments, an implicit cast occurs, potentially resulting in lossy conversions. Example: 'long c = 1;\n c += 1.2;' After the quick-fix is applied: 'long c = 1;\n c += (long) 1.2;' New in 2023.2", + "markdown": "Reports compound assignments if the type of the right-hand operand is not assignment compatible with the type of the variable.\n\n\nDuring such compound assignments, an implicit cast occurs, potentially resulting in lossy conversions.\n\nExample:\n\n\n long c = 1;\n c += 1.2;\n\nAfter the quick-fix is applied:\n\n\n long c = 1;\n c += (long) 1.2;\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "lossy-conversions", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowFromFinallyBlock", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'throw' statements inside 'finally' blocks. While occasionally intended, such 'throw' statements may conceal exceptions thrown from 'try'-'catch' and thus tremendously complicate the debugging process.", + "markdown": "Reports `throw` statements inside `finally` blocks.\n\nWhile occasionally intended, such `throw` statements may conceal exceptions thrown from `try`-`catch` and thus\ntremendously complicate the debugging process." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowFromFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticNonFinalField", + "shortDescription": { + "text": "'static', non-'final' field" + }, + "fullDescription": { + "text": "Reports non-'final' 'static' fields. A quick-fix is available to add the 'final' modifier to a non-'final' 'static' field. This inspection doesn't check fields' mutability. For example, adding the 'final' modifier to a field that has a value being set somewhere will cause a compilation error. Use the Only report 'public' fields option so that the inspection reported only 'public' fields.", + "markdown": "Reports non-`final` `static` fields.\n\nA quick-fix is available to add the `final` modifier to a non-`final` `static` field.\n\nThis inspection doesn't check fields' mutability. For example, adding the `final` modifier to a field that has a value\nbeing set somewhere will cause a compilation error.\n\n\nUse the **Only report 'public' fields** option so that the inspection reported only `public` fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticNonFinalField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyMethod", + "shortDescription": { + "text": "Empty method" + }, + "fullDescription": { + "text": "Reports empty methods that can be removed. Methods are considered empty if they are empty themselves and if they are overridden or implemented by empty methods only. Note that methods containing only comments and the 'super()' call with own parameters are also considered empty. The inspection ignores methods with special annotations, for example, the 'javax.ejb.Init' and 'javax.ejb.Remove' EJB annotations . The quick-fix safely removes unnecessary methods. Configure the inspection: Use the Comments and javadoc count as content option to select whether methods with comments should be treated as non-empty. Use the Additional special annotations option to configure additional annotations that should be ignored by this inspection.", + "markdown": "Reports empty methods that can be removed.\n\nMethods are considered empty if they are empty themselves and if they are overridden or\nimplemented by empty methods only. Note that methods containing only comments and the `super()` call with own parameters are\nalso considered empty.\n\nThe inspection ignores methods with special annotations, for example, the `javax.ejb.Init` and `javax.ejb.Remove` EJB annotations .\n\nThe quick-fix safely removes unnecessary methods.\n\nConfigure the inspection:\n\n* Use the **Comments and javadoc count as content** option to select whether methods with comments should be treated as non-empty.\n* Use the **Additional special annotations** option to configure additional annotations that should be ignored by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableEqualsExpression", + "shortDescription": { + "text": "Unnecessary 'null' check before 'equals()' call" + }, + "fullDescription": { + "text": "Reports comparisons to 'null' that are followed by a call to 'equals()' with a constant argument. Example: 'if (s != null && s.equals(\"literal\")) {}' After the quick-fix is applied: 'if (\"literal\".equals(s)) {}' Use the inspection settings to report 'equals()' calls with a non-constant argument when the argument to 'equals()' is proven not to be 'null'.", + "markdown": "Reports comparisons to `null` that are followed by a call to `equals()` with a constant argument.\n\n**Example:**\n\n\n if (s != null && s.equals(\"literal\")) {}\n\nAfter the quick-fix is applied:\n\n\n if (\"literal\".equals(s)) {}\n\n\nUse the inspection settings to report `equals()` calls with a non-constant argument\nwhen the argument to `equals()` is proven not to be `null`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifiableEqualsExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonCommentSourceStatements", + "shortDescription": { + "text": "Overly long method" + }, + "fullDescription": { + "text": "Reports methods whose number of statements exceeds the specified maximum. Methods with too many statements may be confusing and are a good sign that refactoring is necessary. The following statements are not counted: empty statements (semicolons) block statements 'for' loop initialization statements, that is, 'int i = ...' within a 'for(int i = ...;...)' statement 'for' loop update statements, that is, 'i += 2' within a 'for(int i = ...;...; i += 2)' statement Use the Maximum statements per method field to specify the maximum allowed number of statements in a method.", + "markdown": "Reports methods whose number of statements exceeds the specified maximum.\n\nMethods with too many statements may be confusing and are a good sign that refactoring is necessary.\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Maximum statements per method** field to specify the maximum allowed number of statements in a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyLongMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingMainMethod", + "shortDescription": { + "text": "Confusing 'main()' method" + }, + "fullDescription": { + "text": "Reports methods that are named \"main\", but do not have the 'public static void main(String[])' signature in Java up to 21. Starting from Java 21 Preview, inspection doesn't highlight in case of package-private, protected or instance main methods, also without parameters. Additionally main methods located in anonymous or local classes are reported. Anonymous and local classes do not have a fully qualified name and thus can't be run. Such methods may be confusing, as methods named \"main\" are expected to be application entry points. Example: 'class Main {\n void main(String[] args) {} // warning here because there are no \"public static\" modifiers\n }' A quick-fix that renames such methods is available only in the editor.", + "markdown": "Reports methods that are named \"main\", but do not have the `public static void main(String[])` signature in Java up to 21. Starting from Java 21 Preview, inspection doesn't highlight in case of package-private, protected or instance main methods, also without parameters. Additionally main methods located in anonymous or local classes are reported. Anonymous and local classes do not have a fully qualified name and thus can't be run.\n\nSuch methods may be confusing, as methods named \"main\"\nare expected to be application entry points.\n\n**Example:**\n\n\n class Main {\n void main(String[] args) {} // warning here because there are no \"public static\" modifiers\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingMainMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleVariablesInDeclaration", + "shortDescription": { + "text": "Multiple variables in one declaration" + }, + "fullDescription": { + "text": "Reports multiple variables that are declared in a single declaration and suggest creating a separate declaration for each variable. Some coding standards prohibit such declarations. Example: 'int x = 1, y = 2;' After the quick-fix is applied: 'int x = 1;\n int y = 2;' Configure the inspection: Use the Ignore 'for' loop declarations option to ignore multiple variables declared in the initialization of a 'for' loop statement, for example: 'for (int i = 0, max = list.size(); i > max; i++) {}' Use the Only warn on different array dimensions in a single declaration option to only warn when variables with different array dimensions are declared in a single declaration, for example: 'String s = \"\", array[];' New in 2019.2", + "markdown": "Reports multiple variables that are declared in a single declaration and suggest creating a separate declaration for each variable.\n\nSome coding standards prohibit such declarations.\n\nExample:\n\n\n int x = 1, y = 2;\n\nAfter the quick-fix is applied:\n\n\n int x = 1;\n int y = 2;\n\nConfigure the inspection:\n\n* Use the **Ignore 'for' loop declarations** option to ignore multiple variables declared in the initialization of a 'for' loop statement, for example:\n\n\n for (int i = 0, max = list.size(); i > max; i++) {}\n\n* Use the **Only warn on different array dimensions in a single declaration** option to only warn when variables with different array dimensions are declared in a single declaration, for example:\n\n\n String s = \"\", array[];\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MultipleVariablesInDeclaration", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IOResource", + "shortDescription": { + "text": "I/O resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports I/O resources that are not safely closed. I/O resources checked by this inspection include 'java.io.InputStream', 'java.io.OutputStream', 'java.io.Reader', 'java.io.Writer', 'java.util.zip.ZipFile', 'java.io.Closeable' and 'java.io.RandomAccessFile'. I/O resources wrapped by other I/O resources are not reported, as the wrapped resource will be closed by the wrapping resource. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void save() throws IOException {\n FileWriter writer = new FileWriter(\"filename.txt\"); //warning\n writer.write(\"sample\");\n }' Use the following options to configure the inspection: List I/O resource classes that do not need to be closed and should be ignored by this inspection. Whether an I/O resource is allowed to be opened inside a 'try'block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports I/O resources that are not safely closed. I/O resources checked by this inspection include `java.io.InputStream`, `java.io.OutputStream`, `java.io.Reader`, `java.io.Writer`, `java.util.zip.ZipFile`, `java.io.Closeable` and `java.io.RandomAccessFile`.\n\n\nI/O resources wrapped by other I/O resources are not reported, as the wrapped resource will be closed by the wrapping resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void save() throws IOException {\n FileWriter writer = new FileWriter(\"filename.txt\"); //warning\n writer.write(\"sample\");\n }\n\n\nUse the following options to configure the inspection:\n\n* List I/O resource classes that do not need to be closed and should be ignored by this inspection.\n* Whether an I/O resource is allowed to be opened inside a `try`block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IOResourceOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSimpleGetterInClass", + "shortDescription": { + "text": "Call to simple getter from within class" + }, + "fullDescription": { + "text": "Reports calls to a simple property getter from within the property's class. A simple property getter is defined as one which simply returns the value of a field, and does no other calculations. Such simple getter calls can be safely inlined using the quick-fix. Some coding standards also suggest against the use of simple getters for code clarity reasons. Example: 'public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return getName();\n }\n }' After the quick-fix is applied: 'public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return name;\n }\n }' Use the following options to configure the inspection: Whether to only report getter calls on 'this', not on objects of the same type passed in as a parameter. Whether to ignore non-'private' getters.", + "markdown": "Reports calls to a simple property getter from within the property's class.\n\n\nA simple property getter is defined as one which simply returns the value of a field,\nand does no other calculations. Such simple getter calls can be safely inlined using the quick-fix.\nSome coding standards also suggest against the use of simple getters for code clarity reasons.\n\n**Example:**\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return name;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report getter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` getters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSimpleGetterFromWithinClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableFieldInSerializableClass", + "shortDescription": { + "text": "Non-serializable field in a 'Serializable' class" + }, + "fullDescription": { + "text": "Reports non-serializable fields in classes that implement 'java.io.Serializable'. Such fields will result in runtime exceptions if the object is serialized. Fields declared 'transient' or 'static' are not reported, nor are fields of classes that have a 'writeObject' method defined. This inspection assumes fields of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless the types they are declared in are non-'Serializable'. Example: 'class NonSerializableClass {}\n\n public class SerializableClass implements Serializable {\n NonSerializableClass clazz; // warning: Non-serializable field 'clazz' in a Serializable class\n static NonSerializableClass staticClazz; // no warnings\n }'\n Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. List annotations that will make the inspection ignore the annotated fields. Whether to ignore fields initialized with an anonymous class.", + "markdown": "Reports non-serializable fields in classes that implement `java.io.Serializable`. Such fields will result in runtime exceptions if the object is serialized.\n\n\nFields declared\n`transient` or `static`\nare not reported, nor are fields of classes that have a `writeObject` method defined.\n\n\nThis inspection assumes fields of the types\n`java.util.Collection` and\n`java.util.Map` to be\n`Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n class NonSerializableClass {}\n\n public class SerializableClass implements Serializable {\n NonSerializableClass clazz; // warning: Non-serializable field 'clazz' in a Serializable class\n static NonSerializableClass staticClazz; // no warnings\n }\n \n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* List annotations that will make the inspection ignore the annotated fields.\n* Whether to ignore fields initialized with an anonymous class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonSerializableFieldInSerializableClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnhancedSwitchMigration", + "shortDescription": { + "text": "Statement can be replaced with enhanced 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements that can be automatically replaced with enhanced 'switch' statements or expressions. Example: 'double getPrice(String fruit) {\n // Switch statement can be replaced with enhanced 'switch'\n switch (fruit) {\n case \"Apple\":\n return 1.0;\n case \"Orange\":\n return 1.5;\n case \"Mango\":\n return 2.0;\n default:\n throw new IllegalArgumentException();\n }\n }' After the quick-fix is applied: 'double getPrice(String fruit) {\n return switch (fruit) {\n case \"Apple\" -> 1.0;\n case \"Orange\" -> 1.5;\n case \"Mango\" -> 2.0;\n default -> throw new IllegalArgumentException();\n };\n }' Use the Show warning only if conversion to expression is possible option not to warn about conversion to 'switch' statement. Use the Maximum number of statements in one branch to convert to switch expression option warn about conversion to expression only if each branch has less than the given number of statements. This inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14. New in 2019.1", + "markdown": "Reports `switch` statements that can be automatically replaced with enhanced `switch` statements or expressions.\n\n**Example:**\n\n\n double getPrice(String fruit) {\n // Switch statement can be replaced with enhanced 'switch'\n switch (fruit) {\n case \"Apple\":\n return 1.0;\n case \"Orange\":\n return 1.5;\n case \"Mango\":\n return 2.0;\n default:\n throw new IllegalArgumentException();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n double getPrice(String fruit) {\n return switch (fruit) {\n case \"Apple\" -> 1.0;\n case \"Orange\" -> 1.5;\n case \"Mango\" -> 2.0;\n default -> throw new IllegalArgumentException();\n };\n }\n \n\n* Use the **Show warning only if conversion to expression is possible** option not to warn about conversion to `switch` statement.\n* Use the **Maximum number of statements in one branch to convert to switch expression** option warn about conversion to expression only if each branch has less than the given number of statements.\n\nThis inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EnhancedSwitchMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 14", + "index": 136, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleLiteralMayBeFloatLiteral", + "shortDescription": { + "text": "Cast to 'float' can be 'float' literal" + }, + "fullDescription": { + "text": "Reports 'double' literal expressions that are immediately cast to 'float'. Such literal expressions can be replaced with equivalent 'float' literals. Example: 'float f = (float)1.1;' After the quick-fix is applied: 'float f = 1.1f;'", + "markdown": "Reports `double` literal expressions that are immediately cast to `float`.\n\nSuch literal expressions can be replaced with equivalent `float` literals.\n\n**Example:**\n\n float f = (float)1.1;\n\nAfter the quick-fix is applied:\n\n float f = 1.1f;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DoubleLiteralMayBeFloatLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 137, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverloadedMethodsWithSameNumberOfParameters", + "shortDescription": { + "text": "Overloaded methods with same number of parameters" + }, + "fullDescription": { + "text": "Reports methods that are declared in the same class, have the same name, and the same number of parameters. Such overloads cam be very confusing because it can be unclear which overload gets called. Example: 'class Main {\n public static void execute(Runnable r) {}\n public static void execute(RunnableFuture c) {}\n }' Use the option to ignore overloaded methods whose parameter types are definitely incompatible.", + "markdown": "Reports methods that are declared in the same class, have the same name, and the same number of parameters. Such overloads cam be very confusing because it can be unclear which overload gets called.\n\n**Example:**\n\n\n class Main {\n public static void execute(Runnable r) {}\n public static void execute(RunnableFuture c) {}\n }\n\n\nUse the option to ignore overloaded methods whose parameter types are definitely incompatible." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverloadedMethodsWithSameNumberOfParameters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerMethod", + "shortDescription": { + "text": "Method with too many parameters" + }, + "fullDescription": { + "text": "Reports methods whose number of parameters exceeds the specified maximum. Methods with too many parameters can be a good sign that a refactoring is necessary. Methods that have super methods are not reported. Use the Parameter limit field to specify the maximum allowed number of parameters for a method.", + "markdown": "Reports methods whose number of parameters exceeds the specified maximum. Methods with too many parameters can be a good sign that a refactoring is necessary.\n\nMethods that have super methods are not reported.\n\nUse the **Parameter limit** field to specify the maximum allowed number of parameters for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodWithTooManyParameters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyLongLambda", + "shortDescription": { + "text": "Overly long lambda expression" + }, + "fullDescription": { + "text": "Reports lambda expressions whose number of statements exceeds the specified maximum. Lambda expressions that are too long may be confusing, and it is often better to extract the statements into a separate method. The following statements are not counted: empty statements (semicolons) block statements 'for' loop initialization statements, that is, 'int i = ...' within a 'for(int i = ...;...)' statement 'for' loop update statements, that is, 'i += 2' within a 'for(int i = ...;...; i += 2)' statement Use the Non-comment source statements limit field to specify the maximum allowed number of statements in a lambda expression.", + "markdown": "Reports lambda expressions whose number of statements exceeds the specified maximum.\n\nLambda expressions that are too long may be confusing, and it is often better to extract the statements into a separate method.\n\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Non-comment source statements limit** field to specify the maximum allowed number of statements in a lambda expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyLongLambda", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneDeclaresCloneNotSupported", + "shortDescription": { + "text": "'clone()' does not declare 'CloneNotSupportedException'" + }, + "fullDescription": { + "text": "Reports 'clone()' methods that do not declare 'throws CloneNotSupportedException'. If 'throws CloneNotSupportedException' is not declared, the method's subclasses will not be able to prohibit cloning in the standard way. This inspection does not report 'clone()' methods declared 'final' and 'clone()' methods on 'final' classes. Configure the inspection: Use the Only warn on 'protected' clone methods option to indicate that this inspection should only warn on 'protected clone()' methods. The Effective Java book (second and third edition) recommends omitting the 'CloneNotSupportedException' declaration on 'public' methods, because the methods that do not throw checked exceptions are easier to use. Example: 'public class Example implements Cloneable {\n // method doesn't declare 'throws CloneNotSupportedException'\n protected Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n return null;\n }\n }\n }'", + "markdown": "Reports `clone()` methods that do not declare `throws CloneNotSupportedException`.\n\nIf `throws CloneNotSupportedException` is not declared, the method's subclasses will not be able to prohibit cloning\nin the standard way. This inspection does not report `clone()` methods declared `final`\nand `clone()` methods on `final` classes.\n\nConfigure the inspection:\n\nUse the **Only warn on 'protected' clone methods** option to indicate that this inspection should only warn on `protected clone()` methods.\nThe *Effective Java* book (second and third edition) recommends omitting the `CloneNotSupportedException`\ndeclaration on `public` methods, because the methods that do not throw checked exceptions are easier to use.\n\nExample:\n\n\n public class Example implements Cloneable {\n // method doesn't declare 'throws CloneNotSupportedException'\n protected Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n return null;\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CloneDoesntDeclareCloneNotSupportedException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanExpressionMayBeConditional", + "shortDescription": { + "text": "Boolean expression could be replaced with conditional expression" + }, + "fullDescription": { + "text": "Reports any 'boolean' expressions which can be formulated in a more compact and, arguably, clear way than by using a conditional expression. Use the quick-fix to replace the 'boolean' expression by a conditional expression. Example: 'a && b || !a && c;' After the quick-fix is applied: 'a ? b : c;'", + "markdown": "Reports any `boolean` expressions which can be formulated in a more compact and, arguably, clear way than by using a conditional expression.\n\nUse the quick-fix to replace the `boolean` expression by a conditional expression.\n\n**Example:**\n\n\n a && b || !a && c;\n\nAfter the quick-fix is applied:\n\n\n a ? b : c;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "BooleanExpressionMayBeConditional", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryExplicitNumericCast", + "shortDescription": { + "text": "Unnecessary explicit numeric cast" + }, + "fullDescription": { + "text": "Reports primitive numeric casts that would be inserted implicitly by the compiler. Also, reports any primitive numeric casts that the compiler will remove. Example: 'int x = (short)5; // The cast will be removed by the javac tool' After the quick-fix is applied: 'int x = 5;'", + "markdown": "Reports primitive numeric casts that would be inserted implicitly by the compiler. Also, reports any primitive numeric casts that the compiler will remove.\n\n**Example:**\n\n int x = (short)5; // The cast will be removed by the javac tool\n\nAfter the quick-fix is applied:\n`int x = 5;`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryExplicitNumericCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 137, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TransientFieldNotInitialized", + "shortDescription": { + "text": "Transient field is not initialized on deserialization" + }, + "fullDescription": { + "text": "Reports 'transient' fields that are initialized during normal object construction, but whose class does not have a 'readObject' method. As 'transient' fields are not serialized they need to be initialized separately in a 'readObject()' method during deserialization. Any 'transient' fields that are not initialized during normal object construction are considered to use the default initialization and are not reported by this inspection. Example: 'class Person implements Serializable {\n transient String name = \"Default\"; //warning, can actually be a null after deserialization\n transient String surname; //null is considered the default value and not reported\n }'", + "markdown": "Reports `transient` fields that are initialized during normal object construction, but whose class does not have a `readObject` method.\n\n\nAs `transient` fields are not serialized they need\nto be initialized separately in a `readObject()` method\nduring deserialization.\n\n\nAny `transient` fields that\nare not initialized during normal object construction are considered to use the default\ninitialization and are not reported by this inspection.\n\n**Example:**\n\n\n class Person implements Serializable {\n transient String name = \"Default\"; //warning, can actually be a null after deserialization\n transient String surname; //null is considered the default value and not reported\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TransientFieldNotInitialized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PropertyValueSetToItself", + "shortDescription": { + "text": "Property value set to itself" + }, + "fullDescription": { + "text": "Reports calls of setter methods with the same object getter as a value. Usually, this code does nothing and probably was not intended. For example: 'bean.setPayerId(bean.getPayerId());'", + "markdown": "Reports calls of setter methods with the same object getter as a value. Usually, this code does nothing and probably was not intended.\n\n**For example:**\n\n bean.setPayerId(bean.getPayerId());\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PropertyValueSetToItself", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 139, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInitializer", + "shortDescription": { + "text": "Non-'static' initializer" + }, + "fullDescription": { + "text": "Reports non-'static' initializers in classes. Some coding standards prohibit instance initializers and recommend using constructors or field initializers for initialization. Also, deleting the 'static' keyword may accidentally create non-'static' initializers and result in obscure bugs. This inspection doesn't report instance initializers in anonymous classes. Use the Only warn when the class has one or more constructors option to ignore instance initializers in classes that don't have any constructors.", + "markdown": "Reports non-`static` initializers in classes.\n\nSome coding standards prohibit instance initializers and recommend using constructors or field initializers for initialization.\nAlso, deleting the `static` keyword may accidentally create non-`static` initializers and result in obscure bugs.\n\nThis inspection doesn't report instance initializers in anonymous classes.\n\n\nUse the **Only warn when the class has one or more constructors** option to ignore instance initializers in classes that don't have any constructors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonStaticInitializer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueOrBreakFromFinallyBlock", + "shortDescription": { + "text": "'continue' or 'break' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'break' or 'continue' statements inside of 'finally' blocks. While occasionally intended, such statements are very confusing, may mask thrown exceptions, and complicate debugging. Example: 'while (true) {\n try {\n throwingMethod();\n } finally {\n continue;\n }\n }'", + "markdown": "Reports `break` or `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and complicate debugging.\n\n**Example:**\n\n\n while (true) {\n try {\n throwingMethod();\n } finally {\n continue;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueOrBreakFromFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LengthOneStringsInConcatenation", + "shortDescription": { + "text": "Single character string concatenation" + }, + "fullDescription": { + "text": "Reports concatenation with string literals that consist of one character. These literals may be replaced with equivalent character literals, gaining some performance enhancement. Example: 'String hello = hell + \"o\";' After the quick-fix is applied: 'String hello = hell + 'o';'", + "markdown": "Reports concatenation with string literals that consist of one character.\n\nThese literals may be replaced with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n String hello = hell + \"o\";\n\nAfter the quick-fix is applied:\n\n\n String hello = hell + 'o';\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SingleCharacterStringConcatenation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryThis", + "shortDescription": { + "text": "Unnecessary 'this' qualifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'this' qualifier. Using 'this' to disambiguate a code reference is discouraged by many coding styles and may easily become unnecessary via automatic refactorings. Example: 'class Foo {\n int x;\n void foo() {\n this.x = 2;\n }\n }' After the quick-fix is applied: 'class Foo {\n int x;\n void foo() {\n x = 2;\n }\n }' Use the inspection settings to ignore assignments to fields. For instance, 'this.x = 2;' won't be reported, but 'int y = this.x;' will be.", + "markdown": "Reports unnecessary `this` qualifier.\n\n\nUsing `this` to disambiguate a code reference is discouraged by many coding styles\nand may easily become unnecessary\nvia automatic refactorings.\n\n**Example:**\n\n\n class Foo {\n int x;\n void foo() {\n this.x = 2;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int x;\n void foo() {\n x = 2;\n }\n }\n\n\nUse the inspection settings to ignore assignments to fields.\nFor instance, `this.x = 2;` won't be reported, but `int y = this.x;` will be." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyTransitiveDependencies", + "shortDescription": { + "text": "Class with too many transitive dependencies" + }, + "fullDescription": { + "text": "Reports classes that are directly or indirectly dependent on too many other classes. Modifications to any dependency of such a class may require changing the class thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of transitive dependencies field to specify the maximum allowed number of direct or indirect dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are directly or indirectly dependent on too many other classes.\n\nModifications to any dependency of such a class may require changing the class thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependencies** field to specify the maximum allowed number of direct or indirect dependencies\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyTransitiveDependencies", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopWithImplicitTerminationCondition", + "shortDescription": { + "text": "Loop with implicit termination condition" + }, + "fullDescription": { + "text": "Reports any 'while', 'do-while', and 'for' loops that have the 'true' constant as their only condition. At the same time, such loops can be still terminated by a containing 'if' statement which can break out of the loop. Such an 'if' statement must be the first or the only statement in a 'while' or 'for' loop and the last or the only statement in a 'do-while' loop. Removing the 'if' statement and making its condition an explicit loop condition simplifies the loop.", + "markdown": "Reports any `while`, `do-while`, and `for` loops that have the `true` constant as their only condition. At the same time, such loops can be still terminated by a containing `if` statement which can break out of the loop.\n\nSuch an `if` statement must be the first or the only statement\nin a `while` or `for`\nloop and the last or the only statement in a `do-while` loop.\n\nRemoving the `if` statement and making its condition an explicit\nloop condition simplifies the loop." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoopWithImplicitTerminationCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitArrayFilling", + "shortDescription": { + "text": "Explicit array filling" + }, + "fullDescription": { + "text": "Reports loops that can be replaced with 'Arrays.setAll()' or 'Arrays.fill()' calls. This inspection suggests replacing loops with 'Arrays.setAll()' if the language level of the project or module is 8 or higher. Replacing loops with 'Arrays.fill()' is possible with any language level. Example: 'for (int i=0; i to break lines" + }, + "fullDescription": { + "text": "Reports blank lines in Javadoc comments. Blank lines in Javadoc may signal an intention split the text to different paragraphs. However, the Javadoc tool and IntelliJ IDEA will ignore them when rendering documentation comments. The quick-fix suggests to replace the blank line with a paragraph tag (

    ). Example: 'class Main {\n /**\n * Doesn't do anything.\n *\n * Does absolutely nothing\n */\n void foo() {}\n }' After the quick-fix is applied: 'class Main {\n /**\n * Doesn't do anything.\n *

    \n * Does absolutely nothing\n */\n void foo() {}\n }' New in 2022.1", + "markdown": "Reports blank lines in Javadoc comments.\n\n\nBlank lines in Javadoc may signal an intention split the text to different paragraphs. However, the Javadoc tool and IntelliJ IDEA will\nignore them when rendering documentation comments.\n\n\nThe quick-fix suggests to replace the blank line with a paragraph tag (\\).\n\n**Example:**\n\n\n class Main {\n /**\n * Doesn't do anything.\n *\n * Does absolutely nothing\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * Doesn't do anything.\n *

    \n * Does absolutely nothing\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavadocBlankLines", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassWithPublicConstructor", + "shortDescription": { + "text": "Utility class with 'public' constructor" + }, + "fullDescription": { + "text": "Reports utility classes with 'public' constructors. Utility classes have all fields and methods declared as 'static'. Creating a 'public' constructor in such classes is confusing and may cause accidental class instantiation. Example: 'public final class UtilityClass {\n public UtilityClass(){\n }\n public static void foo() {}\n }' After the quick-fix is applied: 'public final class UtilityClass {\n private UtilityClass(){\n }\n public static void foo() {}\n }'", + "markdown": "Reports utility classes with `public` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating a `public`\nconstructor in such classes is confusing and may cause accidental class instantiation.\n\n**Example:**\n\n\n public final class UtilityClass {\n public UtilityClass(){\n }\n public static void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public final class UtilityClass {\n private UtilityClass(){\n }\n public static void foo() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UtilityClassWithPublicConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterExtendsFinalClass", + "shortDescription": { + "text": "Type parameter extends 'final' class" + }, + "fullDescription": { + "text": "Reports type parameters declared to extend a 'final' class. Suggests replacing the type parameter with the type of the specified 'final' class since 'final' classes cannot be extended. Example: 'void foo() {\n List list; // Warning: the Integer class is a final class\n }' After the quick-fix is applied: 'void foo() {\n List list;\n }' This inspection depends on the Java feature 'Generics' which is available since Java 5.", + "markdown": "Reports type parameters declared to extend a `final` class.\n\nSuggests replacing the type parameter with the type of the specified `final` class since\n`final` classes cannot be extended.\n\n**Example:**\n\n\n void foo() {\n List list; // Warning: the Integer class is a final class\n }\n\nAfter the quick-fix is applied:\n\n\n void foo() {\n List list;\n }\n\nThis inspection depends on the Java feature 'Generics' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeParameterExtendsFinalClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be simplified to a single assignment, 'return', or 'assert' statement. Example: 'if (foo()) {\n return true;\n } else {\n return false;\n }' After the quick-fix is applied: 'return foo();' Configure the inspection: Use the Ignore chained 'if' statements option if you want to hide a warning for chained 'if' statements. For example, in the following code the warning will be hidden, but the quick-fix will still be available: 'if (condition1) return true;\n if (condition2) return false;\n return true;' Note that replacing 'if (isTrue()) assert false;' with 'assert isTrue();' may change the program semantics when asserts are disabled if condition has side effects. Use the Ignore 'if' statements with trivial 'assert' option if you want to hide a warning for 'if' statements containing only 'assert' statement in their bodies.", + "markdown": "Reports `if` statements that can be simplified to a single assignment, `return`, or `assert` statement.\n\nExample:\n\n\n if (foo()) {\n return true;\n } else {\n return false;\n }\n\nAfter the quick-fix is applied:\n\n\n return foo();\n\nConfigure the inspection:\n\nUse the **Ignore chained 'if' statements** option if you want to hide a warning for chained `if` statements.\n\nFor example, in the following code the warning will be hidden, but the quick-fix will still be available:\n\n\n if (condition1) return true;\n if (condition2) return false;\n return true;\n\nNote that replacing `if (isTrue()) assert false;` with `assert isTrue();` may change the program semantics\nwhen asserts are disabled if condition has side effects.\nUse the **Ignore 'if' statements with trivial 'assert'** option if you want to hide a warning for `if` statements\ncontaining only `assert` statement in their bodies." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantIfStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceGuardedByStatic", + "shortDescription": { + "text": "Instance member guarded by static field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations on instance fields or methods in which the guard is a 'static' field. Guarding a non-static by a static may result in excessive lock contention, as access to each locked field in any object instance will prevent simultaneous access to that field in every object instance. Example: 'private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations on instance fields or methods in which the guard is a `static` field. Guarding a non-static by a static may result in excessive lock contention, as access to each locked field in any object instance will prevent simultaneous access to that field in every object instance.\n\nExample:\n\n\n private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceGuardedByStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanMethodIsAlwaysInverted", + "shortDescription": { + "text": "Boolean method is always inverted" + }, + "fullDescription": { + "text": "Reports methods with a 'boolean' return type that are always negated when called. A quick-fix is provided to invert and optionally rename the method. For performance reasons, not all problematic methods may be highlighted in the editor. Example: 'class C {\n boolean alwaysTrue() {\n return true;\n }\n\n void f() {\n if (!alwaysTrue()) {\n return;\n }\n }\n boolean member = !alwaysTrue();\n }' After the quick-fix is applied: 'class C {\n boolean alwaysFalse() {\n return false;\n }\n\n void f() {\n if (alwaysFalse()) {\n return;\n }\n }\n boolean member = alwaysFalse();\n }'", + "markdown": "Reports methods with a `boolean` return type that are always negated when called.\n\nA quick-fix is provided to invert and optionally rename the method.\nFor performance reasons, not all problematic methods may be highlighted in the editor.\n\nExample:\n\n\n class C {\n boolean alwaysTrue() {\n return true;\n }\n\n void f() {\n if (!alwaysTrue()) {\n return;\n }\n }\n boolean member = !alwaysTrue();\n }\n\nAfter the quick-fix is applied:\n\n\n class C {\n boolean alwaysFalse() {\n return false;\n }\n\n void f() {\n if (alwaysFalse()) {\n return;\n }\n }\n boolean member = alwaysFalse();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BooleanMethodIsAlwaysInverted", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoCloseableResource", + "shortDescription": { + "text": "AutoCloseable used without 'try'-with-resources" + }, + "fullDescription": { + "text": "Reports 'AutoCloseable' instances which are not used in a try-with-resources statement, also known as Automatic Resource Management. This means that the \"open resource before/in 'try', close in 'finally'\" style that had been used before try-with-resources became available, is also reported. This inspection is meant to replace all opened but not safely closed inspections when developing in Java 7 and higher. Example: 'private static void foo() throws IOException {\n InputStream profile = Thread.currentThread().getContextClassLoader().getResourceAsStream(\"/someFile\");\n System.out.println(profile.read());\n }' Use the following options to configure the inspection: List subclasses of 'AutoCloseable' that do not need to be closed and should be ignored by this inspection. Note: The inspection will still report streams returned from the 'java.nio.file.Files' methods 'lines()', 'walk()', 'list()' and 'find()', even when 'java.util.stream.Stream' is listed to be ignored. These streams contain an associated I/O resource that needs to be closed. List methods returning 'AutoCloseable' that should be ignored when called. Whether to ignore an 'AutoCloseable' if it is the result of a method call. When this option is enabled, the results of factory methods will also be ignored. Whether the inspection should report if an 'AutoCloseable' instance is passed as a method call argument. If this option is enabled, the inspection assumes the resource is closed in the called method. Method calls inside a 'finally' block with 'close' in the name and an 'AutoCloseable' argument will not be ignored. Whether to ignore method references to constructors of resource classes. Whether to ignore methods that return a resource and whose name starts with 'get'. This can reduce false positives because most of the getters do not transfer the ownership of the resource, and their call sites are not responsible for closing the resource. This inspection depends on the Java feature 'Try-with-resources' which is available since Java 7.", + "markdown": "Reports `AutoCloseable` instances which are not used in a try-with-resources statement, also known as *Automatic Resource Management* .\n\n\nThis means that the \"open resource before/in `try`, close in `finally`\" style that had been used before\ntry-with-resources became available, is also reported.\nThis inspection is meant to replace all *opened but not safely closed* inspections when developing in Java 7 and higher.\n\n**Example:**\n\n\n private static void foo() throws IOException {\n InputStream profile = Thread.currentThread().getContextClassLoader().getResourceAsStream(\"/someFile\");\n System.out.println(profile.read());\n }\n\n\nUse the following options to configure the inspection:\n\n* List subclasses of `AutoCloseable` that do not need to be closed and should be ignored by this inspection. \n **Note** : The inspection will still report streams returned from the `java.nio.file.Files` methods `lines()`, `walk()`, `list()` and `find()`, even when `java.util.stream.Stream` is listed to be ignored. These streams contain an associated I/O resource that needs to be closed.\n* List methods returning `AutoCloseable` that should be ignored when called.\n* Whether to ignore an `AutoCloseable` if it is the result of a method call. When this option is enabled, the results of factory methods will also be ignored.\n* Whether the inspection should report if an `AutoCloseable` instance is passed as a method call argument. If this option is enabled, the inspection assumes the resource is closed in the called method. Method calls inside a `finally` block with 'close' in the name and an `AutoCloseable` argument will not be ignored.\n* Whether to ignore method references to constructors of resource classes.\n* Whether to ignore methods that return a resource and whose name starts with 'get'. This can reduce false positives because most of the getters do not transfer the ownership of the resource, and their call sites are not responsible for closing the resource.\n\nThis inspection depends on the Java feature 'Try-with-resources' which is available since Java 7." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "resource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleStatementInBlock", + "shortDescription": { + "text": "Code block contains single statement" + }, + "fullDescription": { + "text": "Reports control flow statements with a single statement in their code block and suggests removing the braces from the control flow statement body. Example: 'if (x > 0) {\n System.out.println(\"x is positive\");\n }' After the quick-fix is applied: 'if (x > 0) System.out.println(\"x is positive\");'", + "markdown": "Reports control flow statements with a single statement in their code block and suggests removing the braces from the control flow statement body.\n\nExample:\n\n\n if (x > 0) {\n System.out.println(\"x is positive\");\n }\n\nAfter the quick-fix is applied:\n\n\n if (x > 0) System.out.println(\"x is positive\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SingleStatementInBlock", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestCaseWithConstructor", + "shortDescription": { + "text": "TestCase with non-trivial constructors" + }, + "fullDescription": { + "text": "Reports test cases with initialization logic in their constructors. If a constructor fails, the '@After' annotated or 'tearDown()' method won't be called. This can leave the test environment partially initialized, which can adversely affect other tests. Instead, initialization of test cases should be done in a 'setUp()' or '@Before' annotated method. Bad example: 'public class ImportantTest {\n private File file;\n\n public ImportantTest() throws IOException {\n file = File.createTempFile(\"xyz\", \".tmp\");\n }\n\n // ... tests go here\n }'", + "markdown": "Reports test cases with initialization logic in their constructors. If a constructor fails, the `@After` annotated or `tearDown()` method won't be called. This can leave the test environment partially initialized, which can adversely affect other tests. Instead, initialization of test cases should be done in a `setUp()` or `@Before` annotated method.\n\nBad example:\n\n\n public class ImportantTest {\n private File file;\n\n public ImportantTest() throws IOException {\n file = File.createTempFile(\"xyz\", \".tmp\");\n }\n\n // ... tests go here\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnitTestCaseWithNonTrivialConstructors", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadObjectAndWriteObjectPrivate", + "shortDescription": { + "text": "'readObject()' or 'writeObject()' not declared 'private'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes where the 'readObject' or 'writeObject' methods are not declared private. There is no reason these methods should ever have a higher visibility than 'private'. A quick-fix is suggested to make the corresponding method 'private'. Example: 'public class Test implements Serializable {\n public void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }' After the quick-fix is applied: 'public class Test implements Serializable {\n private void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }'", + "markdown": "Reports `Serializable` classes where the `readObject` or `writeObject` methods are not declared private. There is no reason these methods should ever have a higher visibility than `private`.\n\n\nA quick-fix is suggested to make the corresponding method `private`.\n\n**Example:**\n\n\n public class Test implements Serializable {\n public void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test implements Serializable {\n private void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonPrivateSerializationMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantFileCreation", + "shortDescription": { + "text": "Redundant 'File' instance creation" + }, + "fullDescription": { + "text": "Reports redundant 'File' creation in one of the following constructors when only 'String' path can be used: 'FileInputStream', 'FileOutputStream', 'FileReader', 'FileWriter', 'PrintStream', 'PrintWriter', 'Formatter'. Example: 'InputStream is = new FileInputStream(new File(\"in.txt\"));' After quick-fix is applied: 'InputStream is = new FileInputStream(\"in.txt\");' New in 2020.3", + "markdown": "Reports redundant `File` creation in one of the following constructors when only `String` path can be used: `FileInputStream`, `FileOutputStream`, `FileReader`, `FileWriter`, `PrintStream`, `PrintWriter`, `Formatter`.\n\nExample:\n\n\n InputStream is = new FileInputStream(new File(\"in.txt\"));\n\nAfter quick-fix is applied:\n\n\n InputStream is = new FileInputStream(\"in.txt\");\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantFileCreation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBooleanExpression", + "shortDescription": { + "text": "Pointless boolean expression" + }, + "fullDescription": { + "text": "Reports unnecessary or overly complicated boolean expressions. Such expressions include '&&'-ing with 'true', '||'-ing with 'false', equality comparison with a boolean literal, or negation of a boolean literal. Such expressions can be simplified. Example: 'boolean a = !(x && false);\n boolean b = false || x;\n boolean c = x != true;' After the quick-fix is applied: 'boolean a = true;\n boolean b = x;\n boolean c = !x;' Configure the inspection: Use the Ignore named constants in determining pointless expressions option to ignore named constants when determining if an expression is pointless.", + "markdown": "Reports unnecessary or overly complicated boolean expressions.\n\nSuch expressions include `&&`-ing with `true`,\n`||`-ing with `false`,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions can be simplified.\n\nExample:\n\n\n boolean a = !(x && false);\n boolean b = false || x;\n boolean c = x != true;\n\nAfter the quick-fix is applied:\n\n\n boolean a = true;\n boolean b = x;\n boolean c = !x;\n\n\nConfigure the inspection:\nUse the **Ignore named constants in determining pointless expressions** option to ignore named constants when determining if an expression is pointless." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBooleanExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListenerMayUseAdapter", + "shortDescription": { + "text": "Class may extend adapter instead of implementing listener" + }, + "fullDescription": { + "text": "Reports classes implementing listeners instead of extending corresponding adapters. A quick-fix is available to remove any redundant empty methods left after replacing a listener implementation with an adapter extension. Use the Only warn when empty implementing methods are found option to configure the inspection to warn even if no empty methods are found.", + "markdown": "Reports classes implementing listeners instead of extending corresponding adapters.\n\nA quick-fix is available to\nremove any redundant empty methods left after replacing a listener implementation with an adapter extension.\n\n\nUse the **Only warn when empty implementing methods are found** option to configure the inspection to warn even if no empty methods are found." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ListenerMayUseAdapter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RefusedBequest", + "shortDescription": { + "text": "Method does not call super method" + }, + "fullDescription": { + "text": "Reports methods that override a super method without calling it. This is also known as a refused bequest. Such methods may represent a failure of abstraction and cause hard-to-trace bugs. The inspection doesn't report methods overridden from 'java.lang.Object', except for 'clone()'. The 'clone()' method should by convention call its super method, which will return an object of the correct type. Example 1: 'class A {\n @Override\n public Object clone() {\n // does not call 'super.clone()'\n return new A();\n }\n }' Example 2: 'interface I {\n default void foo() {}\n }\n\n class A implements I {\n // warning on method when\n // 'Ignore 'default' super methods' is disabled\n @Override\n public void foo(){}\n }' Configure the inspection: Use the Only report when super method is annotated by option to ignore super methods marked with the annotations from the provided list. You can manually add annotations to the list. Use the Ignore empty super methods option to ignore super methods that are either empty or only throw an exception. Use the Ignore 'default' super methods option to ignore 'default' super methods from interfaces.", + "markdown": "Reports methods that override a super method without calling it. This is also known as a *refused bequest* . Such methods may represent a failure of abstraction and cause hard-to-trace bugs.\n\n\nThe inspection doesn't report methods overridden from `java.lang.Object`, except for `clone()`.\nThe `clone()` method should by convention call its super method,\nwhich will return an object of the correct type.\n\n**Example 1:**\n\n\n class A {\n @Override\n public Object clone() {\n // does not call 'super.clone()'\n return new A();\n }\n }\n\n**Example 2:**\n\n\n interface I {\n default void foo() {}\n }\n\n class A implements I {\n // warning on method when\n // 'Ignore 'default' super methods' is disabled\n @Override\n public void foo(){}\n }\n\nConfigure the inspection:\n\n* Use the **Only report when super method is annotated by** option to ignore super methods marked with the annotations from the provided list. You can manually add annotations to the list.\n* Use the **Ignore empty super methods** option to ignore super methods that are either empty or only throw an exception.\n* Use the **Ignore 'default' super methods** option to ignore `default` super methods from interfaces." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MethodDoesntCallSuperMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryReturn", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports 'return' statements at the end of constructors and methods returning 'void'. These statements are redundant and may be safely removed. This inspection does not report in JSP files. Example: 'void message() {\n System.out.println(\"Hello World\");\n return;\n }' After the quick-fix is applied: 'void message() {\n System.out.println(\"Hello World\");\n }' Use the Ignore in then branch of 'if' statement with 'else' branch option to ignore 'return' statements in the then branch of 'if' statements which also have an 'else' branch.", + "markdown": "Reports `return` statements at the end of constructors and methods returning `void`. These statements are redundant and may be safely removed.\n\nThis inspection does not report in JSP files.\n\nExample:\n\n\n void message() {\n System.out.println(\"Hello World\");\n return;\n }\n\nAfter the quick-fix is applied:\n\n\n void message() {\n System.out.println(\"Hello World\");\n }\n\n\nUse the **Ignore in then branch of 'if' statement with 'else' branch** option to ignore `return` statements in the then branch of `if` statements\nwhich also have an `else` branch." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryReturnStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicInnerClass", + "shortDescription": { + "text": "'public' nested class" + }, + "fullDescription": { + "text": "Reports 'public' nested classes. Example: 'public class Outer {\n public static class Nested {} // warning\n public class Inner {} // warning\n public enum Mode {} // warning depends on the setting\n public interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore 'public' inner enums option to ignore 'public' inner enums. Use the Ignore 'public' inner interfaces option to ignore 'public' inner interfaces.", + "markdown": "Reports `public` nested classes.\n\n**Example:**\n\n\n public class Outer {\n public static class Nested {} // warning\n public class Inner {} // warning\n public enum Mode {} // warning depends on the setting\n public interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'public' inner enums** option to ignore `public` inner enums.\n* Use the **Ignore 'public' inner interfaces** option to ignore `public` inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalGuard", + "shortDescription": { + "text": "Non-final '@GuardedBy' field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations in which the guarding field is not 'final'. Guarding on a non-final field may result in unexpected race conditions, as locks will be held on the value of the field (which may change), rather than the field itself. Example: 'private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations in which the guarding field is not `final`.\n\nGuarding on a non-final field may result in unexpected race conditions, as locks will\nbe held on the value of the field (which may change), rather than the field itself.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalGuard", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionAddedToSelf", + "shortDescription": { + "text": "Collection added to itself" + }, + "fullDescription": { + "text": "Reports cases where the argument of a method call on a 'java.util.Collection' or 'java.util.Map' is the collection or map itself. Such situations may occur as a result of copy-paste in code with raw types. Example: 'ArrayList list = new ArrayList<>();\n list.add(list); // warning here\n return list.hashCode(); // throws StackOverflowError'", + "markdown": "Reports cases where the argument of a method call on a `java.util.Collection` or `java.util.Map` is the collection or map itself. Such situations may occur as a result of copy-paste in code with raw types.\n\n**Example:**\n\n\n ArrayList list = new ArrayList<>();\n list.add(list); // warning here\n return list.hashCode(); // throws StackOverflowError\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CollectionAddedToSelf", + "cweIds": [ + 664, + 688 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarySuperQualifier", + "shortDescription": { + "text": "Unnecessary 'super' qualifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'super' qualifiers in method calls and field references. A 'super' qualifier is unnecessary when the field or method of the superclass is not hidden/overridden in the calling class. Example: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }' After the quick-fix is applied: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n foo();\n }\n }' Use the inspection settings to ignore qualifiers that help to distinguish superclass members access from the identically named members of the outer class. See also the following inspections: Java | Visibility | Access to inherited field looks like access to element from surrounding code Java | Visibility | Call to inherited method looks like call to local method", + "markdown": "Reports unnecessary `super` qualifiers in method calls and field references.\n\n\nA `super` qualifier is unnecessary\nwhen the field or method of the superclass is not hidden/overridden in the calling class.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n foo();\n }\n }\n\n\nUse the inspection settings to ignore qualifiers that help to distinguish superclass members access\nfrom the identically named members of the outer class.\n\n\nSee also the following inspections:\n\n* *Java \\| Visibility \\| Access to inherited field looks like access to element from surrounding code*\n* *Java \\| Visibility \\| Call to inherited method looks like call to local method*" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessarySuperQualifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsOnSuspiciousObject", + "shortDescription": { + "text": "'equals()' called on classes which don't override it" + }, + "fullDescription": { + "text": "Reports 'equals()' calls on 'StringBuilder', 'StringBuffer' and instances of 'java.util.concurrent.atomic' package. The 'equals()' method is not overridden in these classes, so it may return 'false' even when the contents of the two objects are the same. If the reference equality is intended, it's better to use '==' to avoid confusion. A quick-fix for 'StringBuilder', 'StringBuffer', 'AtomicBoolean', 'AtomicInteger', 'AtomicBoolean' and 'AtomicLong' is available to transform into a comparison of contents. The quick-fix may change the semantics when one of the instances is null. Example: 'public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.equals(sb2); // Suspicious\n }' After the quick-fix is applied: 'public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.toString().equals(sb2.toString());\n }' New in 2017.2", + "markdown": "Reports `equals()` calls on `StringBuilder`, `StringBuffer` and instances of `java.util.concurrent.atomic` package.\n\nThe `equals()` method is not overridden in these classes, so it may return `false` even when the contents of the\ntwo objects are the same.\nIf the reference equality is intended, it's better to use `==` to avoid confusion.\nA quick-fix for `StringBuilder`, `StringBuffer`, `AtomicBoolean`, `AtomicInteger`, `AtomicBoolean` and `AtomicLong` is available to transform into a comparison of contents. The quick-fix may change the semantics when one of the instances is null.\n\nExample:\n\n\n public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.equals(sb2); // Suspicious\n }\n\nAfter the quick-fix is applied:\n\n\n public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.toString().equals(sb2.toString());\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsOnSuspiciousObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfPropertiesAsHashtable", + "shortDescription": { + "text": "Use of 'Properties' object as a 'Hashtable'" + }, + "fullDescription": { + "text": "Reports calls to the following methods on 'java.util.Properties' objects: 'put()' 'putIfAbsent()' 'putAll()' 'get()' For historical reasons, 'java.util.Properties' inherits from 'java.util.Hashtable', but using these methods is discouraged to prevent pollution of properties with values of types other than 'String'. Calls to 'java.util.Properties.putAll()' won't get reported when both the key and the value parameters in the map are of the 'String' type. Such a call is safe and no better alternative exists. Example: 'Object f(Properties props) {\n props.put(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.get(\"Hello\");\n }' After the quick-fix is applied: 'Object f(Properties props) {\n props.setProperty(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.getProperty(\"hello\");\n }'", + "markdown": "Reports calls to the following methods on `java.util.Properties` objects:\n\n* `put()`\n* `putIfAbsent()`\n* `putAll()`\n* `get()`\n\n\nFor historical reasons, `java.util.Properties` inherits from `java.util.Hashtable`,\nbut using these methods is discouraged to prevent pollution of properties with values of types other than `String`.\n\n\nCalls to `java.util.Properties.putAll()` won't get reported when\nboth the key and the value parameters in the map are of the `String` type.\nSuch a call is safe and no better alternative exists.\n\n**Example:**\n\n\n Object f(Properties props) {\n props.put(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.get(\"Hello\");\n }\n\nAfter the quick-fix is applied:\n\n\n Object f(Properties props) {\n props.setProperty(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.getProperty(\"hello\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfPropertiesAsHashtable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCoupling", + "shortDescription": { + "text": "Overly coupled method" + }, + "fullDescription": { + "text": "Reports methods that reference too many other classes. Methods with too high coupling can be very fragile and should be probably split into smaller methods. Each referenced class is counted only once no matter how many times it is referenced. Configure the inspection: Use the Method coupling limit field to specify the maximum allowed coupling for a method. Use the Include couplings to java system classes option to count references to classes from 'java'or 'javax' packages. Use the Include couplings to library classes option to count references to third-party library classes.", + "markdown": "Reports methods that reference too many other classes. Methods with too high coupling can be very fragile and should be probably split into smaller methods.\n\nEach referenced class is counted only once no matter how many times it is referenced.\n\nConfigure the inspection:\n\n* Use the **Method coupling limit** field to specify the maximum allowed coupling for a method.\n* Use the **Include couplings to java system classes** option to count references to classes from `java`or `javax` packages.\n* Use the **Include couplings to library classes** option to count references to third-party library classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyCoupledMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessToStaticFieldLockedOnInstance", + "shortDescription": { + "text": "Access to 'static' field locked on instance data" + }, + "fullDescription": { + "text": "Reports access to non-constant static fields that are locked on either 'this' or an instance field of 'this'. Locking a static field on instance data does not prevent the field from being modified by other instances, and thus may result in unexpected race conditions. Example: 'static String test;\n public void foo() {\n synchronized (this) {\n System.out.println(test); // warning\n }\n }' There is a quick-fix that allows ignoring static fields of specific types. You can manage those ignored types in the inspection options. Use the inspection options to specify which classes used for static fields should be ignored.", + "markdown": "Reports access to non-constant static fields that are locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in unexpected race conditions.\n\n**Example:**\n\n\n static String test;\n public void foo() {\n synchronized (this) {\n System.out.println(test); // warning\n }\n }\n\n\nThere is a quick-fix that allows ignoring static fields of specific types.\nYou can manage those ignored types in the inspection options.\n\n\nUse the inspection options to specify which classes used for static fields should be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AccessToStaticFieldLockedOnInstance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VariableTypeCanBeExplicit", + "shortDescription": { + "text": "Variable type can be explicit" + }, + "fullDescription": { + "text": "Reports local variables of the 'var' type that can be replaced with an explicit type. Example: 'var str = \"Hello\";' After the quick-fix is applied: 'String str = \"Hello\";' This inspection depends on the Java feature 'Local variable type inference' which is available since Java 10.", + "markdown": "Reports local variables of the `var` type that can be replaced with an explicit type.\n\n**Example:**\n\n\n var str = \"Hello\";\n\nAfter the quick-fix is applied:\n\n\n String str = \"Hello\";\n\nThis inspection depends on the Java feature 'Local variable type inference' which is available since Java 10." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "VariableTypeCanBeExplicit", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 10", + "index": 158, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8ListSort", + "shortDescription": { + "text": "'Collections.sort()' can be replaced with 'List.sort()'" + }, + "fullDescription": { + "text": "Reports calls of 'Collections.sort(list, comparator)' which can be replaced with 'list.sort(comparator)'. 'Collections.sort' is just a wrapper, so it is better to use an instance method directly. This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.", + "markdown": "Reports calls of `Collections.sort(list, comparator)` which can be replaced with `list.sort(comparator)`.\n\n`Collections.sort` is just a wrapper, so it is better to use an instance method directly.\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java8ListSort", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorCombinators", + "shortDescription": { + "text": "'Comparator' combinator can be used" + }, + "fullDescription": { + "text": "Reports 'Comparator' instances defined as lambda expressions that could be expressed using 'Comparator.comparing()' calls. Chained comparisons which can be replaced by 'Comparator.thenComparing()' expression are also reported. Example: 'myList.sort((person1, person2) -> person1.getName().compareTo(person2.getName()));\n\n myList2.sort((person1, person2) -> {\n int res = person1.first().compareTo(person2.first());\n if(res == 0) res = person1.second().compareTo(person2.second());\n if(res == 0) res = person1.third() - person2.third();\n return res;\n });' After the quick-fixes are applied: 'myList.sort(Comparator.comparing(Person::getName));\n\n myList2.sort(Comparator.comparing(Person::first)\n .thenComparing(Person::second)\n .thenComparingInt(Person::third));' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports `Comparator` instances defined as lambda expressions that could be expressed using `Comparator.comparing()` calls. Chained comparisons which can be replaced by `Comparator.thenComparing()` expression are also reported.\n\nExample:\n\n\n myList.sort((person1, person2) -> person1.getName().compareTo(person2.getName()));\n\n myList2.sort((person1, person2) -> {\n int res = person1.first().compareTo(person2.first());\n if(res == 0) res = person1.second().compareTo(person2.second());\n if(res == 0) res = person1.third() - person2.third();\n return res;\n });\n\nAfter the quick-fixes are applied:\n\n\n myList.sort(Comparator.comparing(Person::getName));\n\n myList2.sort(Comparator.comparing(Person::first)\n .thenComparing(Person::second)\n .thenComparingInt(Person::third));\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ComparatorCombinators", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsReplaceableByObjectsCall", + "shortDescription": { + "text": "'equals()' expression replaceable by 'Objects.equals()' expression" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced with a call to 'java.util.Objects#equals'. Example: 'void f(Object a, Object b) {\n boolean result = a != null && a.equals(b);\n }' After the quick-fix is applied: 'void f(Object a, Object b) {\n boolean result = Objects.equals(a, b);\n }' Replacing expressions like 'a != null && a.equals(b)' with 'Objects.equals(a, b)' slightly changes the semantics. Use the Highlight expressions like 'a != null && a.equals(b)' option to enable or disable this behavior. This inspection only reports if the language level of the project or module is 7 or higher.", + "markdown": "Reports expressions that can be replaced with a call to `java.util.Objects#equals`.\n\n**Example:**\n\n\n void f(Object a, Object b) {\n boolean result = a != null && a.equals(b);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(Object a, Object b) {\n boolean result = Objects.equals(a, b);\n }\n\n\nReplacing expressions like `a != null && a.equals(b)` with `Objects.equals(a, b)`\nslightly changes the semantics. Use the **Highlight expressions like 'a != null \\&\\& a.equals(b)'** option to enable or disable this behavior.\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EqualsReplaceableByObjectsCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 159, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodCallInConstructor", + "shortDescription": { + "text": "Abstract method called during object construction" + }, + "fullDescription": { + "text": "Reports calls to 'abstract' methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'abstract class Parent {\n abstract void abstractMethod();\n }\n\n class Child extends Parent {\n Child() {\n abstractMethod();\n }\n }' This inspection shares the functionality with the following inspections: Overridable method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.", + "markdown": "Reports calls to `abstract` methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nSuch calls may result in subtle bugs, as object initialization may happen before the method call.\n\n**Example:**\n\n\n abstract class Parent {\n abstract void abstractMethod();\n }\n\n class Child extends Parent {\n Child() {\n abstractMethod();\n }\n }\n\nThis inspection shares the functionality with the following inspections:\n\n* Overridable method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractMethodCallInConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TailRecursion", + "shortDescription": { + "text": "Tail recursion" + }, + "fullDescription": { + "text": "Reports tail recursion, that is, when a method calls itself as its last action before returning. Tail recursion can always be replaced by looping, which will be considerably faster. Some JVMs perform tail-call optimization, while others do not. Thus, tail-recursive solutions may have considerably different performance characteristics on different virtual machines. Example: 'int factorial(int val, int runningVal) {\n if (val == 1) {\n return runningVal;\n } else {\n return factorial(val - 1, runningVal * val);\n }\n }' After the quick-fix is applied: 'int factorial(int val, int runningVal) {\n while (true) {\n if (val == 1) {\n return runningVal;\n } else {\n runningVal = runningVal * val;\n val = val - 1;\n }\n }\n }'", + "markdown": "Reports tail recursion, that is, when a method calls itself as its last action before returning.\n\n\nTail recursion can always be replaced by looping, which will be considerably faster.\nSome JVMs perform tail-call optimization, while others do not. Thus, tail-recursive solutions may have considerably different\nperformance characteristics on different virtual machines.\n\nExample:\n\n\n int factorial(int val, int runningVal) {\n if (val == 1) {\n return runningVal;\n } else {\n return factorial(val - 1, runningVal * val);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n int factorial(int val, int runningVal) {\n while (true) {\n if (val == 1) {\n return runningVal;\n } else {\n runningVal = runningVal * val;\n val = val - 1;\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TailRecursion", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEqualsEmptyString", + "shortDescription": { + "text": "'String.equals()' can be replaced with 'String.isEmpty()'" + }, + "fullDescription": { + "text": "Reports 'equals()' being called to compare a 'String' with an empty string. In this case, using '.isEmpty()' is better as it shows you exactly what you're checking. Example: 'void checkString(String s){\n if (\"\".equals(s)) throw new IllegalArgumentException();\n }' After the quick-fix is applied: 'void checkString(String s){\n if (s != null && s.isEmpty()) throw new IllegalArgumentException();\n }' '\"\".equals(str)' returns false when 'str' is null. For safety, this inspection's quick-fix inserts an explicit null-check when the 'equals()' argument is nullable. Use the option to make the inspection ignore such cases.", + "markdown": "Reports `equals()` being called to compare a `String` with an empty string. In this case, using `.isEmpty()` is better as it shows you exactly what you're checking.\n\n**Example:**\n\n\n void checkString(String s){\n if (\"\".equals(s)) throw new IllegalArgumentException();\n }\n\nAfter the quick-fix is applied:\n\n\n void checkString(String s){\n if (s != null && s.isEmpty()) throw new IllegalArgumentException();\n }\n\n\n`\"\".equals(str)` returns false when `str` is null. For safety, this inspection's quick-fix inserts an explicit\nnull-check when\nthe `equals()` argument is nullable. Use the option to make the inspection ignore such cases." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringEqualsEmptyString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PreviewFeature", + "shortDescription": { + "text": "Preview Feature warning" + }, + "fullDescription": { + "text": "Reports usages of Preview Feature APIs, i.e. of a module, package, class, interface, method, constructor, field, or enum constant in the 'java.*' or 'javax.*' namespace annotated with '@PreviewFeature'. A preview feature is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented, and is yet impermanent. The notion of a preview feature is defined in JEP 12. If some piece of code depends on a preview API, it may stop compiling in future JDK versions if the feature is changed or removed. The inspection only reports if the language level of the project or module is Preview. New in 2021.1", + "markdown": "Reports usages of Preview Feature APIs, i.e. of a module, package, class, interface, method, constructor, field, or enum constant in the `java.*` or `javax.*` namespace annotated with `@PreviewFeature`.\n\n\nA preview feature is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented,\nand is yet impermanent. The notion of a preview feature is defined in [JEP 12](https://openjdk.org/jeps/12).\n\n\nIf some piece of code depends on a preview API, it may stop compiling in future JDK versions if the feature is changed or removed.\n\nThe inspection only reports if the language level of the project or module is **Preview**.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "preview", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 160, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadThrows", + "shortDescription": { + "text": "Overly broad 'throws' clause" + }, + "fullDescription": { + "text": "Reports 'throws' clauses with exceptions that are more generic than the exceptions that the method actually throws. Example: 'public void createFile() throws Exception { // warning: 'throws Exception' is too broad, masking exception 'IOException'\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }' After the quick-fix is applied: 'public void createFile() throws IOException {\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }' Configure the inspection: Use the Maximum number of hidden exceptions to warn field to ignore exceptions, that hide a larger number of other exceptions than specified. Use the Only warn on RuntimeException, Exception, Error or Throwable option to have this inspection warn only on the most generic exceptions. Use the Ignore exceptions declared on methods overriding a library method option to ignore overly broad 'throws' clauses in methods that override a library method. Use the Ignore exceptions which hide others but are themselves thrown option to ignore any exceptions that hide other exceptions but still may be thrown from the method body and thus are technically not overly broad.", + "markdown": "Reports `throws` clauses with exceptions that are more generic than the exceptions that the method actually throws.\n\n**Example:**\n\n\n public void createFile() throws Exception { // warning: 'throws Exception' is too broad, masking exception 'IOException'\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nAfter the quick-fix is applied:\n\n\n public void createFile() throws IOException {\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nConfigure the inspection:\n\n* Use the **Maximum number of hidden exceptions to warn** field to ignore exceptions, that hide a larger number of other exceptions than specified.\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions declared on methods overriding a library method** option to ignore overly broad `throws` clauses in methods that override a library method.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown from the method body and thus are technically not overly broad." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyBroadThrowsClause", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitSubclassInspection", + "shortDescription": { + "text": "Final declaration can't be overridden at runtime" + }, + "fullDescription": { + "text": "Reports cases when your code prevents a class from being subclassed by some framework (for example, Spring or Hibernate) at runtime. Typical examples of necessary but impossible subclassing: 'final' classes marked with framework-specific annotations (for example, Spring '@Configuration') 'final', 'static' or 'private' methods marked with framework-specific annotations (for example, Spring '@Transactional') methods marked with framework-specific annotations inside 'final' classes The list of reported cases depends on the frameworks used.", + "markdown": "Reports cases when your code prevents a class from being subclassed by some framework (for example, Spring or Hibernate) at runtime.\n\nTypical examples of necessary but impossible subclassing:\n\n* `final` classes marked with framework-specific annotations (for example, Spring `@Configuration`)\n* `final`, `static` or `private` methods marked with framework-specific annotations (for example, Spring `@Transactional`)\n* methods marked with framework-specific annotations inside `final` classes\n\nThe list of reported cases depends on the frameworks used." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "ImplicitSubclassInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectEqualsCanBeEquality", + "shortDescription": { + "text": "'equals()' call can be replaced with '=='" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' that can be replaced by '==' or '!=' expressions without a change in semantics. These calls can be replaced when they are used to compare 'final' classes that don't have their own 'equals()' implementation but use the default 'Object.equals()'. This replacement may result in better performance. There is a separate inspection for 'equals()' calls on 'enum' values: 'equals()' called on Enum value.", + "markdown": "Reports calls to `equals()` that can be replaced by `==` or `!=` expressions without a change in semantics.\n\nThese calls can be replaced when they are used to compare `final` classes that don't have their own `equals()` implementation but use the default `Object.equals()`.\nThis replacement may result in better performance.\n\nThere is a separate inspection for `equals()` calls on `enum` values: 'equals()' called on Enum value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectEqualsCanBeEquality", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCPrepareStatementWithNonConstantString", + "shortDescription": { + "text": "Call to 'Connection.prepare*()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.sql.Connection.prepareStatement()', 'java.sql.Connection.prepareCall()', or any of their variants which take a dynamically-constructed string as the statement to prepare. Constructed SQL statements are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'String bar() { return \"bar\"; }\n\n Connection connection = DriverManager.getConnection(\"\", \"\", \"\");\n connection.(\"SELECT * FROM user WHERE name='\" + bar() + \"'\");' Use the inspection settings to consider any 'static' 'final' fields as constants. Be careful, because strings like the following will be ignored when the option is enabled: 'static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";'", + "markdown": "Reports calls to `java.sql.Connection.prepareStatement()`, `java.sql.Connection.prepareCall()`, or any of their variants which take a dynamically-constructed string as the statement to prepare.\n\n\nConstructed SQL statements are a common source of\nsecurity breaches. By default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String bar() { return \"bar\"; }\n\n Connection connection = DriverManager.getConnection(\"\", \"\", \"\");\n connection.(\"SELECT * FROM user WHERE name='\" + bar() + \"'\");\n\nUse the inspection settings to consider any `static` `final` fields as constants. Be careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JDBCPrepareStatementWithNonConstantString", + "cweIds": [ + 89 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemProperties", + "shortDescription": { + "text": "Access of system properties" + }, + "fullDescription": { + "text": "Reports code that accesses system properties using one of the following methods: 'System.getProperties()', 'System.setProperty()', 'System.setProperties()', 'System.clearProperties()' 'Integer.getInteger()' 'Boolean.getBoolean()' While accessing the system properties is not a security risk in itself, it is often found in malicious code. Code that accesses system properties should be closely examined in any security audit.", + "markdown": "Reports code that accesses system properties using one of the following methods:\n\n* `System.getProperties()`, `System.setProperty()`, `System.setProperties()`, `System.clearProperties()`\n* `Integer.getInteger()`\n* `Boolean.getBoolean()`\n\n\nWhile accessing the system properties is not a security risk in itself, it is often found in malicious code.\nCode that accesses system properties should be closely examined in any security audit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AccessOfSystemProperties", + "cweIds": [ + 250, + 668 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InvalidComparatorMethodReference", + "shortDescription": { + "text": "Invalid method reference used for 'Comparator'" + }, + "fullDescription": { + "text": "Reports method references mapped to the 'Comparator' interface that don't fulfill its contract. Some method references, like 'Integer::max', can be mapped to the 'Comparator' interface. However, using them as 'Comparator' is meaningless and the result might be unpredictable. Example: 'ArrayList ints = foo();\n ints.sort(Math::min);' After the quick-fix is applied: 'ArrayList ints = foo();\n ints.sort(Comparator.reverseOrder());'", + "markdown": "Reports method references mapped to the `Comparator` interface that don't fulfill its contract.\n\n\nSome method references, like `Integer::max`, can be mapped to the `Comparator` interface.\nHowever, using them as `Comparator` is meaningless and the result might be unpredictable.\n\nExample:\n\n\n ArrayList ints = foo();\n ints.sort(Math::min);\n\nAfter the quick-fix is applied:\n\n\n ArrayList ints = foo();\n ints.sort(Comparator.reverseOrder());\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InvalidComparatorMethodReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9ModuleExportsPackageToItself", + "shortDescription": { + "text": "Module exports/opens package to itself" + }, + "fullDescription": { + "text": "Reports packages that are exported to, or opened in the same Java 9 module in which they are defined. The quick-fix removes such directives from 'module-info.java'. Example: 'module com.mycomp {\n exports com.mycomp.main to com.mycomp;\n }' After the quick-fix is applied: 'module main {\n }' This inspection depends on the Java feature 'Modules' which is available since Java 9.", + "markdown": "Reports packages that are exported to, or opened in the same Java 9 module in which they are defined. The quick-fix removes such directives from `module-info.java`.\n\nExample:\n\n\n module com.mycomp {\n exports com.mycomp.main to com.mycomp;\n }\n\nAfter the quick-fix is applied:\n\n\n module main {\n }\n\nThis inspection depends on the Java feature 'Modules' which is available since Java 9." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Java9ModuleExportsPackageToItself", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ToArrayCallWithZeroLengthArrayArgument", + "shortDescription": { + "text": "'Collection.toArray()' call style" + }, + "fullDescription": { + "text": "Reports 'Collection.toArray()' calls that are not in the preferred style, and suggests applying the preferred style. There are two styles to convert a collection to an array: A pre-sized array, for example, 'c.toArray(new String[c.size()])' An empty array, for example, 'c.toArray(new String[0])' In older Java versions, using a pre-sized array was recommended, as the reflection call necessary to create an array of proper size was quite slow. However, since late updates of OpenJDK 6, this call was intrinsified, making the performance of the empty array version the same, and sometimes even better, compared to the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or synchronized collection as a data race is possible between the 'size' and 'toArray' calls. This may result in extra 'null's at the end of the array if the collection was concurrently shrunk during the operation. Use the inspection options to select the preferred style.", + "markdown": "Reports `Collection.toArray()` calls that are not in the preferred style, and suggests applying the preferred style.\n\nThere are two styles to convert a collection to an array:\n\n* A pre-sized array, for example, `c.toArray(new String[c.size()])`\n* An empty array, for example, `c.toArray(new String[0])`\n\nIn older Java versions, using a pre-sized array was recommended, as the reflection\ncall necessary to create an array of proper size was quite slow.\n\nHowever, since late updates of OpenJDK 6, this call was intrinsified, making\nthe performance of the empty array version the same, and sometimes even better, compared\nto the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or\nsynchronized collection as a data race is possible between the `size` and `toArray`\ncalls. This may result in extra `null`s at the end of the array if the collection was concurrently\nshrunk during the operation.\n\nUse the inspection options to select the preferred style." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ToArrayCallWithZeroLengthArrayArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggerInitializedWithForeignClass", + "shortDescription": { + "text": "Logger initialized with foreign class" + }, + "fullDescription": { + "text": "Reports 'Logger' instances that are initialized with a 'class' literal from a different class than the 'Logger' is contained in. This can easily happen when copy-pasting some code from another class and may result in logging events under an unexpected category and cause filters to be applied incorrectly. A quick-fix is provided to replace the foreign class literal with one from the surrounding class. Example: 'public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n // ... other fields and methods\n }' After the quick-fix is applied: 'public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Paramount.class);\n\n // ... other fields and methods\n }' Configure the inspection: Use the table to specify the logger factory classes and logger factory methods recognized by this inspection. Use the Ignore loggers initialized with a superclass option to ignore loggers that are initialized with a superclass of the class containing the logger. Use the Ignore loggers in non-public classes to only warn on loggers in 'public' classes.", + "markdown": "Reports `Logger` instances that are initialized with a `class` literal from a different class than the `Logger` is contained in. This can easily happen when copy-pasting some code from another class and may result in logging events under an unexpected category and cause filters to be applied incorrectly.\n\nA quick-fix is provided to replace the foreign class literal with one from the surrounding class.\n\n**Example:**\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n // ... other fields and methods\n }\n\nAfter the quick-fix is applied:\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Paramount.class);\n\n // ... other fields and methods\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the logger factory classes and logger factory methods recognized by this inspection.\n* Use the **Ignore loggers initialized with a superclass** option to ignore loggers that are initialized with a superclass of the class containing the logger.\n* Use the **Ignore loggers in non-public classes** to only warn on loggers in `public` classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoggerInitializedWithForeignClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MarkerInterface", + "shortDescription": { + "text": "Marker interface" + }, + "fullDescription": { + "text": "Reports marker interfaces without any methods or fields. Such interfaces may be confusing and typically indicate a design failure. The inspection ignores interfaces that extend two or more interfaces and interfaces that specify the generic type of their superinterface.", + "markdown": "Reports marker interfaces without any methods or fields.\n\nSuch interfaces may be confusing and typically indicate a design failure.\n\nThe inspection ignores interfaces that extend two or more interfaces and interfaces\nthat specify the generic type of their superinterface." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MarkerInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CommentedOutCode", + "shortDescription": { + "text": "Commented out code" + }, + "fullDescription": { + "text": "Reports comments that contain Java code. Usually, code that is commented out gets outdated very quickly and becomes misleading. As most projects use some kind of version control system, it is better to delete commented out code completely and use the VCS history instead. New in 2020.3", + "markdown": "Reports comments that contain Java code.\n\nUsually, code that is commented out gets outdated very quickly and becomes misleading.\nAs most projects use some kind of version control system,\nit is better to delete commented out code completely and use the VCS history instead.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CommentedOutCode", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SortedCollectionWithNonComparableKeys", + "shortDescription": { + "text": "Sorted collection with non-comparable elements" + }, + "fullDescription": { + "text": "Reports construction of sorted collections, for example 'TreeSet', that rely on natural ordering, whose element type doesn't implement the 'Comparable' interface. It's unlikely that such a collection will work properly. A false positive is possible if the collection element type is a non-comparable super-type, but the collection is intended to only hold comparable sub-types. Even if this is the case, it's better to narrow the collection element type or declare the super-type as 'Comparable' because the mentioned approach is error-prone. The inspection also reports cases when the collection element is a type parameter which is not declared as 'extends Comparable'. You can suppress the warnings on type parameters using the provided option (for example, to keep the API compatibility). New in 2018.3", + "markdown": "Reports construction of sorted collections, for example `TreeSet`, that rely on natural ordering, whose element type doesn't implement the `Comparable` interface.\n\nIt's unlikely that such a collection will work properly.\n\n\nA false positive is possible if the collection element type is a non-comparable super-type,\nbut the collection is intended to only hold comparable sub-types. Even if this is the case,\nit's better to narrow the collection element type or declare the super-type as `Comparable` because the mentioned approach is error-prone.\n\n\nThe inspection also reports cases when the collection element is a type parameter which is not declared as `extends Comparable`.\nYou can suppress the warnings on type parameters using the provided option (for example, to keep the API compatibility).\n\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SortedCollectionWithNonComparableKeys", + "cweIds": [ + 697 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutLogger", + "shortDescription": { + "text": "Class without logger" + }, + "fullDescription": { + "text": "Reports classes which do not have a declared logger. Ensuring that every class has a dedicated logger is an important step in providing a unified logging implementation for an application. Interfaces, enumerations, annotations, inner classes, and abstract classes are not reported by this inspection. For example: 'public class NoLoggerDeclared {\n\n int calculateNthDigitOfPi(int n) {\n // todo\n return 1;\n }\n }' Use the table in the Options section to specify logger class names. Classes which do not declare a field with the type of one of the specified classes will be reported by this inspection.", + "markdown": "Reports classes which do not have a declared logger.\n\nEnsuring that every class has a dedicated logger is an important step in providing a unified logging\nimplementation for an application. Interfaces, enumerations, annotations, inner classes, and abstract classes are not reported by this inspection.\n\nFor example:\n\n\n public class NoLoggerDeclared {\n\n int calculateNthDigitOfPi(int n) {\n // todo\n return 1;\n }\n }\n\n\nUse the table in the **Options** section to specify logger class names.\nClasses which do not declare a field with the type of one of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithoutLogger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnOfInnerClass", + "shortDescription": { + "text": "Return of instance of anonymous, local or inner class" + }, + "fullDescription": { + "text": "Reports 'return' statements that return an instance of an anonymous, local, or inner class. Such instances keep an implicit reference to the outer instance, which can prevent the outer instance from being garbage-collected. Any caller of a method returning such an instance might cause a memory leak by holding on to the instance returned. Configure the inspection: Use the Ignore returns from non-public methods option to ignore returns from 'protected' or package-private methods. Returns from 'private' methods are always ignored.", + "markdown": "Reports `return` statements that return an instance of an anonymous, local, or inner class. Such instances keep an implicit reference to the outer instance, which can prevent the outer instance from being garbage-collected. Any caller of a method returning such an instance might cause a memory leak by holding on to the instance returned.\n\n\nConfigure the inspection:\n\n* Use the **Ignore returns from non-public methods** option to ignore returns from `protected` or package-private methods. Returns from `private` methods are always ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReturnOfInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassComplexity", + "shortDescription": { + "text": "Overly complex anonymous class" + }, + "fullDescription": { + "text": "Reports anonymous inner classes whose total complexity exceeds the specified maximum. The total complexity of a class is the sum of cyclomatic complexities of all the methods and initializers the class declares. Inherited methods and initializers are not counted toward the total complexity. Anonymous classes should have very low complexity otherwise they are hard to understand and should be promoted to become named inner classes. Use the Cyclomatic complexity limit field to specify the maximum allowed complexity for a class.", + "markdown": "Reports anonymous inner classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nAnonymous classes should have very low complexity otherwise they are hard to understand and should be promoted to become named inner classes.\n\nUse the **Cyclomatic complexity limit** field to specify the maximum allowed complexity for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexAnonymousInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitWithoutCorrespondingNotify", + "shortDescription": { + "text": "'wait()' without corresponding 'notify()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.wait()', for which no call to the corresponding 'Object.notify()' or 'Object.notifyAll()' can be found. This inspection only reports calls with qualifiers referencing fields of the current class. Example: 'public class Foo {\n public Object foo = new Object();\n\n void bar() throws InterruptedException {\n this.foo.wait();\n }\n }'", + "markdown": "Reports calls to `Object.wait()`, for which no call to the corresponding `Object.notify()` or `Object.notifyAll()` can be found.\n\nThis inspection only reports calls with qualifiers referencing fields of the current class.\n\n**Example:**\n\n\n public class Foo {\n public Object foo = new Object();\n\n void bar() throws InterruptedException {\n this.foo.wait();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WaitWithoutCorrespondingNotify", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfAWTPeerClass", + "shortDescription": { + "text": "Use of AWT peer class" + }, + "fullDescription": { + "text": "Reports uses of AWT peer classes. Such classes represent native windowing system widgets, and will be non-portable between different windowing systems. Example: 'import java.awt.peer.ButtonPeer;\n\n abstract class Sample implements ButtonPeer {\n public void foo() {\n Sample sample;\n }\n }'", + "markdown": "Reports uses of AWT peer classes. Such classes represent native windowing system widgets, and will be non-portable between different windowing systems.\n\n**Example:**\n\n\n import java.awt.peer.ButtonPeer;\n\n abstract class Sample implements ButtonPeer {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfAWTPeerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitVariableType", + "shortDescription": { + "text": "Local variable type can be omitted" + }, + "fullDescription": { + "text": "Reports redundant local variable types. These types can be inferred from the context and thus replaced with 'var'. Example: 'void test(InputStream s) {\n try (InputStream in = s) {}\n }' After the fix is applied: 'void test(InputStream s) {\n try (var in = s) {}\n }' This inspection depends on the Java feature 'Local variable type inference' which is available since Java 10.", + "markdown": "Reports redundant local variable types.\n\nThese types can be inferred from the context and thus replaced with `var`.\n\n**Example:**\n\n\n void test(InputStream s) {\n try (InputStream in = s) {}\n }\n\nAfter the fix is applied:\n\n\n void test(InputStream s) {\n try (var in = s) {}\n }\n\n\nThis inspection depends on the Java feature 'Local variable type inference' which is available since Java 10." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RedundantExplicitVariableType", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 10", + "index": 158, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableWithUnconstructableAncestor", + "shortDescription": { + "text": "Serializable class with unconstructable ancestor" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose closest non-serializable ancestor doesn't have a no-argument constructor. Such classes cannot be deserialized and will fail with an 'InvalidClassException'. Example: 'class Ancestor {\n private String name;\n Ancestor(String name) {\n this.name = name;\n }\n }\n\n // warning on this class because the superclass is not\n // serializable, and its constructor takes arguments\n class Descendant extends Ancestor implements Serializable {\n Descendant() {\n super(\"Bob\");\n }\n }'", + "markdown": "Reports `Serializable` classes whose closest non-serializable ancestor doesn't have a no-argument constructor. Such classes cannot be deserialized and will fail with an `InvalidClassException`.\n\n**Example:**\n\n\n class Ancestor {\n private String name;\n Ancestor(String name) {\n this.name = name;\n }\n }\n\n // warning on this class because the superclass is not\n // serializable, and its constructor takes arguments\n class Descendant extends Ancestor implements Serializable {\n Descendant() {\n super(\"Bob\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableClassWithUnconstructableAncestor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExcessiveLambdaUsage", + "shortDescription": { + "text": "Excessive lambda usage" + }, + "fullDescription": { + "text": "Reports if a trivial lambda expression is used in cases in which there's an alternative method that behaves in the same way, but accepts a concrete value instead of a lambda. This inspection helps simplify the code. Example: 'Optional.orElseGet(() -> null)' After the quick-fix is applied: 'Optional.orElse(null)' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8. New in 2017.1", + "markdown": "Reports if a trivial lambda expression is used in cases in which there's an alternative method that behaves in the same way, but accepts a concrete value instead of a lambda.\n\nThis inspection helps simplify the code.\n\nExample:\n\n\n Optional.orElseGet(() -> null)\n\nAfter the quick-fix is applied:\n\n\n Optional.orElse(null)\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExcessiveLambdaUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaBodyCanBeCodeBlock", + "shortDescription": { + "text": "Lambda body can be code block" + }, + "fullDescription": { + "text": "Reports lambdas whose body is an expression and suggests converting expression bodies to code blocks. Example: 'n -> n + 1' After the quick-fix is applied: 'n -> {\n return n + 1;\n}' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambdas whose body is an expression and suggests converting expression bodies to code blocks.\n\nExample:\n\n\n n -> n + 1\n\nAfter the quick-fix is applied:\n\n n -> {\n return n + 1;\n }\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LambdaBodyCanBeCodeBlock", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterHidingMemberVariable", + "shortDescription": { + "text": "Parameter hides field" + }, + "fullDescription": { + "text": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended. A quick-fix is suggested to rename the parameter. Example: 'class Main {\n private String value;\n\n public Main(String value) {\n value = value.toUpperCase();\n }\n }' You can configure the following options for this inspection: Ignore for property setters - ignore parameters of simple setters. Ignore superclass fields not visible from subclass - ignore 'private' fields in a superclass, which are not visible from the method. Ignore for constructors - ignore parameters of constructors. Ignore for abstract methods - ignore parameters of abstract methods. Ignore for static method parameters hiding instance fields - ignore parameters of 'static' methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing.", + "markdown": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the parameter.\n\n**Example:**\n\n\n class Main {\n private String value;\n\n public Main(String value) {\n value = value.toUpperCase();\n }\n }\n \n\nYou can configure the following options for this inspection:\n\n1. **Ignore for property setters** - ignore parameters of simple setters.\n2. **Ignore superclass fields not visible from subclass** - ignore `private` fields in a superclass, which are not visible from the method.\n3. **Ignore for constructors** - ignore parameters of constructors.\n4. **Ignore for abstract methods** - ignore parameters of abstract methods.\n5. **Ignore for static method parameters hiding instance fields** - ignore parameters of `static` methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterHidesMemberVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomSecurityManager", + "shortDescription": { + "text": "Custom 'SecurityManager'" + }, + "fullDescription": { + "text": "Reports user-defined subclasses of 'java.lang.SecurityManager'. While not necessarily representing a security hole, such classes should be thoroughly and professionally inspected for possible security issues. Example: 'class CustomSecurityManager extends SecurityManager {\n }'", + "markdown": "Reports user-defined subclasses of `java.lang.SecurityManager`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\nand professionally inspected for possible security issues.\n\n**Example:**\n\n\n class CustomSecurityManager extends SecurityManager {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CustomSecurityManager", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectEquality", + "shortDescription": { + "text": "Object comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses '==' or '!=' rather than 'equals()' to test for object equality. Comparing objects using '==' or '!=' is often a bug, because it compares objects by identity instead of equality. Comparisons to 'null' are not reported. Array, 'String' and 'Number' comparisons are reported by separate inspections. Example: 'if (list1 == list2) {\n return;\n }' After the quick-fix is applied: 'if (Objects.equals(list1, list2)) {\n return;\n }' Use the inspection settings to configure exceptions for this inspection.", + "markdown": "Reports code that uses `==` or `!=` rather than `equals()` to test for object equality.\n\n\nComparing objects using `==` or `!=` is often a bug,\nbecause it compares objects by identity instead of equality.\nComparisons to `null` are not reported.\n\n\nArray, `String` and `Number` comparisons are reported by separate inspections.\n\n**Example:**\n\n if (list1 == list2) {\n return;\n }\n\nAfter the quick-fix is applied:\n\n if (Objects.equals(list1, list2)) {\n return;\n }\n\nUse the inspection settings to configure exceptions for this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectEquality", + "cweIds": [ + 480 + ], + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TimeToString", + "shortDescription": { + "text": "Call to 'Time.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on 'java.sql.Time' objects. Such calls are usually incorrect in an internationalized environment.", + "markdown": "Reports `toString()` calls on `java.sql.Time` objects. Such calls are usually incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToTimeToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternVariablesCanBeReplacedWithCast", + "shortDescription": { + "text": "Using 'instanceof' with patterns" + }, + "fullDescription": { + "text": "Reports 'instanceof' with patterns and suggests converting them to ordinary 'instanceof' with casts. This inspection makes it possible to move 'instanceof' with patterns to a codebase using an earlier Java version by applying the quick-fix. Note that the result can be not completely equivalent to the original 'instanceof' with patterns when a complex expression before 'instanceof' is used. In this case this expression will be reevaluated. Example: 'if (object instanceof String txt && txt.length() == 1) {\n System.out.println(txt);\n } else {\n return;\n }\n System.out.println(txt);' After the quick-fix is applied: 'if (object instanceof String && ((String) object).length() ==1) {\n String txt = (String) object;\n System.out.println(txt);\n } else {\n return;\n }\n String txt = (String) object;\n System.out.println(txt);' New in 2023.1", + "markdown": "Reports `instanceof` with patterns and suggests converting them to ordinary `instanceof` with casts.\n\nThis inspection makes it possible to move `instanceof` with patterns to a codebase using an earlier Java version\nby applying the quick-fix.\n\n\nNote that the result can be not completely equivalent to the original `instanceof` with patterns when\na complex expression before `instanceof` is used. In this case this expression will be reevaluated.\n\nExample:\n\n\n if (object instanceof String txt && txt.length() == 1) {\n System.out.println(txt);\n } else {\n return;\n }\n System.out.println(txt);\n\nAfter the quick-fix is applied:\n\n\n if (object instanceof String && ((String) object).length() ==1) {\n String txt = (String) object;\n System.out.println(txt);\n } else {\n return;\n }\n String txt = (String) object;\n System.out.println(txt);\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PatternVariablesCanBeReplacedWithCast", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualArrayToCollectionCopy", + "shortDescription": { + "text": "Manual array to collection copy" + }, + "fullDescription": { + "text": "Reports code that uses a loop to copy the contents of an array into a collection. A shorter and potentially faster (depending on the collection implementation) way to do this is using 'Collection.addAll(Arrays.asList())' or 'Collections.addAll()'. Only loops without additional statements inside are reported. Example: 'void addAll(List list, String[] arr) {\n for (int i = 0; i < arr.length; i++) {\n String s = arr[i];\n list.add(s);\n }\n }' After the quick-fix is applied: 'void addAll(List list, String[] arr) {\n Collections.addAll(list, arr);\n }'", + "markdown": "Reports code that uses a loop to copy the contents of an array into a collection.\n\n\nA shorter and potentially faster (depending on the collection implementation) way to do this is using `Collection.addAll(Arrays.asList())` or `Collections.addAll()`.\n\n\nOnly loops without additional statements inside are reported.\n\n**Example:**\n\n\n void addAll(List list, String[] arr) {\n for (int i = 0; i < arr.length; i++) {\n String s = arr[i];\n list.add(s);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void addAll(List list, String[] arr) {\n Collections.addAll(list, arr);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ManualArrayToCollectionCopy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchLabeledRuleCanBeCodeBlock", + "shortDescription": { + "text": "Labeled switch rule can have code block" + }, + "fullDescription": { + "text": "Reports rules of 'switch' expressions or enhanced 'switch' statements with an expression body. These can be converted to code blocks. Example: 'String message = switch (errorCode) {\n case 404 -> \"Not found!\";\n ...\n };' After the quick-fix is applied: 'String message = switch (errorCode) {\n case 404 -> {\n yield \"Not found!\";\n }\n ...\n };' This inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14. New in 2019.1", + "markdown": "Reports rules of `switch` expressions or enhanced `switch` statements with an expression body. These can be converted to code blocks.\n\nExample:\n\n\n String message = switch (errorCode) {\n case 404 -> \"Not found!\";\n ...\n };\n\nAfter the quick-fix is applied:\n\n\n String message = switch (errorCode) {\n case 404 -> {\n yield \"Not found!\";\n }\n ...\n };\n\nThis inspection depends on the Java feature 'Enhanced 'switch' blocks' which is available since Java 14.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SwitchLabeledRuleCanBeCodeBlock", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaReflectionMemberAccess", + "shortDescription": { + "text": "Reflective access to non-existent or not visible class member" + }, + "fullDescription": { + "text": "Reports reflective access to fields and methods that don't exist or aren't visible. Example: 'Field stringHashField() throws NoSuchFieldException {\n return String.class.getField(\"hash\");\n }' After the quick-fix is applied: 'Field stringHashField() throws NoSuchFieldException {\n return String.class.getDeclaredField(\"hash\");\n }' With a 'final' class, it's clear if there is a field or method with the specified name in the class. With non-'final' classes, it's possible that a subclass has a field or method with that name, so there could be false positives. Use the inspection's settings to get rid of such false positives everywhere or with specific classes. New in 2017.2", + "markdown": "Reports reflective access to fields and methods that don't exist or aren't visible.\n\nExample:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getField(\"hash\");\n }\n\nAfter the quick-fix is applied:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getDeclaredField(\"hash\");\n }\n\n\nWith a `final` class, it's clear if there is a field or method with the specified name in the class.\n\n\nWith non-`final` classes, it's possible that a subclass has a field or method with that name, so there could be false positives.\nUse the inspection's settings to get rid of such false positives everywhere or with specific classes.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaReflectionMemberAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 129, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObviousNullCheck", + "shortDescription": { + "text": "Null-check method is called with obviously non-null argument" + }, + "fullDescription": { + "text": "Reports if a null-checking method (for example, 'Objects.requireNonNull' or 'Assert.assertNotNull') is called on a value that is obviously non-null (for example, a newly created object). Such a check is redundant and may indicate a programming error. Example: 'final String greeting = Objects.requireNonNull(\"Hi!\");' After the quick-fix is applied: 'final String greeting = \"Hi!\";' New in 2017.2", + "markdown": "Reports if a null-checking method (for example, `Objects.requireNonNull` or `Assert.assertNotNull`) is called on a value that is obviously non-null (for example, a newly created object). Such a check is redundant and may indicate a programming error.\n\n**Example:**\n\n\n final String greeting = Objects.requireNonNull(\"Hi!\");\n\nAfter the quick-fix is applied:\n\n\n final String greeting = \"Hi!\";\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObviousNullCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialVersionUIDNotStaticFinal", + "shortDescription": { + "text": "'serialVersionUID' field not declared 'private static final long'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose 'serialVersionUID' field is not declared 'private static final long'. Example: 'class SampleClass implements Serializable {\n private long serialVersionUID = 1; // field of a Serializable class is not declared 'private static final long'\n\n public SampleClass() {\n System.out.println(serialVersionUID);\n }\n }'", + "markdown": "Reports `Serializable` classes whose `serialVersionUID` field is not declared `private static final long`.\n\n**Example:**\n\n\n class SampleClass implements Serializable {\n private long serialVersionUID = 1; // field of a Serializable class is not declared 'private static final long'\n\n public SampleClass() {\n System.out.println(serialVersionUID);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SerialVersionUIDWithWrongSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassOnInterface", + "shortDescription": { + "text": "Inner class of interface" + }, + "fullDescription": { + "text": "Reports inner classes in 'interface' classes. Some coding standards discourage the use of such classes. The inspection doesn't report enum classes and annotation interfaces. Use the Ignore inner interfaces of interfaces option to ignore inner interfaces. For example: 'interface I {\n interface Inner {\n }\n }'", + "markdown": "Reports inner classes in `interface` classes.\n\nSome coding standards\ndiscourage the use of such classes. The inspection doesn't report enum classes and annotation interfaces.\n\n\nUse the **Ignore inner interfaces of interfaces** option to ignore inner interfaces. For example:\n\n\n interface I {\n interface Inner {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InnerClassOfInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicFieldAccessedInSynchronizedContext", + "shortDescription": { + "text": "Non-private field accessed in 'synchronized' context" + }, + "fullDescription": { + "text": "Reports non-'final', non-'private' fields that are accessed in a synchronized context. A non-'private' field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\" access may result in unexpectedly inconsistent data structures. Example: 'class Bar {\n public String field1;\n }\n public Bar myBar;\n\n synchronized public void sample() {\n myBar.field1 = \"bar\";\n }'", + "markdown": "Reports non-`final`, non-`private` fields that are accessed in a synchronized context.\n\n\nA non-`private` field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n class Bar {\n public String field1;\n }\n public Bar myBar;\n\n synchronized public void sample() {\n myBar.field1 = \"bar\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonPrivateFieldAccessedInSynchronizedContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLabel", + "shortDescription": { + "text": "Unused label" + }, + "fullDescription": { + "text": "Reports labels that are not targets of any 'break' or 'continue' statements. Example: 'label: for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }' After the quick-fix is applied, the label is removed: 'for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }'", + "markdown": "Reports labels that are not targets of any `break` or `continue` statements.\n\n**Example:**\n\n\n label: for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n\nAfter the quick-fix is applied, the label is removed:\n\n\n for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForeachStatement", + "shortDescription": { + "text": "Enhanced 'for' statement" + }, + "fullDescription": { + "text": "Reports enhanced 'for' statements. Example: 'for (int x: Arrays.asList(1, 2, 3)) {\n System.out.println(x);\n }' After the quick-fix is applied: 'for (Iterator iterator = Arrays.asList(1, 2, 3).iterator(); iterator.hasNext(); ) {\n final int x = iterator.next();\n System.out.println(x);\n }' Enhanced 'for' statement appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports enhanced `for` statements.\n\nExample:\n\n\n for (int x: Arrays.asList(1, 2, 3)) {\n System.out.println(x);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Iterator iterator = Arrays.asList(1, 2, 3).iterator(); iterator.hasNext(); ) {\n final int x = iterator.next();\n System.out.println(x);\n }\n\n\n*Enhanced* `for` *statement* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForeachStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalUsedAsFieldOrParameterType", + "shortDescription": { + "text": "'Optional' used as field or parameter type" + }, + "fullDescription": { + "text": "Reports any cases in which 'java.util.Optional', 'java.util.OptionalDouble', 'java.util.OptionalInt', 'java.util.OptionalLong', or 'com.google.common.base.Optional' are used as types for fields or parameters. 'Optional' was designed to provide a limited mechanism for library method return types in which a clear way to represent \"no result\" was needed. Using a field with the 'java.util.Optional' type is also problematic if the class needs to be 'Serializable', as 'java.util.Optional' is not serializable. Example: 'class MyClass {\n Optional name; // Optional field\n\n // Optional parameter\n void setName(Optional name) {\n this.name = name;\n }\n }'", + "markdown": "Reports any cases in which `java.util.Optional`, `java.util.OptionalDouble`, `java.util.OptionalInt`, `java.util.OptionalLong`, or `com.google.common.base.Optional` are used as types for fields or parameters.\n\n`Optional` was designed to provide a limited mechanism for library method return types in which a clear way to represent \"no result\"\nwas needed.\n\nUsing a field with the `java.util.Optional` type is also problematic if the class needs to be\n`Serializable`, as `java.util.Optional` is not serializable.\n\nExample:\n\n\n class MyClass {\n Optional name; // Optional field\n\n // Optional parameter\n void setName(Optional name) {\n this.name = name;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalUsedAsFieldOrParameterType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAllDot", + "shortDescription": { + "text": "Suspicious regex expression argument" + }, + "fullDescription": { + "text": "Reports calls to 'String.replaceAll()' or 'String.split()' where the first argument is a single regex meta character argument. The regex meta characters are one of '.$|()[{^?*+\\'. They have a special meaning in regular expressions. For example, calling '\"ab.cd\".replaceAll(\".\", \"-\")' produces '\"-----\"', because the dot matches any character. Most likely the escaped variant '\"\\\\.\"' was intended instead. Using 'File.separator' as a regex is also reported. The 'File.separator' has a platform specific value. It equals to '/' on Linux and Mac but equals to '\\' on Windows, which is not a valid regular expression, so such code is not portable. Example: 's.replaceAll(\".\", \"-\");' After the quick-fix is applied: 's.replaceAll(\"\\\\.\", \"-\");'", + "markdown": "Reports calls to `String.replaceAll()` or `String.split()` where the first argument is a single regex meta character argument.\n\n\nThe regex meta characters are one of `.$|()[{^?*+\\`. They have a special meaning in regular expressions.\nFor example, calling `\"ab.cd\".replaceAll(\".\", \"-\")` produces `\"-----\"`, because the dot matches any character.\nMost likely the escaped variant `\"\\\\.\"` was intended instead.\n\n\nUsing `File.separator` as a regex is also reported. The `File.separator` has a platform specific value. It\nequals to `/` on Linux and Mac but equals to `\\` on Windows, which is not a valid regular expression, so\nsuch code is not portable.\n\n**Example:**\n\n\n s.replaceAll(\".\", \"-\");\n\nAfter the quick-fix is applied:\n\n\n s.replaceAll(\"\\\\.\", \"-\");\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousRegexArgument", + "cweIds": [ + 20, + 185, + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForCanBeForeach", + "shortDescription": { + "text": "'for' loop can be replaced with enhanced for loop" + }, + "fullDescription": { + "text": "Reports 'for' loops that iterate over collections or arrays, and can be automatically replaced with an enhanced 'for' loop (foreach iteration syntax). Example: 'for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {\n String item = iterator.next();\n System.out.println(item);\n }' After the quick-fix is applied: 'for (String item : list) {\n System.out.println(item);\n }' Use the Report indexed 'java.util.List' loops option to find loops involving 'list.get(index)' calls. Generally, these loops can be replaced with enhanced 'for' loops, unless they modify an underlying list in the process, for example, by calling 'list.remove(index)'. If the latter is the case, the enhanced 'for' loop may throw 'ConcurrentModificationException'. Also, in some cases, 'list.get(index)' loops may work a little bit faster. Use the Do not report iterations over untyped collections option to ignore collections without type parameters. This prevents the creation of enhanced 'for' loop variables of the 'java.lang.Object' type and the insertion of casts where the loop variable is used. This inspection depends on the Java feature 'For-each loops' which is available since Java 5.", + "markdown": "Reports `for` loops that iterate over collections or arrays, and can be automatically replaced with an enhanced `for` loop (foreach iteration syntax).\n\n**Example:**\n\n\n for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {\n String item = iterator.next();\n System.out.println(item);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String item : list) {\n System.out.println(item);\n }\n\n\nUse the **Report indexed 'java.util.List' loops** option to find loops involving `list.get(index)` calls.\nGenerally, these loops can be replaced with enhanced `for` loops,\nunless they modify an underlying list in the process, for example, by calling `list.remove(index)`.\nIf the latter is the case, the enhanced `for` loop may throw `ConcurrentModificationException`.\nAlso, in some cases, `list.get(index)` loops may work a little bit faster.\n\n\nUse the **Do not report iterations over untyped collections** option to ignore collections without type parameters.\nThis prevents the creation of enhanced `for` loop variables of the `java.lang.Object` type and the insertion of casts\nwhere the loop variable is used.\n\nThis inspection depends on the Java feature 'For-each loops' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForLoopReplaceableByForEach", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageVisibleField", + "shortDescription": { + "text": "Package-visible field" + }, + "fullDescription": { + "text": "Reports fields that are declared without any access modifier (also known as package-private). Constants (that is, fields marked 'static' and 'final') are not reported. Example: 'public class A {\n Object object; // warning\n final static int MODE = 0; // constant, no warning\n }'", + "markdown": "Reports fields that are declared without any access modifier (also known as package-private).\n\nConstants (that is, fields marked `static` and `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n Object object; // warning\n final static int MODE = 0; // constant, no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageVisibleField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstantiationOfUtilityClass", + "shortDescription": { + "text": "Instantiation of utility class" + }, + "fullDescription": { + "text": "Reports instantiation of utility classes using the 'new' keyword. In utility classes, all fields and methods are 'static'. Instantiation of such classes is most likely unnecessary and indicates a mistake. Example: 'class MyUtils {\n public static double cube(double x) {\n return x * x * x;\n }\n }\n class Main {\n public static void main(String[] args) {\n // Instantiation of utility class\n MyUtils utils = new MyUtils();\n }\n }' To prevent utility classes from being instantiated, it's recommended to use a 'private' constructor.", + "markdown": "Reports instantiation of utility classes using the `new` keyword.\n\n\nIn utility classes, all fields and methods are `static`.\nInstantiation of such classes is most likely unnecessary and indicates a mistake.\n\n**Example:**\n\n\n class MyUtils {\n public static double cube(double x) {\n return x * x * x;\n }\n }\n class Main {\n public static void main(String[] args) {\n // Instantiation of utility class\n MyUtils utils = new MyUtils();\n }\n }\n\n\nTo prevent utility classes from being instantiated,\nit's recommended to use a `private` constructor." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InstantiationOfUtilityClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingWhitespacesInTextBlock", + "shortDescription": { + "text": "Trailing whitespace in text block" + }, + "fullDescription": { + "text": "Reports text blocks with trailing whitespace characters. Trailing whitespace is considered incidental and will be stripped away by the Java compiler. This inspection depends on the Java feature 'Text block literals' which is available since Java 15. New in 2021.1", + "markdown": "Reports text blocks with trailing whitespace characters. Trailing whitespace is considered incidental and will be stripped away by the Java compiler.\n\nThis inspection depends on the Java feature 'Text block literals' which is available since Java 15.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TrailingWhitespacesInTextBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern. Example: if the inspection is enabled for tests, and the specified length for the minimum class name is 8 (the default), the following test class produces a warning because the length of its name is 6, which is less than 8: 'public class MyTest{}'. A quick-fix that renames such classes is available only in the editor. Configure the inspection: Use the list in the Options section to specify which classes should be checked. Deselect the checkboxes for the classes for which you want to skip the check. For each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the provided input fields. Specify 0 in the length fields to skip corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for tests, and the specified length for the minimum class name is 8 (the default), the following test class\nproduces a warning because the length of its name is 6, which is less than 8: `public class MyTest{}`.\n\nA quick-fix that renames such classes is available only in the editor.\n\nConfigure the inspection:\n\n\nUse the list in the **Options** section to specify which classes should be checked. Deselect the checkboxes for the classes for which\nyou want to skip the check.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields. Specify **0** in the length fields to skip corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NewClassNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 82, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseCompareMethod", + "shortDescription": { + "text": "'compare()' method can be used to compare numbers" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced by a call to the 'Integer.compare()' method or a similar method from the 'Long', 'Short', 'Byte', 'Double' or 'Float' classes, instead of more verbose or less efficient constructs. If 'x' and 'y' are boxed integers, then 'x.compareTo(y)' is suggested, if they are primitives 'Integer.compare(x, y)' is suggested. Example: 'public int compare(int x, int y) {\n return x > y ? 1 : x < y ? -1 : 0;\n }' After the quick-fix is applied: 'public int compare(int x, int y) {\n return Integer.compare(x, y);\n }' Note that 'Double.compare' and 'Float.compare' slightly change the code semantics. In particular, they make '-0.0' and '0.0' distinguishable ('Double.compare(-0.0, 0.0)' yields -1). Also, they consistently process 'NaN' value. In most of the cases, this semantics change actually improves the code. Use the checkbox to disable this inspection for floating point numbers if semantics change is unacceptable in your case. New in 2017.2", + "markdown": "Reports expressions that can be replaced by a call to the `Integer.compare()` method or a similar method from the `Long`, `Short`, `Byte`, `Double` or `Float` classes, instead of more verbose or less efficient constructs.\n\nIf `x` and `y` are boxed integers, then `x.compareTo(y)` is suggested,\nif they are primitives `Integer.compare(x, y)` is suggested.\n\n**Example:**\n\n\n public int compare(int x, int y) {\n return x > y ? 1 : x < y ? -1 : 0;\n }\n\nAfter the quick-fix is applied:\n\n\n public int compare(int x, int y) {\n return Integer.compare(x, y);\n }\n\n\nNote that `Double.compare` and `Float.compare` slightly change the code semantics. In particular,\nthey make `-0.0` and `0.0` distinguishable (`Double.compare(-0.0, 0.0)` yields -1).\nAlso, they consistently process `NaN` value. In most of the cases, this semantics change actually improves the\ncode. Use the checkbox to disable this inspection for floating point numbers if semantics change is unacceptable\nin your case.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseCompareMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MoveFieldAssignmentToInitializer", + "shortDescription": { + "text": "Field assignment can be moved to initializer" + }, + "fullDescription": { + "text": "Suggests replacing initialization of fields using assignment with initialization in the field declaration. Only reports if the field assignment is located in an instance or static initializer, and joining it with the field declaration is likely to be safe. In other cases, like assignment inside a constructor, the quick-fix is provided without highlighting, as the fix may change the semantics. Example: 'class MyClass {\n static final int intConstant;\n \n static {\n intConstant = 10;\n }\n }' The quick fix moves the assigned value to the field initializer removing the class initializer if possible: 'class MyClass {\n static final int intConstant = 10;\n }' Since 2017.2", + "markdown": "Suggests replacing initialization of fields using assignment with initialization in the field declaration.\n\nOnly reports if the field assignment is located in an instance or static initializer, and\njoining it with the field declaration is likely to be safe.\nIn other cases, like assignment inside a constructor, the quick-fix is provided without highlighting,\nas the fix may change the semantics.\n\nExample:\n\n\n class MyClass {\n static final int intConstant;\n \n static {\n intConstant = 10;\n }\n }\n\nThe quick fix moves the assigned value to the field initializer removing the class initializer if possible:\n\n\n class MyClass {\n static final int intConstant = 10;\n }\n\nSince 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MoveFieldAssignmentToInitializer", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInFormatCall", + "shortDescription": { + "text": "String concatenation as argument to 'format()' call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations used as a format string argument. While occasionally intended, this is usually a misuse of a formatting method and may even cause security issues if the variables used in the concatenated string contain special characters like '%'. Also, sometimes this could be the result of mistakenly concatenating a string format argument by typing a '+' when a ',' was meant. Example: 'static String formatGreeting(String userName) {\n return String.format(\"Hello, \" + userName);\n }' Here, the 'userName' will be interpreted as a part of format string, which may result in 'IllegalFormatException' (for example, if 'userName' is '\"%\"') or in using an enormous amount of memory (for example, if 'userName' is '\"%2000000000%\"'). The call should be probably replaced with 'String.format(\"Hello, %s\", userName);'. This inspection checks calls to formatting methods on 'java.util.Formatter', 'java.lang.String', 'java.io.PrintWriter', or 'java.io.PrintStream'.", + "markdown": "Reports non-constant string concatenations used as a format string argument.\n\n\nWhile occasionally intended, this is usually a misuse of a formatting method\nand may even cause security issues if the variables used in the concatenated string\ncontain special characters like `%`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n static String formatGreeting(String userName) {\n return String.format(\"Hello, \" + userName);\n }\n\n\nHere, the `userName` will be interpreted as a part of format string, which may result\nin `IllegalFormatException` (for example, if `userName` is `\"%\"`) or\nin using an enormous amount of memory (for example, if `userName` is `\"%2000000000%\"`).\nThe call should be probably replaced with `String.format(\"Hello, %s\", userName);`.\n\n\nThis inspection checks calls to formatting methods on\n`java.util.Formatter`,\n`java.lang.String`,\n`java.io.PrintWriter`,\nor `java.io.PrintStream`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenationInFormatCall", + "cweIds": [ + 116, + 134 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitWhileHoldingTwoLocks", + "shortDescription": { + "text": "'wait()' while holding two locks" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' methods that may occur while the current thread is holding two locks. Since calling 'wait()' only releases one lock on its target, waiting with two locks held can easily lead to a deadlock. Example: 'synchronized (lockA) {\n synchronized (lockB) {\n lockB.wait(); //warning\n //thread A is stuck here holding lockA\n }\n }\n\n synchronized (lockA) { //thread B can't enter the block and release thread A\n lockB.notify();\n }'", + "markdown": "Reports calls to `wait()` methods that may occur while the current thread is holding two locks.\n\n\nSince calling `wait()` only releases one lock on its target,\nwaiting with two locks held can easily lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA) {\n synchronized (lockB) {\n lockB.wait(); //warning\n //thread A is stuck here holding lockA\n }\n }\n\n synchronized (lockA) { //thread B can't enter the block and release thread A\n lockB.notify();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "WaitWhileHoldingTwoLocks", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableInnerClassWithNonSerializableOuterClass", + "shortDescription": { + "text": "Serializable non-'static' inner class with non-Serializable outer class" + }, + "fullDescription": { + "text": "Reports non-static inner classes that implement 'Serializable' and are declared inside a class that doesn't implement 'Serializable'. Such classes are unlikely to serialize correctly due to implicit references to the outer class. Example: 'class A {\n class Main implements Serializable {\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports non-static inner classes that implement `Serializable` and are declared inside a class that doesn't implement `Serializable`.\n\n\nSuch classes are unlikely to serialize correctly due to implicit references to the outer class.\n\n**Example:**\n\n\n class A {\n class Main implements Serializable {\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableInnerClassWithNonSerializableOuterClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousListRemoveInLoop", + "shortDescription": { + "text": "Suspicious 'List.remove()' in loop" + }, + "fullDescription": { + "text": "Reports 'list.remove(index)' calls inside an ascending counted loop. This is suspicious as the list becomes shorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable after the removal, but probably removing via an iterator or using the 'removeIf()' method (Java 8 and later) is a more robust alternative. If you don't expect that 'remove()' will be called more than once in a loop, consider adding a 'break' after it. Example: 'public static void main(String[] args) {\n process(new ArrayList<>(\n Arrays.asList(\"1\", \"2\", \"|\", \"3\", \"4\")));\n }\n\n static void process(List list) {\n for (int i = 0; i < list.size(); i++) {\n if (list.get(i).equals(\"|\")) {\n list.remove(i);\n continue;\n }\n System.out.println(list.get(i));\n }\n }' The code looks like '1 2 3 4' is going to be printed, but in reality, '3' will be skipped in the output. New in 2018.2", + "markdown": "Reports `list.remove(index)` calls inside an ascending counted loop.\n\n\nThis is suspicious as the list becomes\nshorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable\nafter the removal,\nbut probably removing via an iterator or using the `removeIf()` method (Java 8 and later) is a more robust alternative.\nIf you don't expect that `remove()` will be called more than once in a loop, consider adding a `break` after it.\n\n**Example:**\n\n public static void main(String[] args) {\n process(new ArrayList<>(\n Arrays.asList(\"1\", \"2\", \"|\", \"3\", \"4\")));\n }\n\n static void process(List list) {\n for (int i = 0; i < list.size(); i++) {\n if (list.get(i).equals(\"|\")) {\n list.remove(i);\n continue;\n }\n System.out.println(list.get(i));\n }\n }\n\nThe code looks like `1 2 3 4` is going to be printed, but in reality, `3` will be skipped in the output.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousListRemoveInLoop", + "cweIds": [ + 129 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegativeIntConstantInLongContext", + "shortDescription": { + "text": "Negative int hexadecimal constant in long context" + }, + "fullDescription": { + "text": "Reports negative int hexadecimal constants in long context. Such constants are implicitly widened to long, which means their higher bits will become 1 rather than 0 (e.g., 0xFFFF_FFFF will become 0xFFFF_FFFF_FFFF_FFFFL). Unlikely this is intended, and even if it is, using an explicit long constant would be less confusing. Example: '// Warning: this is int constant -1 which is widened to long\n // becoming 0xFFFF_FFFF_FFFF_FFFFL.\n long mask = 0xFFFF_FFFF;' New in 2022.3", + "markdown": "Reports negative int hexadecimal constants in long context. Such constants are implicitly widened to long, which means their higher bits will become 1 rather than 0 (e.g., 0xFFFF_FFFF will become 0xFFFF_FFFF_FFFF_FFFFL). Unlikely this is intended, and even if it is, using an explicit long constant would be less confusing.\n\n**Example:**\n\n\n // Warning: this is int constant -1 which is widened to long\n // becoming 0xFFFF_FFFF_FFFF_FFFFL.\n long mask = 0xFFFF_FFFF;\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NegativeIntConstantInLongContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhileLoopSpinsOnField", + "shortDescription": { + "text": "'while' loop spins on field" + }, + "fullDescription": { + "text": "Reports 'while' loops that spin on the value of a non-'volatile' field, waiting for it to be changed by another thread. In addition to being potentially extremely CPU intensive when little work is done inside the loop, such loops are likely to have different semantics from what was intended. The Java Memory Model allows such loops to never complete even if another thread changes the field's value. Additionally, since Java 9 it's recommended to call 'Thread.onSpinWait()' inside a spin loop on a 'volatile' field, which may significantly improve performance on some hardware. Example: 'class SpinsOnField {\n boolean ready = false;\n\n void run() {\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' After the quick-fix is applied: 'class SpinsOnField {\n volatile boolean ready = false;\n\n void run() {\n while (!ready) {\n Thread.onSpinWait();\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' Use the inspection options to only report empty 'while' loops.", + "markdown": "Reports `while` loops that spin on the value of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops are likely to have different semantics from what was intended.\nThe Java Memory Model allows such loops to never complete even if another thread changes the field's value.\n\n\nAdditionally, since Java 9 it's recommended to call `Thread.onSpinWait()` inside a spin loop\non a `volatile` field, which may significantly improve performance on some hardware.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class SpinsOnField {\n volatile boolean ready = false;\n\n void run() {\n while (!ready) {\n Thread.onSpinWait();\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nUse the inspection options to only report empty `while` loops." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "WhileLoopSpinsOnField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultAnnotationParam", + "shortDescription": { + "text": "Default annotation parameter value" + }, + "fullDescription": { + "text": "Reports annotation parameters that are assigned to their 'default' value. Example: '@interface Test {\n Class expected() default Throwable.class;\n }\n\n @Test(expected = Throwable.class)\n void testSmth() {}' After the quick-fix is applied: '@Test()\n void testSmth() {}'", + "markdown": "Reports annotation parameters that are assigned to their `default` value.\n\nExample:\n\n\n @interface Test {\n Class expected() default Throwable.class;\n }\n\n @Test(expected = Throwable.class)\n void testSmth() {}\n\nAfter the quick-fix is applied:\n\n\n @Test()\n void testSmth() {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DefaultAnnotationParam", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnLock", + "shortDescription": { + "text": "Synchronization on a 'Lock' object" + }, + "fullDescription": { + "text": "Reports 'synchronized' blocks that lock on an instance of 'java.util.concurrent.locks.Lock'. Such synchronization is almost certainly unintended, and appropriate versions of '.lock()' and '.unlock()' should be used instead. Example: 'final ReentrantLock lock = new ReentrantLock();\n\n public void foo() {\n synchronized (lock) {}\n }'", + "markdown": "Reports `synchronized` blocks that lock on an instance of `java.util.concurrent.locks.Lock`. Such synchronization is almost certainly unintended, and appropriate versions of `.lock()` and `.unlock()` should be used instead.\n\n**Example:**\n\n\n final ReentrantLock lock = new ReentrantLock();\n\n public void foo() {\n synchronized (lock) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SynchroniziationOnLockObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExceptionCaught", + "shortDescription": { + "text": "Prohibited 'Exception' caught" + }, + "fullDescription": { + "text": "Reports 'catch' clauses that catch an inappropriate exception. Some exceptions, for example 'java.lang.NullPointerException' or 'java.lang.IllegalMonitorStateException', represent programming errors and therefore almost certainly should not be caught in production code. Example: 'try {\n return component.getMousePosition(true) != null;\n } catch (NullPointerException e) { // warning: Prohibited exception 'NullPointerException' caught\n return false;\n }' Use the Prohibited exceptions list to specify which exceptions should be reported.", + "markdown": "Reports `catch` clauses that catch an inappropriate exception.\n\nSome exceptions, for example\n`java.lang.NullPointerException` or\n`java.lang.IllegalMonitorStateException`, represent programming errors\nand therefore almost certainly should not be caught in production code.\n\n**Example:**\n\n\n try {\n return component.getMousePosition(true) != null;\n } catch (NullPointerException e) { // warning: Prohibited exception 'NullPointerException' caught\n return false;\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProhibitedExceptionCaught", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofCatchParameter", + "shortDescription": { + "text": "'instanceof' on 'catch' parameter" + }, + "fullDescription": { + "text": "Reports cases in which an 'instanceof' expression is used for testing the type of a parameter in a 'catch' block. Testing the type of 'catch' parameters is usually better done by having separate 'catch' blocks instead of using 'instanceof'. Example: 'void foo(Runnable runnable) {\n try {\n runnable.run();\n } catch (Throwable throwable) {\n if (throwable instanceof NoClassDefFoundError) { // warning: 'instanceof' on 'catch' parameter 'throwable'\n System.out.println(\"Class not found!\");\n }\n }\n }'", + "markdown": "Reports cases in which an `instanceof` expression is used for testing the type of a parameter in a `catch` block.\n\nTesting the type of `catch` parameters is usually better done by having separate\n`catch` blocks instead of using `instanceof`.\n\n**Example:**\n\n\n void foo(Runnable runnable) {\n try {\n runnable.run();\n } catch (Throwable throwable) {\n if (throwable instanceof NoClassDefFoundError) { // warning: 'instanceof' on 'catch' parameter 'throwable'\n System.out.println(\"Class not found!\");\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceofCatchParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantScheduledForRemovalAnnotation", + "shortDescription": { + "text": "Redundant @ScheduledForRemoval annotation" + }, + "fullDescription": { + "text": "Reports usages of '@ApiStatus.ScheduledForRemoval' annotation without 'inVersion' attribute in code which targets Java 9 or newer version. Such usages can be replaced by 'forRemoval' attribute in '@Deprecated' annotation to simplify code. New in 2022.1", + "markdown": "Reports usages of `@ApiStatus.ScheduledForRemoval` annotation without `inVersion` attribute in code which targets Java 9 or newer version.\n\n\nSuch usages can be replaced by `forRemoval` attribute in `@Deprecated` annotation to simplify code.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantScheduledForRemovalAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalGetWithoutIsPresent", + "shortDescription": { + "text": "Optional.get() is called without isPresent() check" + }, + "fullDescription": { + "text": "Reports calls to 'get()' on an 'Optional' without checking that it has a value. Calling 'Optional.get()' on an empty 'Optional' instance will throw an exception. Example: 'void x(List list) {\n final Optional optional =\n list.stream().filter(x -> x > 10).findFirst();\n final Integer result = optional.get(); // problem here\n }' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports calls to `get()` on an `Optional` without checking that it has a value.\n\nCalling `Optional.get()` on an empty `Optional` instance will throw an exception.\n\n**Example:**\n\n\n void x(List list) {\n final Optional optional =\n list.stream().filter(x -> x > 10).findFirst();\n final Integer result = optional.get(); // problem here\n }\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalGetWithoutIsPresent", + "cweIds": [ + 252, + 476 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OnDemandImport", + "shortDescription": { + "text": "'*' import" + }, + "fullDescription": { + "text": "Reports any 'import' statements that cover entire packages ('* imports'). Some coding standards prohibit such 'import' statements. You can configure IntelliJ IDEA to detect and fix such statements with its Optimize Imports command. Go to Settings | Editor | Code Style | Java | Imports, make sure that the Use single class import option is enabled, and specify values in the Class count to use import with '*' and Names count to use static import with '*' fields. Thus this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports any `import` statements that cover entire packages ('\\* imports').\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports**\ncommand. Go to [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import),\nmake sure that the **Use single class import** option is enabled, and specify values in the\n**Class count to use import with '\\*'** and **Names count to use static import with '\\*'** fields.\nThus this inspection is mostly useful for offline reporting on code bases that you don't\nintend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OnDemandImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FallthruInSwitchStatement", + "shortDescription": { + "text": "Fallthrough in 'switch' statement" + }, + "fullDescription": { + "text": "Reports 'fall-through' in a 'switch' statement. Fall-through occurs when a series of executable statements after a 'case' label is not guaranteed to transfer control before the next 'case' label. For example, this can happen if the branch is missing a 'break' statement. In that case, control falls through to the statements after that 'switch' label, even though the 'switch' expression is not equal to the value of the fallen-through label. While occasionally intended, this construction is confusing and is often the result of a typo. This inspection ignores any fall-through commented with a text matching the regex pattern '(?i)falls?\\s*thro?u'. There is a fix that adds a 'break' to the branch that can fall through to the next branch. Example: 'switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n // no break here\n } else {\n break;\n }\n case (6):\n System.out.println(\"4\");\n }' After the quick-fix is applied: 'switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n } else {\n break;\n }\n break;\n case (6):\n System.out.println(\"4\");\n }'", + "markdown": "Reports 'fall-through' in a `switch` statement.\n\nFall-through occurs when a series of executable statements after a `case` label is not guaranteed\nto transfer control before the next `case` label. For example, this can happen if the branch is missing a `break` statement.\nIn that case, control falls through to the statements after\nthat `switch` label, even though the `switch` expression is not equal to\nthe value of the fallen-through label. While occasionally intended, this construction is confusing and is often the result of a typo.\n\n\nThis inspection ignores any fall-through commented with a text matching the regex pattern `(?i)falls?\\s*thro?u`.\n\nThere is a fix that adds a `break` to the branch that can fall through to the next branch.\n\nExample:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n // no break here\n } else {\n break;\n }\n case (6):\n System.out.println(\"4\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n } else {\n break;\n }\n break;\n case (6):\n System.out.println(\"4\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "fallthrough", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalIsPresent", + "shortDescription": { + "text": "Non functional style 'Optional.isPresent()' usage" + }, + "fullDescription": { + "text": "Reports 'Optional' expressions used as 'if' or conditional expression conditions, that can be rewritten in a functional style. The result is often shorter and easier to read. Example: 'if (str.isPresent()) str.get().trim();' After the quick-fix is applied: 'str.ifPresent(String::trim);' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports `Optional` expressions used as `if` or conditional expression conditions, that can be rewritten in a functional style. The result is often shorter and easier to read.\n\nExample:\n\n\n if (str.isPresent()) str.get().trim();\n\nAfter the quick-fix is applied:\n\n\n str.ifPresent(String::trim);\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalIsPresent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantOperationOnEmptyContainer", + "shortDescription": { + "text": "Redundant operation on empty container" + }, + "fullDescription": { + "text": "Reports redundant operations on empty collections, maps or arrays. Iterating, removing elements, sorting, and some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug. Example: 'if (numbers.isEmpty()){\n //error due to the missed negation\n int max = numbers.stream().max(Comparator.naturalOrder()).get();\n ...\n }' New in 2019.1", + "markdown": "Reports redundant operations on empty collections, maps or arrays.\n\n\nIterating, removing elements, sorting,\nand some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug.\n\n**Example:**\n\n\n if (numbers.isEmpty()){\n //error due to the missed negation\n int max = numbers.stream().max(Comparator.naturalOrder()).get();\n ...\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantOperationOnEmptyContainer", + "cweIds": [ + 561 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AtomicFieldUpdaterNotStaticFinal", + "shortDescription": { + "text": "'AtomicFieldUpdater' field not declared 'static final'" + }, + "fullDescription": { + "text": "Reports fields of types: 'java.util.concurrent.atomic.AtomicLongFieldUpdater' 'java.util.concurrent.atomic.AtomicIntegerFieldUpdater' 'java.util.concurrent.atomic.AtomicReferenceFieldUpdater' that are not 'static final'. Because only one atomic field updater is needed for updating a 'volatile' field in all instances of a class, it can almost always be 'static'. Making the updater 'final' allows the JVM to optimize access for improved performance. Example: 'class Main {\n private volatile int id;\n private AtomicIntegerFieldUpdater

    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }' After the quick-fix is applied: 'class Main {\n private volatile int id;\n private static final AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }'", + "markdown": "Reports fields of types:\n\n* `java.util.concurrent.atomic.AtomicLongFieldUpdater`\n* `java.util.concurrent.atomic.AtomicIntegerFieldUpdater`\n* `java.util.concurrent.atomic.AtomicReferenceFieldUpdater`\n\nthat are not `static final`. Because only one atomic field updater is needed for updating a `volatile` field in all instances of a class, it can almost always be `static`.\n\nMaking the updater `final` allows the JVM to optimize access for improved performance.\n\n**Example:**\n\n\n class Main {\n private volatile int id;\n private AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private volatile int id;\n private static final AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "AtomicFieldUpdaterNotStaticFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8MapForEach", + "shortDescription": { + "text": "Map.forEach() can be used" + }, + "fullDescription": { + "text": "Suggests replacing 'for(Entry entry : map.entrySet()) {...}' or 'map.entrySet().forEach(entry -> ...)' with 'map.forEach((key, value) -> ...)'. Example 'void print(Map map) {\n map.entrySet().forEach(entry -> {\n String str = entry.getKey();\n System.out.println(str + \":\" + entry.getValue());\n });\n }' After the quick-fix is applied: 'void print(Map map) {\n map.forEach((str, value) -> System.out.println(str + \":\" + value));\n }' When the Do not report loops option is enabled, only 'entrySet().forEach()' cases will be reported. However, the quick-fix action will be available for 'for'-loops as well. This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8. New in 2017.1", + "markdown": "Suggests replacing `for(Entry entry : map.entrySet()) {...}` or `map.entrySet().forEach(entry -> ...)` with `map.forEach((key, value) -> ...)`.\n\nExample\n\n\n void print(Map map) {\n map.entrySet().forEach(entry -> {\n String str = entry.getKey();\n System.out.println(str + \":\" + entry.getValue());\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Map map) {\n map.forEach((str, value) -> System.out.println(str + \":\" + value));\n }\n\n\nWhen the **Do not report loops** option is enabled, only `entrySet().forEach()` cases will be reported.\nHowever, the quick-fix action will be available for `for`-loops as well.\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java8MapForEach", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecordStoreResource", + "shortDescription": { + "text": "'RecordStore' opened but not safely closed" + }, + "fullDescription": { + "text": "Reports Java ME 'javax.microedition.rms.RecordStore' resources that are not opened in front of a 'try' block and closed in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'void foo1() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // warning\n }\n void foo2() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // no warning\n try {\n /* ... */\n } finally {\n rs.closeRecordStore();\n }\n }'", + "markdown": "Reports Java ME `javax.microedition.rms.RecordStore` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block.\n\nSuch resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo1() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // warning\n }\n void foo2() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // no warning\n try {\n /* ... */\n } finally {\n rs.closeRecordStore();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RecordStoreOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectsEqualsCanBeSimplified", + "shortDescription": { + "text": "'Objects.equals()' can be replaced with 'equals()'" + }, + "fullDescription": { + "text": "Reports calls to 'Objects.equals(a, b)' in which the first argument is statically known to be non-null. Such a call can be safely replaced with 'a.equals(b)' or 'a == b' if both arguments are primitives. Example: 'String defaultName = \"default\";\n boolean isDefault = Objects.equals(defaultName, name);' After the quick-fix is applied: 'String defaultName = \"default\";\n boolean isDefault = defaultName.equals(name);' New in 2018.3", + "markdown": "Reports calls to `Objects.equals(a, b)` in which the first argument is statically known to be non-null.\n\nSuch a call can be safely replaced with `a.equals(b)` or `a == b` if both arguments are primitives.\n\nExample:\n\n\n String defaultName = \"default\";\n boolean isDefault = Objects.equals(defaultName, name);\n\nAfter the quick-fix is applied:\n\n\n String defaultName = \"default\";\n boolean isDefault = defaultName.equals(name);\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ObjectsEqualsCanBeSimplified", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassLoaderInstantiation", + "shortDescription": { + "text": "'ClassLoader' instantiation" + }, + "fullDescription": { + "text": "Reports instantiations of the 'java.lang.ClassLoader' class. While often benign, any instantiations of 'ClassLoader' should be closely examined in any security audit. Example: 'Class loadExtraClass(String name) throws Exception {\n try(URLClassLoader loader =\n new URLClassLoader(new URL[]{new URL(\"extraClasses/\")})) {\n return loader.loadClass(name);\n }\n }'", + "markdown": "Reports instantiations of the `java.lang.ClassLoader` class.\n\nWhile often benign, any instantiations of `ClassLoader` should be closely examined in any security audit.\n\n**Example:**\n\n Class loadExtraClass(String name) throws Exception {\n try(URLClassLoader loader =\n new URLClassLoader(new URL[]{new URL(\"extraClasses/\")})) {\n return loader.loadClass(name);\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassLoaderInstantiation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NativeMethods", + "shortDescription": { + "text": "Native method" + }, + "fullDescription": { + "text": "Reports methods declared 'native'. Native methods are inherently unportable.", + "markdown": "Reports methods declared `native`. Native methods are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NativeMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsWithItself", + "shortDescription": { + "text": "'equals()' called on itself" + }, + "fullDescription": { + "text": "Reports calls to 'equals()', 'compareTo()' or similar, that compare an object for equality with itself. The method contracts of these methods specify that such calls will always return 'true' for 'equals()' or '0' for 'compareTo()'. The inspection also checks calls to 'Objects.equals()', 'Objects.deepEquals()', 'Arrays.equals()', 'Comparator.compare()', 'assertEquals()' methods of test frameworks (JUnit, TestNG, AssertJ), 'Integer.compare()', 'Integer.compareUnsigned()' and similar methods. Example: 'class Foo {\n boolean foo(Object o) {\n return o.equals(o); // warning\n }\n\n boolean bar(String[] ss) {\n return Arrays.equals(ss, ss); // warning\n }\n}' Use the option to report test assertions report only on non-extendable library classes (like 'String') and primitive types. This option can be useful, when testing 'equals()' methods.", + "markdown": "Reports calls to `equals()`, `compareTo()` or similar, that compare an object for equality with itself. The method contracts of these methods specify that such calls will always return `true` for `equals()` or `0` for `compareTo()`. The inspection also checks calls to `Objects.equals()`, `Objects.deepEquals()`, `Arrays.equals()`, `Comparator.compare()`, `assertEquals()` methods of test frameworks (JUnit, TestNG, AssertJ), `Integer.compare()`, `Integer.compareUnsigned()` and similar methods.\n\n**Example:**\n\n\n class Foo {\n boolean foo(Object o) {\n return o.equals(o); // warning\n }\n\n boolean bar(String[] ss) {\n return Arrays.equals(ss, ss); // warning\n }\n }\n\n\nUse the option to report test assertions report only on non-extendable library classes (like `String`) and primitive types.\nThis option can be useful, when testing `equals()` methods." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsWithItself", + "cweIds": [ + 571 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInheritanceDepth", + "shortDescription": { + "text": "Class too deep in inheritance tree" + }, + "fullDescription": { + "text": "Reports classes that are too deep in the inheritance hierarchy. Classes that are too deeply inherited may be confusing and indicate that a refactoring is necessary. All superclasses from a library are treated as a single superclass, libraries are considered unmodifiable. Use the Inheritance depth limit field to specify the maximum inheritance depth for a class.", + "markdown": "Reports classes that are too deep in the inheritance hierarchy.\n\nClasses that are too deeply inherited may be confusing and indicate that a refactoring is necessary.\n\nAll superclasses from a library are treated as a single superclass, libraries are considered unmodifiable.\n\nUse the **Inheritance depth limit** field to specify the maximum inheritance depth for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassTooDeepInInheritanceTree", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MarkedForRemoval", + "shortDescription": { + "text": "Usage of API marked for removal" + }, + "fullDescription": { + "text": "Reports usages of deprecated APIs (classes, fields, and methods) that are marked for removal with '@Deprecated(forRemoval=true)'. The code that uses an API marked for removal may cause a runtime error with a future version of the API. That is why the recommended severity for this inspection is Error. You can change the severity to Warning if you want to use the same code highlighting as in ordinary deprecation. New in 2017.3", + "markdown": "Reports usages of deprecated APIs (classes, fields, and methods) that are marked for removal with `@Deprecated(`**forRemoval**`=true)`.\n\n\nThe code that uses an API marked for removal may cause a runtime error with a future version of the API. That is why\nthe recommended severity for this inspection is *Error*.\n\n\nYou can change the severity to *Warning* if you want to use the same code highlighting as in ordinary deprecation.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "removal", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedConditionalExpression", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports nested conditional expressions as they may result in extremely confusing code. Example: 'int y = a == 10 ? b == 20 ? 10 : a : b;'", + "markdown": "Reports nested conditional expressions as they may result in extremely confusing code.\n\nExample:\n\n\n int y = a == 10 ? b == 20 ? 10 : a : b;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedConditionalExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhileCanBeForeach", + "shortDescription": { + "text": "'while' loop can be replaced with enhanced 'for' loop" + }, + "fullDescription": { + "text": "Reports 'while' loops that iterate over collections and can be replaced with enhanced 'for' loops (foreach iteration syntax). Example: 'Iterator it = c.iterator();\n while(it.hasNext()) {\n Object obj = it.next();\n System.out.println(obj);\n }' Can be replaced with: 'for (Object obj : c) {\n System.out.println(obj);\n }' This inspection depends on the Java feature 'For-each loops' which is available since Java 5.", + "markdown": "Reports `while` loops that iterate over collections and can be replaced with enhanced `for` loops (foreach iteration syntax).\n\n**Example:**\n\n\n Iterator it = c.iterator();\n while(it.hasNext()) {\n Object obj = it.next();\n System.out.println(obj);\n }\n\nCan be replaced with:\n\n\n for (Object obj : c) {\n System.out.println(obj);\n }\n\nThis inspection depends on the Java feature 'For-each loops' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WhileLoopReplaceableByForEach", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BulkFileAttributesRead", + "shortDescription": { + "text": "Bulk 'Files.readAttributes()' call can be used" + }, + "fullDescription": { + "text": "Reports multiple sequential 'java.io.File' attribute checks, such as: 'isDirectory()' 'isFile()' 'lastModified()' 'length()' Such calls can be replaced with a bulk 'Files.readAttributes()' call. This is usually more performant than multiple separate attribute checks. Example: 'boolean isNewFile(File file, long lastModified) throws IOException {\n return file.isFile() && file.lastModified() > lastModified;\n }' After the quick-fix is applied: 'boolean isNewFile(File file, long lastModified) throws IOException {\n var fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);\n return fileAttributes.isRegularFile() && fileAttributes.lastModifiedTime().toMillis() > lastModified;\n }' This inspection does not show a warning if 'IOException' is not handled in the current context, but the quick-fix is still available. Note that the replacements are usually not completely equivalent and should be applied with care. In particular, the behavior could differ if the file does not exist at all. This inspection only reports if the language level of the project or module is 7 or higher. New in 2022.1", + "markdown": "Reports multiple sequential `java.io.File` attribute checks, such as:\n\n* `isDirectory()`\n* `isFile()`\n* `lastModified()`\n* `length()`\n\nSuch calls can be replaced with a bulk `Files.readAttributes()` call. This is usually more performant than multiple separate attribute checks.\n\nExample:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n return file.isFile() && file.lastModified() > lastModified;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n var fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);\n return fileAttributes.isRegularFile() && fileAttributes.lastModifiedTime().toMillis() > lastModified;\n }\n\nThis inspection does not show a warning if `IOException` is not handled in the current context, but the quick-fix is still available.\n\nNote that the replacements are usually not completely equivalent and should be applied with care. In particular, the behavior could differ if\nthe file does not exist at all.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BulkFileAttributesRead", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitNumericConversion", + "shortDescription": { + "text": "Implicit numeric conversion" + }, + "fullDescription": { + "text": "Reports implicit conversion between numeric types. Implicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs. Example: 'double m(int i) {\n return i * 10;\n }' After the quick-fix is applied: 'double m(int i) {\n return (double) (i * 10);\n }' Configure the inspection: Use the Ignore widening conversions option to ignore implicit conversion that cannot result in data loss (for example, 'int'->'long'). Use the Ignore conversions from and to 'char' option to ignore conversion from and to 'char'. The inspection will still report conversion from and to floating-point numbers. Use the Ignore conversion from constants and literals to make the inspection ignore conversion from literals and compile-time constants.", + "markdown": "Reports implicit conversion between numeric types.\n\nImplicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs.\n\n**Example:**\n\n\n double m(int i) {\n return i * 10;\n }\n\nAfter the quick-fix is applied:\n\n\n double m(int i) {\n return (double) (i * 10);\n }\n\nConfigure the inspection:\n\n* Use the **Ignore widening conversions** option to ignore implicit conversion that cannot result in data loss (for example, `int`-\\>`long`).\n* Use the **Ignore conversions from and to 'char'** option to ignore conversion from and to `char`. The inspection will still report conversion from and to floating-point numbers.\n* Use the **Ignore conversion from constants and literals** to make the inspection ignore conversion from literals and compile-time constants." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ImplicitNumericConversion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotNullFieldNotInitialized", + "shortDescription": { + "text": "@NotNull field is not initialized" + }, + "fullDescription": { + "text": "Reports fields annotated as not-null that are not initialized in the constructor. Example: 'public class MyClass {\n private @NotNull String value;\n\n public void setValue(@NotNull String value) {\n this.value = value;\n }\n\n public @NotNull String getValue() {\n return value;\n }\n}' Such fields may violate the not-null constraint. In the example above, the 'setValue' parameter is annotated as not-null, but 'getValue' may return null if the setter was not called.", + "markdown": "Reports fields annotated as not-null that are not initialized in the constructor.\n\nExample:\n\n public class MyClass {\n private @NotNull String value;\n\n public void setValue(@NotNull String value) {\n this.value = value;\n }\n\n public @NotNull String getValue() {\n return value;\n }\n }\n\n\nSuch fields may violate the not-null constraint. In the example above, the `setValue` parameter is annotated as not-null, but\n`getValue` may return null if the setter was not called." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NotNullFieldNotInitialized", + "cweIds": [ + 476 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 172, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexBooleanExpression", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone. Example: 'cond(x1) && cond(x2) ^ cond(x3) && cond(x4);' Configure the inspection: Use the Maximum number of terms field to specify the maximum number of terms allowed in a boolean expression. Use the Ignore pure conjunctions and disjunctions option to ignore boolean expressions which use only a single boolean operator repeatedly.", + "markdown": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone.\n\nExample:\n\n\n cond(x1) && cond(x2) ^ cond(x3) && cond(x4);\n\nConfigure the inspection:\n\n* Use the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression.\n* Use the **Ignore pure conjunctions and disjunctions** option to ignore boolean expressions which use only a single boolean operator repeatedly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexBooleanExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotifyCalledOnCondition", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' called on 'java.util.concurrent.locks.Condition' object" + }, + "fullDescription": { + "text": "Reports calls to 'notify()' or 'notifyAll()' made on 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'signal()' or 'signalAll()' method was intended instead, otherwise 'IllegalMonitorStateException' may occur. Example: 'class C {\n final Lock l = new ReentrantLock();\n final Condition c = l.newCondition();\n\n void release() {\n l.lock();\n try {\n c.notifyAll(); // probably 'signalAll()' was intended here\n } finally {\n l.unlock();\n }\n }\n }'", + "markdown": "Reports calls to `notify()` or `notifyAll()` made on `java.util.concurrent.locks.Condition` object.\n\n\nThis is probably a programming error, and some variant of the `signal()` or\n`signalAll()` method was intended instead, otherwise `IllegalMonitorStateException` may occur.\n\n**Example:**\n\n\n class C {\n final Lock l = new ReentrantLock();\n final Condition c = l.newCondition();\n\n void release() {\n l.lock();\n try {\n c.notifyAll(); // probably 'signalAll()' was intended here\n } finally {\n l.unlock();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NotifyCalledOnCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewMethodNamingConvention", + "shortDescription": { + "text": "Method naming convention" + }, + "fullDescription": { + "text": "Reports methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods and constructors are ignored by this inspection. Example: if the inspection is enabled for static methods, and the minimum specified method name length is 4 (the default), the following static method produces a warning, because the length of its name is 3, which is less than 4: 'public static int max(int a, int b)'. A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the list in the Options section to specify which methods should be checked. Deselect the checkboxes for the method types for which you want to skip the check. Specify 0 in the length fields to skip the corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\nInstance methods that override library\nmethods and constructors are ignored by this inspection.\n\n**Example:** if the inspection is enabled for static methods, and the minimum specified method name length is 4 (the default),\nthe following static method produces a warning, because the length of its name is 3, which is less\nthan 4: `public static int max(int a, int b)`.\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which methods should be checked. Deselect the checkboxes for the method types for which\nyou want to skip the check. Specify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NewMethodNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyStrongTypeCast", + "shortDescription": { + "text": "Overly strong type cast" + }, + "fullDescription": { + "text": "Reports type casts that are overly strong. For instance, casting an object to 'ArrayList' when casting it to 'List' would do just as well. Note: much like the Redundant type cast inspection, applying the fix for this inspection may change the semantics of your program if you are intentionally using an overly strong cast to cause a 'ClassCastException' to be generated. Example: 'interface Super {\n void doSmth();\n }\n interface Sub extends Super { }\n\n void use(Object obj) {\n // Warning: ((Super)obj).doSmth() could be used\n ((Sub)obj).doSmth();\n }' Use the checkbox below to ignore casts when there's a matching 'instanceof' check in the code.", + "markdown": "Reports type casts that are overly strong. For instance, casting an object to `ArrayList` when casting it to `List` would do just as well.\n\n\n**Note:** much like the *Redundant type cast*\ninspection, applying the fix for this inspection may change the semantics of your program if you are\nintentionally using an overly strong cast to cause a `ClassCastException` to be generated.\n\nExample:\n\n\n interface Super {\n void doSmth();\n }\n interface Sub extends Super { }\n\n void use(Object obj) {\n // Warning: ((Super)obj).doSmth() could be used\n ((Sub)obj).doSmth();\n }\n\n\nUse the checkbox below to ignore casts when there's a matching `instanceof` check in the code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyStrongTypeCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaLangImport", + "shortDescription": { + "text": "Unnecessary import from the 'java.lang' package" + }, + "fullDescription": { + "text": "Reports 'import' statements that refer to the 'java.lang' package. 'java.lang' classes are always implicitly imported, so such import statements are redundant and confusing. Since IntelliJ IDEA can automatically detect and fix such statements with its Optimize Imports command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that refer to the `java.lang` package.\n\n\n`java.lang` classes are always implicitly imported, so such import statements are\nredundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports** command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavaLangImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClass", + "shortDescription": { + "text": "Utility class" + }, + "fullDescription": { + "text": "Reports utility classes. Utility classes have all fields and methods declared as 'static' and their presence may indicate a lack of object-oriented design. Use the Ignore if annotated by option to specify special annotations. The inspection ignores classes annotated with one of these annotations.", + "markdown": "Reports utility classes.\n\nUtility classes have all fields and methods declared as `static` and their\npresence may indicate a lack of object-oriented design.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes annotated with one of\nthese annotations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UtilityClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNameDiffersFromFileName", + "shortDescription": { + "text": "Class name differs from file name" + }, + "fullDescription": { + "text": "Reports top-level class names that don't match the name of a file containing them. While the Java specification allows for naming non-'public' classes this way, files with unmatched names may be confusing and decrease usefulness of various software tools.", + "markdown": "Reports top-level class names that don't match the name of a file containing them.\n\nWhile the Java specification allows for naming non-`public` classes this way,\nfiles with unmatched names may be confusing and decrease usefulness of various software tools." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassNameDiffersFromFileName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IndexOfReplaceableByContains", + "shortDescription": { + "text": "'String.indexOf()' expression can be replaced with 'contains()'" + }, + "fullDescription": { + "text": "Reports comparisons with 'String.indexOf()' calls that can be replaced with a call to the 'String.contains()' method. Example: 'boolean b = \"abcd\".indexOf('e') >= 0;' After the quick-fix is applied: 'boolean b = \"abcd\".contains('e');' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports comparisons with `String.indexOf()` calls that can be replaced with a call to the `String.contains()` method.\n\n**Example:**\n\n\n boolean b = \"abcd\".indexOf('e') >= 0;\n\nAfter the quick-fix is applied:\n\n\n boolean b = \"abcd\".contains('e');\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IndexOfReplaceableByContains", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationArgumentToLogCall", + "shortDescription": { + "text": "Non-constant string concatenation as argument to logging call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations that are used as arguments to SLF4J and Log4j 2 logging methods. Non-constant concatenations are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled. Example: 'public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld(\" + i + \", \" + s + \", \" + b + \")\");\n // todo\n }\n }' After the quick-fix is applied: 'public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld({}, {}, {})\", i, s, b);\n // todo\n }\n }' Configure the inspection: Use the Warn on list to ignore certain higher logging levels. Higher logging levels may be enabled even in production, and the arguments will always be evaluated.", + "markdown": "Reports non-constant string concatenations that are used as arguments to **SLF4J** and **Log4j 2** logging methods. Non-constant concatenations are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled.\n\n**Example:**\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld(\" + i + \", \" + s + \", \" + b + \")\");\n // todo\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld({}, {}, {})\", i, s, b);\n // todo\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Warn on** list to ignore certain higher logging levels. Higher logging levels may be enabled even in production, and the arguments will always be evaluated." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "StringConcatenationArgumentToLogCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalContainsCollection", + "shortDescription": { + "text": "'Optional' contains array or collection" + }, + "fullDescription": { + "text": "Reports 'java.util.Optional' or 'com.google.common.base.Optional' types with an array or collection type parameter. In such cases, it is more clear to just use an empty array or collection to indicate the absence of result. Example: 'Optional> foo() {\n return Optional.empty();\n }' This code could look like: 'List foo() {\n return List.of();\n }' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports `java.util.Optional` or `com.google.common.base.Optional` types with an array or collection type parameter.\n\nIn such cases, it is more clear to just use an empty array or collection to indicate the absence of result.\n\n**Example:**\n\n\n Optional> foo() {\n return Optional.empty();\n }\n\nThis code could look like:\n\n\n List foo() {\n return List.of();\n }\n \nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalContainsCollection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoadLibraryWithNonConstantString", + "shortDescription": { + "text": "Call to 'System.loadLibrary()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.System.loadLibrary()', 'java.lang.System.load()', 'java.lang.Runtime.loadLibrary()' and 'java.lang.Runtime.load()' which take a dynamically-constructed string as the name of the library. Constructed library name strings are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'void test(int i) {\n System.loadLibrary(\"foo\" + i);\n }' Use the inspection settings to consider any 'static final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'private static final String LIBRARY = getUserInput();'", + "markdown": "Reports calls to `java.lang.System.loadLibrary()`, `java.lang.System.load()`, `java.lang.Runtime.loadLibrary()` and `java.lang.Runtime.load()` which take a dynamically-constructed string as the name of the library.\n\n\nConstructed library name strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n void test(int i) {\n System.loadLibrary(\"foo\" + i);\n }\n\n\nUse the inspection settings to consider any `static final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String LIBRARY = getUserInput();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoadLibraryWithNonConstantString", + "cweIds": [ + 114, + 494, + 676, + 829 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableAssertion", + "shortDescription": { + "text": "Simplifiable assertion" + }, + "fullDescription": { + "text": "Reports any 'assert' calls that can be replaced with simpler and equivalent calls. Example → Replacement 'assertEquals(true, x());' 'assertTrue(x());' 'assertTrue(y() != null);' 'assertNotNull(y());' 'assertTrue(z == z());' 'assertSame(z, z());' 'assertTrue(a.equals(a()));' 'assertEquals(a, a());' 'assertTrue(false);' 'fail();'", + "markdown": "Reports any `assert` calls that can be replaced with simpler and equivalent calls.\n\n| Example | → | Replacement |\n|----------------------------------|---|-------------------------|\n| `assertEquals(`**true**`, x());` | | `assertTrue(x());` |\n| `assertTrue(y() != null);` | | `assertNotNull(y());` |\n| `assertTrue(z == z());` | | `assertSame(z, z());` |\n| `assertTrue(a.equals(a()));` | | `assertEquals(a, a());` |\n| `assertTrue(`**false**`);` | | `fail();` |" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifiableAssertion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 128, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceMethodClashesWithObject", + "shortDescription": { + "text": "Interface method clashes with method in 'Object'" + }, + "fullDescription": { + "text": "Reports interface methods that clash with the protected methods 'clone()' and 'finalize()' from the 'java.lang.Object' class. In an interface, it is possible to declare these methods with a return type that is incompatible with the 'java.lang.Object' methods. A class that implements such an interface will not be compilable. When the interface is functional, it remains possible to create a lambda from it, but this is not recommended. Example: '// Warning: this interface cannot be implemented\n // by any class, only by a lambda or method reference\n interface MyInterface {\n double clone();\n }'", + "markdown": "Reports interface methods that clash with the **protected** methods `clone()` and `finalize()` from the `java.lang.Object` class.\n\nIn an interface, it is possible to declare these methods with a return type that is incompatible with the `java.lang.Object` methods.\nA class that implements such an interface will not be compilable.\nWhen the interface is functional, it remains possible to create a lambda from it, but this is not recommended.\n\nExample:\n\n\n // Warning: this interface cannot be implemented\n // by any class, only by a lambda or method reference\n interface MyInterface {\n double clone();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InterfaceMethodClashesWithObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticMethodOnlyUsedInOneClass", + "shortDescription": { + "text": "Static member only used from one other class" + }, + "fullDescription": { + "text": "Reports 'static' methods and fields that are only used from a class other than the containing class. Such members could be moved into the using class. Factory methods and members accessed from an anonymous class inside the member's class are ignored by this inspection. Convenience overloads, which call a method with the same name in the same class but have fewer parameters, are also ignored. Use the first checkbox to suppress this inspection when the static member is only used from a test class. Use the second checkbox below to ignore member usages from inside anonymous, local, or non-static inner classes. Use the third checkbox below to not warn on members that cannot be moved without problems, for example, because a method with an identical signature is already present in the target class, or because a field or a method used inside the method will not be accessible when this method is moved. Use the fourth checkbox to ignore members located in utility classes.", + "markdown": "Reports `static` methods and fields that are only used from a class other than the containing class. Such members could be moved into the using class. Factory methods and members accessed from an anonymous class inside the member's class are ignored by this inspection. Convenience overloads, which call a method with the same name in the same class but have fewer parameters, are also ignored.\n\n\nUse the first checkbox to suppress this inspection when the static member is only used from a test class.\n\n\nUse the second checkbox below to ignore member usages from inside anonymous, local, or non-static inner classes.\n\n\nUse the third checkbox below to not warn on members that cannot be moved without problems,\nfor example, because a method with an identical signature is already present in the target class,\nor because a field or a method used inside the method will not be accessible when this method is moved.\n\n\nUse the fourth checkbox to ignore members located in utility classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticMethodOnlyUsedInOneClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEscapeInRegexReplacement", + "shortDescription": { + "text": "Redundant escape in regex replacement string" + }, + "fullDescription": { + "text": "Reports redundant escapes in the replacement string of regex methods. It is allowed to escape any character in a regex replacement string, but only for the '$' and '\\' characters is escaping necessary. Example: 'string.replaceAll(\"a\", \"\\\\b\");' After the quick-fix is applied: 'string.replaceAll(\"a\", \"b\");' New in 2022.3", + "markdown": "Reports redundant escapes in the replacement string of regex methods. It is allowed to escape any character in a regex replacement string, but only for the `$` and `\\` characters is escaping necessary.\n\n**Example:**\n\n\n string.replaceAll(\"a\", \"\\\\b\");\n\nAfter the quick-fix is applied:\n\n\n string.replaceAll(\"a\", \"b\");\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantEscapeInRegexReplacement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizedOnLiteralObject", + "shortDescription": { + "text": "Synchronization on an object initialized with a literal" + }, + "fullDescription": { + "text": "Reports 'synchronized' blocks that lock on an object initialized with a literal. String literals are interned and 'Character', 'Boolean' and 'Number' literals can be allocated from a cache. Because of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually holding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private. Example: 'class Main {\n final String mutex = \"Mutex\";\n void method() {\n synchronized (mutex) {\n }\n }\n }' Use the Warn on all possible literals option to report any synchronization on 'String', 'Character', 'Boolean' and 'Number' objects.", + "markdown": "Reports `synchronized` blocks that lock on an object initialized with a literal.\n\n\nString literals are interned and `Character`, `Boolean` and `Number` literals can be allocated from a cache.\nBecause of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually\nholding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private.\n\n**Example:**\n\n\n class Main {\n final String mutex = \"Mutex\";\n void method() {\n synchronized (mutex) {\n }\n }\n }\n\n\nUse the **Warn on all possible literals** option to report any synchronization on\n`String`, `Character`, `Boolean` and `Number` objects." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizedOnLiteralObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9ReflectionClassVisibility", + "shortDescription": { + "text": "Reflective access across modules issues" + }, + "fullDescription": { + "text": "Reports 'Class.forName()' and 'ClassLoader.loadClass()' calls which try to access classes that aren't visible in the current scope due to Java 9 module accessibility rules. This inspection depends on the Java feature 'Modules' which is available since Java 9.", + "markdown": "Reports `Class.forName()` and `ClassLoader.loadClass()` calls which try to access classes that aren't visible in the current scope due to Java 9 module accessibility rules.\n\nThis inspection depends on the Java feature 'Modules' which is available since Java 9." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Java9ReflectionClassVisibility", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 129, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharsetObjectCanBeUsed", + "shortDescription": { + "text": "Standard 'Charset' object can be used" + }, + "fullDescription": { + "text": "Reports methods and constructors in which constant charset 'String' literal (for example, '\"UTF-8\"') can be replaced with the predefined 'StandardCharsets.UTF_8' code. The code after the fix may work faster, because the charset lookup becomes unnecessary. Also, catching 'UnsupportedEncodingException' may become unnecessary as well. In this case, the catch block will be removed automatically. Example: 'try {\n byte[] bytes = \"str\".getBytes(\"UTF-8\");\n } catch (UnsupportedEncodingException e) {\n }' After quick-fix is applied: 'byte[] bytes = \"str\".getBytes(StandardCharsets.UTF_8);' The inspection is available in Java 7 and later. New in 2018.2", + "markdown": "Reports methods and constructors in which constant charset `String` literal (for example, `\"UTF-8\"`) can be replaced with the predefined `StandardCharsets.UTF_8` code.\n\nThe code after the fix may work faster, because the charset lookup becomes unnecessary.\nAlso, catching `UnsupportedEncodingException` may become unnecessary as well. In this case,\nthe catch block will be removed automatically.\n\nExample:\n\n\n try {\n byte[] bytes = \"str\".getBytes(\"UTF-8\");\n } catch (UnsupportedEncodingException e) {\n }\n\nAfter quick-fix is applied:\n\n\n byte[] bytes = \"str\".getBytes(StandardCharsets.UTF_8);\n\nThe inspection is available in Java 7 and later.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CharsetObjectCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfSunClasses", + "shortDescription": { + "text": "Use of 'sun.*' classes" + }, + "fullDescription": { + "text": "Reports uses of classes from the 'sun.*' hierarchy. Such classes are non-portable between different JVMs.", + "markdown": "Reports uses of classes from the `sun.*` hierarchy. Such classes are non-portable between different JVMs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfSunClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCast", + "shortDescription": { + "text": "Redundant type cast" + }, + "fullDescription": { + "text": "Reports unnecessary cast expressions. Example: 'static Object toObject(String s) {\n return (Object) s;\n }' Use the checkbox below to ignore clarifying casts e.g., casts in collection calls where 'Object' is expected: 'static void removeFromList(List l, Object o) {\n l.remove((String)o);\n }'", + "markdown": "Reports unnecessary cast expressions.\n\nExample:\n\n\n static Object toObject(String s) {\n return (Object) s;\n }\n\n\nUse the checkbox below to ignore clarifying casts e.g., casts in collection calls where `Object` is expected:\n\n\n static void removeFromList(List l, Object o) {\n l.remove((String)o);\n } \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousInnerClass", + "shortDescription": { + "text": "Anonymous class can be replaced with inner class" + }, + "fullDescription": { + "text": "Reports anonymous classes. Occasionally replacing anonymous classes with inner classes can lead to more readable and maintainable code. Some code standards discourage anonymous classes. Example: 'class Example {\n public static void main(String[] args) {\n new Thread() {\n public void run() {\n work()\n }\n\n private void work() {}\n }.start();\n }\n }' After the quick-fix is applied: 'class Example {\n public static void main(String[] args) {\n new MyThread().start();\n }\n\n private static class MyThread extends Thread {\n public void run() {\n work();\n }\n\n private void work() {}\n }\n }'", + "markdown": "Reports anonymous classes.\n\nOccasionally replacing anonymous classes with inner classes can lead to more readable and maintainable code.\nSome code standards discourage anonymous classes.\n\n**Example:**\n\n\n class Example {\n public static void main(String[] args) {\n new Thread() {\n public void run() {\n work()\n }\n\n private void work() {}\n }.start();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n public static void main(String[] args) {\n new MyThread().start();\n }\n\n private static class MyThread extends Thread {\n public void run() {\n work();\n }\n\n private void work() {}\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AnonymousInnerClass", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyCollector", + "shortDescription": { + "text": "Simplifiable collector" + }, + "fullDescription": { + "text": "Reports collectors that can be simplified. In particular, some cascaded 'groupingBy()' collectors can be expressed by using a simpler 'toMap()' collector, which is also likely to be more performant. Example: 'Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));' After the quick-fix is applied: 'Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2017.1", + "markdown": "Reports collectors that can be simplified.\n\nIn particular, some cascaded `groupingBy()` collectors can be expressed by using a\nsimpler `toMap()` collector, which is also likely to be more performant.\n\nExample:\n\n\n Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));\n\nAfter the quick-fix is applied:\n\n\n Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifyCollector", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleTopLevelClassesInFile", + "shortDescription": { + "text": "Multiple top level classes in single file" + }, + "fullDescription": { + "text": "Reports multiple top-level classes in a single Java file. Putting multiple top-level classes in one file may be confusing and degrade the usefulness of various software tools.", + "markdown": "Reports multiple top-level classes in a single Java file.\n\nPutting multiple\ntop-level classes in one file may be confusing and degrade the usefulness of various\nsoftware tools." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MultipleTopLevelClassesInFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IteratorNextDoesNotThrowNoSuchElementException", + "shortDescription": { + "text": "'Iterator.next()' which can't throw 'NoSuchElementException'" + }, + "fullDescription": { + "text": "Reports implementations of 'Iterator.next()' that cannot throw 'java.util.NoSuchElementException'. Such implementations violate the contract of 'java.util.Iterator', and may result in subtle bugs if the iterator is used in a non-standard way. Example: 'class Numbers implements Iterator {\n @Override\n public Integer next() { //warning\n if (hasNext()) {\n return generateNext();\n } else {\n return null; //throw NoSuchElementException instead\n }\n }\n\n ...\n }'", + "markdown": "Reports implementations of `Iterator.next()` that cannot throw `java.util.NoSuchElementException`.\n\n\nSuch implementations violate the contract of `java.util.Iterator`,\nand may result in subtle bugs if the iterator is used in a non-standard way.\n\n**Example:**\n\n\n class Numbers implements Iterator {\n @Override\n public Integer next() { //warning\n if (hasNext()) {\n return generateNext();\n } else {\n return null; //throw NoSuchElementException instead\n }\n }\n\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IteratorNextCanNotThrowNoSuchElementException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectMessageFormat", + "shortDescription": { + "text": "Incorrect 'MessageFormat' pattern" + }, + "fullDescription": { + "text": "Reports incorrect message format patterns or incorrect indexes of placeholders The following errors are reported: Unparsed or negative index Unclosed brace Unpaired quote. In this case, a part of a pattern may not be used Probably incorrect number of quotes Incorrect lower bound of nested choice patterns Incorrect indexes of placeholders. In this case, a placeholder may not be substituted or an argument may not be used Examples: 'MessageFormat.format(\"{wrong}\", 1); // incorrect index\n MessageFormat.format(\"{0\", 1); // Unmatched brace\n MessageFormat.format(\"'{0}\", 1); // Unpaired quote\n MessageFormat.format(\"It''''s {0}\", 1); // \"It''s\" will be printed, instead of \"It's\"\n MessageFormat.format(\"{0}\", 1, 2); // The argument with index '1' is not used in the pattern' New in 2023.2", + "markdown": "Reports incorrect message format patterns or incorrect indexes of placeholders\n\nThe following errors are reported:\n\n* Unparsed or negative index\n* Unclosed brace\n* Unpaired quote. In this case, a part of a pattern may not be used\n* Probably incorrect number of quotes\n* Incorrect lower bound of nested choice patterns\n* Incorrect indexes of placeholders. In this case, a placeholder may not be substituted or an argument may not be used\n\nExamples:\n\n\n MessageFormat.format(\"{wrong}\", 1); // incorrect index\n MessageFormat.format(\"{0\", 1); // Unmatched brace\n MessageFormat.format(\"'{0}\", 1); // Unpaired quote\n MessageFormat.format(\"It''''s {0}\", 1); // \"It''s\" will be printed, instead of \"It's\"\n MessageFormat.format(\"{0}\", 1, 2); // The argument with index '1' is not used in the pattern\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IncorrectMessageFormat", + "cweIds": [ + 628, + 707 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousTernaryOperatorInVarargsCall", + "shortDescription": { + "text": "Suspicious ternary operator in varargs method call" + }, + "fullDescription": { + "text": "Reports vararg method calls that use a ternary operator with mixed array and non-array branches. When compiled, both branches are wrapped in arrays. As a result, the array branch is turned into a two-dimensional array, which may indicate a problem. The quick-fix wraps the non-array branch in an array to prevent the compiler from doing the conversion. Example: 'static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : b);\n }\n static void foo(Object... obj) {\n }' After the quick-fix: 'static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : new Object[]{b});\n }\n static void foo(Object... obj) {\n }' This inspection depends on the Java feature 'Variable arity methods' which is available since Java 5. New in 2020.3", + "markdown": "Reports vararg method calls that use a ternary operator with mixed array and non-array branches.\n\n\nWhen compiled, both branches are wrapped in arrays. As a result, the array branch is turned into\na two-dimensional array, which may indicate a problem.\n\n\nThe quick-fix wraps the non-array branch in an array to prevent the compiler from doing the conversion.\n\n**Example:**\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : b);\n }\n static void foo(Object... obj) {\n }\n\nAfter the quick-fix:\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : new Object[]{b});\n }\n static void foo(Object... obj) {\n }\n\nThis inspection depends on the Java feature 'Variable arity methods' which is available since Java 5.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousTernaryOperatorInVarargsCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableInnerClassHasSerialVersionUIDField", + "shortDescription": { + "text": "Serializable non-static inner class without 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports non-static inner classes that implement 'java.io.Serializable', but do not define a 'serialVersionUID' field. Without a 'serialVersionUID' field, any change to the class will make previously serialized versions unreadable. It is strongly recommended that 'Serializable' non-static inner classes have a 'serialVersionUID' field, otherwise the default serialization algorithm may result in serialized versions being incompatible between compilers due to differences in synthetic accessor methods. A quick-fix is suggested to add the missing 'serialVersionUID' field. Example: 'class Outer {\n class Inner implements Serializable {}\n }' After the quick-fix is applied: 'class Outer {\n class Inner implements Serializable {\n private static final long serialVersionUID = -7004458730436243902L;\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports non-static inner classes that implement `java.io.Serializable`, but do not define a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously\nserialized versions unreadable. It is strongly recommended that `Serializable`\nnon-static inner classes have a `serialVersionUID` field, otherwise the default\nserialization algorithm may result in serialized versions being incompatible between\ncompilers due to differences in synthetic accessor methods.\n\n\nA quick-fix is suggested to add the missing `serialVersionUID` field.\n\n**Example:**\n\n\n class Outer {\n class Inner implements Serializable {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Outer {\n class Inner implements Serializable {\n private static final long serialVersionUID = -7004458730436243902L;\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableNonStaticInnerClassWithoutSerialVersionUID", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNameDiffersFromOverriddenParameter", + "shortDescription": { + "text": "Parameter name differs from parameter in overridden or overloaded method" + }, + "fullDescription": { + "text": "Reports parameters whose names differ from the corresponding parameters of the methods they override or overload. While legal in Java, such inconsistent names may be confusing and decrease the documentation benefits of good naming practices. Example: 'class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String name) { super(name); }\n }' After the quick-fix is applied: 'class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String fullName) { super(fullName); }\n }' Use the options to indicate whether to ignore overridden parameter names that are only a single character long or come from a library method. Both can be useful if you do not wish to be bound by dubious naming conventions used in libraries.", + "markdown": "Reports parameters whose names differ from the corresponding parameters of the methods they override or overload. While legal in Java, such inconsistent names may be confusing and decrease the documentation benefits of good naming practices.\n\n**Example:**\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String name) { super(name); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String fullName) { super(fullName); }\n }\n\n\nUse the options to indicate whether to ignore overridden parameter names that are only\na single character long or come from a library method. Both can be useful if\nyou do not wish to be bound by dubious naming conventions used in libraries." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterNameDiffersFromOverriddenParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OctalLiteral", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals. Example: 'int i = 015;\n int j = 0_777;' This inspection has two different quick-fixes. After the Convert octal literal to decimal literal quick-fix is applied, the code changes to: 'int i = 13;\n int j = 511;' After the Remove leading zero to make decimal quick-fix is applied, the code changes to: 'int i = 15;\n int j = 777;'", + "markdown": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals.\n\nExample:\n\n\n int i = 015;\n int j = 0_777;\n\nThis inspection has two different quick-fixes.\nAfter the **Convert octal literal to decimal literal** quick-fix is applied, the code changes to:\n\n\n int i = 13;\n int j = 511;\n\nAfter the **Remove leading zero to make decimal** quick-fix is applied, the code changes to:\n\n\n int i = 15;\n int j = 777;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OctalInteger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadWriteStringCanBeUsed", + "shortDescription": { + "text": "'Files.readString()' or 'Files.writeString()' can be used" + }, + "fullDescription": { + "text": "Reports method calls that read or write a 'String' as bytes using 'java.nio.file.Files'. Such calls can be replaced with a call to a 'Files.readString()' or 'Files.writeString()' method introduced in Java 11. Example: 'String s = \"example\";\n Files.write(Paths.get(\"out.txt\"), s.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE);\n s = new String(Files.readAllBytes(Paths.get(\"in.txt\")), StandardCharsets.ISO_8859_1);' After the quick fix is applied: 'String s = \"example\";\n Files.writeString(Paths.get(\"out.txt\"), s, StandardOpenOption.WRITE);\n s = Files.readString(Paths.get(\"in.txt\"), StandardCharsets.ISO_8859_1);' New in 2018.3", + "markdown": "Reports method calls that read or write a `String` as bytes using `java.nio.file.Files`. Such calls can be replaced with a call to a `Files.readString()` or `Files.writeString()` method introduced in Java 11.\n\n**Example:**\n\n\n String s = \"example\";\n Files.write(Paths.get(\"out.txt\"), s.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE);\n s = new String(Files.readAllBytes(Paths.get(\"in.txt\")), StandardCharsets.ISO_8859_1);\n\nAfter the quick fix is applied:\n\n\n String s = \"example\";\n Files.writeString(Paths.get(\"out.txt\"), s, StandardOpenOption.WRITE);\n s = Files.readString(Paths.get(\"in.txt\"), StandardCharsets.ISO_8859_1);\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReadWriteStringCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 11", + "index": 176, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclomaticComplexity", + "shortDescription": { + "text": "Overly complex method" + }, + "fullDescription": { + "text": "Reports methods that have too many branch points. A branch point is one of the following: loop statement 'if' statement ternary expression 'catch' section expression with one or more '&&' or '||' operators inside 'switch' block with non-default branches Methods with too high cyclomatic complexity may be confusing and hard to test. Use the Method complexity limit field to specify the maximum allowed cyclomatic complexity for a method.", + "markdown": "Reports methods that have too many branch points.\n\nA branch point is one of the following:\n\n* loop statement\n* `if` statement\n* ternary expression\n* `catch` section\n* expression with one or more `&&` or `||` operators inside\n* `switch` block with non-default branches\n\nMethods with too high cyclomatic complexity may be confusing and hard to test.\n\nUse the **Method complexity limit** field to specify the maximum allowed cyclomatic complexity for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AwaitNotInLoop", + "shortDescription": { + "text": "'await()' not called in loop" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.locks.Condition.await()' not being called inside a loop. 'await()' and related methods are normally used to suspend a thread until some condition becomes true. As the thread could have been woken up for a different reason, the condition should be checked after the 'await()' call returns. A loop is a simple way to achieve this. Example: 'void acquire(Condition released) throws InterruptedException {\n released.await();\n }' Good code should look like this: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }'", + "markdown": "Reports `java.util.concurrent.locks.Condition.await()` not being called inside a loop.\n\n\n`await()` and related methods are normally used to suspend a thread until some condition becomes true.\nAs the thread could have been woken up for a different reason,\nthe condition should be checked after the `await()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n released.await();\n }\n\nGood code should look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AwaitNotInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticVariableUninitializedUse", + "shortDescription": { + "text": "Static field used before initialization" + }, + "fullDescription": { + "text": "Reports 'static' variables that are read before initialization. The inspection ignores equality checks with 'null'. Example: 'class Foo {\n public static int bar;\n\n public static void main(String[] args) {\n System.out.println(bar);\n }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report 'static' variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports `static` variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n public static void main(String[] args) {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticVariableUsedBeforeInitialization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclicClassDependency", + "shortDescription": { + "text": "Cyclic class dependency" + }, + "fullDescription": { + "text": "Reports classes that are mutually or cyclically dependent on other classes. Such cyclic dependencies make code fragile and hard to maintain. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are mutually or cyclically dependent on other classes.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CyclicClassDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferReplaceableByStringBuilder", + "shortDescription": { + "text": "'StringBuffer' may be 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports variables declared as 'StringBuffer' and suggests replacing them with 'StringBuilder'. 'StringBuilder' is a non-thread-safe replacement for 'StringBuffer'. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports variables declared as `StringBuffer` and suggests replacing them with `StringBuilder`. `StringBuilder` is a non-thread-safe replacement for `StringBuffer`.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringBufferMayBeStringBuilder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizedMethod", + "shortDescription": { + "text": "'synchronized' method" + }, + "fullDescription": { + "text": "Reports the 'synchronized' modifier on methods. There are several reasons a 'synchronized' modifier on a method may be a bad idea: As little work as possible should be performed under a lock. Therefore it is often better to use a 'synchronized' block and keep there only the code that works with shared state. Synchronization becomes a part of a method's interface. This makes a transition to a different locking mechanism difficult. Keeping track of what is locking a particular object gets harder. The DoS (denial-of-service) attack becomes feasible either on purpose or unknowingly when inheriting the method's class. As an alternative, consider synchronizing on a 'private final' lock object, access to which can be completely controlled. A quick-fix is provided to wrap the method body with 'synchronized(this)'. Example: 'class Main {\n public synchronized void fooBar() {\n }\n }' After the quick-fix is applied: 'class Main {\n public void fooBar() {\n synchronized (this) {\n }\n }\n }' You can configure the following options for this inspection: Include native methods - include native methods into the inspection's scope. Ignore methods overriding a synchronized method - do not report methods that override a 'synchronized' method.", + "markdown": "Reports the `synchronized` modifier on methods.\n\n\nThere are several reasons a `synchronized` modifier on a method may be a bad idea:\n\n1. As little work as possible should be performed under a lock. Therefore it is often better to use a `synchronized` block and keep there only the code that works with shared state.\n2. Synchronization becomes a part of a method's interface. This makes a transition to a different locking mechanism difficult.\n3. Keeping track of what is locking a particular object gets harder.\n4. The DoS (denial-of-service) attack becomes feasible either on purpose or unknowingly when inheriting the method's class.\n\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\nA quick-fix is provided to wrap the method body with `synchronized(this)`.\n\n**Example:**\n\n\n class Main {\n public synchronized void fooBar() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public void fooBar() {\n synchronized (this) {\n }\n }\n }\n\nYou can configure the following options for this inspection:\n\n1. **Include native methods** - include native methods into the inspection's scope.\n2. **Ignore methods overriding a synchronized method** - do not report methods that override a `synchronized` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodWithMissingImplementations", + "shortDescription": { + "text": "Abstract method with missing implementations" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that are not implemented in every concrete subclass. This results in a compile-time error on the subclasses; the inspection reports the problem at the point of the abstract method, allowing faster detection of the problem.", + "markdown": "Reports `abstract` methods that are not implemented in every concrete subclass.\n\n\nThis results in a compile-time error on the subclasses;\nthe inspection reports the problem at the point of the abstract method, allowing faster detection of the problem." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractMethodWithMissingImplementations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2MethodRef", + "shortDescription": { + "text": "Lambda can be replaced with method reference" + }, + "fullDescription": { + "text": "Reports lambdas that can be replaced with method references. While often it could be a matter of taste, method references are more clear and readable compared to lambdas. Example: 'Runnable r = () -> System.out.println();' After the quick-fix is applied: 'Runnable r = System.out::println;' The inspection may suggest method references even if a lambda doesn't call any method, like replacing 'obj -> obj != null' with 'Objects::nonNull'. Use the Settings | Editor | Code Style | Java | Code Generation settings to configure special method references. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambdas that can be replaced with method references. While often it could be a matter of taste, method references are more clear and readable compared to lambdas.\n\nExample:\n\n\n Runnable r = () -> System.out.println();\n\nAfter the quick-fix is applied:\n\n\n Runnable r = System.out::println;\n\n\nThe inspection may suggest method references even if a lambda doesn't call any method, like replacing `obj -> obj != null`\nwith `Objects::nonNull`.\nUse the [Settings \\| Editor \\| Code Style \\| Java \\| Code Generation](settings://preferences.sourceCode.Java?Lambda%20Body)\nsettings to configure special method references.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Convert2MethodRef", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassOnlyUsedInOnePackage", + "shortDescription": { + "text": "Class only used from one other package" + }, + "fullDescription": { + "text": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassOnlyUsedInOnePackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryToStringCall", + "shortDescription": { + "text": "Unnecessary call to 'toString()'" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' that are used in the following cases: In string concatenations In the 'java.lang.StringBuilder#append()' or 'java.lang.StringBuffer#append()' methods In the methods of 'java.io.PrintWriter' or 'java.io.PrintStream' in the methods 'org.slf4j.Logger' In these cases, conversion to string will be handled by the underlying library methods, and the explicit call to 'toString()' is not needed. Example: 'System.out.println(this.toString())' After the quick-fix is applied: 'System.out.println(this)' Note that without the 'toString()' call, the code semantics might be different: if the expression is null, then the 'null' string will be used instead of throwing a 'NullPointerException'. Use the Report only when qualifier is known to be not-null option to avoid warnings for the values that could potentially be null.", + "markdown": "Reports calls to `toString()` that are used in the following cases:\n\n* In string concatenations\n* In the `java.lang.StringBuilder#append()` or `java.lang.StringBuffer#append()` methods\n* In the methods of `java.io.PrintWriter` or `java.io.PrintStream`\n* in the methods `org.slf4j.Logger`\n\nIn these cases, conversion to string will be handled by the underlying library methods, and the explicit call to `toString()` is not needed.\n\nExample:\n\n\n System.out.println(this.toString())\n\nAfter the quick-fix is applied:\n\n\n System.out.println(this)\n\n\nNote that without the `toString()` call, the code semantics might be different: if the expression is null,\nthen the `null` string will be used instead of throwing a `NullPointerException`.\n\nUse the **Report only when qualifier is known to be not-null** option to avoid warnings for the values that could potentially be null." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryToStringCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuppressionAnnotation", + "shortDescription": { + "text": "Inspection suppression annotation" + }, + "fullDescription": { + "text": "Reports comments or annotations suppressing inspections. This inspection can be useful when leaving suppressions intentionally for further review. Example: '@SuppressWarnings(\"unused\")\nstatic Stream stringProvider() {\n return Stream.of(\"foo\", \"bar\");\n}'", + "markdown": "Reports comments or annotations suppressing inspections.\n\nThis inspection can be useful when leaving suppressions intentionally for further review.\n\n**Example:**\n\n\n @SuppressWarnings(\"unused\")\n static Stream stringProvider() {\n return Stream.of(\"foo\", \"bar\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuppressionAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnNonFinalField", + "shortDescription": { + "text": "Synchronization on a non-final field" + }, + "fullDescription": { + "text": "Reports 'synchronized' statement lock expressions that consist of a non-'final' field reference. Such statements are unlikely to have useful semantics, as different threads may acquire different locks even when operating on the same object. Example: 'private Object o;\n public void foo() {\n synchronized (o) // synchronization on a non-final field\n { }\n }'", + "markdown": "Reports `synchronized` statement lock expressions that consist of a non-`final` field reference. Such statements are unlikely to have useful semantics, as different threads may acquire different locks even when operating on the same object.\n\n**Example:**\n\n\n private Object o;\n public void foo() {\n synchronized (o) // synchronization on a non-final field\n { }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizeOnNonFinalField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnSeparatedFromComputation", + "shortDescription": { + "text": "'return' separated from the result computation" + }, + "fullDescription": { + "text": "Reports 'return' statements that return a local variable where the value of the variable is computed somewhere else within the same method. The quick-fix inlines the returned variable by moving the return statement to the location in which the value of the variable is computed. When the returned value can't be inlined into the 'return' statement, the quick-fix attempts to move the return statement as close to the computation of the returned value as possible. Example: 'int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n n = i;\n break;\n }\n }\n return n;' After the quick-fix is applied: 'int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n return i;\n }\n }\n return n;'", + "markdown": "Reports `return` statements that return a local variable where the value of the variable is computed somewhere else within the same method.\n\nThe quick-fix inlines the returned variable by moving the return statement to the location in which the value\nof the variable is computed.\nWhen the returned value can't be inlined into the `return` statement,\nthe quick-fix attempts to move the return statement as close to the computation of the returned value as possible.\n\nExample:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n n = i;\n break;\n }\n }\n return n;\n\nAfter the quick-fix is applied:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n return i;\n }\n }\n return n;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReturnSeparatedFromComputation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayObjectsEquals", + "shortDescription": { + "text": "Use of shallow or 'Objects' methods with arrays" + }, + "fullDescription": { + "text": "Reports expressions that seem to use an inappropriate method for determining array equality or calculating their hashcode. The following method calls are reported: 'Object.equals()' for any arrays 'Arrays.equals()' for multidimensional arrays 'Arrays.hashCode()' for multidimensional arrays", + "markdown": "Reports expressions that seem to use an inappropriate method for determining array equality or calculating their hashcode.\n\nThe following method calls are reported:\n\n* `Object.equals()` for any arrays\n* `Arrays.equals()` for multidimensional arrays\n* `Arrays.hashCode()` for multidimensional arrays" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ArrayObjectsEquals", + "cweIds": [ + 480 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsWhichDoesntCheckParameterClass", + "shortDescription": { + "text": "'equals()' method which does not check class of parameter" + }, + "fullDescription": { + "text": "Reports 'equals()' methods that do not check the type of their parameter. Failure to check the type of the parameter in the 'equals()' method may result in latent errors if the object is used in an untyped collection. Example: 'class MyClass {\n int x;\n\n @Override\n public boolean equals(Object obj) {\n // equals method should return false if obj is not MyClass\n return ((MyClass)obj).x == x;\n }\n }'", + "markdown": "Reports `equals()` methods that do not check the type of their parameter.\n\nFailure to check the type of the parameter\nin the `equals()` method may result in latent errors if the object is used in an untyped collection.\n\n**Example:**\n\n\n class MyClass {\n int x;\n\n @Override\n public boolean equals(Object obj) {\n // equals method should return false if obj is not MyClass\n return ((MyClass)obj).x == x;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsWhichDoesntCheckParameterClass", + "cweIds": [ + 697 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseHashCodeMethodInspection", + "shortDescription": { + "text": "Standard 'hashCode()' method can be used" + }, + "fullDescription": { + "text": "Reports bitwise operations that can be replaced with a call to the 'Long.hashCode()' or 'Double.hashCode()' methods. It detects the construct '(int)(x ^ (x >>> 32))' where 'x' is a variable of type 'long' or the result of a previous 'Double.doubleToLongBits()' call. The replacement shortens the code, improving its readability. Example: 'int result = (int)(var ^ (var >>> 32));' After applying the quick-fix: 'int result = Long.hashCode(var);' This inspection only reports if the language level of the project or module is 8 or higher. New in 2024.1", + "markdown": "Reports bitwise operations that can be replaced with a call to the `Long.hashCode()` or `Double.hashCode()` methods. It detects the construct `(int)(x ^ (x >>> 32))` where `x` is a variable of type `long` or the result of a previous `Double.doubleToLongBits()` call. The replacement shortens the code, improving its readability.\n\n**Example:**\n\n\n int result = (int)(var ^ (var >>> 32));\n\nAfter applying the quick-fix:\n\n\n int result = Long.hashCode(var);\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseHashCodeMethodInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousIndentAfterControlStatement", + "shortDescription": { + "text": "Suspicious indentation after control statement without braces" + }, + "fullDescription": { + "text": "Reports suspicious indentation of statements after a control statement without braces. Such indentation can make it look like the statement is inside the control statement, when in fact it will be executed unconditionally after the control statement. Example: 'class Bar {\n void foo(int i) {\n if (i == 0)\n System.out.println(\"foo\");\n System.out.println(\"bar\"); // warning\n if (i == 1);\n System.out.println(\"great\"); // warning\n if (i == 42)\n System.out.println(\"answer\");\n System.out.println(\"question\"); // warning\n }\n }'", + "markdown": "Reports suspicious indentation of statements after a control statement without braces.\n\n\nSuch indentation can make it look like the statement is inside the control statement,\nwhen in fact it will be executed unconditionally after the control statement.\n\n**Example:**\n\n\n class Bar {\n void foo(int i) {\n if (i == 0)\n System.out.println(\"foo\");\n System.out.println(\"bar\"); // warning\n if (i == 1);\n System.out.println(\"great\"); // warning\n if (i == 42)\n System.out.println(\"answer\");\n System.out.println(\"question\"); // warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousIndentAfterControlStatement", + "cweIds": [ + 483 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumericOverflow", + "shortDescription": { + "text": "Numeric overflow" + }, + "fullDescription": { + "text": "Reports expressions that overflow during computation. Usually, this happens by accident and indicates a bug. For example, a wrong type is used or a shift should be done in an opposite direction . Examples: 'float a = 1.0f/0.0f;\n long b = 30 * 24 * 60 * 60 * 1000;\n long c = 1000L << 62;'", + "markdown": "Reports expressions that overflow during computation. Usually, this happens by accident and indicates a bug. For example, a wrong type is used or a shift should be done in an opposite direction .\n\n**Examples:**\n\n\n float a = 1.0f/0.0f;\n long b = 30 * 24 * 60 * 60 * 1000;\n long c = 1000L << 62;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NumericOverflow", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToSuperclassField", + "shortDescription": { + "text": "Constructor assigns value to field defined in superclass" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of fields that are declared in a superclass from within a subclass constructor. It is considered preferable to initialize the fields of a superclass in its own constructor and delegate to that constructor in a subclass. This will also allow declaring a field 'final' if it isn't changed after the construction. Example: 'class Super {\n int x;\n }\n class Sub extends Super {\n Sub(int _x) {\n // Warning: x is declared in a superclass\n x = _x;\n }\n }' To avoid the problem, declare a superclass constructor: 'class Super {\n final int x;\n\n Super(int _x) {\n x = _x;\n }\n }\n class Sub extends Super {\n Sub(int _x) {\n super(_x);\n }\n }'", + "markdown": "Reports assignment to, or modification of fields that are declared in a superclass from within a subclass constructor.\n\nIt is considered preferable to initialize the fields of a superclass in its own constructor and\ndelegate to that constructor in a subclass. This will also allow declaring a field `final`\nif it isn't changed after the construction.\n\n**Example:**\n\n\n class Super {\n int x;\n }\n class Sub extends Super {\n Sub(int _x) {\n // Warning: x is declared in a superclass\n x = _x;\n }\n }\n\nTo avoid the problem, declare a superclass constructor:\n\n\n class Super {\n final int x;\n\n Super(int _x) {\n x = _x;\n }\n }\n class Sub extends Super {\n Sub(int _x) {\n super(_x);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToSuperclassField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNewInstance", + "shortDescription": { + "text": "Unsafe call to 'Class.newInstance()'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Class.newInstance()'. This method propagates exceptions thrown by the no-arguments constructor, including checked exceptions. Usages of this method effectively bypass the compile-time exception checking that would otherwise be performed by the compiler. A quick-fix is suggested to replace the call with a call to the 'java.lang.reflect.Constructor.newInstance()' method, which avoids this problem by wrapping any exception thrown by the constructor in a (checked) 'java.lang.reflect.InvocationTargetException'. Example: 'clazz.newInstance()' After the quick-fix is applied: 'clazz.getConstructor().newInstance();'", + "markdown": "Reports calls to `java.lang.Class.newInstance()`.\n\n\nThis method propagates exceptions thrown by\nthe no-arguments constructor, including checked exceptions. Usages of this method\neffectively bypass the compile-time exception checking that would\notherwise be performed by the compiler.\n\n\nA quick-fix is suggested to replace the call with a call to the\n`java.lang.reflect.Constructor.newInstance()` method, which\navoids this problem by wrapping any exception thrown by the constructor in a\n(checked) `java.lang.reflect.InvocationTargetException`.\n\n**Example:**\n\n\n clazz.newInstance()\n\nAfter the quick-fix is applied:\n\n\n clazz.getConstructor().newInstance();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassNewInstance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LimitedScopeInnerClass", + "shortDescription": { + "text": "Local class" + }, + "fullDescription": { + "text": "Reports local classes. A local class is a named nested class declared inside a code block. Local classes are uncommon and may therefore be confusing. In addition, some code standards discourage the use of local classes. Example: 'class Example {\n void test() {\n class Local { // here\n }\n new Local();\n }\n }' After the quick-fix is applied: 'class Example {\n void test() {\n new Local();\n }\n\n private static class Local { // here\n }\n }'", + "markdown": "Reports local classes.\n\nA local class is a named nested class declared inside a code block.\nLocal classes are uncommon and may therefore be confusing.\nIn addition, some code standards discourage the use of local classes.\n\n**Example:**\n\n\n class Example {\n void test() {\n class Local { // here\n }\n new Local();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n void test() {\n new Local();\n }\n\n private static class Local { // here\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LimitedScopeInnerClass", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultiplyOrDivideByPowerOfTwo", + "shortDescription": { + "text": "Multiplication or division by power of two" + }, + "fullDescription": { + "text": "Reports multiplication of an integer value by a constant integer that can be represented as a power of two. Such expressions can be replaced with right or left shift operations for a possible performance improvement. Note that this inspection is not relevant for modern JVMs (e. g., HotSpot or OpenJ9) because their JIT compilers will perform this optimization. It might only be useful in some embedded systems where no JIT compilation is performed. Example: 'int y = x * 4;' A quick-fix is suggested to replace the multiplication or division operation with the shift operation: 'int y = x << 2;' Use the option to make the inspection also report division by a power of two. Note that replacing a power of two division with a shift does not work for negative numbers.", + "markdown": "Reports multiplication of an integer value by a constant integer that can be represented as a power of two. Such expressions can be replaced with right or left shift operations for a possible performance improvement.\n\n\nNote that this inspection is not relevant for modern JVMs (e. g.,\nHotSpot or OpenJ9) because their JIT compilers will perform this optimization.\nIt might only be useful in some embedded systems where no JIT compilation is performed.\n\n**Example:**\n\n\n int y = x * 4;\n\nA quick-fix is suggested to replace the multiplication or division operation with the shift operation:\n\n\n int y = x << 2;\n\n\nUse the option to make the inspection also report division by a power of two.\nNote that replacing a power of two division with a shift does not work for negative numbers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MultiplyOrDivideByPowerOfTwo", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCallInLoopCondition", + "shortDescription": { + "text": "Method call in loop condition" + }, + "fullDescription": { + "text": "Reports method calls in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications. Applying the results of this inspection without consideration might have negative effects on code clarity and design. This inspection is intended for Java ME and other highly resource constrained environments. Example: 'String s = \"example\";\n for (int i = 0; i < s.length(); i++) {\n System.out.println(s.charAt(i));\n }' After the quick-fix is applied: 'String s = \"example\";\n int length = s.length();\n for (int i = 0; i < length; i++) {\n System.out.println(s.charAt(i));\n }' Use the option to ignore calls to common Java iteration methods like 'Iterator.hasNext()' and known methods with side-effects like 'Atomic*.compareAndSet'.", + "markdown": "Reports method calls in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\nThis inspection is intended for Java ME and other highly resource constrained environments.\n\n**Example:**\n\n\n String s = \"example\";\n for (int i = 0; i < s.length(); i++) {\n System.out.println(s.charAt(i));\n }\n\nAfter the quick-fix is applied:\n\n\n String s = \"example\";\n int length = s.length();\n for (int i = 0; i < length; i++) {\n System.out.println(s.charAt(i));\n }\n\n\nUse the option to ignore calls to common Java iteration methods like `Iterator.hasNext()`\nand known methods with side-effects like `Atomic*.compareAndSet`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodCallInLoopCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCount", + "shortDescription": { + "text": "Class with too many methods" + }, + "fullDescription": { + "text": "Reports classes whose number of methods exceeds the specified maximum. Classes with too many methods are often trying to 'do too much'. Consider splitting such a class into multiple smaller classes. Configure the inspection: Use the Method count limit field to specify the maximum allowed number of methods in a class. Use the Ignore simple getter and setter methods option to ignore simple getters and setters in method count. Use the Ignore methods overriding/implementing a super method to ignore methods that override or implement a method from a superclass.", + "markdown": "Reports classes whose number of methods exceeds the specified maximum.\n\nClasses with too many methods are often trying to 'do too much'. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Method count limit** field to specify the maximum allowed number of methods in a class.\n* Use the **Ignore simple getter and setter methods** option to ignore simple getters and setters in method count.\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods that override or implement a method from a superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopReplaceableByWhile", + "shortDescription": { + "text": "'for' loop may be replaced by 'while' loop" + }, + "fullDescription": { + "text": "Reports 'for' loops that contain neither initialization nor update components, and suggests converting them to 'while' loops. This makes the code easier to read. Example: 'for(; exitCondition(); ) {\n process();\n }' After the quick-fix is applied: 'while(exitCondition()) {\n process();\n }' The quick-fix is also available for other 'for' loops, so you can replace any 'for' loop with a 'while' loop. Use the Ignore 'infinite' for loops without conditions option if you want to ignore 'for' loops with trivial or non-existent conditions.", + "markdown": "Reports `for` loops that contain neither initialization nor update components, and suggests converting them to `while` loops. This makes the code easier to read.\n\nExample:\n\n\n for(; exitCondition(); ) {\n process();\n }\n\nAfter the quick-fix is applied:\n\n\n while(exitCondition()) {\n process();\n }\n\nThe quick-fix is also available for other `for` loops, so you can replace any `for` loop with a\n`while` loop.\n\nUse the **Ignore 'infinite' for loops without conditions** option if you want to ignore `for`\nloops with trivial or non-existent conditions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForLoopReplaceableByWhile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticFieldReferenceOnSubclass", + "shortDescription": { + "text": "Static field referenced via subclass" + }, + "fullDescription": { + "text": "Reports accesses to static fields where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself. Java allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding. Example: 'class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Child.foo);\n }' After the quick-fix is applied, the result looks like this: 'class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Parent.foo);\n }'", + "markdown": "Reports accesses to static fields where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Child.foo);\n }\n\nAfter the quick-fix is applied, the result looks like this:\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Parent.foo);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticFieldReferencedViaSubclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoreResultOfCall", + "shortDescription": { + "text": "Result of method call ignored" + }, + "fullDescription": { + "text": "Reports method calls whose result is ignored. For many methods, ignoring the result is perfectly legitimate, but for some it is almost certainly an error. Examples of methods where ignoring the result is likely an error include 'java.io.inputStream.read()', which returns the number of bytes actually read, and any method on 'java.lang.String' or 'java.math.BigInteger'. These methods do not produce side-effects and thus pointless if their result is ignored. The calls to the following methods are inspected: Simple getters (which do nothing except return a field) Methods specified in the settings of this inspection Methods annotated with 'org.jetbrains.annotations.Contract(pure=true)' Methods annotated with .*.'CheckReturnValue' Methods in a class or package annotated with 'javax.annotation.CheckReturnValue' Optionally, all non-library methods Calls to methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation are not reported. Use the inspection settings to specify the classes to check. Methods are matched by name or name pattern using Java regular expression syntax. For classes, use fully-qualified names. Each entry applies to both the class and all its inheritors.", + "markdown": "Reports method calls whose result is ignored.\n\nFor many methods, ignoring the result is perfectly\nlegitimate, but for some it is almost certainly an error. Examples of methods where ignoring\nthe result is likely an error include `java.io.inputStream.read()`,\nwhich returns the number of bytes actually read, and any method on\n`java.lang.String` or `java.math.BigInteger`. These methods do not produce side-effects and thus pointless\nif their result is ignored.\n\nThe calls to the following methods are inspected:\n\n* Simple getters (which do nothing except return a field)\n* Methods specified in the settings of this inspection\n* Methods annotated with `org.jetbrains.annotations.Contract(pure=true)`\n* Methods annotated with .\\*.`CheckReturnValue`\n* Methods in a class or package annotated with `javax.annotation.CheckReturnValue`\n* Optionally, all non-library methods\n\nCalls to methods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation are not reported.\n\n\nUse the inspection settings to specify the classes to check.\nMethods are matched by name or name pattern using Java regular expression syntax.\nFor classes, use fully-qualified names. Each entry applies to both the class and all its inheritors." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ResultOfMethodCallIgnored", + "cweIds": [ + 252, + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockingMethodInNonBlockingContext", + "shortDescription": { + "text": "Possibly blocking call in non-blocking context" + }, + "fullDescription": { + "text": "Reports thread-blocking method calls in code fragments where threads should not be blocked. Example (Project Reactor): 'Flux.just(\"1\").flatMap(f -> {\n Flux just = loadUsersFromDatabase();\n just.toIterable(); // Error: blocking operator call in non-blocking scope\n return just;\n }\n);' Consider running blocking code with a proper scheduler, for example 'Schedulers.boundedElastic()', or try to find an alternative non-blocking API. Example (Kotlin Coroutines): 'suspend fun exampleFun() {\n Thread.sleep(100); // Error: blocking method call inside suspend function\n}' Consider running blocking code with a special dispatcher, for example 'Dispatchers.IO', or try to find an alternative non-blocking API. Configure the inspection: In the Blocking Annotations list, specify annotations that mark thread-blocking methods. In the Non-Blocking Annotations list, specify annotations that mark non-blocking methods. Specified annotations can be used as External Annotations", + "markdown": "Reports thread-blocking method calls in code fragments where threads should not be blocked.\n\n**Example (Project Reactor):**\n\n\n Flux.just(\"1\").flatMap(f -> {\n Flux just = loadUsersFromDatabase();\n just.toIterable(); // Error: blocking operator call in non-blocking scope\n return just;\n }\n );\n\nConsider running blocking code [with a proper\nscheduler](https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking), for example `Schedulers.boundedElastic()`, or try to find an alternative non-blocking API.\n\n**Example (Kotlin Coroutines):**\n\n\n suspend fun exampleFun() {\n Thread.sleep(100); // Error: blocking method call inside suspend function\n }\n\nConsider running blocking code [with a special dispatcher](https://kotlinlang.org/docs/coroutine-context-and-dispatchers.html),\nfor example `Dispatchers.IO`, or try to find an alternative non-blocking API.\n\nConfigure the inspection:\n\n* In the **Blocking Annotations** list, specify annotations that mark thread-blocking methods.\n* In the **Non-Blocking Annotations** list, specify annotations that mark non-blocking methods.\n\nSpecified annotations can be used as [External Annotations](https://www.jetbrains.com/help/idea/external-annotations.html)" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "BlockingMethodInNonBlockingContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertBetweenInconvertibleTypes", + "shortDescription": { + "text": "'assertEquals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to assertion methods where the \"expected\" and \"actual\" arguments are of incompatible types. Such calls often indicate that there is a bug in the test. This inspection checks the relevant JUnit, TestNG, and AssertJ methods. Examples: 'assertEquals(\"1\", 1);\n assertNotSame(new int[0], 0);\n\n // weak warning, may just test the equals() contract\n assertThat(foo).as(\"user type\").isNotEqualTo(bar);'", + "markdown": "Reports calls to assertion methods where the \"expected\" and \"actual\" arguments are of incompatible types.\n\nSuch calls often indicate that there is a bug in the test.\nThis inspection checks the relevant JUnit, TestNG, and AssertJ methods.\n\n**Examples:**\n\n\n assertEquals(\"1\", 1);\n assertNotSame(new int[0], 0);\n\n // weak warning, may just test the equals() contract\n assertThat(foo).as(\"user type\").isNotEqualTo(bar);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "AssertBetweenInconvertibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchExpressionCanBePushedDown", + "shortDescription": { + "text": "Common subexpression can be extracted from 'switch'" + }, + "fullDescription": { + "text": "Reports switch expressions and statements where every branch has a common subexpression, and the 'switch' can be moved inside. This action shortens the code. In many cases, it's reasonable to extract the resulting switch expression to a separate variable or method. Example: 'switch (value) {\n case 0 -> System.out.println(\"zero\");\n case 1 -> System.out.println(\"one\");\n case 2, 3, 4 -> System.out.println(\"few\");\n default -> System.out.println(\"many\");\n }' After the quick-fix is applied: 'System.out.println(switch (value) {\n case 0 -> \"zero\";\n case 1 -> \"one\";\n case 2, 3, 4 -> \"few\";\n default -> \"many\";\n });' This inspection is applicable only for enhanced switches with arrow syntax. This inspection depends on the Java feature ''switch' expressions' which is available since Java 14. New in 2022.3", + "markdown": "Reports switch expressions and statements where every branch has a common subexpression, and the `switch` can be moved inside. This action shortens the code. In many cases, it's reasonable to extract the resulting switch expression to a separate variable or method.\n\nExample:\n\n\n switch (value) {\n case 0 -> System.out.println(\"zero\");\n case 1 -> System.out.println(\"one\");\n case 2, 3, 4 -> System.out.println(\"few\");\n default -> System.out.println(\"many\");\n }\n\nAfter the quick-fix is applied:\n\n\n System.out.println(switch (value) {\n case 0 -> \"zero\";\n case 1 -> \"one\";\n case 2, 3, 4 -> \"few\";\n default -> \"many\";\n });\n\n\nThis inspection is applicable only for enhanced switches with arrow syntax.\n\nThis inspection depends on the Java feature ''switch' expressions' which is available since Java 14.\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SwitchExpressionCanBePushedDown", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingElse", + "shortDescription": { + "text": "Redundant 'else'" + }, + "fullDescription": { + "text": "Reports redundant 'else' keywords in 'if'—'else' statements and statement chains. The 'else' keyword is redundant when all previous branches end with a 'return', 'throw', 'break', or 'continue' statement. In this case, the statements from the 'else' branch can be placed after the 'if' statement, and the 'else' keyword can be removed. Example: 'if (name == null) {\n throw new IllegalArgumentException();\n } else {\n System.out.println(name);\n }' After the quick-fix is applied: 'if (name == null) {\n throw new IllegalArgumentException();\n }\n System.out.println(name);' Disable the Report when there are no more statements after the 'if' statement option to ignore cases where the 'if'—'else' statement is the last statement in a code block.", + "markdown": "Reports redundant `else` keywords in `if`---`else` statements and statement chains.\n\n\nThe `else` keyword is redundant when all previous branches end with a\n`return`, `throw`, `break`, or `continue` statement. In this case,\nthe statements from the `else` branch can be placed after the `if` statement, and the\n`else` keyword can be removed.\n\n**Example:**\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n } else {\n System.out.println(name);\n }\n\nAfter the quick-fix is applied:\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n }\n System.out.println(name);\n\nDisable the **Report when there are no more statements after the 'if' statement** option to ignore cases where the `if`---`else` statement is the last statement in a code block." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConfusingElseBranch", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassReferencedViaSubclass", + "shortDescription": { + "text": "Inner class referenced via subclass" + }, + "fullDescription": { + "text": "Reports accesses of inner and nested classes where the call is qualified by a subclass of the declaring class, rather than the declaring class itself. Java allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding. Example: 'class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Sub.Inner s = new Sub.Inner(); // 'Inner' class is declared in 'Super' class, but referenced via 'Sub' class\n }\n }' After the quick-fix is applied: 'class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Super.Inner s = new Super.Inner();\n }\n }'", + "markdown": "Reports accesses of inner and nested classes where the call is qualified by a subclass of the declaring class, rather than the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Sub.Inner s = new Sub.Inner(); // 'Inner' class is declared in 'Super' class, but referenced via 'Sub' class\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Super.Inner s = new Super.Inner();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InnerClassReferencedViaSubclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ScheduledThreadPoolExecutorWithZeroCoreThreads", + "shortDescription": { + "text": "'ScheduledThreadPoolExecutor' with zero core threads" + }, + "fullDescription": { + "text": "Reports any 'java.util.concurrent.ScheduledThreadPoolExecutor' instances in which 'corePoolSize' is set to zero via the 'setCorePoolSize' method or the object constructor. A 'ScheduledThreadPoolExecutor' with zero core threads will run nothing. Example: 'void foo(int corePoolSize) {\n if (corePoolSize != 0) return;\n ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); // warning\n executor.setCorePoolSize(corePoolSize); // warning\n }'", + "markdown": "Reports any `java.util.concurrent.ScheduledThreadPoolExecutor` instances in which `corePoolSize` is set to zero via the `setCorePoolSize` method or the object constructor.\n\n\nA `ScheduledThreadPoolExecutor` with zero core threads will run nothing.\n\n**Example:**\n\n\n void foo(int corePoolSize) {\n if (corePoolSize != 0) return;\n ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); // warning\n executor.setCorePoolSize(corePoolSize); // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ScheduledThreadPoolExecutorWithZeroCoreThreads", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChannelResource", + "shortDescription": { + "text": "'Channel' opened but not safely closed" + }, + "fullDescription": { + "text": "Reports 'Channel' resources that are not safely closed, including any instances created by calling 'getChannel()' on a file or socket resource. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void send(Socket socket) throws IOException {\n SocketChannel channel = socket.getChannel(); //warning\n channel.write(ByteBuffer.wrap(\"message\".getBytes()));\n }' Use the following options to configure the inspection: Whether a 'Channel' resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a 'Channel' in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports `Channel` resources that are not safely closed, including any instances created by calling `getChannel()` on a file or socket resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void send(Socket socket) throws IOException {\n SocketChannel channel = socket.getChannel(); //warning\n channel.write(ByteBuffer.wrap(\"message\".getBytes()));\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `Channel` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a `Channel` in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChannelOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaEmptyModuleInfoFile", + "shortDescription": { + "text": "Empty 'module-info.java' file" + }, + "fullDescription": { + "text": "Reports an empty 'module-info.java' file, indicating unresolved module dependencies. Automatically adds necessary 'requires' statements by inspecting imports. To suppress this warning, you may write any comment inside the module statement body, like this: 'module module.name {\n // no dependencies\n}' Quick Fix: Fill in module dependencies fills in missing 'requires' based on source code imports. New in 2024.1", + "markdown": "Reports an empty `module-info.java` file, indicating unresolved module dependencies. Automatically adds necessary `requires` statements by inspecting imports. To suppress this warning, you may write any comment inside the module statement body, like this:\n\n\n module module.name {\n // no dependencies\n }\n\n**Quick Fix:** *Fill in module dependencies* fills in missing `requires` based on source code imports. New in 2024.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavaEmptyModuleInfoFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassMayBeInterface", + "shortDescription": { + "text": "Abstract 'class' may be 'interface'" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that can be converted to interfaces. Using interfaces instead of classes is preferable as Java doesn't support multiple class inheritance, while a class can implement multiple interfaces. A class may be converted to an interface if it has no superclasses (other than Object), has only 'public static final' fields, 'public abstract' methods, and 'public' inner classes. Example: 'abstract class Example {\n public static final int MY_CONST = 42;\n public abstract void foo();\n}\n\nclass Inheritor extends Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n}' After the quick-fix is applied: 'interface Example {\n int MY_CONST = 42;\n void foo();\n}\n\nclass Inheritor implements Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n}' Configure the inspection: Use the Report classes containing non-abstract methods when using Java 8 option to report only the classes with 'static' methods and non-abstract methods that can be converted to 'default' methods (only applicable to language level of 8 or higher).", + "markdown": "Reports `abstract` classes that can be converted to interfaces.\n\nUsing interfaces instead of classes is preferable as Java doesn't support multiple class inheritance,\nwhile a class can implement multiple interfaces.\n\nA class may be converted to an interface if it has no superclasses (other\nthan Object), has only `public static final` fields,\n`public abstract` methods, and `public` inner classes.\n\n\nExample:\n\n\n abstract class Example {\n public static final int MY_CONST = 42;\n public abstract void foo();\n }\n\n class Inheritor extends Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n interface Example {\n int MY_CONST = 42;\n void foo();\n }\n\n class Inheritor implements Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Report classes containing non-abstract methods when using Java 8** option to report only the classes with `static` methods and non-abstract methods that can be converted to\n`default` methods (only applicable to language level of 8 or higher)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ClassMayBeInterface", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryCallToStringValueOf", + "shortDescription": { + "text": "Unnecessary conversion to 'String'" + }, + "fullDescription": { + "text": "Reports unnecessary calls to static methods that convert their parameters to a string, e.g. 'String.valueOf()' or 'Integer.toString()'. Such calls are unnecessary when used in string concatenations. Example: 'System.out.println(\"Number: \" + Integer.toString(count));' After the quick-fix is applied: 'System.out.println(\"Number: \" + count);' Additionally such calls are unnecessary when used as arguments to library methods that do their own string conversion. Some examples of library methods that do their own string conversion are: Classes 'java.io.PrintWriter', 'java.io.PrintStream' 'print()', 'println()' Classes 'java.lang.StringBuilder', 'java.lang.StringBuffer' 'append()' Class 'org.slf4j.Logger' 'trace()', 'debug()', 'info()', 'warn()', 'error()' Use the Report calls that can be replaced with a concatenation with the empty string option to also report cases where concatenations with the empty string can be used instead of a call to 'String.valueOf()'.", + "markdown": "Reports unnecessary calls to static methods that convert their parameters to a string, e.g. `String.valueOf()` or `Integer.toString()`. Such calls are unnecessary when used in string concatenations.\n\nExample:\n\n\n System.out.println(\"Number: \" + Integer.toString(count));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"Number: \" + count);\n\nAdditionally such calls are unnecessary when used as arguments to library methods that do their own string conversion. Some examples of library methods that do their own string conversion are:\n\n* Classes `java.io.PrintWriter`, `java.io.PrintStream`\n * `print()`, `println()`\n* Classes `java.lang.StringBuilder`, `java.lang.StringBuffer`\n * `append()`\n* Class `org.slf4j.Logger`\n * `trace()`, `debug()`, `info()`, `warn()`, `error()`\n\n\nUse the **Report calls that can be replaced with a concatenation with the empty string**\noption to also report cases where concatenations with the empty string can be used instead of a call to `String.valueOf()`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryCallToStringValueOf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringReplaceableByStringBuffer", + "shortDescription": { + "text": "Non-constant 'String' can be replaced with 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports variables declared as 'java.lang.String' that are repeatedly appended to. Such variables could be declared more efficiently as 'java.lang.StringBuffer' or 'java.lang.StringBuilder'. Example: 'String s = \"\";\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s = s + name;\n }' Such a loop can be replaced with: 'StringBuilder s = new StringBuilder();\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s.append(name);\n }' Or even with: 'String s = String.join(\" \", names);' Use the option to make this inspection only report when the variable is appended to in a loop.", + "markdown": "Reports variables declared as `java.lang.String` that are repeatedly appended to. Such variables could be declared more efficiently as `java.lang.StringBuffer` or `java.lang.StringBuilder`.\n\n**Example:**\n\n\n String s = \"\";\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s = s + name;\n }\n\nSuch a loop can be replaced with:\n\n\n StringBuilder s = new StringBuilder();\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s.append(name);\n }\n\nOr even with:\n\n\n String s = String.join(\" \", names);\n\n\nUse the option to make this inspection only report when the variable is appended to in a loop." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonConstantStringShouldBeStringBuffer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinallyBlockCannotCompleteNormally", + "shortDescription": { + "text": "'finally' block which can not complete normally" + }, + "fullDescription": { + "text": "Reports 'return', 'throw', 'break', 'continue', and 'yield' statements that are used inside 'finally' blocks. These cause the 'finally' block to not complete normally but to complete abruptly. Any exceptions thrown from the 'try' and 'catch' blocks of the same 'try'-'catch' statement will be suppressed. Example: 'void x() {\n try {\n throw new RuntimeException();\n } finally {\n // if bar() returns true, the RuntimeException will be suppressed\n if (bar()) return;\n }\n }'", + "markdown": "Reports `return`, `throw`, `break`, `continue`, and `yield` statements that are used inside `finally` blocks. These cause the `finally` block to not complete normally but to complete abruptly. Any exceptions thrown from the `try` and `catch` blocks of the same `try`-`catch` statement will be suppressed.\n\n**Example:**\n\n\n void x() {\n try {\n throw new RuntimeException();\n } finally {\n // if bar() returns true, the RuntimeException will be suppressed\n if (bar()) return;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "finally", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantOnWrongSideOfComparison", + "shortDescription": { + "text": "Constant on wrong side of comparison" + }, + "fullDescription": { + "text": "Reports comparison operations where the constant value is on the wrong side. Some coding conventions specify that constants should be on a specific side of a comparison, either left or right. Example: 'boolean compare(int x) {\n return 1 > x; // Constant '1' on the left side of the comparison\n }' After the quick-fix is applied: 'boolean compare(int x) {\n return x < 1;\n }' Use the inspection settings to choose the side of constants in comparisons and whether to warn if 'null' literals are on the wrong side. New in 2019.2", + "markdown": "Reports comparison operations where the constant value is on the wrong side.\n\nSome coding conventions specify that constants should be on a specific side of a comparison, either left or right.\n\n**Example:**\n\n\n boolean compare(int x) {\n return 1 > x; // Constant '1' on the left side of the comparison\n }\n\nAfter the quick-fix is applied:\n\n\n boolean compare(int x) {\n return x < 1;\n }\n\n\nUse the inspection settings to choose the side of constants in comparisons\nand whether to warn if `null` literals are on the wrong side.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantOnWrongSideOfComparison", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedStaticallyImportedElement", + "shortDescription": { + "text": "Unnecessarily qualified statically imported element" + }, + "fullDescription": { + "text": "Reports usage of statically imported members qualified with their containing class name. Such qualification is unnecessary and can be removed because statically imported members can be accessed directly by member name. Example: 'import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(Test.WIDTH);\n }\n }' After the quick-fix is applied: 'import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(WIDTH);\n }\n }'", + "markdown": "Reports usage of statically imported members qualified with their containing class name.\n\nSuch qualification is unnecessary and can be removed\nbecause statically imported members can be accessed directly by member name.\n\n**Example:**\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(Test.WIDTH);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(WIDTH);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessarilyQualifiedStaticallyImportedElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectToString", + "shortDescription": { + "text": "Call to default 'toString()'" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' that use the default implementation from 'java.lang.Object'. The default implementation is rarely intended but may be used by accident. Calls to 'toString()' on objects with 'java.lang.Object', interface or abstract class type are ignored by this inspection. Example: 'class Bar {\n void foo1(Bar bar) {\n String s = bar.toString(); // warning\n /* ... */\n }\n\n void foo2(Object obj) {\n String s = obj.toString(); // no warning here\n /* ... */\n }\n }'", + "markdown": "Reports calls to `toString()` that use the default implementation from `java.lang.Object`.\n\nThe default implementation is rarely intended but may be used by accident.\n\n\nCalls to `toString()` on objects with `java.lang.Object`,\ninterface or abstract class type are ignored by this inspection.\n\n**Example:**\n\n\n class Bar {\n void foo1(Bar bar) {\n String s = bar.toString(); // warning\n /* ... */\n }\n\n void foo2(Object obj) {\n String s = obj.toString(); // no warning here\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObjectToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfJDBCDriverClass", + "shortDescription": { + "text": "Use of concrete JDBC driver class" + }, + "fullDescription": { + "text": "Reports uses of specific JDBC driver classes. Use of such classes will bind your project to a specific database and driver, defeating the purpose of JDBC and resulting in loss of portability. Example: 'import java.sql.Driver;\n\n abstract class Sample implements Driver {\n public void foo() {\n Sample sample;\n }\n }'", + "markdown": "Reports uses of specific JDBC driver classes. Use of such classes will bind your project to a specific database and driver, defeating the purpose of JDBC and resulting in loss of portability.\n\n**Example:**\n\n\n import java.sql.Driver;\n\n abstract class Sample implements Driver {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfJDBCDriverClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCResource", + "shortDescription": { + "text": "JDBC resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports JDBC resources that are not safely closed. JDBC resources reported by this inspection include 'java.sql.Connection', 'java.sql.Statement', 'java.sql.PreparedStatement', 'java.sql.CallableStatement', and 'java.sql.ResultSet'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'ResultSet findAllElements(Connection connection) throws SQLException {\n PreparedStatement statement = connection.prepareStatement(\"SELECT * FROM TABLE\");//statement is not closed\n statement.execute();\n return statement.getResultSet();\n }' Use the following options to configure the inspection: Whether a JDBC resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports JDBC resources that are not safely closed. JDBC resources reported by this inspection include `java.sql.Connection`, `java.sql.Statement`, `java.sql.PreparedStatement`, `java.sql.CallableStatement`, and `java.sql.ResultSet`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n ResultSet findAllElements(Connection connection) throws SQLException {\n PreparedStatement statement = connection.prepareStatement(\"SELECT * FROM TABLE\");//statement is not closed\n statement.execute();\n return statement.getResultSet();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JDBC resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JDBCResourceOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggingSimilarMessage", + "shortDescription": { + "text": "Non-distinguishable logging calls" + }, + "fullDescription": { + "text": "Reports SLF4J, Log4j2 logging calls in one class, such as 'logger.info(\"message: {}\", key)' with similar log messages. These calls can be non-distinguishable from each other, and this introduces difficulties to understand where a certain log message is coming from. Example (for Java): 'private static void request1(String text) {\n log.info(\"Message: {}\", text); //similar call\n doSomething1();\n }\n\n private static void request2(int i) {\n log.info(\"Message: {}\", i); //similar call\n doSomething2();\n }' Use the Minimum length of a similar sequence option to set the minimum length of similar sequences after which calls will be reported Use the Do not report calls with the 'error' log level option to ignore messages with `error` log level and when there is an exception. It may be useful to hide the warnings, because call sites can still be located using stack traces New in 2024.1", + "markdown": "Reports SLF4J, Log4j2 logging calls in one class, such as `logger.info(\"message: {}\", key)` with similar log messages. These calls can be non-distinguishable from each other, and this introduces difficulties to understand where a certain log message is coming from.\n\n**Example (for Java):**\n\n\n private static void request1(String text) {\n log.info(\"Message: {}\", text); //similar call\n doSomething1();\n }\n\n private static void request2(int i) {\n log.info(\"Message: {}\", i); //similar call\n doSomething2();\n }\n\n* Use the **Minimum length of a similar sequence** option to set the minimum length of similar sequences after which calls will be reported\n* Use the **Do not report calls with the 'error' log level** option to ignore messages with \\`error\\` log level and when there is an exception. It may be useful to hide the warnings, because call sites can still be located using stack traces\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "LoggingSimilarMessage", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Logging", + "index": 52, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfCanBeAssertion", + "shortDescription": { + "text": "Statement can be replaced with 'assert' or 'Objects.requireNonNull'" + }, + "fullDescription": { + "text": "Reports 'if' statements that throw only 'java.lang.Throwable' from a 'then' branch and do not have an 'else' branch. Such statements can be converted to more compact 'assert' statements. The inspection also reports Guava's 'Preconditions.checkNotNull()'. They can be replaced with a 'Objects.requireNonNull()' call for which a library may not be needed. Example: 'if (x == 2) throw new RuntimeException(\"fail\");\n if (y == null) throw new AssertionError();\n Preconditions.checkNotNull(z, \"z\");' After the quick-fix is applied: 'assert x != 2 : \"fail\";\n Objects.requireNonNull(y);\n Objects.requireNonNull(z, \"z\");' By default, this inspection provides a quick-fix in the editor without code highlighting.", + "markdown": "Reports `if` statements that throw only `java.lang.Throwable` from a `then` branch and do not have an `else` branch. Such statements can be converted to more compact `assert` statements.\n\n\nThe inspection also reports Guava's `Preconditions.checkNotNull()`.\nThey can be replaced with a `Objects.requireNonNull()` call for which a library may not be needed.\n\nExample:\n\n\n if (x == 2) throw new RuntimeException(\"fail\");\n if (y == null) throw new AssertionError();\n Preconditions.checkNotNull(z, \"z\");\n\nAfter the quick-fix is applied:\n\n\n assert x != 2 : \"fail\";\n Objects.requireNonNull(y);\n Objects.requireNonNull(z, \"z\");\n\nBy default, this inspection provides a quick-fix in the editor without code highlighting." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IfCanBeAssertion", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocDeclaration", + "shortDescription": { + "text": "Javadoc declaration problems" + }, + "fullDescription": { + "text": "Reports Javadoc comments and tags with the following problems: invalid tag names incomplete tag descriptions duplicated tags missing Javadoc descriptions Example: '/**\n * Invalid tag name\n * @poram param description\n */\n public void sample(int param){\n }' Example: '/**\n * Pointing to itself {@link #sample(int)}\n */\n public void sample(int param){\n }' Quick-fix adds the unknown Javadoc tag to the list of user defined additional tags. Use textfield below to define additional Javadoc tags. Use first checkbox to ignore duplicated 'throws' tag. Use second checkbox to ignore problem with missing or incomplete first sentence in the description. Use third checkbox to ignore references pointing to itself.", + "markdown": "Reports Javadoc comments and tags with the following problems:\n\n* invalid tag names\n* incomplete tag descriptions\n* duplicated tags\n* missing Javadoc descriptions\n\nExample:\n\n\n /**\n * Invalid tag name\n * @poram param description\n */\n public void sample(int param){\n }\n\nExample:\n\n\n /**\n * Pointing to itself {@link #sample(int)}\n */\n public void sample(int param){\n }\n\nQuick-fix adds the unknown Javadoc tag to the list of user defined additional tags.\n\nUse textfield below to define additional Javadoc tags.\n\nUse first checkbox to ignore duplicated 'throws' tag.\n\nUse second checkbox to ignore problem with missing or incomplete first sentence in the description.\n\nUse third checkbox to ignore references pointing to itself." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavadocDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToMethodParameter", + "shortDescription": { + "text": "Assignment to method parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of method parameters. Although occasionally intended, this construct may be confusing and is therefore prohibited in some Java projects. The quick-fix adds a declaration of a new variable. Example: 'void printTrimmed(String s) {\n s = s.trim();\n System.out.println(s);\n }' After the quick-fix is applied: 'void printTrimmed(String s) {\n String trimmed = s.trim();\n System.out.println(trimmed);\n }' Use the Ignore if assignment is a transformation of the original parameter option to ignore assignments that modify the parameter value based on its previous value.", + "markdown": "Reports assignment to, or modification of method parameters.\n\nAlthough occasionally intended, this construct may be confusing\nand is therefore prohibited in some Java projects.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void printTrimmed(String s) {\n s = s.trim();\n System.out.println(s);\n }\n\nAfter the quick-fix is applied:\n\n\n void printTrimmed(String s) {\n String trimmed = s.trim();\n System.out.println(trimmed);\n }\n\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify\nthe parameter value based on its previous value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToMethodParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableHidingMemberVariable", + "shortDescription": { + "text": "Local variable hides field" + }, + "fullDescription": { + "text": "Reports local variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the variable where the identically named field is intended. A quick-fix is suggested to rename the variable. Example: 'public class Foo {\n public Object foo;\n\n void bar() {\n Object o = new Object() {\n void baz() {\n Object foo; // Local variable 'foo' hides field in class 'Foo'\n }\n };\n }\n }' You can configure the following options for this inspection: Ignore non-accessible fields - ignore local variables named identically to superclass fields that are not visible (for example, because they are private). Ignore local variables in a static context hiding non-static fields - for example when the local variable is inside a static method or inside a method which is inside a static inner class.", + "markdown": "Reports local variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the variable where the identically named field is intended.\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n public class Foo {\n public Object foo;\n\n void bar() {\n Object o = new Object() {\n void baz() {\n Object foo; // Local variable 'foo' hides field in class 'Foo'\n }\n };\n }\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - ignore local variables named identically to superclass fields that are not visible (for example, because they are private).\n2. **Ignore local variables in a static context hiding non-static fields** - for example when the local variable is inside a static method or inside a method which is inside a static inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LocalVariableHidesMemberVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryTemporaryOnConversionToString", + "shortDescription": { + "text": "Unnecessary temporary object in conversion to 'String'" + }, + "fullDescription": { + "text": "Reports unnecessary creation of temporary objects when converting from a primitive type to 'String'. Example: 'String foo = new Integer(3).toString();' After the quick-fix is applied: 'String foo = Integer.toString(3);'", + "markdown": "Reports unnecessary creation of temporary objects when converting from a primitive type to `String`.\n\n**Example:**\n\n\n String foo = new Integer(3).toString();\n\nAfter the quick-fix is applied:\n\n\n String foo = Integer.toString(3);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryTemporaryOnConversionToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceMayBeAnnotatedFunctional", + "shortDescription": { + "text": "Interface may be annotated as '@FunctionalInterface'" + }, + "fullDescription": { + "text": "Reports interfaces that can be annotated with '@FunctionalInterface' (available since JDK 1.8). Annotating an interface with '@FunctionalInterface' indicates that the interface is functional and no more 'abstract' methods can be added to it. Example: 'interface FileProcessor {\n void execute(File file);\n }' After the quick-fix is applied: '@FunctionalInterface\n interface FileProcessor {\n void execute(File file);\n }' This inspection only reports if the language level of the project or module is 8 or higher. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports interfaces that can be annotated with `@FunctionalInterface` (available since JDK 1.8).\n\nAnnotating an interface with `@FunctionalInterface` indicates that the interface\nis functional and no more `abstract` methods can be added to it.\n\n**Example:**\n\n\n interface FileProcessor {\n void execute(File file);\n }\n\nAfter the quick-fix is applied:\n\n\n @FunctionalInterface\n interface FileProcessor {\n void execute(File file);\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InterfaceMayBeAnnotatedFunctional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementWithLabel", + "shortDescription": { + "text": "'break' statement with label" + }, + "fullDescription": { + "text": "Reports 'break' statements with labels. Labeled 'break' statements complicate refactoring and can be confusing. Example: 'void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) break outer;\n handleChar(ch);\n }\n }\n }'", + "markdown": "Reports `break` statements with labels.\n\nLabeled `break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) break outer;\n handleChar(ch);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatementWithLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEquality", + "shortDescription": { + "text": "String comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses of == or != to compare strings. These operators determine referential equality instead of comparing content. In most cases, strings should be compared using 'equals()', which does a character-by-character comparison when the strings are different objects. Example: 'void foo(String s, String t) {\n final boolean b = t == s;\n }' If 't' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(String s, String t) {\n final boolean b = t.equals(s);\n }'", + "markdown": "Reports code that uses of **==** or **!=** to compare strings.\n\n\nThese operators determine referential equality instead of comparing content.\nIn most cases, strings should be compared using `equals()`,\nwhich does a character-by-character comparison when the strings are different objects.\n\n**Example:**\n\n\n void foo(String s, String t) {\n final boolean b = t == s;\n }\n\nIf `t` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n\n void foo(String s, String t) {\n final boolean b = t.equals(s);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StringEquality", + "cweIds": [ + 597 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousLiteralUnderscore", + "shortDescription": { + "text": "Suspicious underscore in number literal" + }, + "fullDescription": { + "text": "Reports decimal number literals that use the underscore numeric separator with groups where the number of digits is not three. Such literals may contain a typo. This inspection will not warn on literals containing two consecutive underscores. It is also allowed to omit underscores in the fractional part of 'double' and 'float' literals. Example: 'int oneMillion = 1_000_0000;'", + "markdown": "Reports decimal number literals that use the underscore numeric separator with groups where the number of digits is not three. Such literals may contain a typo.\n\nThis inspection will not warn on literals containing two consecutive underscores.\nIt is also allowed to omit underscores in the fractional part of `double` and `float` literals.\n\n**Example:** `int oneMillion = 1_000_0000;`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousLiteralUnderscore", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticCallOnSubclass", + "shortDescription": { + "text": "Static method referenced via subclass" + }, + "fullDescription": { + "text": "Reports static method calls where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself. Java allows such qualification for classes, but such calls may indicate a subtle confusion of inheritance and overriding. Example: 'class Parent {\n public static void print(String str) {}\n }\n class Child extends Parent {}\n\n Child.print(\"Hello, world!\");' After the quick-fix is applied: 'Parent.print(\"Hello, world!\");'", + "markdown": "Reports static method calls where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification for classes, but such calls\nmay indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n public static void print(String str) {}\n }\n class Child extends Parent {}\n\n Child.print(\"Hello, world!\");\n\nAfter the quick-fix is applied:\n\n\n Parent.print(\"Hello, world!\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticMethodReferencedViaSubclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadResolveAndWriteReplaceProtected", + "shortDescription": { + "text": "'readResolve()' or 'writeReplace()' not declared 'protected'" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.io.Serializable' where the 'readResolve()' or 'writeReplace()' methods are not declared 'protected'. Declaring 'readResolve()' and 'writeReplace()' methods 'private' can force subclasses to silently ignore them, while declaring them 'public' allows them to be invoked by untrusted code. If the containing class is declared 'final', these methods can be declared 'private'. Example: 'class ClassWithSerialization implements Serializable {\n public Object writeReplace() { // warning: 'writeReplace()' not declared protected\n ...\n }\n }'", + "markdown": "Reports classes that implement `java.io.Serializable` where the `readResolve()` or `writeReplace()` methods are not declared `protected`.\n\n\nDeclaring `readResolve()` and `writeReplace()` methods `private`\ncan force subclasses to silently ignore them, while declaring them\n`public` allows them to be invoked by untrusted code.\n\n\nIf the containing class is declared `final`, these methods can be declared `private`.\n\n**Example:**\n\n\n class ClassWithSerialization implements Serializable {\n public Object writeReplace() { // warning: 'writeReplace()' not declared protected\n ...\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReadResolveAndWriteReplaceProtected", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnContinueStatement", + "shortDescription": { + "text": "Unnecessary label on 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements with unnecessary labels. Example: 'LABEL:\n while (a > b) {\n System.out.println(\"Hello\");\n //the code below is the last statement in a loop,\n //so unnecessary label and continue can be removed\n continue LABEL;\n }'", + "markdown": "Reports `continue` statements with unnecessary labels.\n\nExample:\n\n\n LABEL:\n while (a > b) {\n System.out.println(\"Hello\");\n //the code below is the last statement in a loop,\n //so unnecessary label and continue can be removed\n continue LABEL;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnContinueStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNamingConvention", + "shortDescription": { + "text": "Method parameter naming convention" + }, + "fullDescription": { + "text": "Reports method parameters whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'void fooBar(int X)' should be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for method parameter names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports method parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `void fooBar(int X)`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for\nmethod parameter names. Specify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodParameterNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCanBeVariableArityMethod", + "shortDescription": { + "text": "Method can have varargs parameter" + }, + "fullDescription": { + "text": "Reports methods that can be converted to variable arity methods. Example: 'void process(String name, Object[] objects);' After the quick-fix is applied: 'void process(String name, Object... objects);' This inspection depends on the Java feature 'Variable arity methods' which is available since Java 5.", + "markdown": "Reports methods that can be converted to variable arity methods.\n\n**Example:**\n\n\n void process(String name, Object[] objects);\n\nAfter the quick-fix is applied:\n\n\n void process(String name, Object... objects);\n\nThis inspection depends on the Java feature 'Variable arity methods' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MethodCanBeVariableArityMethod", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassNeverImplemented", + "shortDescription": { + "text": "Abstract class which has no concrete subclass" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that have no concrete subclasses.", + "markdown": "Reports `abstract` classes that have no concrete subclasses." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractClassNeverImplemented", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StreamToLoop", + "shortDescription": { + "text": "Stream API call chain can be replaced with loop" + }, + "fullDescription": { + "text": "Reports Stream API chains, 'Iterable.forEach()', and 'Map.forEach()' calls that can be automatically converted into classical loops. Example: 'String joinNonEmpty(List list) {\n return list.stream() // Stream can be converted to loop\n .filter(s -> !s.isEmpty())\n .map(String::trim)\n .collect(Collectors.joining(\", \"));\n }' After the quick-fix is applied: 'String joinNonEmpty(List list) {\n StringJoiner joiner = new StringJoiner(\", \");\n for (String s : list) {\n if (!s.isEmpty()) {\n String trim = s.trim();\n joiner.add(trim);\n }\n }\n return joiner.toString();\n }' Note that sometimes this inspection might cause slight semantic changes. Special care should be taken when it comes to short-circuiting, as it's not specified how many elements will be actually read when the stream short-circuits. Configure the inspection: Use the Iterate unknown Stream sources via Stream.iterator() option to suggest conversions for streams with unrecognized source. In this case, iterator will be created from the stream. For example, when checkbox is selected, the conversion will be suggested here: 'List handles = ProcessHandle.allProcesses().collect(Collectors.toList());' In this case, the result will be as follows: 'List handles = new ArrayList<>();\n for (Iterator it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {\n ProcessHandle allProcess = it.next();\n handles.add(allProcess);\n }' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2017.1", + "markdown": "Reports Stream API chains, `Iterable.forEach()`, and `Map.forEach()` calls that can be automatically converted into classical loops.\n\n**Example:**\n\n\n String joinNonEmpty(List list) {\n return list.stream() // Stream can be converted to loop\n .filter(s -> !s.isEmpty())\n .map(String::trim)\n .collect(Collectors.joining(\", \"));\n }\n\nAfter the quick-fix is applied:\n\n\n String joinNonEmpty(List list) {\n StringJoiner joiner = new StringJoiner(\", \");\n for (String s : list) {\n if (!s.isEmpty()) {\n String trim = s.trim();\n joiner.add(trim);\n }\n }\n return joiner.toString();\n }\n\n\nNote that sometimes this inspection might cause slight semantic changes.\nSpecial care should be taken when it comes to short-circuiting, as it's not specified how many elements will be actually read when\nthe stream short-circuits.\n\nConfigure the inspection:\n\nUse the **Iterate unknown Stream sources via Stream.iterator()** option to suggest conversions for streams with unrecognized source.\nIn this case, iterator will be created from the stream.\nFor example, when checkbox is selected, the conversion will be suggested here:\n\n\n List handles = ProcessHandle.allProcesses().collect(Collectors.toList());\n\nIn this case, the result will be as follows:\n\n\n List handles = new ArrayList<>();\n for (Iterator it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {\n ProcessHandle allProcess = it.next();\n handles.add(allProcess);\n }\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "StreamToLoop", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotifyWithoutCorrespondingWait", + "shortDescription": { + "text": "'notify()' without corresponding 'wait()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.notify()' or 'Object.notifyAll()' for which no call to a corresponding 'Object.wait()' can be found. Only calls that target fields of the current class are reported by this inspection. Example: 'synchronized (synList) {\n synList.notify(); //synList.wait() is never called\n }'", + "markdown": "Reports calls to `Object.notify()` or `Object.notifyAll()` for which no call to a corresponding `Object.wait()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n synchronized (synList) {\n synList.notify(); //synList.wait() is never called\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NotifyWithoutCorrespondingWait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInitializerMayBeStatic", + "shortDescription": { + "text": "Class initializer may be 'static'" + }, + "fullDescription": { + "text": "Reports instance initializers which may be made 'static'. An instance initializer may be static if it does not reference any of its class' non-static members. Static initializers are executed once the class is resolved, while instance initializers are executed on each instantiation of the class. This inspection doesn't report instance empty initializers and initializers in anonymous classes. Example: 'class A {\n public static String CONSTANT;\n {\n CONSTANT = \"Hello\";\n }\n }' After the quick-fix is applied: 'class A {\n public static String CONSTANT;\n static {\n CONSTANT = \"Hello\"; //now initialized only once per class\n }\n }'", + "markdown": "Reports instance initializers which may be made `static`.\n\n\nAn instance initializer may be static if it does not reference any of its class' non-static members.\nStatic initializers are executed once the class is resolved,\nwhile instance initializers are executed on each instantiation of the class.\n\nThis inspection doesn't report instance empty initializers and initializers in anonymous classes.\n\n**Example:**\n\n\n class A {\n public static String CONSTANT;\n {\n CONSTANT = \"Hello\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n public static String CONSTANT;\n static {\n CONSTANT = \"Hello\"; //now initialized only once per class\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ClassInitializerMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicCharacter", + "shortDescription": { + "text": "Magic character" + }, + "fullDescription": { + "text": "Reports character literals that are used without constant declaration. These characters might result in bad code readability. Also, there might be errors if a character is changed only in one location but not everywhere in code. Example: 'char c = 'c';'", + "markdown": "Reports character literals that are used without constant declaration. These characters might result in bad code readability. Also, there might be errors if a character is changed only in one location but not everywhere in code.\n\n**Example:**\n\n char c = 'c';\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MagicCharacter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SlowAbstractSetRemoveAll", + "shortDescription": { + "text": "Call to 'set.removeAll(list)' may work slowly" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Set.removeAll()' with a 'java.util.List' argument. Such a call can be slow when the size of the argument is greater than or equal to the size of the set, and the set is a subclass of 'java.util.AbstractSet'. In this case, 'List.contains()' is called for each element in the set, which will perform a linear search. Example: 'public void check(String... ss) {\n // possible O(n^2) complexity\n mySet.removeAll(List.of(ss));\n }' After the quick fix is applied: 'public void check(String... ss) {\n // O(n) complexity\n List.of(ss).forEach(mySet::remove);\n }' New in 2020.3", + "markdown": "Reports calls to `java.util.Set.removeAll()` with a `java.util.List` argument.\n\n\nSuch a call can be slow when the size of the argument is greater than or equal to the size of the set,\nand the set is a subclass of `java.util.AbstractSet`.\nIn this case, `List.contains()` is called for each element in the set, which will perform a linear search.\n\n**Example:**\n\n\n public void check(String... ss) {\n // possible O(n^2) complexity\n mySet.removeAll(List.of(ss));\n }\n\nAfter the quick fix is applied:\n\n\n public void check(String... ss) {\n // O(n) complexity\n List.of(ss).forEach(mySet::remove);\n }\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SlowAbstractSetRemoveAll", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayEquality", + "shortDescription": { + "text": "Array comparison using '==', instead of 'Arrays.equals()'" + }, + "fullDescription": { + "text": "Reports operators '==' and '!=' used to test for array equality. In most cases, testing for the equality of array contents is intended, which can be done with the 'java.util.Arrays.equals()' method. A quick-fix is suggested to replace '==' with 'java.util.Arrays.equals()'. Example: 'void foo(Object[] x, Object[] y) {\n boolean comparison = x == y;\n }' After the quick-fix is applied: 'void foo(Object[] x, Object[] y) {\n boolean comparison = Arrays.equals(x, y);\n }'", + "markdown": "Reports operators `==` and `!=` used to test for array equality. In most cases, testing for the equality of array contents is intended, which can be done with the `java.util.Arrays.equals()` method.\n\n\nA quick-fix is suggested to replace `==` with `java.util.Arrays.equals()`.\n\n**Example:**\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = x == y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = Arrays.equals(x, y);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ArrayEquality", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticCollection", + "shortDescription": { + "text": "Static collection" + }, + "fullDescription": { + "text": "Reports static fields of a 'Collection' type. While it's not necessarily a problem, static collections often cause memory leaks and are therefore prohibited by some coding standards. Example: 'public class Example {\n static List list = new ArrayList<>();\n\n }' Configure the inspection: Use the Ignore weak static collections or maps option to ignore the fields of the 'java.util.WeakHashMap' type.", + "markdown": "Reports static fields of a `Collection` type. While it's not necessarily a problem, static collections often cause memory leaks and are therefore prohibited by some coding standards.\n\n**Example:**\n\n\n public class Example {\n static List list = new ArrayList<>();\n\n }\n\n\nConfigure the inspection:\n\n* Use the **Ignore weak static collections or maps** option to ignore the fields of the `java.util.WeakHashMap` type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticCollection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExceptionNameEndsWithException", + "shortDescription": { + "text": "Non-exception class name ends with 'Exception'" + }, + "fullDescription": { + "text": "Reports non-'exception' classes whose names end with 'Exception'. Such classes may cause confusion by breaking a common naming convention and often indicate that the 'extends Exception' clause is missing. Example: 'public class NotStartedException {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports non-`exception` classes whose names end with `Exception`.\n\nSuch classes may cause confusion by breaking a common naming convention and\noften indicate that the `extends Exception` clause is missing.\n\n**Example:**\n\n public class NotStartedException {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonExceptionNameEndsWithException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 82, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassComplexity", + "shortDescription": { + "text": "Overly complex class" + }, + "fullDescription": { + "text": "Reports classes whose total complexity exceeds the specified maximum. The total complexity of a class is the sum of cyclomatic complexities of all the methods and initializers the class declares. Inherited methods and initializers are not counted toward the total complexity. Too high complexity indicates that the class should be refactored into several smaller classes. Use the Cyclomatic complexity limit field below to specify the maximum allowed complexity for a class.", + "markdown": "Reports classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nToo high complexity indicates that the class should be refactored into several smaller classes.\n\nUse the **Cyclomatic complexity limit** field below to specify the maximum allowed complexity for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemGC", + "shortDescription": { + "text": "Call to 'System.gc()' or 'Runtime.gc()'" + }, + "fullDescription": { + "text": "Reports 'System.gc()' or 'Runtime.gc()' calls. While occasionally useful in testing, explicitly triggering garbage collection via 'System.gc()' is almost never recommended in production code and can result in serious performance issues.", + "markdown": "Reports `System.gc()` or `Runtime.gc()` calls. While occasionally useful in testing, explicitly triggering garbage collection via `System.gc()` is almost never recommended in production code and can result in serious performance issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSystemGC", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverflowingLoopIndex", + "shortDescription": { + "text": "Loop executes zero or billions of times" + }, + "fullDescription": { + "text": "Reports loops that cannot be completed without an index overflow or loops that don't loop at all. It usually happens because of a mistake in the update operation. Example: 'void foo(int s) {\n for (int i = s; i > 12; i++) { // i-- should be here\n System.out.println(i);\n }\n }' New in 2019.1", + "markdown": "Reports loops that cannot be completed without an index overflow or loops that don't loop at all. It usually happens because of a mistake in the update operation.\n\nExample:\n\n\n void foo(int s) {\n for (int i = s; i > 12; i++) { // i-- should be here\n System.out.println(i);\n }\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OverflowingLoopIndex", + "cweIds": [ + 691, + 835 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9UndeclaredServiceUsage", + "shortDescription": { + "text": "Usage of service not declared in 'module-info'" + }, + "fullDescription": { + "text": "Reports situations in which a service is loaded with 'java.util.ServiceLoader' but it isn't declared with the 'uses' clause in the 'module-info.java' file and suggests inserting it. This inspection depends on the Java feature 'Modules' which is available since Java 9. New in 2018.1", + "markdown": "Reports situations in which a service is loaded with `java.util.ServiceLoader` but it isn't declared with the `uses` clause in the `module-info.java` file and suggests inserting it.\n\nThis inspection depends on the Java feature 'Modules' which is available since Java 9.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Java9UndeclaredServiceUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassMayBeStatic", + "shortDescription": { + "text": "Inner class may be 'static'" + }, + "fullDescription": { + "text": "Reports inner classes that can be made 'static'. A 'static' inner class does not keep an implicit reference to its enclosing instance. This prevents a common cause of memory leaks and uses less memory per instance of the class. Example: 'public class Outer {\n class Inner { // not static\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }' After the quick-fix is applied: 'public class Outer {\n static class Inner {\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }'", + "markdown": "Reports inner classes that can be made `static`.\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per instance of the class.\n\n**Example:**\n\n\n public class Outer {\n class Inner { // not static\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Outer {\n static class Inner {\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InnerClassMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SetReplaceableByEnumSet", + "shortDescription": { + "text": "'Set' can be replaced with 'EnumSet'" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.Set' objects whose content types are enumerated classes. Such 'Set' objects can be replaced with 'java.util.EnumSet' objects. 'EnumSet' implementations can be much more efficient compared to other sets, as the underlying data structure is a bit vector. Use the quick-fix to replace the initializer with a call to 'EnumSet.noneOf()'. This quick-fix is not available when the type of the variable is a sub-class of 'Set'. Example: 'enum MyEnum { FOO, BAR; }\n\n Set enums = new HashSet();' After the quick-fix is applied: 'enum MyEnum { FOO, BAR; }\n\n Set enums = EnumSet.noneOf(MyEnum.class);'", + "markdown": "Reports instantiations of `java.util.Set` objects whose content types are enumerated classes. Such `Set` objects can be replaced with `java.util.EnumSet` objects.\n\n\n`EnumSet` implementations can be much more efficient compared to\nother sets, as the underlying data structure is a bit vector. Use the quick-fix to replace the initializer with a call to\n`EnumSet.noneOf()`. This quick-fix is not available when the type of the variable is a sub-class of `Set`.\n\n**Example:**\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = new HashSet();\n\nAfter the quick-fix is applied:\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = EnumSet.noneOf(MyEnum.class);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SetReplaceableByEnumSet", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSimpleSetterInClass", + "shortDescription": { + "text": "Call to simple setter from within class" + }, + "fullDescription": { + "text": "Reports calls to a simple property setter from within the property's class. A simple property setter is defined as one which simply assigns the value of its parameter to a field, and does no other calculations. Such simple setter calls can be safely inlined. Some coding standards also suggest against the use of simple setters for code clarity reasons. Example: 'class Foo {\n private int index;\n public Foo(int idx) {\n setIndex(idx);\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }' After the quick-fix is applied: 'class Foo {\n private int index;\n public Foo(int idx) {\n index = idx;\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }' Use the following options to configure the inspection: Whether to only report setter calls on 'this', not on objects of the same type passed in as a parameter. Whether to ignore non-'private' setters.", + "markdown": "Reports calls to a simple property setter from within the property's class.\n\n\nA simple property setter is defined as one which simply assigns the value of its parameter to a field,\nand does no other calculations. Such simple setter calls can be safely inlined.\nSome coding standards also suggest against the use of simple setters for code clarity reasons.\n\n**Example:**\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n setIndex(idx);\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n index = idx;\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report setter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` setters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSimpleSetterFromWithinClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryFinalOnLocalVariableOrParameter", + "shortDescription": { + "text": "Unnecessary 'final' on local variable or parameter" + }, + "fullDescription": { + "text": "Reports local variables or parameters unnecessarily declared 'final'. Some coding standards frown upon variables declared 'final' for reasons of terseness. Example: 'class Foo {\n Foo(Object o) {}\n\n void bar(final Object o) {\n new Foo(o);\n }\n }' After the quick-fix is applied: 'class Foo {\n Foo(Object o) {}\n\n void bar(Object o) {\n new Foo(o);\n }\n }' Use the inspection options to toggle the reporting for: local variables parameters (including parameters of 'catch' blocks and enhanced 'for' statements) Also, you can configure the inspection to only report 'final' parameters of 'abstract' or interface methods, which may be considered extra unnecessary as such markings don't affect the implementation of these methods.", + "markdown": "Reports local variables or parameters unnecessarily declared `final`.\n\nSome coding standards frown upon variables declared `final` for reasons of terseness.\n\n**Example:**\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(final Object o) {\n new Foo(o);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(Object o) {\n new Foo(o);\n }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* local variables\n* parameters (including parameters of `catch` blocks and enhanced `for` statements)\n\n\nAlso, you can configure the inspection to only report `final` parameters of `abstract` or interface\nmethods, which may be considered extra unnecessary as such markings don't\naffect the implementation of these methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryFinalOnLocalVariableOrParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonBooleanMethodNameMayNotStartWithQuestion", + "shortDescription": { + "text": "Non-boolean method name must not start with question word" + }, + "fullDescription": { + "text": "Reports non-boolean methods whose names start with a question word. Such method names may be confusing. Non-boolean methods that override library methods are ignored by this inspection. Example: 'public void hasName(String name) {\n assert names.contains(name);\n }' A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the Boolean method name prefixes list to specify the question words that should be used only for boolean methods. Use the Ignore methods with 'java.lang.Boolean' return type option to ignore methods with 'java.lang.Boolean' return type. Use the Ignore methods overriding/implementing a super method option to ignore methods which have supers.", + "markdown": "Reports non-boolean methods whose names start with a question word. Such method names may be confusing.\n\nNon-boolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n\n public void hasName(String name) {\n assert names.contains(name);\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify the question words that should be used only for boolean methods.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with `java.lang.Boolean` return type.\n* Use the **Ignore methods overriding/implementing a super method** option to ignore methods which have supers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonBooleanMethodNameMayNotStartWithQuestion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WeakerAccess", + "shortDescription": { + "text": "Declaration access can be weaker" + }, + "fullDescription": { + "text": "Reports fields, methods or classes that may have their access modifier narrowed down. Example: 'class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n void bar(String x, String y) { } // can be private\n }' After the quick-fix is applied: 'class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n private void bar(String x, String y) { }\n }' Use the inspection's options to define the rules for the modifier change suggestions.", + "markdown": "Reports fields, methods or classes that may have their access modifier narrowed down.\n\nExample:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n void bar(String x, String y) { } // can be private\n }\n\nAfter the quick-fix is applied:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n private void bar(String x, String y) { }\n }\n\nUse the inspection's options to define the rules for the modifier change suggestions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WeakerAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithJavadoc", + "shortDescription": { + "text": "Comment replaceable with Javadoc" + }, + "fullDescription": { + "text": "Reports a regular comment that belongs to a field, method, or class that can be replaced with a Javadoc comment. Example: 'public class Main {\n /*\n * Hello,\n */\n // World!\n void f() {\n }\n }' After the quick-fix is applied: 'public class Main {\n /**\n * Hello,\n * World!\n */\n void f() {\n }\n }'", + "markdown": "Reports a regular comment that belongs to a field, method, or class that can be replaced with a Javadoc comment.\n\n**Example:**\n\n\n public class Main {\n /*\n * Hello,\n */\n // World!\n void f() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n /**\n * Hello,\n * World!\n */\n void f() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReplaceWithJavadoc", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrapperTypeMayBePrimitive", + "shortDescription": { + "text": "Wrapper type may be primitive" + }, + "fullDescription": { + "text": "Reports local variables of wrapper type that are mostly used as primitive types. In some cases, boxing can be source of significant performance penalty, especially in loops. Heuristics are applied to estimate the number of boxing operations. For example, conversions inside loops are considered as much more numerous. Example: 'public void example() {\n Integer value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}' After the quick-fix is applied: 'public void example() {\n int value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}' New in 2018.2", + "markdown": "Reports local variables of wrapper type that are mostly used as primitive types.\n\nIn some cases, boxing can be source of significant performance penalty, especially in loops.\n\nHeuristics are applied to estimate the number of boxing operations. For example, conversions inside loops are considered\nas much more numerous.\n\n**Example:**\n\n public void example() {\n Integer value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\nAfter the quick-fix is applied:\n\n public void example() {\n int value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "WrapperTypeMayBePrimitive", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyStatementBody", + "shortDescription": { + "text": "Statement with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do', 'for', and 'switch' statements with empty bodies. While occasionally intended, such code is confusing and is often the result of a typo. This inspection is disabled in JSP files.", + "markdown": "Reports `if`, `while`, `do`, `for`, and `switch` statements with empty bodies.\n\nWhile occasionally intended, such code is confusing and is often the result of a typo.\n\nThis inspection is disabled in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StatementWithEmptyBody", + "cweIds": [ + 561 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyFinallyBlock", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports empty 'finally' blocks. Empty 'finally' blocks usually indicate coding errors. They may also remain after code refactoring and can safely be removed. This inspection doesn't report empty 'finally' blocks found in JSP files. Example: 'try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n } finally {\n\n }' After the quick-fix is applied: 'try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n }'", + "markdown": "Reports empty `finally` blocks.\n\nEmpty `finally` blocks usually indicate coding errors. They may also remain after code refactoring and can safely be removed.\n\nThis inspection doesn't report empty `finally` blocks found in JSP files.\n\n**Example:**\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n } finally {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentLanguageLevel", + "shortDescription": { + "text": "Inconsistent language level settings" + }, + "fullDescription": { + "text": "Reports modules which depend on other modules with a higher language level. Such dependencies should be removed or the language level of the module be increased. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports modules which depend on other modules with a higher language level.\n\nSuch dependencies should be removed or the language level of the module be increased.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentLanguageLevel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 77, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumerationCanBeIteration", + "shortDescription": { + "text": "Enumeration can be iteration" + }, + "fullDescription": { + "text": "Reports calls to 'Enumeration' methods that are used on collections and may be replaced with equivalent 'Iterator' constructs. Example: 'Enumeration keys = map.keys();\n while (keys.hasMoreElements()) {\n String name = keys.nextElement();\n }' After the quick-fix is applied: 'Iterator iterator = map.keySet().iterator();\n while (iterator.hasNext()) {\n String name = iterator.next();\n }'", + "markdown": "Reports calls to `Enumeration` methods that are used on collections and may be replaced with equivalent `Iterator` constructs.\n\n**Example:**\n\n\n Enumeration keys = map.keys();\n while (keys.hasMoreElements()) {\n String name = keys.nextElement();\n }\n\nAfter the quick-fix is applied:\n\n\n Iterator iterator = map.keySet().iterator();\n while (iterator.hasNext()) {\n String name = iterator.next();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EnumerationCanBeIteration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalStaticMethod", + "shortDescription": { + "text": "'static' method declared 'final'" + }, + "fullDescription": { + "text": "Reports static methods that are marked as 'final'. Such code might indicate an error or an incorrect assumption about the effect of the 'final' keyword. Static methods are not subject to runtime polymorphism, so the only purpose of the 'final' keyword used with static methods is to ensure the method will not be hidden in a subclass.", + "markdown": "Reports static methods that are marked as `final`.\n\nSuch code might indicate an error or an incorrect assumption about the effect of the `final` keyword.\nStatic methods are not subject to runtime polymorphism, so the only purpose of the `final` keyword used with static methods\nis to ensure the method will not be hidden in a subclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalStaticMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantTypeArguments", + "shortDescription": { + "text": "Redundant type arguments" + }, + "fullDescription": { + "text": "Reports calls to parametrized methods with explicit argument types that can be omitted since they will be unambiguously inferred by the compiler. Using redundant type arguments is unnecessary and makes the code less readable. Example: 'List list = Arrays.asList(\"Hello\", \"World\");' A quick-fix is provided to remove redundant type arguments: 'List list = Arrays.asList(\"Hello\", \"World\");'", + "markdown": "Reports calls to parametrized methods with explicit argument types that can be omitted since they will be unambiguously inferred by the compiler.\n\n\nUsing redundant type arguments is unnecessary and makes the code less readable.\n\nExample:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n\nA quick-fix is provided to remove redundant type arguments:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantTypeArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldHasSetterButNoGetter", + "shortDescription": { + "text": "Field has setter but no getter" + }, + "fullDescription": { + "text": "Reports fields that have setter methods but no getter methods. In certain bean containers, when used within the Java beans specification, such fields might be difficult to work with.", + "markdown": "Reports fields that have setter methods but no getter methods.\n\n\nIn certain bean containers, when used within the Java beans specification, such fields might be difficult\nto work with." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldHasSetterButNoGetter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 139, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RuntimeExecWithNonConstantString", + "shortDescription": { + "text": "Call to 'Runtime.exec()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Runtime.exec()' which take a dynamically-constructed string as the command to execute. Constructed execution strings are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'String i = getUserInput();\n Runtime runtime = Runtime.getRuntime();\n runtime.exec(\"foo\" + i); // reports warning' Use the inspection settings to consider any 'static' 'final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'static final String COMMAND = \"ping \" + getDomainFromUserInput() + \"'\";'", + "markdown": "Reports calls to `java.lang.Runtime.exec()` which take a dynamically-constructed string as the command to execute.\n\n\nConstructed execution strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String i = getUserInput();\n Runtime runtime = Runtime.getRuntime();\n runtime.exec(\"foo\" + i); // reports warning\n\n\nUse the inspection settings to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String COMMAND = \"ping \" + getDomainFromUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToRuntimeExecWithNonConstantString", + "cweIds": [ + 20, + 77, + 78, + 88, + 94 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ErrorRethrown", + "shortDescription": { + "text": "'Error' not rethrown" + }, + "fullDescription": { + "text": "Reports 'try' statements that catch 'java.lang.Error' or any of its subclasses and do not rethrow the error. Statements that catch 'java.lang.ThreadDeath' are not reported. Example: 'try {\n executeTests(request);\n }\n catch (OutOfMemoryError ex) { // warning: Error 'ex' not rethrown\n return false;\n }'", + "markdown": "Reports `try` statements that catch `java.lang.Error` or any of its subclasses and do not rethrow the error.\n\nStatements that catch `java.lang.ThreadDeath` are not\nreported.\n\n**Example:**\n\n\n try {\n executeTests(request);\n }\n catch (OutOfMemoryError ex) { // warning: Error 'ex' not rethrown\n return false;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ErrorNotRethrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclicPackageDependency", + "shortDescription": { + "text": "Cyclic package dependency" + }, + "fullDescription": { + "text": "Reports packages that are mutually or cyclically dependent on other packages. Such cyclic dependencies make code fragile and hard to maintain. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages that are mutually or cyclically dependent on other packages.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CyclicPackageDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemSetSecurityManager", + "shortDescription": { + "text": "Call to 'System.setSecurityManager()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.setSecurityManager()'. While often benign, any call to 'System.setSecurityManager()' should be closely examined in any security audit.", + "markdown": "Reports calls to `System.setSecurityManager()`.\n\nWhile often benign, any call to `System.setSecurityManager()` should be closely examined in any security audit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSystemSetSecurityManager", + "cweIds": [ + 250 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsatisfiedRange", + "shortDescription": { + "text": "Return value is outside of declared range" + }, + "fullDescription": { + "text": "Reports numeric values returned from methods that don't conform to the declared method return range. You can declare method return range using a number of annotations: 'org.jetbrains.annotations.Range' from JetBrains annotations package (specify 'from' and 'to') 'org.checkerframework.common.value.qual.IntRange' from Checker Framework annotations package (specify 'from' and 'to') 'org.checkerframework.checker.index.qual.GTENegativeOne' from Checker Framework annotations package (range is '>= -1') 'org.checkerframework.checker.index.qual.NonNegative' from Checker Framework annotations package (range is '>= 0') 'org.checkerframework.checker.index.qual.Positive' from Checker Framework annotations package (range is '> 0') 'javax.annotation.Nonnegative' from JSR 305 annotations package (range is '>= 0') 'javax.validation.constraints.Min' (specify minimum value) 'javax.validation.constraints.Max' (specify maximum value) Example: '@Range(from = 0, to = Integer.MAX_VALUE) int getValue() {\n // Warning: -1 is outside of declared range\n return -1;\n }' New in 2021.2", + "markdown": "Reports numeric values returned from methods that don't conform to the declared method return range. You can declare method return range using a number of annotations:\n\n* `org.jetbrains.annotations.Range` from JetBrains annotations package (specify 'from' and 'to')\n* `org.checkerframework.common.value.qual.IntRange` from Checker Framework annotations package (specify 'from' and 'to')\n* `org.checkerframework.checker.index.qual.GTENegativeOne` from Checker Framework annotations package (range is '\\>= -1')\n* `org.checkerframework.checker.index.qual.NonNegative` from Checker Framework annotations package (range is '\\>= 0')\n* `org.checkerframework.checker.index.qual.Positive` from Checker Framework annotations package (range is '\\> 0')\n* `javax.annotation.Nonnegative` from JSR 305 annotations package (range is '\\>= 0')\n* `javax.validation.constraints.Min` (specify minimum value)\n* `javax.validation.constraints.Max` (specify maximum value)\n\nExample:\n\n\n @Range(from = 0, to = Integer.MAX_VALUE) int getValue() {\n // Warning: -1 is outside of declared range\n return -1;\n }\n\nNew in 2021.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnsatisfiedRange", + "cweIds": [ + 129, + 682 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 172, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyDependencies", + "shortDescription": { + "text": "Class with too many dependencies" + }, + "fullDescription": { + "text": "Reports classes that are directly dependent on too many other classes in the project. Modifications to any dependency of such classes may require changing the class, thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of dependencies field to specify the maximum allowed number of dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are directly dependent on too many other classes in the project.\n\nModifications to any dependency of such classes may require changing the class, thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of dependencies** field to specify the maximum allowed number of dependencies for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyDependencies", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutNoArgConstructor", + "shortDescription": { + "text": "Class without no-arg constructor" + }, + "fullDescription": { + "text": "Reports classes without a constructor that takes no arguments (i.e. has no parameters). No-arg constructors are necessary in some contexts. For example, if a class needs to be created using reflection. Example: 'public class Bean {\n private String name;\n\n public Bean(String name) {\n this.name = name;\n }\n }' Use the checkbox below to ignore classes without explicit constructors. The compiler provides a default no-arg constructor to such classes.", + "markdown": "Reports classes without a constructor that takes no arguments (i.e. has no parameters). No-arg constructors are necessary in some contexts. For example, if a class needs to be created using reflection.\n\n**Example:**\n\n\n public class Bean {\n private String name;\n\n public Bean(String name) {\n this.name = name;\n }\n }\n\n\nUse the checkbox below to ignore classes without explicit constructors.\nThe compiler provides a default no-arg constructor to such classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithoutNoArgConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 139, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastConflictsWithInstanceof", + "shortDescription": { + "text": "Cast conflicts with 'instanceof'" + }, + "fullDescription": { + "text": "Reports type cast expressions that are preceded by an 'instanceof' check for a different type. Although this might be intended, such a construct is most likely an error, and will result in a 'java.lang.ClassCastException' at runtime. Example: 'class Main {\n int whenCharSequenceCastToNumber(Object o){\n if (o instanceof CharSequence) {\n return ((Number) o).intValue();\n }\n return 0;\n }\n\n int earlyReturnWhenNotCharSequence(Object o){\n if (!(o instanceof CharSequence)) return 0;\n return ((Number)o).intValue();\n }\n }'", + "markdown": "Reports type cast expressions that are preceded by an `instanceof` check for a different type.\n\n\nAlthough this might be intended, such a construct is most likely an error, and will\nresult in a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n class Main {\n int whenCharSequenceCastToNumber(Object o){\n if (o instanceof CharSequence) {\n return ((Number) o).intValue();\n }\n return 0;\n }\n\n int earlyReturnWhenNotCharSequence(Object o){\n if (!(o instanceof CharSequence)) return 0;\n return ((Number)o).intValue();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CastConflictsWithInstanceof", + "cweIds": [ + 704 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewExceptionWithoutArguments", + "shortDescription": { + "text": "Exception constructor called without arguments" + }, + "fullDescription": { + "text": "Reports creation of a exception instance without any arguments specified. When an exception is constructed without any arguments, it contains no information about the problem that occurred, which makes debugging needlessly hard. Example: 'throw new IOException(); // warning: exception without arguments'", + "markdown": "Reports creation of a exception instance without any arguments specified.\n\nWhen an exception is constructed without any arguments, it contains no information about the problem that occurred, which makes\ndebugging needlessly hard.\n\n**Example:**\n\n\n throw new IOException(); // warning: exception without arguments\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NewExceptionWithoutArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Contract", + "shortDescription": { + "text": "Contract issues" + }, + "fullDescription": { + "text": "Reports issues in method '@Contract' annotations. The types of issues that can be reported are: Errors in contract syntax Contracts that do not conform to the method signature (wrong parameter count) Method implementations that contradict the contract (e.g. return 'true' when the contract says 'false') Example: '// method has no parameters, but contract expects 1\n @Contract(\"_ -> fail\")\n void x() {\n throw new AssertionError();\n }'", + "markdown": "Reports issues in method `@Contract` annotations. The types of issues that can be reported are:\n\n* Errors in contract syntax\n* Contracts that do not conform to the method signature (wrong parameter count)\n* Method implementations that contradict the contract (e.g. return `true` when the contract says `false`)\n\nExample:\n\n\n // method has no parameters, but contract expects 1\n @Contract(\"_ -> fail\")\n void x() {\n throw new AssertionError();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Contract", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnhancedSwitchBackwardMigration", + "shortDescription": { + "text": "Enhanced 'switch'" + }, + "fullDescription": { + "text": "Reports enhanced 'switch' statements and expressions. Suggests replacing them with regular 'switch' statements. Example: 'boolean even = switch (condition) {\n case 1, 3, 5, 7, 9 -> false;\n default -> true;\n };' After the quick-fix is applied: 'boolean even;\n switch (condition) {\n case 1:\n case 3:\n case 5:\n case 7:\n case 9:\n even = false;\n break;\n default:\n even = true;\n break;\n}' Enhanced 'switch' appeared in Java 14. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2019.1", + "markdown": "Reports enhanced `switch` statements and expressions. Suggests replacing them with regular `switch` statements.\n\n**Example:**\n\n\n boolean even = switch (condition) {\n case 1, 3, 5, 7, 9 -> false;\n default -> true;\n };\n\nAfter the quick-fix is applied:\n\n\n boolean even;\n switch (condition) {\n case 1:\n case 3:\n case 5:\n case 7:\n case 9:\n even = false;\n break;\n default:\n even = true;\n break;\n }\n\n\n*Enhanced* `switch` appeared in Java 14.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EnhancedSwitchBackwardMigration", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 14", + "index": 136, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageWithTooManyClasses", + "shortDescription": { + "text": "Package with too many classes" + }, + "fullDescription": { + "text": "Reports packages that contain too many classes. Overly large packages may indicate a lack of design clarity. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Maximum number of classes field to specify the maximum allowed number of classes in a package.", + "markdown": "Reports packages that contain too many classes.\n\nOverly large packages may indicate a lack of design clarity.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum allowed number of classes in a package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageWithTooManyClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryFinallyCanBeTryWithResources", + "shortDescription": { + "text": "'try finally' can be replaced with 'try' with resources" + }, + "fullDescription": { + "text": "Reports 'try'-'finally' statements that can use Java 7 Automatic Resource Management, which is less error-prone. A quick-fix is available to convert a 'try'-'finally' statement into a 'try'-with-resources statement. Example: 'PrintStream printStream = new PrintStream(fileName);\n try {\n printStream.print(true);\n } finally {\n printStream.close();\n }' A quick-fix is provided to pass the cause to a constructor: 'try (PrintStream printStream = new PrintStream(fileName)) {\n printStream.print(true);\n }' This inspection depends on the Java feature 'Try-with-resources' which is available since Java 7.", + "markdown": "Reports `try`-`finally` statements that can use Java 7 Automatic Resource Management, which is less error-prone.\n\nA quick-fix is available to convert a `try`-`finally`\nstatement into a `try`-with-resources statement.\n\n**Example:**\n\n\n PrintStream printStream = new PrintStream(fileName);\n try {\n printStream.print(true);\n } finally {\n printStream.close();\n }\n\nA quick-fix is provided to pass the cause to a constructor:\n\n\n try (PrintStream printStream = new PrintStream(fileName)) {\n printStream.print(true);\n }\n\nThis inspection depends on the Java feature 'Try-with-resources' which is available since Java 7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TryFinallyCanBeTryWithResources", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 159, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SamePackageImport", + "shortDescription": { + "text": "Unnecessary import from the same package" + }, + "fullDescription": { + "text": "Reports 'import' statements that refer to the same package as the containing file. Same-package files are always implicitly imported, so such 'import' statements are redundant and confusing. Since IntelliJ IDEA can automatically detect and fix such statements with its Optimize Imports command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that refer to the same package as the containing file.\n\n\nSame-package files are always implicitly imported, so such `import`\nstatements are redundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports**\ncommand, this inspection is mostly useful for offline reporting on code bases that you\ndon't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SamePackageImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadLocalSetWithNull", + "shortDescription": { + "text": "'ThreadLocal.set()' with null as an argument" + }, + "fullDescription": { + "text": "Reports 'java.lang.ThreadLocal.set()' with null as an argument. This call does not free the resources, and it may cause a memory leak. It may happen because: Firstly, 'ThreadLocal.set(null)' finds a map associated with the current Thread. If there is no such a map, it will be created It sets key and value: 'map.set(this, value)', where 'this' refers to instance of 'ThreadLocal' 'java.lang.ThreadLocal.remove()' should be used to free the resources. Example: 'ThreadLocal threadLocal = new ThreadLocal<>();\n threadLocal.set(null);' After the quick-fix is applied: 'threadLocal.remove();' New in 2023.2", + "markdown": "Reports `java.lang.ThreadLocal.set()` with null as an argument.\n\nThis call does not free the resources, and it may cause a memory leak.\nIt may happen because:\n\n* Firstly, `ThreadLocal.set(null)` finds a map associated with the current Thread. If there is no such a map, it will be created\n* It sets key and value: `map.set(this, value)`, where `this` refers to instance of `ThreadLocal`\n\n`java.lang.ThreadLocal.remove()` should be used to free the resources.\n\nExample:\n\n\n ThreadLocal threadLocal = new ThreadLocal<>();\n threadLocal.set(null);\n\nAfter the quick-fix is applied:\n\n\n threadLocal.remove();\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ThreadLocalSetWithNull", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingJavadoc", + "shortDescription": { + "text": "Missing Javadoc" + }, + "fullDescription": { + "text": "Reports missing Javadoc comments and tags. Example: '/**\n * Missing \"@param\" is reported (if configured).\n */\n public void sample(int param){\n }' The quick-fixes add missing tag or missing Javadoc comment: '/**\n * Missing \"@param\" is reported (if configured).\n * @param param\n */\n public void sample(int param){\n }' Inspection can be configured to ignore deprecated elements or simple accessor methods like 'getField()' or 'setField()'. You can also use options below to configure required tags and minimal required visibility for the specific code elements like method, field, class, package, module.", + "markdown": "Reports missing Javadoc comments and tags.\n\nExample:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n */\n public void sample(int param){\n }\n\nThe quick-fixes add missing tag or missing Javadoc comment:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n * @param param\n */\n public void sample(int param){\n }\n\n\nInspection can be configured to ignore deprecated elements or simple accessor methods like `getField()` or `setField()`.\nYou can also use options below to configure required tags and minimal required visibility for the specific code elements like method, field, class, package, module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingJavadoc", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AwaitWithoutCorrespondingSignal", + "shortDescription": { + "text": "'await()' without corresponding 'signal()'" + }, + "fullDescription": { + "text": "Reports calls to 'Condition.await()', for which no call to a corresponding 'Condition.signal()' or 'Condition.signalAll()' can be found. Calling 'Condition.await()' in a thread without corresponding 'Condition.signal()' may cause the thread to become disabled until it is interrupted or \"spurious wakeup\" occurs. Only calls that target fields of the current class are reported by this inspection. Example: 'class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n // isEmpty.signal();\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n isEmpty.await(); // 'await()' doesn't contain corresponding 'signal()'/'signalAll()' call\n // ...\n }\n }'", + "markdown": "Reports calls to `Condition.await()`, for which no call to a corresponding `Condition.signal()` or `Condition.signalAll()` can be found.\n\n\nCalling `Condition.await()` in a thread without corresponding `Condition.signal()` may cause the thread\nto become disabled until it is interrupted or \"spurious wakeup\" occurs.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n // isEmpty.signal();\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n isEmpty.await(); // 'await()' doesn't contain corresponding 'signal()'/'signalAll()' call\n // ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AwaitWithoutCorrespondingSignal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLocalVariable", + "shortDescription": { + "text": "Redundant local variable" + }, + "fullDescription": { + "text": "Reports unnecessary local variables that add nothing to the comprehensibility of a method, including: Local variables that are immediately returned. Local variables that are immediately assigned to another variable and then not used. Local variables that always have the same value as another local variable or parameter. Example: 'boolean yes() {\n boolean b = true;\n return b;\n }' After the quick-fix is applied: 'boolean yes() {\n return true;\n }' Configure the inspection: Use the Ignore immediately returned or thrown variables option to ignore immediately returned or thrown variables. Some coding styles suggest using such variables for clarity and ease of debugging. Use the Ignore variables which have an annotation option to ignore annotated variables.", + "markdown": "Reports unnecessary local variables that add nothing to the comprehensibility of a method, including:\n\n* Local variables that are immediately returned.\n* Local variables that are immediately assigned to another variable and then not used.\n* Local variables that always have the same value as another local variable or parameter.\n\n**Example:**\n\n\n boolean yes() {\n boolean b = true;\n return b;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean yes() {\n return true;\n }\n \nConfigure the inspection:\n\n* Use the **Ignore immediately returned or thrown variables** option to ignore immediately returned or thrown variables. Some coding styles suggest using such variables for clarity and ease of debugging.\n* Use the **Ignore variables which have an annotation** option to ignore annotated variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLocalVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9RedundantRequiresStatement", + "shortDescription": { + "text": "Redundant 'requires' directive in module-info" + }, + "fullDescription": { + "text": "Reports redundant 'requires' directives in Java Platform Module System 'module-info.java' files. A 'requires' directive is redundant when a module 'A' requires a module 'B', but the code in module 'A' doesn't import any packages or classes from 'B'. Furthermore, all modules have an implicitly declared dependence on the 'java.base' module, therefore a 'requires java.base;' directive is always redundant. The quick-fix deletes the redundant 'requires' directive. If the deleted dependency re-exported modules that are actually used, the fix adds a 'requires' directives for these modules. This inspection only reports if the language level of the project or module is 9 or higher. New in 2017.1", + "markdown": "Reports redundant `requires` directives in Java Platform Module System `module-info.java` files. A `requires` directive is redundant when a module `A` requires a module `B`, but the code in module `A` doesn't import any packages or classes from `B`. Furthermore, all modules have an implicitly declared dependence on the `java.base` module, therefore a `requires java.base;` directive is always redundant.\n\n\nThe quick-fix deletes the redundant `requires` directive.\nIf the deleted dependency re-exported modules that are actually used, the fix adds a `requires` directives for these modules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java9RedundantRequiresStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BusyWait", + "shortDescription": { + "text": "Busy wait" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' that occur inside loops. Such calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks as busy-waiting threads do not release locked resources. Example: 'class X {\n volatile int x;\n public void waitX() throws Exception {\n while (x > 0) {\n Thread.sleep(10);//warning: Call to 'Thread.sleep()' in a loop, probably busy-waiting\n }\n }\n }'", + "markdown": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\nSuch calls\nare indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources.\n\n**Example:**\n\n\n class X {\n volatile int x;\n public void waitX() throws Exception {\n while (x > 0) {\n Thread.sleep(10);//warning: Call to 'Thread.sleep()' in a loop, probably busy-waiting\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "BusyWait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopWithMissingComponent", + "shortDescription": { + "text": "'for' loop with missing components" + }, + "fullDescription": { + "text": "Reports 'for' loops that lack initialization, condition, or update clauses. Some coding styles prohibit such loops. Example: 'for (int i = 0;;i++) {\n // body\n }' Use the Ignore collection iterations option to ignore loops which use an iterator. This is a standard way to iterate over a collection in which the 'for' loop does not have an update clause.", + "markdown": "Reports `for` loops that lack initialization, condition, or update clauses. Some coding styles prohibit such loops.\n\nExample:\n\n\n for (int i = 0;;i++) {\n // body\n }\n\n\nUse the **Ignore collection iterations** option to ignore loops which use an iterator.\nThis is a standard way to iterate over a collection in which the `for` loop does not have an update clause." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForLoopWithMissingComponent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverwrittenKey", + "shortDescription": { + "text": "Overwritten Map, Set, or array element" + }, + "fullDescription": { + "text": "Reports code that overwrites a 'Map' key, a 'Set' element, or an array element in a sequence of 'add'/'put' calls or using a Java 9 factory method like 'Set.of' (which will result in runtime exception). This usually occurs due to a copy-paste error. Example: 'map.put(\"A\", 1);\n map.put(\"B\", 2);\n map.put(\"C\", 3);\n map.put(\"D\", 4);\n map.put(\"A\", 5); // duplicating key \"A\", overwrites the previously written entry' New in 2017.3", + "markdown": "Reports code that overwrites a `Map` key, a `Set` element, or an array element in a sequence of `add`/`put` calls or using a Java 9 factory method like `Set.of` (which will result in runtime exception).\n\nThis usually occurs due to a copy-paste error.\n\n**Example:**\n\n\n map.put(\"A\", 1);\n map.put(\"B\", 2);\n map.put(\"C\", 3);\n map.put(\"D\", 4);\n map.put(\"A\", 5); // duplicating key \"A\", overwrites the previously written entry\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OverwrittenKey", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassMethodCount", + "shortDescription": { + "text": "Anonymous class with too many methods" + }, + "fullDescription": { + "text": "Reports anonymous inner classes whose method count exceeds the specified maximum. Anonymous classes with numerous methods may be difficult to understand and should be promoted to become named inner classes. Use the Method count limit field to specify the maximum allowed number of methods in an anonymous inner class.", + "markdown": "Reports anonymous inner classes whose method count exceeds the specified maximum.\n\nAnonymous classes with numerous methods may be\ndifficult to understand and should be promoted to become named inner classes.\n\nUse the **Method count limit** field to specify the maximum allowed number of methods in an anonymous inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousInnerClassWithTooManyMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalOfNullableMisuse", + "shortDescription": { + "text": "Use of Optional.ofNullable with null or not-null argument" + }, + "fullDescription": { + "text": "Reports uses of 'Optional.ofNullable()' where always null or always not-null argument is passed. There's no point in using 'Optional.ofNullable()' in this case: either 'Optional.empty()' or 'Optional.of()' should be used to explicitly state the intent of creating an always-empty or always non-empty optional respectively. It's also possible that there's a mistake in 'Optional.ofNullable()' argument, so it should be examined. Example: 'Optional empty = Optional.ofNullable(null); // should be Optional.empty();\nOptional present = Optional.ofNullable(\"value\"); // should be Optional.of(\"value\");' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports uses of `Optional.ofNullable()` where always null or always not-null argument is passed. There's no point in using `Optional.ofNullable()` in this case: either `Optional.empty()` or `Optional.of()` should be used to explicitly state the intent of creating an always-empty or always non-empty optional respectively. It's also possible that there's a mistake in `Optional.ofNullable()` argument, so it should be examined.\n\n\nExample:\n\n\n Optional empty = Optional.ofNullable(null); // should be Optional.empty();\n Optional present = Optional.ofNullable(\"value\"); // should be Optional.of(\"value\"); \n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalOfNullableMisuse", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastToIncompatibleInterface", + "shortDescription": { + "text": "Cast to incompatible type" + }, + "fullDescription": { + "text": "Reports type cast expressions where the casted expression has a class/interface type that neither extends/implements the cast class/interface type, nor has subclasses that do. Such a construct is likely erroneous, and will throw a 'java.lang.ClassCastException' at runtime. Example: 'interface A {}\n interface Z {}\n static class C {}\n\n void x(C c) {\n if (c instanceof Z) {\n A a = ((A)c); // cast to incompatible interface 'A'\n }\n }'", + "markdown": "Reports type cast expressions where the casted expression has a class/interface type that neither extends/implements the cast class/interface type, nor has subclasses that do.\n\n\nSuch a construct is likely erroneous, and will\nthrow a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n interface A {}\n interface Z {}\n static class C {}\n\n void x(C c) {\n if (c instanceof Z) {\n A a = ((A)c); // cast to incompatible interface 'A'\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CastToIncompatibleInterface", + "cweIds": [ + 704 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableConditionalExpression", + "shortDescription": { + "text": "Simplifiable conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions and suggests simplifying them. Examples: 'condition ? true : foo → condition || foo' 'condition ? false : foo → !condition && foo' 'condition ? foo : !foo → condition == foo' 'condition ? true : false → condition' 'a == b ? b : a → a' 'result != null ? result : null → result'", + "markdown": "Reports conditional expressions and suggests simplifying them.\n\nExamples:\n\n condition ? true : foo → condition || foo\n\n condition ? false : foo → !condition && foo\n\n condition ? foo : !foo → condition == foo\n\n condition ? true : false → condition\n\n a == b ? b : a → a\n\n result != null ? result : null → result\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifiableConditionalExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedMethodAccess", + "shortDescription": { + "text": "Instance method call not qualified with 'this'" + }, + "fullDescription": { + "text": "Reports calls to non-'static' methods on the same instance that are not qualified with 'this'. Example: 'class Foo {\n void bar() {}\n\n void foo() {\n bar();\n }\n }' After the quick-fix is applied: 'class Foo {\n void bar() {}\n\n void foo() {\n this.bar();\n }\n }'", + "markdown": "Reports calls to non-`static` methods on the same instance that are not qualified with `this`.\n\n**Example:**\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n bar();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n this.bar();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnqualifiedMethodAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofIncompatibleInterface", + "shortDescription": { + "text": "'instanceof' with incompatible type" + }, + "fullDescription": { + "text": "Reports 'instanceof' expressions where the expression that is checked has a class/interface type that neither extends/implements the class/interface type on the right-side of the 'instanceof' expression, nor has subclasses that do. Although it could be intended for e.g. library code, such a construct is likely erroneous, because no instance of any class declared in the project could pass this 'instanceof' test. Example: 'class Foo { }\n\n interface Bar { }\n \n class Main {\n void test(Foo f, Bar b) {\n if (f instanceof Bar) { // problem\n System.out.println(\"fail\");\n }\n if (b instanceof Foo) { // problem\n System.out.println(\"fail\");\n }\n }\n }'", + "markdown": "Reports `instanceof` expressions where the expression that is checked has a class/interface type that neither extends/implements the class/interface type on the right-side of the `instanceof` expression, nor has subclasses that do.\n\n\nAlthough it could be intended for e.g. library code, such a construct is likely erroneous,\nbecause no instance of any class declared in the project could pass this `instanceof` test.\n\n**Example:**\n\n\n class Foo { }\n\n interface Bar { }\n \n class Main {\n void test(Foo f, Bar b) {\n if (f instanceof Bar) { // problem\n System.out.println(\"fail\");\n }\n if (b instanceof Foo) { // problem\n System.out.println(\"fail\");\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceofIncompatibleInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionalExpressionCanBeFolded", + "shortDescription": { + "text": "Functional expression can be folded" + }, + "fullDescription": { + "text": "Reports method references or lambda expressions that point to a method of their own functional interface type and hence can be replaced with their qualifiers removing unnecessary object allocation. Example: 'SwingUtilities.invokeLater(r::run);\n SwingUtilities.invokeAndWait(() -> r.run());' After the quick-fix is applied: 'SwingUtilities.invokeLater(r);\n SwingUtilities.invokeAndWait(r);' This inspection reports only if the language level of the project or module is 8 or higher.", + "markdown": "Reports method references or lambda expressions that point to a method of their own functional interface type and hence can be replaced with their qualifiers removing unnecessary object allocation.\n\nExample:\n\n\n SwingUtilities.invokeLater(r::run);\n SwingUtilities.invokeAndWait(() -> r.run());\n\nAfter the quick-fix is applied:\n\n\n SwingUtilities.invokeLater(r);\n SwingUtilities.invokeAndWait(r);\n\nThis inspection reports only if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionalExpressionCanBeFolded", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomClassloader", + "shortDescription": { + "text": "Custom 'ClassLoader' is declared" + }, + "fullDescription": { + "text": "Reports user-defined subclasses of 'java.lang.ClassLoader'. While not necessarily representing a security hole, such classes should be thoroughly inspected for possible security issues.", + "markdown": "Reports user-defined subclasses of `java.lang.ClassLoader`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\ninspected for possible security issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CustomClassloader", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarySuperConstructor", + "shortDescription": { + "text": "Unnecessary call to 'super()'" + }, + "fullDescription": { + "text": "Reports calls to no-arg superclass constructors during object construction. Such calls are unnecessary and may be removed. Example: 'class Foo {\n Foo() {\n super();\n }\n }' After the quick-fix is applied: 'class Foo {\n Foo() {\n }\n }'", + "markdown": "Reports calls to no-arg superclass constructors during object construction.\n\nSuch calls are unnecessary and may be removed.\n\n**Example:**\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryCallToSuper", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThisEscapedInConstructor", + "shortDescription": { + "text": "'this' reference escaped in object construction" + }, + "fullDescription": { + "text": "Reports possible escapes of 'this' during the object initialization. The escapes occur when 'this' is used as a method argument or an object of assignment in a constructor or initializer. Such escapes may result in subtle bugs, as the object is now available in the context where it is not guaranteed to be initialized. Example: 'class Foo {\n {\n System.out.println(this);\n }\n }'", + "markdown": "Reports possible escapes of `this` during the object initialization. The escapes occur when `this` is used as a method argument or an object of assignment in a constructor or initializer. Such escapes may result in subtle bugs, as the object is now available in the context where it is not guaranteed to be initialized.\n\n**Example:**\n\n\n class Foo {\n {\n System.out.println(this);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThisEscapedInObjectConstruction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfCanBeSwitch", + "shortDescription": { + "text": "'if' can be replaced with 'switch'" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be replaced with 'switch' statements. The replacement result is usually shorter and clearer. Example: 'void test(String str) {\n if (str.equals(\"1\")) {\n System.out.println(1);\n } else if (str.equals(\"2\")) {\n System.out.println(2);\n } else if (str.equals(\"3\")) {\n System.out.println(3);\n } else {\n System.out.println(4);\n }\n }' After the quick-fix is applied: 'void test(String str) {\n switch (str) {\n case \"1\" -> System.out.println(1);\n case \"2\" -> System.out.println(2);\n case \"3\" -> System.out.println(3);\n default -> System.out.println(4);\n }\n }' This inspection only reports if the language level of the project or module is 7 or higher. Use the Minimum number of 'if' condition branches field to specify the minimum number of 'if' condition branches for an 'if' statement to have to be reported. Note that the terminal 'else' branch (without 'if') is not counted. Use the Suggest switch on numbers option to enable the suggestion of 'switch' statements on primitive and boxed numbers and characters. Use the Suggest switch on enums option to enable the suggestion of 'switch' statements on 'enum' constants. Use the Only suggest on null-safe expressions option to suggest 'switch' statements that can't introduce a 'NullPointerException' only.", + "markdown": "Reports `if` statements that can be replaced with `switch` statements.\n\nThe replacement result is usually shorter and clearer.\n\n**Example:**\n\n\n void test(String str) {\n if (str.equals(\"1\")) {\n System.out.println(1);\n } else if (str.equals(\"2\")) {\n System.out.println(2);\n } else if (str.equals(\"3\")) {\n System.out.println(3);\n } else {\n System.out.println(4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void test(String str) {\n switch (str) {\n case \"1\" -> System.out.println(1);\n case \"2\" -> System.out.println(2);\n case \"3\" -> System.out.println(3);\n default -> System.out.println(4);\n }\n }\n \nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nUse the **Minimum number of 'if' condition branches** field to specify the minimum number of `if` condition branches\nfor an `if` statement to have to be reported. Note that the terminal `else` branch (without `if`) is not counted.\n\n\nUse the **Suggest switch on numbers** option to enable the suggestion of `switch` statements on\nprimitive and boxed numbers and characters.\n\n\nUse the **Suggest switch on enums** option to enable the suggestion of `switch` statements on\n`enum` constants.\n\n\nUse the **Only suggest on null-safe expressions** option to suggest `switch` statements that can't introduce a `NullPointerException` only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfCanBeSwitch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 70, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonPublicClone", + "shortDescription": { + "text": "'clone()' method not 'public'" + }, + "fullDescription": { + "text": "Reports 'clone()' methods that are 'protected' and not 'public'. When overriding the 'clone()' method from 'java.lang.Object', it is expected to make the method 'public', so that it is accessible from non-subclasses outside the package.", + "markdown": "Reports `clone()` methods that are `protected` and not `public`.\n\nWhen overriding the `clone()` method from `java.lang.Object`, it is expected to make the method `public`,\nso that it is accessible from non-subclasses outside the package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonPublicClone", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteRecursion", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports methods that call themselves infinitely unless an exception is thrown. Methods reported by this inspection cannot return normally. While such behavior may be intended, in many cases this is just an oversight. Example: 'int baz() {\n return baz();\n }'", + "markdown": "Reports methods that call themselves infinitely unless an exception is thrown.\n\n\nMethods reported by this inspection cannot return normally.\nWhile such behavior may be intended, in many cases this is just an oversight.\n\n**Example:**\n\n int baz() {\n return baz();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteRecursion", + "cweIds": [ + 674, + 835 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedIsStillUsed", + "shortDescription": { + "text": "Deprecated member is still used" + }, + "fullDescription": { + "text": "Reports deprecated classes, methods, and fields that are used in your code nonetheless. Example: 'class MyCode {\n @Deprecated\n void oldMethod() {}// warning: \"Deprecated member is still used\"\n\n void newMethod() {\n oldMethod(); // forgotten usage\n }\n }' Usages within deprecated elements are ignored. NOTE: Due to performance reasons, a non-private member is checked only when its name rarely occurs in the project.", + "markdown": "Reports deprecated classes, methods, and fields that are used in your code nonetheless.\n\nExample:\n\n\n class MyCode {\n @Deprecated\n void oldMethod() {}// warning: \"Deprecated member is still used\"\n\n void newMethod() {\n oldMethod(); // forgotten usage\n }\n }\n\nUsages within deprecated elements are ignored.\n\n**NOTE:** Due to performance reasons, a non-private member is checked only when its name rarely occurs in the project." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedIsStillUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantComparatorComparing", + "shortDescription": { + "text": "Comparator method can be simplified" + }, + "fullDescription": { + "text": "Reports 'Comparator' combinator constructs that can be simplified. Example: 'c.thenComparing(Comparator.comparing(function));\n\n Comparator.comparing(Map.Entry::getKey);\n\n Collections.max(list, Comparator.reverseOrder());' After the quick-fixes are applied: 'c.thenComparing(function)\n\n Map.Entry.comparingByKey()\n\n Collections.min(list, Comparator.naturalOrder());' New in 2018.1", + "markdown": "Reports `Comparator` combinator constructs that can be simplified.\n\nExample:\n\n\n c.thenComparing(Comparator.comparing(function));\n\n Comparator.comparing(Map.Entry::getKey);\n\n Collections.max(list, Comparator.reverseOrder());\n\nAfter the quick-fixes are applied:\n\n\n c.thenComparing(function)\n\n Map.Entry.comparingByKey()\n\n Collections.min(list, Comparator.naturalOrder());\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantComparatorComparing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VariableNotUsedInsideIf", + "shortDescription": { + "text": "Reference checked for 'null' is not used inside 'if'" + }, + "fullDescription": { + "text": "Reports references to variables that are checked for nullability in the condition of an 'if' statement or conditional expression but not used inside that 'if' statement. Usually this either means that the check is unnecessary or that the variable is not referenced inside the 'if' statement by mistake. Example: 'void test(Integer i) {\n if (i != null) { // here 'i' is not used inside 'if' statement\n System.out.println();\n }\n }'", + "markdown": "Reports references to variables that are checked for nullability in the condition of an `if` statement or conditional expression but not used inside that `if` statement.\n\n\nUsually this either means that\nthe check is unnecessary or that the variable is not referenced inside the\n`if` statement by mistake.\n\n**Example:**\n\n\n void test(Integer i) {\n if (i != null) { // here 'i' is not used inside 'if' statement\n System.out.println();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VariableNotUsedInsideIf", + "cweIds": [ + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionAddAllCanBeReplacedWithConstructor", + "shortDescription": { + "text": "Redundant 'Collection.addAll()' call" + }, + "fullDescription": { + "text": "Reports 'Collection.addAll()' and 'Map.putAll()' calls immediately after an instantiation of a collection using a no-arg constructor. Such constructs can be replaced with a single call to a parametrized constructor, which simplifies the code. Also, for some collections the replacement might be more performant. Example: 'Set set = new HashSet<>();\n set.addAll(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));' After the quick-fix is applied: 'Set set = new HashSet<>(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));' The JDK collection classes are supported by default. Additionally, you can specify other classes using the Classes to check panel.", + "markdown": "Reports `Collection.addAll()` and `Map.putAll()` calls immediately after an instantiation of a collection using a no-arg constructor.\n\nSuch constructs can be replaced with a single call to a parametrized constructor, which simplifies the code. Also, for some collections the replacement\nmight be more performant.\n\n**Example:**\n\n\n Set set = new HashSet<>();\n set.addAll(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\nAfter the quick-fix is applied:\n\n\n Set set = new HashSet<>(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\n\nThe JDK collection classes are supported by default.\nAdditionally, you can specify other classes using the **Classes to check** panel." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CollectionAddAllCanBeReplacedWithConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleReturnPointsPerMethod", + "shortDescription": { + "text": "Method with multiple return points" + }, + "fullDescription": { + "text": "Reports methods whose number of 'return' points exceeds the specified maximum. Methods with too many 'return' points may be confusing and hard to refactor. A 'return' point is either a 'return' statement or a falling through the bottom of a 'void' method or constructor. Example: The method below is reported if only two 'return' statements are allowed: 'void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user)) {\n user.setId(getId());\n return;\n } else if (cond2(user)) {\n if (cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n }' Consider rewriting the method so it becomes easier to understand: 'void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user) || cond2(user) && cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }' Configure the inspection: Use the Return point limit field to specify the maximum allowed number of 'return' points for a method. Use the Ignore guard clauses option to ignore guard clauses. A guard clause is an 'if' statement that contains only a 'return' statement Use the Ignore for 'equals()' methods option to ignore 'return' points inside 'equals()' methods.", + "markdown": "Reports methods whose number of `return` points exceeds the specified maximum. Methods with too many `return` points may be confusing and hard to refactor.\n\nA `return` point is either a `return` statement or a falling through the bottom of a\n`void` method or constructor.\n\n**Example:**\n\nThe method below is reported if only two `return` statements are allowed:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user)) {\n user.setId(getId());\n return;\n } else if (cond2(user)) {\n if (cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n }\n\nConsider rewriting the method so it becomes easier to understand:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user) || cond2(user) && cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n\nConfigure the inspection:\n\n* Use the **Return point limit** field to specify the maximum allowed number of `return` points for a method.\n* Use the **Ignore guard clauses** option to ignore guard clauses. A guard clause is an `if` statement that contains only a `return` statement\n* Use the **Ignore for 'equals()' methods** option to ignore `return` points inside `equals()` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodWithMultipleReturnPoints", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousMethodCalls", + "shortDescription": { + "text": "Suspicious collection method call" + }, + "fullDescription": { + "text": "Reports method calls on parameterized collections, where the actual argument type does not correspond to the collection's elements type. Example: 'List list = getListOfElements();\n list.remove(\"\"); // remove is highlighted' In the inspection settings, you can disable warnings for potentially correct code like the following: 'public boolean accept(Map map, Object key) {\n return map.containsKey(key);\n }'", + "markdown": "Reports method calls on parameterized collections, where the actual argument type does not correspond to the collection's elements type.\n\n**Example:**\n\n\n List list = getListOfElements();\n list.remove(\"\"); // remove is highlighted\n\n\nIn the inspection settings, you can disable warnings for potentially correct code like the following:\n\n\n public boolean accept(Map map, Object key) {\n return map.containsKey(key);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousMethodCalls", + "cweIds": [ + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForwardCompatibility", + "shortDescription": { + "text": "Forward compatibility" + }, + "fullDescription": { + "text": "Reports Java code constructs that may fail to compile in future Java versions. The following problems are reported: Uses of 'assert', 'enum' or '_' as an identifier Uses of the 'var', 'yield', or 'record' restricted identifier as a type name Unqualified calls to methods named 'yield' Modifiers on the 'requires java.base' statement inside of 'module-info.java' Redundant semicolons between import statements Example: '// This previously legal class does not compile with Java 14,\n // as 'yield' became a restricted identifier.\n public class yield {}' Fixing these issues timely may simplify migration to future Java versions.", + "markdown": "Reports Java code constructs that may fail to compile in future Java versions.\n\nThe following problems are reported:\n\n* Uses of `assert`, `enum` or `_` as an identifier\n* Uses of the `var`, `yield`, or `record` restricted identifier as a type name\n* Unqualified calls to methods named `yield`\n* Modifiers on the `requires java.base` statement inside of `module-info.java`\n* Redundant semicolons between import statements\n\n**Example:**\n\n\n // This previously legal class does not compile with Java 14,\n // as 'yield' became a restricted identifier.\n public class yield {} \n\nFixing these issues timely may simplify migration to future Java versions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ForwardCompatibility", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DiamondCanBeReplacedWithExplicitTypeArguments", + "shortDescription": { + "text": "Diamond can be replaced with explicit type arguments" + }, + "fullDescription": { + "text": "Reports instantiation of generic classes in which the <> symbol (diamond) is used instead of type parameters. The quick-fix replaces <> (diamond) with explicit type parameters. Example: 'List list = new ArrayList<>()' After the quick-fix is applied: 'List list = new ArrayList()' Diamond operation appeared in Java 7. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports instantiation of generic classes in which the **\\<\\>** symbol (diamond) is used instead of type parameters.\n\nThe quick-fix replaces **\\<\\>** (diamond) with explicit type parameters.\n\nExample:\n\n List list = new ArrayList<>()\n\nAfter the quick-fix is applied:\n\n List list = new ArrayList()\n\n\n*Diamond operation* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DiamondCanBeReplacedWithExplicitTypeArguments", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfProcessBuilder", + "shortDescription": { + "text": "Use of 'java.lang.ProcessBuilder' class" + }, + "fullDescription": { + "text": "Reports uses of 'java.lang.ProcessBuilder', which might be unportable between operating systems because paths to executables, environment variables, command-line arguments and their escaping might vary depending on the OS.", + "markdown": "Reports uses of `java.lang.ProcessBuilder`, which might be unportable between operating systems because paths to executables, environment variables, command-line arguments and their escaping might vary depending on the OS." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfProcessBuilder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaRequiresAutoModule", + "shortDescription": { + "text": "Dependencies on automatic modules" + }, + "fullDescription": { + "text": "Reports usages of automatic modules in a 'requires' directive. An automatic module is unreliable since it can depend on the types on the class path, and its name and exported packages can change if it's converted into an explicit module. Corresponds to '-Xlint:requires-automatic' and '-Xlint:requires-transitive-automatic' Javac options. The first option increases awareness of when automatic modules are used. The second warns the authors of a module that they're putting the users of that module at risk by establishing implied readability to an automatic module. Example: '//module-info.java\n module org.printer {\n requires transitive drivers.corp.org; // reported in case 'drivers.corp.org' is an automatic module\n }' Use the Highlight only transitive dependencies option to warn only about transitive dependencies. This inspection depends on the Java feature 'Modules' which is available since Java 9.", + "markdown": "Reports usages of automatic modules in a `requires` directive.\n\nAn automatic\nmodule is unreliable since it can depend on the types on the class path,\nand its name and exported packages can change if it's\nconverted into an explicit module.\n\nCorresponds to `-Xlint:requires-automatic` and `-Xlint:requires-transitive-automatic` Javac options.\nThe first option increases awareness of when automatic modules are used.\nThe second warns the authors of a module that they're putting the users of that module at risk by establishing implied readability to an automatic module.\n\n**Example:**\n\n\n //module-info.java\n module org.printer {\n requires transitive drivers.corp.org; // reported in case 'drivers.corp.org' is an automatic module\n }\n\n\nUse the **Highlight only transitive dependencies** option to warn only about transitive dependencies.\n\nThis inspection depends on the Java feature 'Modules' which is available since Java 9." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "requires-transitive-automatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 88, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExcessiveRangeCheck", + "shortDescription": { + "text": "Excessive range check" + }, + "fullDescription": { + "text": "Reports condition chains in which a value range is checked and these condition chains can be simplified to a single check. The quick-fix replaces a condition chain with a simplified expression: Example: 'x > 2 && x < 4' After the quick-fix is applied: 'x == 3' Example: 'arr.length == 0 || arr.length > 1' After the quick-fix is applied: 'arr.length != 1' New in 2019.1", + "markdown": "Reports condition chains in which a value range is checked and these condition chains can be simplified to a single check.\n\nThe quick-fix replaces a condition chain with a simplified expression:\n\nExample:\n\n\n x > 2 && x < 4\n\nAfter the quick-fix is applied:\n\n\n x == 3\n\nExample:\n\n\n arr.length == 0 || arr.length > 1\n\nAfter the quick-fix is applied:\n\n\n arr.length != 1\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExcessiveRangeCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenation", + "shortDescription": { + "text": "String concatenation" + }, + "fullDescription": { + "text": "Reports 'String' concatenations. Concatenation might be incorrect in an internationalized environment and could be replaced by usages of 'java.text.MessageFormat' or similar classes. Example: 'String getMessage(String string, int number) {\n return string + number;\n }'", + "markdown": "Reports `String` concatenations. Concatenation might be incorrect in an internationalized environment and could be replaced by usages of `java.text.MessageFormat` or similar classes.\n\n**Example:**\n\n\n String getMessage(String string, int number) {\n return string + number;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassCanBeRecord", + "shortDescription": { + "text": "Class can be record class" + }, + "fullDescription": { + "text": "Reports classes that can be converted record classes. Record classes focus on modeling immutable data rather than extensible behavior. Automatic implicit implementation of data-driven methods, such as 'equals()' and accessors, helps to reduce boilerplate code. Note that not every class can be a record class. Here are some of the restrictions: The class must be a top-level class and must have no subclasses. All non-static fields in the class must be final. Initializers, generic constructors, and native methods must not be present. For a full description of record classes, refer to the Java Language Specification. Example: 'class Point {\n private final double x;\n private final double y;\n\n Point(double x, double y) {\n this.x = x;\n this.y = y;\n }\n\n double getX() {\n return x;\n }\n\n double getY() {\n return y;\n }\n }' After the quick-fix is applied: 'record Point(int x, int y) {\n }' Enable the Suggest renaming accessor methods option to rename 'getX()'/'isX()' accessors to 'x()' automatically. Use the If members become more accessible option to specify what to do when conversion will make members more accessible: Choose Do not suggest conversion option to not convert when members would become more accessible. Choose Show conflicts view option to show the affected members and ask to continue. In batch mode conversion will not be suggested. Choose Convert silently option to increase accessibility silently when needed. Use the Suppress conversion if class is annotated by list to exclude classes from conversion when annotated by annotations matching the specified patterns. This inspection depends on the Java feature 'Records' which is available since Java 16. New in 2020.3", + "markdown": "Reports classes that can be converted record classes.\n\nRecord classes focus on modeling immutable data rather than extensible behavior.\nAutomatic implicit implementation of data-driven methods, such as `equals()` and accessors, helps to reduce boilerplate code.\n\n\nNote that not every class can be a record class. Here are some of the restrictions:\n\n* The class must be a top-level class and must have no subclasses.\n* All non-static fields in the class must be final.\n* Initializers, generic constructors, and native methods must not be present.\n\nFor a full description of record classes, refer to the\n[Java Language Specification](https://docs.oracle.com/javase/specs/jls/se21/html/jls-8.html#jls-8.10).\n\nExample:\n\n\n class Point {\n private final double x;\n private final double y;\n\n Point(double x, double y) {\n this.x = x;\n this.y = y;\n }\n\n double getX() {\n return x;\n }\n\n double getY() {\n return y;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n record Point(int x, int y) {\n }\n\nEnable the **Suggest renaming accessor methods** option to rename `getX()`/`isX()` accessors to `x()` automatically.\n\n\nUse the **If members become more accessible** option to specify what to do when conversion will make members more accessible:\n\n* Choose **Do not suggest conversion** option to not convert when members would become more accessible.\n* Choose **Show conflicts view** option to show the affected members and ask to continue. In batch mode conversion will not be suggested.\n* Choose **Convert silently** option to increase accessibility silently when needed.\n\nUse the **Suppress conversion if class is annotated by** list to exclude classes from conversion when annotated by annotations matching the specified patterns.\n\nThis inspection depends on the Java feature 'Records' which is available since Java 16.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ClassCanBeRecord", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 16", + "index": 185, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantAssertArgument", + "shortDescription": { + "text": "Constant assert argument" + }, + "fullDescription": { + "text": "Reports constant arguments in 'assertTrue()', 'assertFalse()', 'assertNull()', and 'assertNotNull()' calls. Calls to these methods with constant arguments will either always succeed or always fail. Such statements can easily be left over after refactoring and are probably not intended. Example: 'assertNotNull(\"foo\");'", + "markdown": "Reports constant arguments in `assertTrue()`, `assertFalse()`, `assertNull()`, and `assertNotNull()` calls.\n\n\nCalls to these methods with\nconstant arguments will either always succeed or always fail.\nSuch statements can easily be left over after refactoring and are probably not intended.\n\n**Example:**\n\n\n assertNotNull(\"foo\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantAssertArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 128, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RuntimeExec", + "shortDescription": { + "text": "Call to 'Runtime.exec()'" + }, + "fullDescription": { + "text": "Reports calls to 'Runtime.exec()' or any of its variants. Calls to 'Runtime.exec()' are inherently unportable.", + "markdown": "Reports calls to `Runtime.exec()` or any of its variants. Calls to `Runtime.exec()` are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToRuntimeExec", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticInitializerReferencesSubClass", + "shortDescription": { + "text": "Static initializer references subclass" + }, + "fullDescription": { + "text": "Reports classes that refer to their subclasses in static initializers or static fields. Such references can cause JVM-level deadlocks in multithreaded environment, when one thread tries to load the superclass and another thread tries to load the subclass at the same time. Example: 'class Parent {\n static final Child field = new Child();\n }\n class Child extends Parent { }'", + "markdown": "Reports classes that refer to their subclasses in static initializers or static fields.\n\nSuch references can cause JVM-level deadlocks in multithreaded environment, when one thread tries to load the superclass\nand another thread tries to load the subclass at the same time.\n\n**Example:**\n\n\n class Parent {\n static final Child field = new Child();\n }\n class Child extends Parent { }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StaticInitializerReferencesSubClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingDeprecatedAnnotationOnScheduledForRemovalApi", + "shortDescription": { + "text": "Missing '@Deprecated' annotation on scheduled for removal API" + }, + "fullDescription": { + "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' without '@Deprecated'. Example: '@ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }' After the quick-fix is applied the result looks like: '@Deprecated\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }'", + "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` without `@Deprecated`.\n\nExample:\n\n\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n\nAfter the quick-fix is applied the result looks like:\n\n\n @Deprecated\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "MissingDeprecatedAnnotationOnScheduledForRemovalApi", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantDeclaredInAbstractClass", + "shortDescription": { + "text": "Constant declared in 'abstract' class" + }, + "fullDescription": { + "text": "Reports constants ('public static final' fields) declared in abstract classes. Some coding standards require declaring constants in interfaces instead.", + "markdown": "Reports constants (`public static final` fields) declared in abstract classes.\n\nSome coding standards require declaring constants in interfaces instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantDeclaredInAbstractClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SubtractionInCompareTo", + "shortDescription": { + "text": "Subtraction in 'compareTo()'" + }, + "fullDescription": { + "text": "Reports subtraction in 'compareTo()' methods and methods implementing 'java.util.Comparator.compare()'. While it is a common idiom to use the results of integer subtraction as the result of a 'compareTo()' method, this construct may cause subtle and difficult bugs in cases of integer overflow. Comparing the integer values directly and returning '-1', '0', or '1' is a better practice in most cases. Subtraction on floating point values that is immediately cast to integral type is also reported because precision loss is possible due to rounding. The inspection doesn't report when it's statically determined that value ranges are limited, and overflow never occurs. Additionally, subtraction on 'int' numbers greater than or equal to '0' will never overflow. Therefore, this inspection tries not to warn in those cases. Methods that always return zero or greater can be marked with the 'javax.annotation.Nonnegative' annotation or specified in this inspection's options. Example: 'class DoubleHolder implements Comparable {\n double d;\n public int compareTo(DoubleHolder that) {\n return (int)(this.d - that.d);\n }\n }' A no-warning example because 'String.length()' is known to be non-negative: 'class A implements Comparable {\n final String s = \"\";\n public int compareTo(A a) {\n return s.length() - a.s.length();\n }\n }' Use the options to list methods that are safe to use inside a subtraction. Methods are safe when they return an 'int' value that is always greater than or equal to '0'.", + "markdown": "Reports subtraction in `compareTo()` methods and methods implementing `java.util.Comparator.compare()`.\n\n\nWhile it is a common idiom to\nuse the results of integer subtraction as the result of a `compareTo()`\nmethod, this construct may cause subtle and difficult bugs in cases of integer overflow.\nComparing the integer values directly and returning `-1`, `0`, or `1` is a better practice in most cases.\n\n\nSubtraction on floating point values that is immediately cast to integral type is also reported because precision loss is possible due to\nrounding.\n\n\nThe inspection doesn't report when it's statically determined that value ranges are limited, and overflow never occurs.\nAdditionally, subtraction on `int` numbers greater than or equal to `0` will never overflow.\nTherefore, this inspection tries not to warn in those cases.\n\n\nMethods that always return zero or greater can be marked with the\n`javax.annotation.Nonnegative` annotation or specified in this inspection's options.\n\n**Example:**\n\n\n class DoubleHolder implements Comparable {\n double d;\n public int compareTo(DoubleHolder that) {\n return (int)(this.d - that.d);\n }\n }\n\nA no-warning example because `String.length()` is known to be non-negative:\n\n\n class A implements Comparable {\n final String s = \"\";\n public int compareTo(A a) {\n return s.length() - a.s.length();\n }\n }\n\n\nUse the options to list methods that are safe to use inside a subtraction.\nMethods are safe when they return an `int` value that is always greater than or equal to `0`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SubtractionInCompareTo", + "cweIds": [ + 682 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConnectionResource", + "shortDescription": { + "text": "Connection opened but not safely closed" + }, + "fullDescription": { + "text": "Reports Java ME 'javax.microedition.io.Connection' resources that are not opened in front of a 'try' block and closed in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. Example: 'void example() throws IOException {\n Connection c = Connector.open(\"foo\");\n }'", + "markdown": "Reports Java ME `javax.microedition.io.Connection` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n void example() throws IOException {\n Connection c = Connector.open(\"foo\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConnectionOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanVariableAlwaysNegated", + "shortDescription": { + "text": "Boolean variable is always inverted" + }, + "fullDescription": { + "text": "Reports boolean variables or fields which are always negated when their value is used. Example: 'void m() {\n boolean b = true; //boolean variable 'b' is always inverted\n System.out.println(!b);\n }'", + "markdown": "Reports boolean variables or fields which are always negated when their value is used.\n\nExample:\n\n\n void m() {\n boolean b = true; //boolean variable 'b' is always inverted\n System.out.println(!b);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BooleanVariableAlwaysNegated", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsAnnotation", + "shortDescription": { + "text": "Class extends annotation interface" + }, + "fullDescription": { + "text": "Reports classes declared as an implementation or extension of an annotation interface. While it is legal to extend an annotation interface, it is often done by accident, and the result can't be used as an annotation. This inspection depends on the Java feature 'Annotations' which is available since Java 5.", + "markdown": "Reports classes declared as an implementation or extension of an annotation interface.\n\nWhile it is legal to extend an annotation interface, it is often done by accident,\nand the result can't be used as an annotation.\n\nThis inspection depends on the Java feature 'Annotations' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ClassExplicitlyAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "unused", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports classes, methods, or fields that are not used or unreachable from the entry points. An entry point can be a main method, tests, classes from outside the specified scope, classes accessible from 'module-info.java', and so on. It is possible to configure custom entry points by using name patterns or annotations. Example: 'public class Department {\n private Organization myOrganization;\n }' In this example, 'Department' explicitly references 'Organization' but if 'Department' class itself is unused, then inspection will report both classes. The inspection also reports parameters that are not used by their methods and all method implementations and overriders, as well as local variables that are declared but not used. Note: Some unused members may not be reported during in-editor code highlighting. For performance reasons, a non-private member is checked only when its name rarely occurs in the project. To see all results, run the inspection by selecting Code | Inspect Code or Code | Analyze Code | Run Inspection by Name from the main menu. Use the visibility settings below to configure members to be reported. For example, configuring report 'private' methods only means that 'public' methods of 'private' inner class will be reported but 'protected' methods of top level class will be ignored. Use the entry points tab to configure entry points to be considered during the inspection run. You can add entry points manually when inspection results are ready. If your code uses unsupported frameworks, there are several options: If the framework relies on annotations, use the Annotations... button to configure the framework's annotations. If the framework doesn't rely on annotations, try to configure class name patterns that are expected by the framework. This way the annotated code accessible by the framework internals will be treated as used.", + "markdown": "Reports classes, methods, or fields that are not used or unreachable from the entry points.\n\nAn entry point can be a main method, tests, classes from outside the specified scope, classes accessible from\n`module-info.java`, and so on. It is possible to configure custom entry points by using name patterns or annotations.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nIn this example, `Department` explicitly references `Organization` but if `Department` class itself is unused, then inspection will report both classes.\n\n\nThe inspection also reports parameters that are not used by their methods and all method implementations and overriders, as well as local\nvariables that are declared but not used.\n\n\n**Note:** Some unused members may not be reported during in-editor code highlighting. For performance reasons, a non-private member is\nchecked only when its name rarely occurs in the project.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the visibility settings below to configure members to be reported. For example, configuring report `private` methods only means\nthat `public` methods of `private` inner class will be reported but `protected` methods of top level class\nwill be ignored.\n\n\nUse the **entry points** tab to configure entry points to be considered during the inspection run.\n\nYou can add entry points manually when inspection results are ready.\n\nIf your code uses unsupported frameworks, there are several options:\n\n* If the framework relies on annotations, use the **Annotations...** button to configure the framework's annotations.\n* If the framework doesn't rely on annotations, try to configure class name patterns that are expected by the framework.\n\nThis way the annotated code accessible by the framework internals will be treated as used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "unused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedStringCase", + "shortDescription": { + "text": "Mismatched case in 'String' operation" + }, + "fullDescription": { + "text": "Reports 'String' method calls that always return the same value ('-1' or 'false') because a lowercase character is searched in an uppercase-only string or vice versa. Reported methods include 'equals', 'startsWith', 'endsWith', 'contains', 'indexOf', and 'lastIndexOf'. Example: if (columnName.toLowerCase().equals(\"ID\")) {...}\n New in 2019.3", + "markdown": "Reports `String` method calls that always return the same value (`-1` or `false`) because a lowercase character is searched in an uppercase-only string or vice versa.\n\nReported methods include `equals`, `startsWith`, `endsWith`, `contains`,\n`indexOf`, and `lastIndexOf`.\n\n**Example:**\n\n```\n if (columnName.toLowerCase().equals(\"ID\")) {...}\n```\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedStringCase", + "cweIds": [ + 597 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousGetterSetter", + "shortDescription": { + "text": "Suspicious getter/setter" + }, + "fullDescription": { + "text": "Reports getter or setter methods that access a field that is not expected by its name. For example, when 'getY()' returns the 'x' field. Usually, it might be a copy-paste error. Example: 'class Point {\n private int x;\n private int y;\n\n public void setX(int x) { // Warning: setter 'setX()' assigns field 'y'\n this.y = x;\n }\n\n public int getY() { // Warning: getter 'getY()' returns field 'x'\n return x;\n }\n }' Use the checkbox below to report situations when a field in the class has a name that matches a name of a getter or a setter.", + "markdown": "Reports getter or setter methods that access a field that is not expected by its name. For example, when `getY()` returns the `x` field. Usually, it might be a copy-paste error.\n\n**Example:**\n\n class Point {\n private int x;\n private int y;\n\n public void setX(int x) { // Warning: setter 'setX()' assigns field 'y'\n this.y = x;\n }\n\n public int getY() { // Warning: getter 'getY()' returns field 'x'\n return x;\n }\n }\n\n\nUse the checkbox below to report situations when a field in the class has a name that matches a name of a getter or a setter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousGetterSetter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 139, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToNull", + "shortDescription": { + "text": "'null' assignment" + }, + "fullDescription": { + "text": "Reports variables that are assigned to 'null' outside a declaration. The main purpose of 'null' in Java is to denote uninitialized reference variables. In rare cases, assigning a variable explicitly to 'null' is useful to aid garbage collection. However, using 'null' to denote a missing, not specified, or invalid value or a not found element is considered bad practice and may make your code more prone to 'NullPointerExceptions'. Instead, consider defining a sentinel object with the intended semantics or use library types like 'Optional' to denote the absence of a value. Example: 'Integer convert(String s) {\n Integer value;\n try {\n value = Integer.parseInt(s);\n } catch (NumberFormatException e) {\n // Warning: null is used to denote an 'invalid value'\n value = null;\n }\n return value;\n }' Use the Ignore assignments to fields option to ignore assignments to fields.", + "markdown": "Reports variables that are assigned to `null` outside a declaration.\n\nThe main purpose of `null` in Java is to denote uninitialized\nreference variables. In rare cases, assigning a variable explicitly to `null`\nis useful to aid garbage collection. However, using `null` to denote a missing, not specified, or invalid value or a not\nfound element is considered bad practice and may make your code more prone to `NullPointerExceptions`.\nInstead, consider defining a sentinel object with the intended semantics\nor use library types like `Optional` to denote the absence of a value.\n\n**Example:**\n\n\n Integer convert(String s) {\n Integer value;\n try {\n value = Integer.parseInt(s);\n } catch (NumberFormatException e) {\n // Warning: null is used to denote an 'invalid value'\n value = null;\n }\n return value;\n }\n\n\nUse the **Ignore assignments to fields** option to ignore assignments to fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSynchronizedMethodOverridesSynchronizedMethod", + "shortDescription": { + "text": "Unsynchronized method overrides 'synchronized' method" + }, + "fullDescription": { + "text": "Reports non-'synchronized' methods overriding 'synchronized' methods. The overridden method will not be automatically synchronized if the superclass method is declared as 'synchronized'. This may result in unexpected race conditions when using the subclass. Example: 'class Super {\n synchronized void process() {}\n }\n class Sub extends Super {\n // Unsynchronized method 'process()' overrides synchronized method\n void process() {}\n }'", + "markdown": "Reports non-`synchronized` methods overriding `synchronized` methods.\n\n\nThe overridden method will not be automatically synchronized if the superclass method\nis declared as `synchronized`. This may result in unexpected race conditions when using the subclass.\n\n**Example:**\n\n\n class Super {\n synchronized void process() {}\n }\n class Sub extends Super {\n // Unsynchronized method 'process()' overrides synchronized method\n void process() {}\n } \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonSynchronizedMethodOverridesSynchronizedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitCalledOnCondition", + "shortDescription": { + "text": "'wait()' called on 'java.util.concurrent.locks.Condition' object" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' made on a 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'await()' method was intended instead. Example: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.wait();\n }\n }' Good code would look like this: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }'", + "markdown": "Reports calls to `wait()` made on a `java.util.concurrent.locks.Condition` object. This is probably a programming error, and some variant of the `await()` method was intended instead.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.wait();\n }\n }\n\nGood code would look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WaitCalledOnCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadCatch", + "shortDescription": { + "text": "Overly broad 'catch' block" + }, + "fullDescription": { + "text": "Reports 'catch' blocks with parameters that are more generic than the exception thrown by the corresponding 'try' block. Example: 'try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (Exception ex) { // warning: 'catch' of 'Exception' is too broad, masking exceptions 'RuntimeException'\n return defaultFilePath;\n }' After the quick-fix is applied: 'try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (RuntimeException ex) {\n return defaultFilePath;\n }' Configure the inspection: Use the Only warn on RuntimeException, Exception, Error or Throwable option to have this inspection warn only on the most generic exceptions. Use the Ignore exceptions which hide others but are themselves thrown option to ignore any exceptions that hide other exceptions but still may be thrown and thus are technically not overly broad.", + "markdown": "Reports `catch` blocks with parameters that are more generic than the exception thrown by the corresponding `try` block.\n\n**Example:**\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (Exception ex) { // warning: 'catch' of 'Exception' is too broad, masking exceptions 'RuntimeException'\n return defaultFilePath;\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (RuntimeException ex) {\n return defaultFilePath;\n }\n\nConfigure the inspection:\n\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown and thus are technically not overly broad." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyBroadCatchBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedMemberInFinalClass", + "shortDescription": { + "text": "'protected' member in 'final' class" + }, + "fullDescription": { + "text": "Reports 'protected' members in 'final'classes. Since 'final' classes cannot be inherited, marking the method as 'protected' may be confusing. It is better to declare such members as 'private' or package-visible instead. Example: 'record Bar(int a, int b) {\n protected int sum() { \n return a + b;\n }\n}'\n After the quick-fix is applied: 'record Bar(int a, int b) {\n int sum() { \n return a + b;\n }\n}' As shown in the example, a class can be marked as 'final' explicitly or implicitly.", + "markdown": "Reports `protected` members in `final`classes.\n\nSince `final` classes cannot be inherited, marking the method as `protected`\nmay be confusing. It is better to declare such members as `private` or package-visible instead.\n\n**Example:**\n\n record Bar(int a, int b) {\n protected int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProtectedMemberInFinalClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DanglingJavadoc", + "shortDescription": { + "text": "Dangling Javadoc comment" + }, + "fullDescription": { + "text": "Reports Javadoc comments that don't belong to any class, method or field. The Javadoc tool ignores dangling Javadoc comments and doesn't include them in the HTML documentation it generates. Example: 'class A {\n /**\n * Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }' A quick-fix is available to delete such comments completely or convert them into a block comment. After the quick-fix is applied: 'class A {\n /*\n Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }' Use the Ignore file header comment in JavaDoc format option to ignore comments at the beginning of Java files. These are usually copyright messages.", + "markdown": "Reports Javadoc comments that don't belong to any class, method or field. The Javadoc tool ignores dangling Javadoc comments and doesn't include them in the HTML documentation it generates.\n\n**Example:**\n\n\n class A {\n /**\n * Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nA quick-fix is available to delete such comments completely or convert them into a block comment. After the quick-fix is applied:\n\n\n class A {\n /*\n Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nUse the **Ignore file header comment in JavaDoc format** option to ignore comments at the beginning of Java files.\nThese are usually copyright messages." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DanglingJavadoc", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateResource", + "shortDescription": { + "text": "Hibernate resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports calls to the 'openSession()' method if the returned 'org.hibernate.Session' resource is not safely closed. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void doHibernateQuery(SessionFactory factory) {\n Session session = factory.openSession(); //warning\n session.createQuery(\"...\");\n }' Use the following options to configure the inspection: Whether a 'org.hibernate.Session' resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports calls to the `openSession()` method if the returned `org.hibernate.Session` resource is not safely closed.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void doHibernateQuery(SessionFactory factory) {\n Session session = factory.openSession(); //warning\n session.createQuery(\"...\");\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `org.hibernate.Session` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HibernateResourceOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryInitCause", + "shortDescription": { + "text": "Unnecessary call to 'Throwable.initCause()'" + }, + "fullDescription": { + "text": "Reports calls to 'Throwable.initCause()' where an exception constructor also takes a 'Throwable cause' argument. In this case, the 'initCause()' call can be removed and its argument can be added to the call to the exception's constructor. Example: 'try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\");\n wrapper.initCause(ex); // Unnecessary call to 'Throwable.initCause()'\n throw wrapper;\n }' A quick-fix is available to pass the cause argument to the constructor. After the quick-fix is applied: 'try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\", ex);\n throw wrapper;\n }'", + "markdown": "Reports calls to `Throwable.initCause()` where an exception constructor also takes a `Throwable cause` argument.\n\nIn this case, the `initCause()` call can be removed and its argument can be added to the call to the exception's constructor.\n\n**Example:**\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\");\n wrapper.initCause(ex); // Unnecessary call to 'Throwable.initCause()'\n throw wrapper;\n }\n\nA quick-fix is available to pass the cause argument to the constructor. After the quick-fix is applied:\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\", ex);\n throw wrapper;\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryInitCause", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparisonOfShortAndChar", + "shortDescription": { + "text": "Comparison of 'short' and 'char' values" + }, + "fullDescription": { + "text": "Reports equality comparisons between 'short' and 'char' values. Such comparisons may cause subtle bugs because while both values are 2-byte long, 'short' values are signed, and 'char' values are unsigned. Example: 'if (Character.MAX_VALUE == shortValue()) {} //never can be true'", + "markdown": "Reports equality comparisons between `short` and `char` values.\n\nSuch comparisons may cause subtle bugs because while both values are 2-byte long, `short` values are\nsigned, and `char` values are unsigned.\n\n**Example:**\n\n\n if (Character.MAX_VALUE == shortValue()) {} //never can be true\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ComparisonOfShortAndChar", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayCanBeReplacedWithEnumValues", + "shortDescription": { + "text": "Array can be replaced with enum values" + }, + "fullDescription": { + "text": "Reports arrays of enum constants that can be replaced with a call to 'EnumType.values()'. Usually, when updating such an enum, you have to update the array as well. However, if you use 'EnumType.values()' instead, no modifications are required. Example: 'enum States {\n NOT_RUN, IN_PROGRESS, FINISHED;\n }\n \n handleStates(new States[] {NOT_RUN, IN_PROGRESS, FINISHED});' After the quick-fix is applied: 'handleStates(States.values());' New in 2019.1", + "markdown": "Reports arrays of enum constants that can be replaced with a call to `EnumType.values()`.\n\nUsually, when updating such an enum, you have to update the array as well. However, if you use `EnumType.values()`\ninstead, no modifications are required.\n\nExample:\n\n\n enum States {\n NOT_RUN, IN_PROGRESS, FINISHED;\n }\n \n handleStates(new States[] {NOT_RUN, IN_PROGRESS, FINISHED});\n\nAfter the quick-fix is applied:\n\n\n handleStates(States.values());\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ArrayCanBeReplacedWithEnumValues", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitNotifyNotInSynchronizedContext", + "shortDescription": { + "text": "'wait()' or 'notify()' is not in synchronized context" + }, + "fullDescription": { + "text": "Reports calls to 'wait()', 'notify()', and 'notifyAll()' that are not made inside a corresponding synchronized statement or synchronized method. Calling these methods on an object without holding a lock on that object causes 'IllegalMonitorStateException'. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but it's worth looking at. Example: 'class Sync {\n private final Object lock = new Object();\n\n void test() throws InterruptedException {\n synchronized (this) {\n lock.wait(); // 'lock.wait()' is not synchronized on 'lock'\n }\n }\n }'", + "markdown": "Reports calls to `wait()`, `notify()`, and `notifyAll()` that are not made inside a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object causes `IllegalMonitorStateException`.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at.\n\n**Example:**\n\n\n class Sync {\n private final Object lock = new Object();\n\n void test() throws InterruptedException {\n synchronized (this) {\n lock.wait(); // 'lock.wait()' is not synchronized on 'lock'\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WaitNotifyWhileNotSynced", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DollarSignInName", + "shortDescription": { + "text": "Use of '$' in identifier" + }, + "fullDescription": { + "text": "Reports variables, methods, and classes with dollar signs ('$') in their names. While such names are legal Java, their use outside of generated java code is strongly discouraged. Example: 'class SalaryIn${}' Rename quick-fix is suggested only in the editor.", + "markdown": "Reports variables, methods, and classes with dollar signs (`$`) in their names. While such names are legal Java, their use outside of generated java code is strongly discouraged.\n\n**Example:**\n\n\n class SalaryIn${}\n\nRename quick-fix is suggested only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DollarSignInName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DynamicRegexReplaceableByCompiledPattern", + "shortDescription": { + "text": "Dynamic regular expression could be replaced by compiled 'Pattern'" + }, + "fullDescription": { + "text": "Reports calls to the regular expression methods (such as 'matches()' or 'split()') of 'java.lang.String' using constant arguments. Such calls may be profitably replaced with a 'private static final Pattern' field so that the regular expression does not have to be compiled each time it is used. Example: 'text.replaceAll(\"abc\", replacement);' After the quick-fix is applied: 'private static final Pattern ABC = Pattern.compile(\"abc\", Pattern.LITERAL);\n ABC.matcher(text).replaceAll(Matcher.quoteReplacement(replacement));'", + "markdown": "Reports calls to the regular expression methods (such as `matches()` or `split()`) of `java.lang.String` using constant arguments.\n\n\nSuch calls may be profitably replaced with a `private static final Pattern` field\nso that the regular expression does not have to be compiled each time it is used.\n\n**Example:**\n\n\n text.replaceAll(\"abc\", replacement);\n\nAfter the quick-fix is applied:\n\n\n private static final Pattern ABC = Pattern.compile(\"abc\", Pattern.LITERAL);\n ABC.matcher(text).replaceAll(Matcher.quoteReplacement(replacement));\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DynamicRegexReplaceableByCompiledPattern", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyInitializer", + "shortDescription": { + "text": "Empty class initializer" + }, + "fullDescription": { + "text": "Reports empty class initializer blocks.", + "markdown": "Reports empty class initializer blocks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyClassInitializer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBreak", + "shortDescription": { + "text": "Unnecessary 'break' statement" + }, + "fullDescription": { + "text": "Reports any unnecessary 'break' statements. An 'break' statement is unnecessary if no other statements are executed after it has been removed. Example: 'switch (e) {\n case A -> {\n System.out.println(\"A\");\n break; // reports 'break' statement is unnecessary\n }\n default -> {\n System.out.println(\"Default\");\n break; // reports 'break' statement is unnecessary\n }\n }'", + "markdown": "Reports any unnecessary `break` statements.\n\nAn `break` statement is unnecessary if no other statements are executed after it has been removed.\n\n**Example:**\n\n\n switch (e) {\n case A -> {\n System.out.println(\"A\");\n break; // reports 'break' statement is unnecessary\n }\n default -> {\n System.out.println(\"Default\");\n break; // reports 'break' statement is unnecessary\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryBreak", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RawUseOfParameterizedType", + "shortDescription": { + "text": "Raw use of parameterized class" + }, + "fullDescription": { + "text": "Reports generic classes with omitted type parameters. Such raw use of generic types is valid in Java, but it defeats the purpose of type parameters and may mask bugs. This inspection mirrors the 'rawtypes' warning of 'javac'. Examples: '//warning: Raw use of parameterized class 'List'\nList list = new ArrayList();\n//list of strings was created but integer is accepted as well\nlist.add(1);' '//no warning as it's impossible to provide type arguments during array creation\nIntFunction[]> fun = List[]::new;' Configure the inspection: Use the Ignore construction of new objects option to ignore raw types used in object construction. Use the Ignore type casts option to ignore raw types used in type casts. Use the Ignore where a type parameter would not compile option to ignore the cases when a type parameter fails to compile (for example, when creating an array or overriding a library method). Use the Ignore parameter types of overriding methods option to ignore type parameters used in parameters of overridden methods. Use the Ignore when automatic quick-fix is not available option to ignore the cases when a quick-fix is not available. This inspection only reports if the language level of the project or module is 5 or higher. This inspection depends on the Java feature 'Generics' which is available since Java 5.", + "markdown": "Reports generic classes with omitted type parameters. Such *raw* use of generic types is valid in Java, but it defeats the purpose of type parameters and may mask bugs. This inspection mirrors the `rawtypes` warning of `javac`.\n\n**Examples:**\n\n\n //warning: Raw use of parameterized class 'List'\n List list = new ArrayList();\n //list of strings was created but integer is accepted as well\n list.add(1);\n\n\n //no warning as it's impossible to provide type arguments during array creation\n IntFunction[]> fun = List[]::new;\n\nConfigure the inspection:\n\n* Use the **Ignore construction of new objects** option to ignore raw types used in object construction.\n* Use the **Ignore type casts** option to ignore raw types used in type casts.\n* Use the **Ignore where a type parameter would not compile** option to ignore the cases when a type parameter fails to compile (for example, when creating an array or overriding a library method).\n* Use the **Ignore parameter types of overriding methods** option to ignore type parameters used in parameters of overridden methods.\n* Use the **Ignore when automatic quick-fix is not available** option to ignore the cases when a quick-fix is not available.\n\nThis inspection only reports if the language level of the project or module is 5 or higher.\n\nThis inspection depends on the Java feature 'Generics' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "rawtypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicConstructorInNonPublicClass", + "shortDescription": { + "text": "'public' constructor in non-public class" + }, + "fullDescription": { + "text": "Reports 'public' constructors in non-'public' classes. Usually, there is no reason for creating a 'public' constructor in a class with a lower access level. Please note, however, that this inspection changes the behavior of some reflection calls. In particular, 'Class.getConstructor()' won't be able to find the updated constructor ('Class.getDeclaredConstructor()' should be used instead). Do not use the inspection if your code or code of some used frameworks relies on constructor accessibility via 'getConstructor()'. Example: 'class House {\n public House() {}\n }' After the quick-fix is applied: 'class House {\n House() {}\n }'", + "markdown": "Reports `public` constructors in non-`public` classes.\n\nUsually, there is no reason for creating a `public` constructor in a class with a lower access level.\nPlease note, however, that this inspection changes the behavior of some reflection calls. In particular,\n`Class.getConstructor()` won't be able to find the updated constructor\n(`Class.getDeclaredConstructor()` should be used instead). Do not use the inspection if your code\nor code of some used frameworks relies on constructor accessibility via `getConstructor()`.\n\n**Example:**\n\n\n class House {\n public House() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class House {\n House() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicConstructorInNonPublicClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedInnerClass", + "shortDescription": { + "text": "Protected nested class" + }, + "fullDescription": { + "text": "Reports 'protected' nested classes. Example: 'public class Outer {\n protected static class Nested {} // warning\n protected class Inner {} // warning\n protected enum Mode {} // warning depends on the setting\n protected interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore 'protected' inner enums option to ignore 'protected' inner enums. Use the Ignore 'protected' inner interfaces option to ignore 'protected' inner interfaces.", + "markdown": "Reports `protected` nested classes.\n\n**Example:**\n\n\n public class Outer {\n protected static class Nested {} // warning\n protected class Inner {} // warning\n protected enum Mode {} // warning depends on the setting\n protected interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'protected' inner enums** option to ignore `protected` inner enums.\n* Use the **Ignore 'protected' inner interfaces** option to ignore `protected` inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProtectedInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedStaticUsage", + "shortDescription": { + "text": "Unqualified static access" + }, + "fullDescription": { + "text": "Reports usage of static members that is not qualified with the class name. This is legal if the static member is in the same class, but may be confusing. Example: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }' After the quick-fix is applied: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }' Use the inspection settings to toggle the reporting for the following items: static fields access 'void bar() { System.out.println(x); }' calls to static methods 'void bar() { foo(); }' 'static void baz() { foo(); }' You can also configure the inspection to only report static member usage from a non-static context. In the above example, 'static void baz() { foo(); }' will not be reported.", + "markdown": "Reports usage of static members that is not qualified with the class name.\n\n\nThis is legal if the static member is in\nthe same class, but may be confusing.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nUse the inspection settings to toggle the reporting for the following items:\n\n*\n static fields access \n\n `void bar() { System.out.println(x); }`\n\n*\n calls to static methods \n\n `void bar() { foo(); }` \n\n `static void baz() { foo(); }`\n\n\nYou can also configure the inspection to only report static member usage from a non-static context.\nIn the above example, `static void baz() { foo(); }` will not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnqualifiedStaticUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticGuardedByInstance", + "shortDescription": { + "text": "Static member guarded by instance field or this" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations on 'static' fields or methods in which the guard is either a non-static field or 'this'. Guarding a static element with a non-static element may result in excessive concurrency, multiple threads may be able to access the guarded field simultaneously by locking in different object contexts. Example: 'private ReadWriteLock lock = new ReentrantReadWriteLock();\n\n @GuardedBy(\"lock\")\n public static void bar() {\n // ...\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations on `static` fields or methods in which the guard is either a non-static field or `this`.\n\nGuarding a static element with a non-static element may result in\nexcessive concurrency, multiple threads may be able to access the guarded field simultaneously by locking in different object contexts.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock();\n\n @GuardedBy(\"lock\")\n public static void bar() {\n // ...\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticGuardedByInstance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExternalizableWithoutPublicNoArgConstructor", + "shortDescription": { + "text": "'Externalizable' class without 'public' no-arg constructor" + }, + "fullDescription": { + "text": "Reports 'Externalizable' classes without a public no-argument constructor. When an 'Externalizable' object is reconstructed, an instance is created using the public no-arg constructor before the 'readExternal' method called. If a public no-arg constructor is not available, a 'java.io.InvalidClassException' will be thrown at runtime.", + "markdown": "Reports `Externalizable` classes without a public no-argument constructor.\n\nWhen an `Externalizable` object is reconstructed, an instance is created using the public\nno-arg constructor before the `readExternal` method called. If a public\nno-arg constructor is not available, a `java.io.InvalidClassException` will be\nthrown at runtime." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ExternalizableWithoutPublicNoArgConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualArrayCopy", + "shortDescription": { + "text": "Manual array copy" + }, + "fullDescription": { + "text": "Reports manual copying of array contents that can be replaced with a call to 'System.arraycopy()'. Example: 'for (int i = 0; i < array.length; i++) {\n newArray[i] = array[i];\n }' After the quick-fix is applied: 'System.arraycopy(array, 0, newArray, 0, array.length);'", + "markdown": "Reports manual copying of array contents that can be replaced with a call to `System.arraycopy()`.\n\n**Example:**\n\n\n for (int i = 0; i < array.length; i++) {\n newArray[i] = array[i];\n }\n\nAfter the quick-fix is applied:\n\n\n System.arraycopy(array, 0, newArray, 0, array.length);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ManualArrayCopy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticPseudoFunctionalStyleMethod", + "shortDescription": { + "text": "Guava pseudo-functional call can be converted to Stream API call" + }, + "fullDescription": { + "text": "Reports usages of Guava pseudo-functional code when 'Java Stream API' is available. Though 'Guava Iterable API' provides functionality similar to 'Java Streams API', it's slightly different and may miss some features. Especially, primitive-specialized stream variants like 'IntStream' are more performant than generic variants. Example: 'List transformedIterable = Iterables.transform(someList, someTransformFunction);//warning: Pseudo functional style code' After the quick-fix is applied: 'List transformedIterable = someList.stream().map(someTransformFunction).collect(Collectors.toList());' Note: Code semantics can be changed; for example, Guava's 'Iterable.transform' produces a lazy-evaluated iterable, but the replacement is eager-evaluated. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports usages of Guava pseudo-functional code when `Java Stream API` is available.\n\nThough `Guava Iterable API` provides functionality similar to `Java Streams API`, it's slightly different and\nmay miss some features.\nEspecially, primitive-specialized stream variants like `IntStream` are more performant than generic variants.\n\n**Example:**\n\n\n List transformedIterable = Iterables.transform(someList, someTransformFunction);//warning: Pseudo functional style code\n\nAfter the quick-fix is applied:\n\n List transformedIterable = someList.stream().map(someTransformFunction).collect(Collectors.toList());\n\n\n**Note:** Code semantics can be changed; for example, Guava's `Iterable.transform` produces a lazy-evaluated iterable,\nbut the replacement is eager-evaluated.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticPseudoFunctionalStyleMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ControlFlowStatementWithoutBraces", + "shortDescription": { + "text": "Control flow statement without braces" + }, + "fullDescription": { + "text": "Reports any 'if', 'while', 'do', or 'for' statements without braces. Some code styles, e.g. the Google Java Style guide, require braces for all control statements. When adding further statements to control statements without braces, it is important not to forget adding braces. When commenting out a line of code, it is also necessary to be more careful when not using braces, to not inadvertently make the next statement part of the control flow statement. Always using braces makes inserting or commenting out a line of code safer. It's likely the goto fail vulnerability would not have happened, if an always use braces code style was used. Control statements with braces make the control flow easier to see, without relying on, possibly incorrect, indentation. Example: 'class Strange {\n void x(boolean one, boolean two) {\n if(one)\n if(two)\n foo();\n else\n bar();\n }\n\n void foo() {}\n void bar() {}\n }' The quick-fix wraps the statement body with braces: 'class Strange {\n void x(boolean one, boolean two) {\n if(one) {\n if(two) {\n foo();\n } else {\n bar();\n }\n }\n }\n\n void foo() {}\n void bar() {}\n }'", + "markdown": "Reports any `if`, `while`, `do`, or `for` statements without braces. Some code styles, e.g. the [Google Java Style guide](https://google.github.io/styleguide/javaguide.html), require braces for all control statements.\n\n\nWhen adding further statements to control statements without braces, it is important not to forget adding braces.\nWhen commenting out a line of code, it is also necessary to be more careful when not using braces,\nto not inadvertently make the next statement part of the control flow statement.\nAlways using braces makes inserting or commenting out a line of code safer.\n\n\nIt's likely the [goto fail vulnerability](https://www.imperialviolet.org/2014/02/22/applebug.html) would not have happened,\nif an always use braces code style was used.\nControl statements with braces make the control flow easier to see, without relying on, possibly incorrect, indentation.\n\nExample:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one)\n if(two)\n foo();\n else\n bar();\n }\n\n void foo() {}\n void bar() {}\n }\n\nThe quick-fix wraps the statement body with braces:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one) {\n if(two) {\n foo();\n } else {\n bar();\n }\n }\n }\n\n void foo() {}\n void bar() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ControlFlowStatementWithoutBraces", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledEquals", + "shortDescription": { + "text": "'equal()' instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports declarations of 'equal()' with a single parameter. Normally, this is a typo and 'equals()' is actually intended. A quick-fix is suggested to rename the method to 'equals'. Example: 'class Main {\n public boolean equal(Object obj) {\n return true;\n }\n }' After the quick-fix is applied: 'class Main {\n public boolean equals(Object obj) {\n return true;\n }\n }'", + "markdown": "Reports declarations of `equal()` with a single parameter. Normally, this is a typo and `equals()` is actually intended.\n\nA quick-fix is suggested to rename the method to `equals`.\n\n**Example:**\n\n\n class Main {\n public boolean equal(Object obj) {\n return true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public boolean equals(Object obj) {\n return true;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MisspelledEquals", + "cweIds": [ + 697 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LengthOneStringInIndexOf", + "shortDescription": { + "text": "Single character string argument in 'String.indexOf()' call" + }, + "fullDescription": { + "text": "Reports single character strings being used as an argument in 'String.indexOf()' and 'String.lastIndexOf()' calls. A quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement. Example: 'return s.indexOf(\"x\");' After the quick-fix is applied: 'return s.indexOf('x');'", + "markdown": "Reports single character strings being used as an argument in `String.indexOf()` and `String.lastIndexOf()` calls.\n\nA quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n return s.indexOf(\"x\");\n\nAfter the quick-fix is applied:\n\n\n return s.indexOf('x');\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SingleCharacterStringConcatenation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldInEnum", + "shortDescription": { + "text": "Non-final field in 'enum'" + }, + "fullDescription": { + "text": "Reports non-final fields in enumeration types. Non-final fields introduce global mutable state, which is generally considered undesirable. Example: 'enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public String str;\n\n Enum(String str) {\n this.str = str;\n }\n }' After the quick-fix is applied: 'enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public final String str;\n\n Enum(String str) {\n this.str = str;\n }\n }' Use the `Ignore fields that cannot be made 'final'` option to only warn on fields that can be made final using the quick-fix.", + "markdown": "Reports non-final fields in enumeration types. Non-final fields introduce global mutable state, which is generally considered undesirable.\n\n**Example:**\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public final String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nUse the \\`Ignore fields that cannot be made 'final'\\` option to only warn on fields that can be made final using the quick-fix." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalFieldInEnum", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialFunctionalExpressionUsage", + "shortDescription": { + "text": "Trivial usage of functional expression" + }, + "fullDescription": { + "text": "Reports functional interface methods calls that are directly invoked on the definition of the lambda, method reference, or anonymous class. Such method calls can be replaced with the body of the functional interface implementation. Example: 'boolean contains(List names, String name) {\n return ((Predicate)x -> {\n return names.contains(x);\n }).test(name);\n }' When the quick-fix is applied, the method call changes to: 'boolean contains(List names, String name) {\n return names.contains(name);\n }'", + "markdown": "Reports functional interface methods calls that are directly invoked on the definition of the lambda, method reference, or anonymous class. Such method calls can be replaced with the body of the functional interface implementation.\n\n**Example:**\n\n\n boolean contains(List names, String name) {\n return ((Predicate)x -> {\n return names.contains(x);\n }).test(name);\n }\n\nWhen the quick-fix is applied, the method call changes to:\n\n\n boolean contains(List names, String name) {\n return names.contains(name);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TrivialFunctionalExpressionUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumClass", + "shortDescription": { + "text": "Enumerated class" + }, + "fullDescription": { + "text": "Reports enum classes. Such statements are not supported in Java 1.4 and earlier JVM.", + "markdown": "Reports **enum** classes. Such statements are not supported in Java 1.4 and earlier JVM." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EnumClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousHasLambdaAlternative", + "shortDescription": { + "text": "Anonymous type has shorter lambda alternative" + }, + "fullDescription": { + "text": "Reports anonymous classes which could be transformed to a constructor or a factory method call with a lambda expression argument. The following classes are reported by this inspection: Anonymous classes extending 'ThreadLocal' which have an 'initialValue()' method (can be replaced with 'ThreadLocal.withInitial') Anonymous classes extending 'Thread' which have a 'run()' method (can be replaced with 'new Thread(Runnable)' Example: 'new Thread() {\n @Override\n public void run() {\n System.out.println(\"Hello from thread!\");\n }\n }.start();' After the quick-fix is applied: 'new Thread(() -> {\n System.out.println(\"Hello from thread!\");\n }).start();' This inspection depends on the Java feature 'ThreadLocal.withInitial()' which is available since Java 8.", + "markdown": "Reports anonymous classes which could be transformed to a constructor or a factory method call with a lambda expression argument.\n\nThe following classes are reported by this inspection:\n\n* Anonymous classes extending `ThreadLocal` which have an `initialValue()` method (can be replaced with `ThreadLocal.withInitial`)\n* Anonymous classes extending `Thread` which have a `run()` method (can be replaced with `new Thread(Runnable)`\n\nExample:\n\n\n new Thread() {\n @Override\n public void run() {\n System.out.println(\"Hello from thread!\");\n }\n }.start();\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n System.out.println(\"Hello from thread!\");\n }).start();\n\nThis inspection depends on the Java feature 'ThreadLocal.withInitial()' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousHasLambdaAlternative", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsThread", + "shortDescription": { + "text": "Class directly extends 'Thread'" + }, + "fullDescription": { + "text": "Reports classes that directly extend 'java.lang.Thread'. It is usually recommended to prefer composition over inheritance to create more reusable code that is easier to modify later. Example: 'class MainThread extends Thread {\n }'", + "markdown": "Reports classes that directly extend `java.lang.Thread`. It is usually recommended to prefer composition over inheritance to create more reusable code that is easier to modify later.\n\n**Example:**\n\n\n class MainThread extends Thread {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassExplicitlyExtendsThread", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyOptionalCallChains", + "shortDescription": { + "text": "Optional call chain can be simplified" + }, + "fullDescription": { + "text": "Reports Optional call chains that can be simplified. Here are several examples of possible simplifications: 'optional.map(x -> true).orElse(false)' → 'optional.isPresent()' 'optional.map(x -> Optional.of(x.trim())).orElseGet(Optional::empty)' → 'optional.map(String::trim)' 'optional.map(x -> (String)x).orElse(null)' → '(String) optional.orElse(null)' 'Optional.ofNullable(optional.orElse(null))' → 'optional' 'val = optional.orElse(null); val != null ? val : defaultExpr' → 'optional.orElse(defaultExpr)' 'val = optional.orElse(null); if(val != null) expr(val)' → 'optional.ifPresent(val -> expr(val))' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2017.2", + "markdown": "Reports **Optional** call chains that can be simplified. Here are several examples of possible simplifications:\n\n* `optional.map(x -> true).orElse(false)` → `optional.isPresent()`\n* `optional.map(x -> Optional.of(x.trim())).orElseGet(Optional::empty)` → `optional.map(String::trim)`\n* `optional.map(x -> (String)x).orElse(null)` → `(String) optional.orElse(null)`\n* `Optional.ofNullable(optional.orElse(null))` → `optional`\n* `val = optional.orElse(null); val != null ? val : defaultExpr ` → `optional.orElse(defaultExpr)`\n* `val = optional.orElse(null); if(val != null) expr(val) ` → `optional.ifPresent(val -> expr(val))`\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifyOptionalCallChains", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RandomDoubleForRandomInteger", + "shortDescription": { + "text": "Using 'Random.nextDouble()' to get random integer" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Random.nextDouble()' that are used to create a positive integer number by multiplying the call by a factor and casting to an integer. For generating a random positive integer in a range, 'java.util.Random.nextInt(int)' is simpler and more efficient. Example: 'int getRandomInt() {\n return (int) ((new Random()).nextDouble() * SIZE);\n }'\n After the quick-fix is applied: 'int getRandomInt() {\n return (new Random()).nextInt(SIZE);\n }'", + "markdown": "Reports calls to `java.util.Random.nextDouble()` that are used to create a positive integer number by multiplying the call by a factor and casting to an integer.\n\n\nFor generating a random positive integer in a range,\n`java.util.Random.nextInt(int)` is simpler and more efficient.\n\n**Example:**\n\n\n int getRandomInt() {\n return (int) ((new Random()).nextDouble() * SIZE);\n }\n \nAfter the quick-fix is applied:\n\n\n int getRandomInt() {\n return (new Random()).nextInt(SIZE);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UsingRandomNextDoubleForRandomInteger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousArrayCast", + "shortDescription": { + "text": "Suspicious array cast" + }, + "fullDescription": { + "text": "Reports suspicious array casts. An array cast is considered suspicious when it casts to a more specific array type. Such a cast is legal at compile time but may fail with a 'ClassCastException' at runtime. Example: 'Number[] numbers = new Number[]{1L, 2L, 4L};\n Long[] longs = (Long[])numbers;'", + "markdown": "Reports suspicious array casts. An array cast is considered suspicious when it casts to a more specific array type. Such a cast is legal at compile time but may fail with a `ClassCastException` at runtime.\n\n**Example:**\n\n\n Number[] numbers = new Number[]{1L, 2L, 4L};\n Long[] longs = (Long[])numbers;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousArrayCast", + "cweIds": [ + 704 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ZeroLengthArrayInitialization", + "shortDescription": { + "text": "Zero-length array allocation" + }, + "fullDescription": { + "text": "Reports allocations of arrays with known lengths of zero. Since array lengths in Java are non-modifiable, it is almost always possible to share zero-length arrays, rather than repeatedly allocate new ones. Such sharing may provide useful optimizations in the program runtime or footprint. Note that the inspection does not report zero-length arrays allocated as static final fields, since those arrays are assumed to be used for implementing array sharing.", + "markdown": "Reports allocations of arrays with known lengths of zero.\n\n\nSince array lengths in Java are non-modifiable, it is almost always possible to share zero-length arrays, rather than repeatedly\nallocate new ones. Such sharing may provide useful optimizations in the program runtime or footprint.\n\n\nNote that the inspection does not report zero-length arrays allocated as static final fields,\nsince those arrays are assumed to be used for implementing array sharing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ZeroLengthArrayAllocation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DivideByZero", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports division by zero or remainder by zero. Such expressions will produce an 'Infinity', '-Infinity' or 'NaN' result for doubles or floats, and will throw an 'ArithmeticException' for integers. When the expression has a 'NaN' result, the fix suggests replacing the division expression with the 'NaN' constant.", + "markdown": "Reports division by zero or remainder by zero. Such expressions will produce an `Infinity`, `-Infinity` or `NaN` result for doubles or floats, and will throw an `ArithmeticException` for integers.\n\nWhen the expression has a `NaN` result, the fix suggests replacing the division expression with the `NaN` constant." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "divzero", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingSerialAnnotation", + "shortDescription": { + "text": "'@Serial' annotation could be used" + }, + "fullDescription": { + "text": "Reports methods and fields in the 'Serializable' and 'Externalizable' classes that are suitable to be annotated with the 'java.io.Serial' annotation. The quick-fix adds the annotation. Example: 'class Main implements Serializable {\n private static final long serialVersionUID = 7874493593505141603L;\n\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' After the quick-fix is applied: 'class Main implements Serializable {\n @Serial\n private static final long serialVersionUID = 7874493593505141603L;\n\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' Example: 'class Main implements Externalizable {\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }' After the quick-fix is applied: 'class Main implements Externalizable {\n @Serial\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }' For more information about all possible cases, refer the documentation for 'java.io.Serial'. This inspection depends on the Java feature '@Serial annotation' which is available since Java 14. New in 2020.3", + "markdown": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are suitable to be annotated with the `java.io.Serial` annotation. The quick-fix adds the annotation.\n\n**Example:**\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = 7874493593505141603L;\n\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n @Serial\n private static final long serialVersionUID = 7874493593505141603L;\n\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n**Example:**\n\n\n class Main implements Externalizable {\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Externalizable {\n @Serial\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nFor more information about all possible cases, refer the documentation for `java.io.Serial`.\n\nThis inspection depends on the Java feature '@Serial annotation' which is available since Java 14.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MissingSerialAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationMissingWhitespace", + "shortDescription": { + "text": "Whitespace may be missing in string concatenation" + }, + "fullDescription": { + "text": "Reports string concatenations with missing whitespaces, that is where the left-hand side ends with a Unicode letter or digit and the right-hand side starts with a Unicode letter or digit. Example: 'String sql = \"SELECT column\" +\n \"FROM table\";' Use the Ignore concatenations with variable strings option to only report when both the left and right side of the concatenation are literals.", + "markdown": "Reports string concatenations with missing whitespaces, that is where the left-hand side ends with a Unicode letter or digit and the right-hand side starts with a Unicode letter or digit.\n\n**Example:**\n\n\n String sql = \"SELECT column\" +\n \"FROM table\";\n\n\nUse the **Ignore concatenations with variable strings** option to only report\nwhen both the left and right side of the concatenation are literals." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenationMissingWhitespace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StandardVariableNames", + "shortDescription": { + "text": "Standard variable names" + }, + "fullDescription": { + "text": "Reports variables with 'standard' names that do not correspond to their types. Such names may be confusing. There are the following standard names for specific types: i, j, k, m, n - 'int' f - 'float' d - 'double' b - 'byte' c, ch - 'char' l - 'long' s, str - 'String' Rename quick-fix is suggested only in the editor. Use the option to ignore parameter names which are identical to the parameter name from a direct super method.", + "markdown": "Reports variables with 'standard' names that do not correspond to their types. Such names may be confusing. There are the following standard names for specific types:\n\n* i, j, k, m, n - `int`\n* f - `float`\n* d - `double`\n* b - `byte`\n* c, ch - `char`\n* l - `long`\n* s, str - `String`\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to ignore parameter names which are identical to the parameter name from a direct super method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StandardVariableNames", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeconstructionCanBeUsed", + "shortDescription": { + "text": "Record pattern can be used" + }, + "fullDescription": { + "text": "Reports patterns that can be replaced with record patterns. Example: 'record Point(int x, int y) {}\n\n static void printSum(Object obj) {\n if (obj instanceof Point p) {\n int x = p.x();\n int y = p.y();\n System.out.println(x + y);\n }\n }' After the quick-fix is applied: 'record Point(int x, int y) {}\n\n static void printSum(Object obj) {\n if (obj instanceof Point(int x, int y)) {\n System.out.println(x + y);\n }\n }' This inspection depends on the Java feature 'Pattern guards and record patterns' which is available since Java 21. New in 2023.1", + "markdown": "Reports patterns that can be replaced with record patterns.\n\nExample:\n\n\n record Point(int x, int y) {}\n\n static void printSum(Object obj) {\n if (obj instanceof Point p) {\n int x = p.x();\n int y = p.y();\n System.out.println(x + y);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n record Point(int x, int y) {}\n\n static void printSum(Object obj) {\n if (obj instanceof Point(int x, int y)) {\n System.out.println(x + y);\n }\n }\n\nThis inspection depends on the Java feature 'Pattern guards and record patterns' which is available since Java 21.\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DeconstructionCanBeUsed", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 21", + "index": 192, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionFromCatchWhichDoesntWrap", + "shortDescription": { + "text": "'throw' inside 'catch' block which ignores the caught exception" + }, + "fullDescription": { + "text": "Reports exceptions that are thrown from inside 'catch' blocks but do not \"wrap\" the caught exception. When an exception is thrown in response to an exception, wrapping the initial exception prevents losing valuable context information, such as stack frames and line numbers. Example: '...\n catch (IOException e) {\n closeAllConnections();\n throw new ConnectException(\"Connection problem.\"); // warning: 'throw' inside 'catch' block ignores the caught exception 'e'\n }' Configure the inspection: Use the Ignore if result of exception method call is used option to indicate whether the inspection should ignore exceptions whose argument is the result of a method call on the original exception, such as 'getMessage()'. Use the Ignore if thrown exception cannot wrap an exception option to ignore 'throw' statements that throw exceptions without a constructor that accepts a 'Throwable' cause.", + "markdown": "Reports exceptions that are thrown from inside `catch` blocks but do not \"wrap\" the caught exception.\n\nWhen an exception is thrown in response to an exception, wrapping the initial exception prevents losing valuable context information,\nsuch as stack frames and line numbers.\n\n**Example:**\n\n\n ...\n catch (IOException e) {\n closeAllConnections();\n throw new ConnectException(\"Connection problem.\"); // warning: 'throw' inside 'catch' block ignores the caught exception 'e'\n }\n\nConfigure the inspection:\n\n* Use the **Ignore if result of exception method call is used** option to indicate whether the inspection should ignore exceptions whose argument is the result of a method call on the original exception, such as `getMessage()`.\n* Use the **Ignore if thrown exception cannot wrap an exception** option to ignore `throw` statements that throw exceptions without a constructor that accepts a `Throwable` cause." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowInsideCatchBlockWhichIgnoresCaughtException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOnlyUsedFromInnerClass", + "shortDescription": { + "text": "Private method only used from inner class" + }, + "fullDescription": { + "text": "Reports 'private' methods which are only called from an inner class of the class containing the method. Such methods can be safely moved into that inner class. Example: 'public class Outer {\n public static void main(String[] args) {\n new Inner().run(args[0]);\n }\n\n static class Inner {\n void run(String arg) {\n // Method isEmpty() is used from Inner class only\n // consider moving it to the Inner class\n if (!isEmpty(arg)) {\n System.out.println(\"Argument is supplied\");\n }\n }\n }\n\n private static boolean isEmpty(String s) {\n return s != null && s.trim().isEmpty();\n }\n}' Use the first checkbox below to ignore 'private' methods which are called from an anonymous or local class. Use the third checkbox to only report 'static' methods.", + "markdown": "Reports `private` methods which are only called from an inner class of the class containing the method. Such methods can be safely moved into that inner class.\n\nExample:\n\n\n public class Outer {\n public static void main(String[] args) {\n new Inner().run(args[0]);\n }\n\n static class Inner {\n void run(String arg) {\n // Method isEmpty() is used from Inner class only\n // consider moving it to the Inner class\n if (!isEmpty(arg)) {\n System.out.println(\"Argument is supplied\");\n }\n }\n }\n\n private static boolean isEmpty(String s) {\n return s != null && s.trim().isEmpty();\n }\n }\n\n\nUse the first checkbox below to ignore `private`\nmethods which are called from an anonymous or local class.\n\n\nUse the third checkbox to only report `static` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodOnlyUsedFromInnerClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparisonToNaN", + "shortDescription": { + "text": "Comparison to 'Double.NaN' or 'Float.NaN'" + }, + "fullDescription": { + "text": "Reports any comparisons to 'Double.NaN' or 'Float.NaN'. Such comparisons are never meaningful, as NaN is not equal to anything, including itself. Use the 'Double.isNaN()' or 'Float.isNaN()' methods instead. Example: 'if (x == Double.NaN) {...}' After the quick-fix is applied: 'if (Double.isNaN(x)) {...}'", + "markdown": "Reports any comparisons to `Double.NaN` or `Float.NaN`. Such comparisons are never meaningful, as NaN is not equal to anything, including itself. Use the `Double.isNaN()` or `Float.isNaN()` methods instead.\n\n**Example:**\n\n\n if (x == Double.NaN) {...}\n\nAfter the quick-fix is applied:\n\n\n if (Double.isNaN(x)) {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ComparisonToNaN", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultiCatchCanBeSplit", + "shortDescription": { + "text": "Multi-catch can be split into separate catch blocks" + }, + "fullDescription": { + "text": "Reports multi-'catch' sections and suggests splitting them into separate 'catch' blocks. Example: 'try {\n int i = getIndex();\n } catch (NullPointerException|IndexOutOfBoundsException e) {\n e.printStackTrace();\n }' After the quick-fix is applied: 'try {\n int i = getIndex();\n } catch (NullPointerException e) {\n e.printStackTrace();\n } catch (IndexOutOfBoundsException e) {\n e.printStackTrace();\n }' This inspection depends on the Java feature 'Multi-catches' which is available since Java 7.", + "markdown": "Reports multi-`catch` sections and suggests splitting them into separate `catch` blocks.\n\nExample:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException|IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException e) {\n e.printStackTrace();\n } catch (IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\nThis inspection depends on the Java feature 'Multi-catches' which is available since Java 7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MultiCatchCanBeSplit", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ResultSetIndexZero", + "shortDescription": { + "text": "Use of index 0 in JDBC ResultSet" + }, + "fullDescription": { + "text": "Reports attempts to access column 0 of 'java.sql.ResultSet' or 'java.sql.PreparedStatement'. For historical reasons, columns of 'java.sql.ResultSet' and 'java.sql.PreparedStatement' are numbered starting with 1, rather than with 0, and accessing column 0 is a common error in JDBC programming. Example: 'String getName(ResultSet rs) {\n return rs.getString(0);\n }'", + "markdown": "Reports attempts to access column 0 of `java.sql.ResultSet` or `java.sql.PreparedStatement`. For historical reasons, columns of `java.sql.ResultSet` and `java.sql.PreparedStatement` are numbered starting with **1** , rather than with **0** , and accessing column 0 is a common error in JDBC programming.\n\n**Example:**\n\n\n String getName(ResultSet rs) {\n return rs.getString(0);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfIndexZeroInJDBCResultSet", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionCoveredByFurtherCondition", + "shortDescription": { + "text": "Condition is covered by further condition" + }, + "fullDescription": { + "text": "Reports conditions that become redundant as they are completely covered by a subsequent condition. For example, in the 'value != -1 && value > 0' condition, the first part is redundant: if it's false, then the second part is also false. Or in a condition like 'obj != null && obj instanceof String', the null-check is redundant as 'instanceof' operator implies non-nullity. New in 2018.3", + "markdown": "Reports conditions that become redundant as they are completely covered by a subsequent condition.\n\nFor example, in the `value != -1 && value > 0` condition, the first part is redundant:\nif it's false, then the second part is also false.\nOr in a condition like `obj != null && obj instanceof String`,\nthe null-check is redundant as `instanceof` operator implies non-nullity.\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionCoveredByFurtherCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternVariableHidesField", + "shortDescription": { + "text": "Pattern variable hides field" + }, + "fullDescription": { + "text": "Reports pattern variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the pattern variable when using the identically named field is intended. A quick-fix is suggested to rename the variable. Example: 'class Pointless {\n Point p = new Point();\n\n public void test(Object a) {\n if (a instanceof Point p) {\n System.out.print(\"a is a point (\" + p.x + \", \" + p.y + ')');\n } else {\n System.out.print(\"p is a point (\" + p.x + \", \" + p.y + ')');\n }\n }\n }' New in 2022.2", + "markdown": "Reports pattern variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the pattern variable when using the identically named field is intended.\n\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n class Pointless {\n Point p = new Point();\n\n public void test(Object a) {\n if (a instanceof Point p) {\n System.out.print(\"a is a point (\" + p.x + \", \" + p.y + ')');\n } else {\n System.out.print(\"p is a point (\" + p.x + \", \" + p.y + ')');\n }\n }\n }\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PatternVariableHidesField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JoinDeclarationAndAssignmentJava", + "shortDescription": { + "text": "Assignment can be joined with declaration" + }, + "fullDescription": { + "text": "Reports variable assignments that can be joined with a variable declaration. Example: 'int x;\n x = 1;' The quick-fix converts the assignment into an initializer: 'int x = 1;' New in 2018.3", + "markdown": "Reports variable assignments that can be joined with a variable declaration.\n\nExample:\n\n\n int x;\n x = 1;\n\nThe quick-fix converts the assignment into an initializer:\n\n\n int x = 1;\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JoinDeclarationAndAssignmentJava", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassVariableHidesOuterClassVariable", + "shortDescription": { + "text": "Inner class field hides outer class field" + }, + "fullDescription": { + "text": "Reports inner class fields named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the field from the inner class when using the identically named field of a surrounding class is intended. A quick-fix is suggested to rename the inner class field. Example: 'class Outer {\n private String name;\n\n class Inner {\n private String name;\n }\n }' Use the option to choose whether this inspection should report all name clashes, or only clashes with fields that are visible from the inner class.", + "markdown": "Reports inner class fields named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the field from the inner class when using the identically named field of a surrounding class is intended.\n\nA quick-fix is suggested to rename the inner class field.\n\n**Example:**\n\n\n class Outer {\n private String name;\n\n class Inner {\n private String name;\n }\n }\n\n\nUse the option to choose whether this inspection should report all name clashes,\nor only clashes with fields that are visible from the inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InnerClassFieldHidesOuterClassField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MISSORTED_IMPORTS", + "shortDescription": { + "text": "Missorted imports" + }, + "fullDescription": { + "text": "Reports 'import' statements which are not arranged according to the current code style (see Settings|Editor|Code Style). Example: 'import java.util.List;\n import java.util.ArrayList;\n\n public class Example {\n List list = new ArrayList();\n }' After the \"Optimize Imports\" quick fix is applied: 'import java.util.ArrayList;\n import java.util.List;\n\n public class Example {\n List list = new ArrayList();\n }'", + "markdown": "Reports `import` statements which are not arranged according to the current code style (see Settings\\|Editor\\|Code Style).\n\n**Example:**\n\n\n import java.util.List;\n import java.util.ArrayList;\n\n public class Example {\n List list = new ArrayList();\n }\n\nAfter the \"Optimize Imports\" quick fix is applied:\n\n\n import java.util.ArrayList;\n import java.util.List;\n\n public class Example {\n List list = new ArrayList();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MISSORTED_IMPORTS", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonThreadSafeLazyInitialization", + "shortDescription": { + "text": "Unsafe lazy initialization of 'static' field" + }, + "fullDescription": { + "text": "Reports 'static' variables that are lazily initialized in a non-thread-safe manner. Lazy initialization of 'static' variables should be done with an appropriate synchronization construct to prevent different threads from performing conflicting initialization. When applicable, a quick-fix, which introduces the lazy initialization holder class idiom, is suggested. This idiom makes use of the fact that the JVM guarantees that a class will not be initialized until it is used. Example: 'class X {\n private static List list;\n\n public List getList() {\n if (list == null) {\n list = List.of(\"one\", \"two\", \"tree\");\n }\n return list;\n }\n }' After the quick-fix is applied: 'class X {\n private static final class ListHolder {\n static final List list = List.of(\"one\", \"two\", \"tree\");\n }\n\n public List getList() {\n return ListHolder.list;\n }\n }'", + "markdown": "Reports `static` variables that are lazily initialized in a non-thread-safe manner.\n\nLazy initialization of `static` variables should be done with an appropriate synchronization construct\nto prevent different threads from performing conflicting initialization.\n\nWhen applicable, a quick-fix, which introduces the\n[lazy initialization holder class idiom](https://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom), is suggested.\nThis idiom makes use of the fact that the JVM guarantees that a class will not be initialized until it is used.\n\n**Example:**\n\n\n class X {\n private static List list;\n\n public List getList() {\n if (list == null) {\n list = List.of(\"one\", \"two\", \"tree\");\n }\n return list;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n private static final class ListHolder {\n static final List list = List.of(\"one\", \"two\", \"tree\");\n }\n\n public List getList() {\n return ListHolder.list;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonThreadSafeLazyInitialization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryModifier", + "shortDescription": { + "text": "Unnecessary modifier" + }, + "fullDescription": { + "text": "Reports redundant modifiers and suggests to remove them. The resulting code will be shorter, but the behaviour and meaning will remain the same. Example 1: '// all code is implicitly strictfp under Java 17 and higher\n strictfp class X {\n\n // inner enums are implicitly static\n static enum Inner {\n A, B, C\n }\n\n // inner records are implicitly static\n static record R() {\n }\n }' Example 2: 'final record R() {\n // all records are implicitly final\n }' Example 3: '// all interfaces are implicitly abstract\n abstract interface Printer {\n\n // all interface members are implicitly public\n public int size();\n\n // all inner classes of interfaces are implicitly static\n static class Inner {}\n }'", + "markdown": "Reports redundant modifiers and suggests to remove them. The resulting code will be shorter, but the behaviour and meaning will remain the same.\n\n**Example 1:**\n\n\n // all code is implicitly strictfp under Java 17 and higher\n strictfp class X {\n\n // inner enums are implicitly static\n static enum Inner {\n A, B, C\n }\n\n // inner records are implicitly static\n static record R() {\n }\n }\n\n**Example 2:**\n\n\n final record R() {\n // all records are implicitly final\n }\n\n**Example 3:**\n\n\n // all interfaces are implicitly abstract\n abstract interface Printer {\n\n // all interface members are implicitly public\n public int size();\n\n // all inner classes of interfaces are implicitly static\n static class Inner {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalCanBePushedInsideExpression", + "shortDescription": { + "text": "Conditional can be pushed inside branch expression" + }, + "fullDescription": { + "text": "Reports conditional expressions with 'then' and else branches that are similar enough so that the expression can be moved inside. This action shortens the code. Example: 'double g(int a, int b) {\n return a == b ? Math.cos(0) : Math.cos(1);\n }' After the quick-fix is applied: 'double g(int a, int b) {\n return Math.cos(a == b ? 0 : 1);\n }' New in 2017.2", + "markdown": "Reports conditional expressions with `then` and else branches that are similar enough so that the expression can be moved inside. This action shortens the code.\n\nExample:\n\n\n double g(int a, int b) {\n return a == b ? Math.cos(0) : Math.cos(1);\n }\n\nAfter the quick-fix is applied:\n\n\n double g(int a, int b) {\n return Math.cos(a == b ? 0 : 1);\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConditionalCanBePushedInsideExpression", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneInNonCloneableClass", + "shortDescription": { + "text": "'clone()' method in non-Cloneable class" + }, + "fullDescription": { + "text": "Reports classes that override the 'clone()' method but don't implement the 'Cloneable' interface. This usually represents a programming error. Use the Only warn on 'public' clone methods option to ignore methods that aren't 'public'. For classes designed to be inherited, you may choose to override 'clone()' and declare it as 'protected' without implementing the 'Cloneable' interface and decide whether to implement the 'Cloneable' interface in subclasses.", + "markdown": "Reports classes that override the `clone()` method but don't implement the `Cloneable` interface. This usually represents a programming error.\n\n\nUse the **Only warn on 'public' clone methods** option to ignore methods that aren't `public`.\n\nFor classes designed to be inherited, you may choose to override `clone()` and declare it as `protected`\nwithout implementing the `Cloneable` interface and decide whether to implement the `Cloneable` interface in subclasses." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CloneInNonCloneableClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8ListReplaceAll", + "shortDescription": { + "text": "Loop can be replaced with 'List.replaceAll()'" + }, + "fullDescription": { + "text": "Reports loops which can be collapsed into a single 'List.replaceAll()' call. Example: 'for (int i = 0; i < strings.size(); i++) {\n String str = strings.get(i).toLowerCase();\n strings.set(i, str);\n }' After the quick-fix is applied: 'strings.replaceAll(String::toLowerCase);' This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8. New in 2022.1", + "markdown": "Reports loops which can be collapsed into a single `List.replaceAll()` call.\n\n**Example:**\n\n\n for (int i = 0; i < strings.size(); i++) {\n String str = strings.get(i).toLowerCase();\n strings.set(i, str);\n }\n\nAfter the quick-fix is applied:\n\n\n strings.replaceAll(String::toLowerCase);\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java8ListReplaceAll", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalLegacyMethod", + "shortDescription": { + "text": "'BigDecimal' legacy method called" + }, + "fullDescription": { + "text": "Reports calls to 'BigDecimal.divide()' or 'BigDecimal.setScale()' that use integer constants to specify the rounding mode. Since JDK 1.5, consider using methods that take the 'RoundingMode' 'enum' parameter instead. Example: 'new BigDecimal(\"42\").setScale(2, BigDecimal.ROUND_FLOOR);' After the quick-fix is applied: 'new BigDecimal(\"42\").setScale(2, RoundingMode.FLOOR);'", + "markdown": "Reports calls to `BigDecimal.divide()` or `BigDecimal.setScale()` that use integer constants to specify the rounding mode. Since JDK 1.5, consider using methods that take the `RoundingMode` `enum` parameter instead.\n\n**Example:**\n\n new BigDecimal(\"42\").setScale(2, BigDecimal.ROUND_FLOOR);\n\nAfter the quick-fix is applied:\n\n new BigDecimal(\"42\").setScale(2, RoundingMode.FLOOR);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BigDecimalLegacyMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingPackageInfo", + "shortDescription": { + "text": "Missing 'package-info.java'" + }, + "fullDescription": { + "text": "Reports packages that contain classes but do not contain the 'package-info.java' or 'package.html' files and are, thus, missing the package documentation. The quick-fix creates an initial 'package-info.java' file.", + "markdown": "Reports packages that contain classes but do not contain the `package-info.java` or `package.html` files and are, thus, missing the package documentation.\n\nThe quick-fix creates an initial `package-info.java` file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingPackageInfo", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryConstructor", + "shortDescription": { + "text": "Redundant no-arg constructor" + }, + "fullDescription": { + "text": "Reports unnecessary constructors. A constructor is unnecessary if it is the only constructor of a class, has no parameters, has the same access modifier as its containing class, and does not perform any initialization except explicitly or implicitly calling the superclass constructor without arguments. Such a constructor can be safely removed as it will be generated by the compiler even if not specified. Example: 'public class Foo {\n public Foo() {}\n }' After the quick-fix is applied: 'public class Foo {}' Use the inspection settings to ignore unnecessary constructors that have an annotation.", + "markdown": "Reports unnecessary constructors.\n\n\nA constructor is unnecessary if it is the only constructor of a class, has no parameters,\nhas the same access modifier as its containing class,\nand does not perform any initialization except explicitly or implicitly calling the superclass constructor without arguments.\nSuch a constructor can be safely removed as it will be generated by the compiler even if not specified.\n\n**Example:**\n\n\n public class Foo {\n public Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {}\n\n\nUse the inspection settings to ignore unnecessary constructors that have an annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantNoArgConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferField", + "shortDescription": { + "text": "'StringBuilder' field" + }, + "fullDescription": { + "text": "Reports fields of type 'java.lang.StringBuffer' or 'java.lang.StringBuilder'. Such fields can grow without limit and are often the cause of memory leaks. Example: 'public class Example {\n private StringBuilder builder = new StringBuilder();\n\n }'", + "markdown": "Reports fields of type `java.lang.StringBuffer` or `java.lang.StringBuilder`. Such fields can grow without limit and are often the cause of memory leaks.\n\n**Example:**\n\n\n public class Example {\n private StringBuilder builder = new StringBuilder();\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringBufferField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNameSameAsAncestorName", + "shortDescription": { + "text": "Class name same as ancestor name" + }, + "fullDescription": { + "text": "Reports classes that have the same name as one of their superclasses, while their fully qualified names remain different. Such class names may be very confusing. Example: 'package util;\n abstract class Iterable implements java.lang.Iterable {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports classes that have the same name as one of their superclasses, while their fully qualified names remain different. Such class names may be very confusing.\n\n**Example:**\n\n\n package util;\n abstract class Iterable implements java.lang.Iterable {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassNameSameAsAncestorName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 82, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantMethodOverride", + "shortDescription": { + "text": "Method is identical to its super method" + }, + "fullDescription": { + "text": "Reports methods that are identical to their super methods. Such methods have the same signature as their super method and either have an identical body or only their body consists only of a call to the super method. These methods are redundant and can be removed. Use the first checkbox below to run the inspection for the methods that override library methods. Checking library methods may slow down the inspection. Use the second checkbox below to ignore methods that only delegate calls to their super methods.", + "markdown": "Reports methods that are identical to their super methods. Such methods have the same signature as their super method and either have an identical body or only their body consists only of a call to the super method. These methods are redundant and can be removed.\n\n\nUse the first checkbox below to run the inspection for the methods that override library methods.\nChecking library methods may slow down the inspection.\n\n\nUse the second checkbox below to ignore methods that only delegate calls to their super methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantMethodOverride", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatementWithLabel", + "shortDescription": { + "text": "'continue' statement with label" + }, + "fullDescription": { + "text": "Reports 'continue' statements with labels. Labeled 'continue' statements complicate refactoring and can be confusing. Example: 'void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) continue outer;\n handleChar(ch);\n }\n }\n }'", + "markdown": "Reports `continue` statements with labels.\n\nLabeled `continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) continue outer;\n handleChar(ch);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueStatementWithLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableBooleanExpression", + "shortDescription": { + "text": "Simplifiable boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions that can be simplified. Example: 'void f(boolean foo, boolean bar) {\n boolean b = !(foo ^ bar);\n }' After the quick-fix is applied: 'void f(boolean foo, boolean bar) {\n boolean b = foo == bar;\n }' Example: 'void f(boolean foo, boolean bar) {\n boolean b = (foo && bar) || !foo;\n }' After the quick-fix is applied: 'void f(boolean foo, boolean bar) {\n boolean b = !foo || bar;\n }'", + "markdown": "Reports boolean expressions that can be simplified.\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !(foo ^ bar);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = foo == bar;\n }\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = (foo && bar) || !foo;\n }\n \nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !foo || bar;\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifiableBooleanExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaExistingMethodCanBeUsed", + "shortDescription": { + "text": "Copy of existing static method body" + }, + "fullDescription": { + "text": "Reports fragments of Java code which are identical to the existing static methods suggesting to reuse these static methods. Reusing existing methods makes code shorter and more readable. Example: 'static List readFileAndTrim(Path path) throws IOException {\n List lines = Files.readAllLines(path);\n return lines.stream().map(String::trim).toList();\n }\n \n static List readFileAndTrim(String path) throws IOException {\n Path p = Path.of(path);\n List lines = Files.readAllLines(p);\n return lines.stream().map(String::trim).toList();\n }' Here, the second method is quite similar to the first one, and the first one can be reused in its implementation. After the quick-fix is applied, the result will look like this: 'static List readFileAndTrim(Path path) throws IOException {\n List lines = Files.readAllLines(path);\n return lines.stream().map(String::trim).toList();\n }\n\n static List readFileAndTrim(String path) throws IOException {\n Path p = Path.of(path);\n return readFileAndTrim(p);\n }' New in 2024.1", + "markdown": "Reports fragments of Java code which are identical to the existing static methods suggesting to reuse these static methods. Reusing existing methods makes code shorter and more readable.\n\nExample:\n\n\n static List readFileAndTrim(Path path) throws IOException {\n List lines = Files.readAllLines(path);\n return lines.stream().map(String::trim).toList();\n }\n \n static List readFileAndTrim(String path) throws IOException {\n Path p = Path.of(path);\n List lines = Files.readAllLines(p);\n return lines.stream().map(String::trim).toList();\n }\n\nHere, the second method is quite similar to the first one, and the first one can be reused in its implementation. After the quick-fix is applied, the result will look like this:\n\n\n static List readFileAndTrim(Path path) throws IOException {\n List lines = Files.readAllLines(path);\n return lines.stream().map(String::trim).toList();\n }\n\n static List readFileAndTrim(String path) throws IOException {\n Path p = Path.of(path);\n return readFileAndTrim(p);\n }\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JavaExistingMethodCanBeUsed", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SignalWithoutCorrespondingAwait", + "shortDescription": { + "text": "'signal()' without corresponding 'await()'" + }, + "fullDescription": { + "text": "Reports calls to 'Condition.signal()' or 'Condition.signalAll()' for which no call to a corresponding 'Condition.await()' can be found. Only calls that target fields of the current class are reported by this inspection. Example: 'class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n isEmpty.signal(); // warning: Call to 'signal()' without corresponding 'await()'\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n // isEmpty.await();\n // ...\n }\n }'", + "markdown": "Reports calls to `Condition.signal()` or `Condition.signalAll()` for which no call to a corresponding `Condition.await()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n isEmpty.signal(); // warning: Call to 'signal()' without corresponding 'await()'\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n // isEmpty.await();\n // ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SignalWithoutCorrespondingAwait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FoldExpressionIntoStream", + "shortDescription": { + "text": "Expression can be folded into Stream chain" + }, + "fullDescription": { + "text": "Reports expressions with a repeating pattern which could be replaced with Stream API or 'String.join()'. Example: 'boolean allStartWith(String a, String b, String c, String d, String prefix) {\n return a.startsWith(prefix) && b.startsWith(prefix) && c.startsWith(prefix) && d.startsWith(prefix);\n }' After the quick-fix is applied: 'boolean foo(String a, String b, String c, String d, String prefix) {\n return Stream.of(a, b, c, d).allMatch(s -> s.startsWith(prefix));\n }' Example: 'String joinAll(String a, String b, String c, String d) {\n return a + \",\" + b + \",\" + c + \",\" + d;\n }' After the quick-fix is applied: 'String joinAll(String a, String b, String c, String d) {\n return String.join(\",\", a, b, c, d);\n }' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2018.2", + "markdown": "Reports expressions with a repeating pattern which could be replaced with *Stream API* or `String.join()`.\n\nExample:\n\n\n boolean allStartWith(String a, String b, String c, String d, String prefix) {\n return a.startsWith(prefix) && b.startsWith(prefix) && c.startsWith(prefix) && d.startsWith(prefix);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(String a, String b, String c, String d, String prefix) {\n return Stream.of(a, b, c, d).allMatch(s -> s.startsWith(prefix));\n }\n\nExample:\n\n\n String joinAll(String a, String b, String c, String d) {\n return a + \",\" + b + \",\" + c + \",\" + d;\n }\n\nAfter the quick-fix is applied:\n\n\n String joinAll(String a, String b, String c, String d) {\n return String.join(\",\", a, b, c, d);\n }\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FoldExpressionIntoStream", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableDeserializableClassInSecureContext", + "shortDescription": { + "text": "Serializable class in secure context" + }, + "fullDescription": { + "text": "Reports classes that may be serialized or deserialized. A class may be serialized if it supports the 'Serializable' interface, and its 'readObject()' and 'writeObject()' methods are not defined to always throw an exception. Serializable classes may be dangerous in code intended for secure use. Example: 'class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n}' After the quick-fix is applied: 'class DeserializableClass implements Serializable {\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n\n private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {\n throw new java.io.NotSerializableException(\"DeserializableClass\");\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Note that it still may be more secure to add 'readObject()' and 'writeObject()' methods which always throw an exception, instead of ignoring those classes. Whether to ignore serializable anonymous classes.", + "markdown": "Reports classes that may be serialized or deserialized.\n\n\nA class may be serialized if it supports the `Serializable` interface,\nand its `readObject()` and `writeObject()` methods are not defined to always\nthrow an exception. Serializable classes may be dangerous in code intended for secure use.\n\n**Example:**\n\n\n class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class DeserializableClass implements Serializable {\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n\n private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {\n throw new java.io.NotSerializableException(\"DeserializableClass\");\n }\n }\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization. Note that it still may be more secure to add `readObject()` and `writeObject()` methods which always throw an exception, instead of ignoring those classes.\n* Whether to ignore serializable anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableDeserializableClassInSecureContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaModuleNaming", + "shortDescription": { + "text": "Java module name contradicts the convention" + }, + "fullDescription": { + "text": "Reports cases when a module name contradicts Java Platform Module System recommendations. One of the recommendations is to avoid using digits at the end of module names. Example: 'module foo1.bar2 {}'", + "markdown": "Reports cases when a module name contradicts Java Platform Module System recommendations.\n\nOne of the [recommendations](http://mail.openjdk.org/pipermail/jpms-spec-experts/2017-March/000659.html)\nis to avoid using digits at the end of module names.\n\n**Example:**\n\n\n module foo1.bar2 {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavaModuleNaming", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnaryPlus", + "shortDescription": { + "text": "Unary plus" + }, + "fullDescription": { + "text": "Reports usages of the '+' unary operator. The unary plus is usually a null operation, and its presence might represent a coding error. For example, in a combination with the increment operator (like in '+++') or with the equal operator (like in '=+'). Example: 'void unaryPlus(int i) {\n int x = + +i;\n }' The following quick fixes are suggested: Remove '+' operators before the 'i' variable: 'void unaryPlus(int i) {\n int x = i;\n }' Replace '+' operators with the prefix increment operator: 'void unaryPlus(int i) {\n int x = ++i;\n }' Use the checkbox below to report unary pluses that are used together with a binary or another unary expression. It means the inspection will not report situations when a unary plus expression is used in array initializer expressions or as a method argument.", + "markdown": "Reports usages of the `+` unary operator. The unary plus is usually a null operation, and its presence might represent a coding error. For example, in a combination with the increment operator (like in `+++`) or with the equal operator (like in `=+`).\n\n**Example:**\n\n\n void unaryPlus(int i) {\n int x = + +i;\n }\n\nThe following quick fixes are suggested:\n\n* Remove `+` operators before the `i` variable:\n\n\n void unaryPlus(int i) {\n int x = i;\n }\n\n* Replace `+` operators with the prefix increment operator:\n\n\n void unaryPlus(int i) {\n int x = ++i;\n }\n\n\nUse the checkbox below to report unary pluses that are used together with a binary or another unary expression.\nIt means the inspection will not report situations when a unary plus expression is used in array\ninitializer expressions or as a method argument." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnaryPlus", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstructorCount", + "shortDescription": { + "text": "Class with too many constructors" + }, + "fullDescription": { + "text": "Reports classes whose number of constructors exceeds the specified maximum. Classes with too many constructors are prone to initialization errors, and often modeling such a class as multiple subclasses is preferable. Configure the inspection: Use the Constructor count limit field to specify the maximum allowed number of constructors in a class. Use the Ignore deprecated constructors option to avoid adding deprecated constructors to the total count.", + "markdown": "Reports classes whose number of constructors exceeds the specified maximum.\n\nClasses with too many constructors are prone to initialization errors, and often modeling such a class as multiple subclasses is preferable.\n\nConfigure the inspection:\n\n* Use the **Constructor count limit** field to specify the maximum allowed number of constructors in a class.\n* Use the **Ignore deprecated constructors** option to avoid adding deprecated constructors to the total count." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyConstructors", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DisjointPackage", + "shortDescription": { + "text": "Package with disjoint dependency graph" + }, + "fullDescription": { + "text": "Reports packages whose classes can be separated into mutually independent subsets. Such disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages whose classes can be separated into mutually independent subsets.\n\nSuch disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DisjointPackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncrementDecrementUsedAsExpression", + "shortDescription": { + "text": "Result of '++' or '--' used" + }, + "fullDescription": { + "text": "Reports increment or decrement expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing. The quick-fix extracts the increment or decrement operation to a separate expression statement. Example: 'int i = 10;\n while (i-- > 0) {\n System.out.println(i);\n }' After the quick-fix is applied: 'int i = 10;\n while (i > 0) {\n i--;\n System.out.println(i);\n }\n i--;'", + "markdown": "Reports increment or decrement expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\nThe quick-fix extracts the increment or decrement operation to a separate expression statement.\n\n**Example:**\n\n\n int i = 10;\n while (i-- > 0) {\n System.out.println(i);\n }\n\nAfter the quick-fix is applied:\n\n\n int i = 10;\n while (i > 0) {\n i--;\n System.out.println(i);\n }\n i--;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ValueOfIncrementOrDecrementUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverloadsParentMethod", + "shortDescription": { + "text": "Possibly unintended overload of method from superclass" + }, + "fullDescription": { + "text": "Reports instance methods with the same name and the same number of parameters as a method in a superclass, but where at least one of the parameters is of a different incompatible type. In this case, the method in a subclass will be overloading the method from the superclass instead of overriding it. If it is unintended, it may result in latent bugs. Example: 'public class Foo {\n void foo(int x) {}\n }\n\n public class Bar extends Foo {\n void foo(Number x) {} // Method 'foo()' overloads a compatible method of a superclass,\n // when overriding might have been intended\n }' Use the option to choose whether the inspection should also report cases where parameter types are not compatible.", + "markdown": "Reports instance methods with the same name and the same number of parameters as a method in a superclass, but where at least one of the parameters is of a different incompatible type.\n\n\nIn this case, the method in a subclass will be overloading the method from the superclass\ninstead of overriding it. If it is unintended, it may result in latent bugs.\n\n**Example:**\n\n\n public class Foo {\n void foo(int x) {}\n }\n\n public class Bar extends Foo {\n void foo(Number x) {} // Method 'foo()' overloads a compatible method of a superclass,\n // when overriding might have been intended\n }\n\n\nUse the option to choose whether the inspection should also report cases where parameter types are not compatible." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodOverloadsMethodOfSuperclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodMayBeSynchronized", + "shortDescription": { + "text": "Method with single 'synchronized' block can be replaced with 'synchronized' method" + }, + "fullDescription": { + "text": "Reports methods whose body contains a single 'synchronized' statement. A lock expression for this 'synchronized' statement must be equal to 'this' for instance methods or '[ClassName].class' for static methods. To improve readability of such methods, you can remove the 'synchronized' wrapper and mark the method as 'synchronized'. Example: 'public int generateInt(int x) {\n synchronized (this) {\n return 1;\n }\n }' After the quick-fix is applied: 'public synchronized int generateInt(int x) {\n return 1;\n }'", + "markdown": "Reports methods whose body contains a single `synchronized` statement. A lock expression for this `synchronized` statement must be equal to `this` for instance methods or `[ClassName].class` for static methods.\n\n\nTo improve readability of such methods,\nyou can remove the `synchronized` wrapper and mark the method as `synchronized`.\n\n**Example:**\n\n\n public int generateInt(int x) {\n synchronized (this) {\n return 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public synchronized int generateInt(int x) {\n return 1;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodMayBeSynchronized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UpperCaseFieldNameNotConstant", + "shortDescription": { + "text": "Non-constant field with upper-case name" + }, + "fullDescription": { + "text": "Reports non-'static' non-'final' fields whose names are all in upper case. Such fields may cause confusion by breaking a common naming convention and are often used by mistake. Example: 'public static int THE_ANSWER = 42; //a warning here: final modifier is missing' A quick-fix that renames such fields is available only in the editor.", + "markdown": "Reports non-`static` non-`final` fields whose names are all in upper case.\n\nSuch fields may cause confusion by breaking a common naming convention and\nare often used by mistake.\n\n**Example:**\n\n\n public static int THE_ANSWER = 42; //a warning here: final modifier is missing\n\nA quick-fix that renames such fields is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonConstantFieldWithUpperCaseName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2streamapi", + "shortDescription": { + "text": "Loop can be collapsed with Stream API" + }, + "fullDescription": { + "text": "Reports loops which can be replaced with stream API calls using lambda expressions. Such a replacement changes the style from imperative to more functional and makes the code more compact. Example: 'boolean check(List data) {\n for (String e : data) {\n String trimmed = e.trim();\n if (!trimmed.startsWith(\"xyz\")) {\n return false;\n }\n }\n return true;\n }' After the quick-fix is applied: 'boolean check(List data) {\n return data.stream().map(String::trim).allMatch(trimmed -> trimmed.startsWith(\"xyz\"));\n }' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports loops which can be replaced with stream API calls using lambda expressions.\n\nSuch a replacement changes the style from imperative to more functional and makes the code more compact.\n\nExample:\n\n\n boolean check(List data) {\n for (String e : data) {\n String trimmed = e.trim();\n if (!trimmed.startsWith(\"xyz\")) {\n return false;\n }\n }\n return true;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean check(List data) {\n return data.stream().map(String::trim).allMatch(trimmed -> trimmed.startsWith(\"xyz\"));\n }\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "Convert2streamapi", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialPersistentFieldsWithWrongSignature", + "shortDescription": { + "text": "'serialPersistentFields' field not declared 'private static final ObjectStreamField[]'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose 'serialPersistentFields' field is not declared as 'private static final ObjectStreamField[]'. If a 'serialPersistentFields' field is not declared with those modifiers, the serialization behavior will be as if the field was not declared at all. Example: 'class List implements Serializable {\n private List next;\n\n ObjectStreamField[] serialPersistentFields = {new ObjectStreamField(\"next\", List.class)};\n\n }'", + "markdown": "Reports `Serializable` classes whose `serialPersistentFields` field is not declared as `private static final ObjectStreamField[]`.\n\n\nIf a `serialPersistentFields` field is not declared with those modifiers,\nthe serialization behavior will be as if the field was not declared at all.\n\n**Example:**\n\n\n class List implements Serializable {\n private List next;\n\n ObjectStreamField[] serialPersistentFields = {new ObjectStreamField(\"next\", List.class)};\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerialPersistentFieldsWithWrongSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorResultComparison", + "shortDescription": { + "text": "Suspicious usage of compare method" + }, + "fullDescription": { + "text": "Reports comparisons of the result of 'Comparator.compare()' or 'Comparable.compareTo()' calls with non-zero constants. By contract, these methods can return any integer (not just -1, 0 or 1), so comparing against particular numbers is bad practice. Some widely used comparison methods (e.g. 'String.compareTo()') actually return values outside the [-1..1] range, and such a comparison may cause incorrect program behavior. Example: 'void validate(String s1, String s2) {\n // Comparing to 1 is incorrect\n if (s1.compareTo(s2) == 1) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }' After the quick-fix is applied: 'void validate(String s1, String s2) {\n if (s1.compareTo(s2) > 0) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }' New in 2017.2", + "markdown": "Reports comparisons of the result of `Comparator.compare()` or `Comparable.compareTo()` calls with non-zero constants. By contract, these methods can return any integer (not just -1, 0 or 1), so comparing against particular numbers is bad practice. Some widely used comparison methods (e.g. `String.compareTo()`) actually return values outside the \\[-1..1\\] range, and such a comparison may cause incorrect program behavior.\n\nExample:\n\n\n void validate(String s1, String s2) {\n // Comparing to 1 is incorrect\n if (s1.compareTo(s2) == 1) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void validate(String s1, String s2) {\n if (s1.compareTo(s2) > 0) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ComparatorResultComparison", + "cweIds": [ + 253 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListIndexOfReplaceableByContains", + "shortDescription": { + "text": "'List.indexOf()' expression can be replaced with 'contains()'" + }, + "fullDescription": { + "text": "Reports any 'List.indexOf()' expressions that can be replaced with the 'List.contains()' method. Example: 'boolean hasEmptyString(List list) {\n // Warning: can be simplified\n return list.indexOf(\"\") >= 0;\n }' The provided quick-fix replaces the 'indexOf' call with the 'contains' call: 'boolean hasEmptyString(List list) {\n // Quick-fix is applied\n return list.contains(\"\");\n }'", + "markdown": "Reports any `List.indexOf()` expressions that can be replaced with the `List.contains()` method.\n\nExample:\n\n\n boolean hasEmptyString(List list) {\n // Warning: can be simplified\n return list.indexOf(\"\") >= 0;\n }\n\nThe provided quick-fix replaces the `indexOf` call with the `contains` call:\n\n\n boolean hasEmptyString(List list) {\n // Quick-fix is applied\n return list.contains(\"\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ListIndexOfReplaceableByContains", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonStrictComparisonCanBeEquality", + "shortDescription": { + "text": "Non-strict inequality '>=' or '<=' can be replaced with '=='" + }, + "fullDescription": { + "text": "Reports inequality conditions that, according to data flow analysis, can be satisfied only for a single operand value. Such conditions could be replaced with equality conditions to make the code clearer. Example: 'if (x >= 10) {\n ...\n if (x <= 10) { // can be replaced with 'x == 10'\n }\n }' New in 2022.2", + "markdown": "Reports inequality conditions that, according to data flow analysis, can be satisfied only for a single operand value. Such conditions could be replaced with equality conditions to make the code clearer.\n\nExample:\n\n\n if (x >= 10) {\n ...\n if (x <= 10) { // can be replaced with 'x == 10'\n }\n }\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NonStrictComparisonCanBeEquality", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports any instance of unnecessary parentheses. Parentheses are considered unnecessary if the evaluation order of an expression remains unchanged after you remove the parentheses. Example: 'int n = 3 + (9 * 8);' After quick-fix is applied: 'int n = 3 + 9 * 8;' Configure the inspection: Use the Ignore clarifying parentheses option to ignore parentheses that help clarify a binary expression. Parentheses are clarifying if the parenthesized expression is an 'instanceof' expression that is a part of a larger expression or has a different operator than the parent expression. Use the Ignore parentheses around the condition of conditional expressions option to ignore any parentheses around the condition of conditional expressions. Some coding standards specify that all such conditions must be surrounded by parentheses. Use the Ignore parentheses around single no formal type lambda parameter option to ignore parentheses around a single lambda parameter within a lambda expression.", + "markdown": "Reports any instance of unnecessary parentheses.\n\nParentheses are considered unnecessary if the evaluation order of an expression remains\nunchanged after you remove the parentheses.\n\nExample:\n\n\n int n = 3 + (9 * 8);\n\nAfter quick-fix is applied:\n\n\n int n = 3 + 9 * 8;\n\nConfigure the inspection:\n\n* Use the **Ignore clarifying parentheses** option to ignore parentheses that help clarify a binary expression. Parentheses are clarifying if the parenthesized expression is an `instanceof` expression that is a part of a larger expression or has a different operator than the parent expression.\n* Use the **Ignore parentheses around the condition of conditional expressions** option to ignore any parentheses around the condition of conditional expressions. Some coding standards specify that all such conditions must be surrounded by parentheses.\n* Use the **Ignore parentheses around single no formal type lambda parameter** option to ignore parentheses around a single lambda parameter within a lambda expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessaryParentheses", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousToArrayCall", + "shortDescription": { + "text": "Suspicious 'Collection.toArray()' call" + }, + "fullDescription": { + "text": "Reports suspicious calls to 'Collection.toArray()'. The following types of calls are considered suspicious: when the type of the array argument is not the same as the array type to which the result is casted. when the type of the array argument does not match the type parameter in the collection declaration. Example: 'void m1(List list) {\n Number[] ns = (Number[]) list.toArray(new String[0]);\n}\n\nvoid m2(List list) {\n Number[] ns = list.toArray(new String[0]);\n}'", + "markdown": "Reports suspicious calls to `Collection.toArray()`.\n\nThe following types of calls are considered suspicious:\n\n* when the type of the array argument is not the same as the array type to which the result is casted.\n* when the type of the array argument does not match the type parameter in the collection declaration.\n\n**Example:**\n\n\n void m1(List list) {\n Number[] ns = (Number[]) list.toArray(new String[0]);\n }\n\n void m2(List list) {\n Number[] ns = list.toArray(new String[0]);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousToArrayCall", + "cweIds": [ + 704 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringToUpperWithoutLocale", + "shortDescription": { + "text": "Call to 'String.toUpperCase()' or 'toLowerCase()' without locale" + }, + "fullDescription": { + "text": "Reports 'toUpperCase()' or 'toLowerCase()' calls on 'String' objects that do not specify a 'java.util.Locale'. In these cases the default system locale is used, which can cause problems in an internationalized environment. For example the code '\"i\".toUpperCase().equals(\"I\")' returns 'false' in the Turkish and Azerbaijani locales, where the dotted and dotless 'i' are separate letters. Calling 'toUpperCase()' on an English string containing an 'i', when running in a Turkish locale, will return incorrect results. Alternatively, when dealing with strings that should be treated as locale-independent, like HTML tags, this can lead to errors.", + "markdown": "Reports `toUpperCase()` or `toLowerCase()` calls on `String` objects that do not specify a `java.util.Locale`. In these cases the default system locale is used, which can cause problems in an internationalized environment.\n\n\nFor example the code `\"i\".toUpperCase().equals(\"I\")` returns `false` in the Turkish and Azerbaijani locales, where\nthe dotted and dotless 'i' are separate letters. Calling `toUpperCase()` on an English string containing an 'i', when running\nin a Turkish locale, will return incorrect results. Alternatively, when dealing with strings that should be treated as locale-independent,\nlike HTML tags, this can lead to errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringToUpperCaseOrToLowerCaseWithoutLocale", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitToImplicitClassMigration", + "shortDescription": { + "text": "Explicit class declaration can be converted into implicitly declared class" + }, + "fullDescription": { + "text": "Reports ordinary classes, which can be converted into implicitly declared classes Example: 'public class Sample {\n public static void main(String[] args) {\n System.out.println(\"Hello, world!\");\n }\n }' After the quick-fix is applied: 'public static void main(String[] args) {\n System.out.println(\"Hello, world!\");\n }' This inspection depends on the Java feature 'Implicitly declared classes' which is available since Java 21-preview. New in 2024.1", + "markdown": "Reports ordinary classes, which can be converted into implicitly declared classes\n\n**Example:**\n\n\n public class Sample {\n public static void main(String[] args) {\n System.out.println(\"Hello, world!\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public static void main(String[] args) {\n System.out.println(\"Hello, world!\");\n }\n\nThis inspection depends on the Java feature 'Implicitly declared classes' which is available since Java 21-preview.\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExplicitToImplicitClassMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 21", + "index": 192, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedMethodCall", + "shortDescription": { + "text": "Nested method call" + }, + "fullDescription": { + "text": "Reports method calls used as parameters to another method call. The quick-fix introduces a variable to make the code simpler and easier to debug. Example: 'public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int x = f(y());\n }' After the quick-fix is applied: 'public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int y = y();\n int x = f(y);\n }' Use the inspection options to toggle the reporting of: method calls in field initializers calls to static methods calls to simple getters", + "markdown": "Reports method calls used as parameters to another method call.\n\nThe quick-fix introduces a variable to make the code simpler and easier to debug.\n\n**Example:**\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int x = f(y());\n }\n\nAfter the quick-fix is applied:\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int y = y();\n int x = f(y);\n }\n\n\nUse the inspection options to toggle the reporting of:\n\n* method calls in field initializers\n* calls to static methods\n* calls to simple getters" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedMethodCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyTransitiveDependents", + "shortDescription": { + "text": "Class with too many transitive dependents" + }, + "fullDescription": { + "text": "Reports a class on which too many other classes are directly or indirectly dependent. Any modification to such a class may require changing many other classes, which may be expensive. Only top-level classes are reported. Use the Maximum number of transitive dependents field to specify the maximum allowed number of direct or indirect dependents for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports a class on which too many other classes are directly or indirectly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependents** field to specify the maximum allowed number of direct or indirect dependents\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyTransitiveDependents", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CompareToUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'compareTo()'" + }, + "fullDescription": { + "text": "Reports access to a non-'final' field inside a 'compareTo()' implementation. Such access may result in 'compareTo()' returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes, for example 'java.util.TreeSet'. A quick-fix to make the field 'final' is available only when there is no write access to the field, otherwise no fixes are suggested. Example: 'class Foo implements Comparable{\n private int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }' After the quick-fix is applied: 'class Foo implements Comparable{\n private final int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }'", + "markdown": "Reports access to a non-`final` field inside a `compareTo()` implementation.\n\n\nSuch access may result in `compareTo()`\nreturning different results at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes, for example `java.util.TreeSet`.\n\n\nA quick-fix to make the field `final` is available\nonly when there is no write access to the field, otherwise no fixes are suggested.\n\n**Example:**\n\n\n class Foo implements Comparable{\n private int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparable{\n private final int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CompareToUsesNonFinalVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavacQuirks", + "shortDescription": { + "text": "Javac quirks" + }, + "fullDescription": { + "text": "Reports known Javac issues, performance problems, and incompatibilities. For example, type inference may be slow when it has to process many nested calls. The following code triggers a warning, as the vararg method call has 50+ poly arguments: 'Arrays.asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));' The quick-fix adds explicit type arguments, which makes compilation and IDE processing much faster: '//noinspection RedundantTypeArguments\n Arrays.>asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));'", + "markdown": "Reports known Javac issues, performance problems, and incompatibilities. For example, type inference may be slow when it has to process many nested calls.\n\nThe following code triggers a warning, as the vararg method call has 50+ poly arguments:\n\n\n Arrays.asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n\nThe quick-fix adds explicit type arguments, which makes compilation and IDE processing much faster:\n\n\n //noinspection RedundantTypeArguments\n Arrays.>asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JavacQuirks", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 160, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatement", + "shortDescription": { + "text": "'switch' statement" + }, + "fullDescription": { + "text": "Reports 'switch' statements. 'switch' statements often (but not always) indicate a poor object-oriented design. Example: 'switch (i) {\n // code\n }'", + "markdown": "Reports `switch` statements.\n\n`switch` statements often (but not always) indicate a poor object-oriented design.\n\nExample:\n\n\n switch (i) {\n // code\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SwitchStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferReplaceableByString", + "shortDescription": { + "text": "'StringBuilder' can be replaced with 'String'" + }, + "fullDescription": { + "text": "Reports usages of 'StringBuffer', 'StringBuilder', or 'StringJoiner' which can be replaced with a single 'String' concatenation. Using 'String' concatenation makes the code shorter and simpler. This inspection only reports when the suggested replacement does not result in significant performance drawback on modern JVMs. In many cases, 'String' concatenation may perform better. Example: 'StringBuilder result = new StringBuilder();\n result.append(\"i = \");\n result.append(i);\n result.append(\";\");\n return result.toString();' After the quick-fix is applied: 'String result = \"i = \" + i + \";\";\n return result;'", + "markdown": "Reports usages of `StringBuffer`, `StringBuilder`, or `StringJoiner` which can be replaced with a single `String` concatenation.\n\nUsing `String` concatenation\nmakes the code shorter and simpler.\n\n\nThis inspection only reports when the suggested replacement does not result in significant\nperformance drawback on modern JVMs. In many cases, `String` concatenation may perform better.\n\n**Example:**\n\n\n StringBuilder result = new StringBuilder();\n result.append(\"i = \");\n result.append(i);\n result.append(\";\");\n return result.toString();\n\nAfter the quick-fix is applied:\n\n\n String result = \"i = \" + i + \";\";\n return result;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringBufferReplaceableByString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SourceToSinkFlow", + "shortDescription": { + "text": "Non-safe string is passed to safe method" + }, + "fullDescription": { + "text": "Reports cases when a non-safe object is passed to a method with a parameter marked with '@Untainted' annotations, returned from annotated methods or assigned to annotated fields, parameters, or local variables. Kotlin 'set' and 'get' methods for fields are not supported as entry points. A safe object (in the same class) is: a string literal, interface instance, or enum object a result of a call of a method that is marked as '@Untainted' a private field, which is assigned only with a string literal and has a safe initializer a final field, which has a safe initializer local variable or parameter that are marked as '@Untainted' and are not assigned from non-safe objects. This field, local variable, or parameter must not be passed as arguments to methods or used as a qualifier or must be a primitive, its wrapper or immutable. Also, static final fields are considered as safe. The analysis is performed only inside one file. To process dependencies from other classes, use options. The analysis extends to private or static methods and has a limit of depth propagation. Example: 'void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n if (b) s1 = s;\n sink(s);\n }\n\n String sink(@Untainted String s) {}'\n Here we do not have non-safe string assignments to 's' so a warning is not produced. On the other hand: 'void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n s1 = foo();\n if (b) s = s1;\n sink(s); // warning here\n }\n\n String foo();\n\n String sink(@Untainted String s) {}'\n Here we have a warning since 's1' has an unknown state after 'foo' call result assignment. New in 2021.2", + "markdown": "Reports cases when a non-safe object is passed to a method with a parameter marked with `@Untainted` annotations, returned from annotated methods or assigned to annotated fields, parameters, or local variables. Kotlin `set` and `get` methods for fields are not supported as entry points.\n\n\nA safe object (in the same class) is:\n\n* a string literal, interface instance, or enum object\n* a result of a call of a method that is marked as `@Untainted`\n* a private field, which is assigned only with a string literal and has a safe initializer\n* a final field, which has a safe initializer\n* local variable or parameter that are marked as `@Untainted` and are not assigned from non-safe objects.\n\nThis field, local variable, or parameter must not be passed as arguments to methods or used as a qualifier or must be a primitive, its\nwrapper or immutable.\n\nAlso, static final fields are considered as safe.\n\n\nThe analysis is performed only inside one file. To process dependencies from other classes, use options.\nThe analysis extends to private or static methods and has a limit of depth propagation.\n\n\nExample:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n if (b) s1 = s;\n sink(s);\n }\n\n String sink(@Untainted String s) {}\n\n\nHere we do not have non-safe string assignments to `s` so a warning is not produced. On the other hand:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n s1 = foo();\n if (b) s = s1;\n sink(s); // warning here\n }\n\n String foo();\n\n String sink(@Untainted String s) {}\n\n\nHere we have a warning since `s1` has an unknown state after `foo` call result assignment.\n\nNew in 2021.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "tainting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecordCanBeClass", + "shortDescription": { + "text": "Record can be converted to class" + }, + "fullDescription": { + "text": "Reports record classes and suggests converting them to ordinary classes. This inspection makes it possible to move a Java record to a codebase using an earlier Java version by applying the quick-fix to this record. Note that the resulting class is not completely equivalent to the original record: The resulting class no longer extends 'java.lang.Record', so 'instanceof Record' returns 'false'. Reflection methods like 'Class.isRecord()' and 'Class.getRecordComponents()' produce different results. The generated 'hashCode()' implementation may produce a different result because the formula to calculate record 'hashCode' is deliberately not specified. Record serialization mechanism differs from that of an ordinary class. Refer to Java Object Serialization Specification for details. Example: 'record Point(int x, int y) {}' After the quick-fix is applied: 'final class Point {\n private final int x;\n private final int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n public int x() { return x; }\n\n public int y() { return y; }\n\n @Override\n public boolean equals(Object obj) {\n if (obj == this) return true;\n if (obj == null || obj.getClass() != this.getClass()) return false;\n var that = (Point)obj;\n return this.x == that.x &&\n this.y == that.y;\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(x, y);\n }\n\n @Override\n public String toString() {\n return \"Point[\" +\n \"x=\" + x + \", \" +\n \"y=\" + y + ']';\n }\n }' This inspection depends on the Java feature 'Records' which is available since Java 16. New in 2020.3", + "markdown": "Reports record classes and suggests converting them to ordinary classes.\n\nThis inspection makes it possible to move a Java record to a codebase using an earlier Java version\nby applying the quick-fix to this record.\n\n\nNote that the resulting class is not completely equivalent to the original record:\n\n* The resulting class no longer extends `java.lang.Record`, so `instanceof Record` returns `false`.\n* Reflection methods like `Class.isRecord()` and `Class.getRecordComponents()` produce different results.\n* The generated `hashCode()` implementation may produce a different result because the formula to calculate record `hashCode` is deliberately not specified.\n* Record serialization mechanism differs from that of an ordinary class. Refer to *Java Object Serialization Specification* for details.\n\nExample:\n\n\n record Point(int x, int y) {}\n\nAfter the quick-fix is applied:\n\n\n final class Point {\n private final int x;\n private final int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n public int x() { return x; }\n\n public int y() { return y; }\n\n @Override\n public boolean equals(Object obj) {\n if (obj == this) return true;\n if (obj == null || obj.getClass() != this.getClass()) return false;\n var that = (Point)obj;\n return this.x == that.x &&\n this.y == that.y;\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(x, y);\n }\n\n @Override\n public String toString() {\n return \"Point[\" +\n \"x=\" + x + \", \" +\n \"y=\" + y + ']';\n }\n }\n\nThis inspection depends on the Java feature 'Records' which is available since Java 16.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RecordCanBeClass", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MalformedFormatString", + "shortDescription": { + "text": "Malformed format string" + }, + "fullDescription": { + "text": "Reports format strings that don't comply with the standard Java syntax. By default, the inspection considers a compile-time constant a format string if it's used as an argument to the corresponding methods on 'java.util.Formatter', 'java.lang.String', 'java.io.PrintWriter' or 'java.io.PrintStream'. Example: 'String.format(\"x = %d, y = %d\", 42);' Use the inspection settings to mark additional classes and methods as related to string formatting. As an alternative, you can use the 'org.intellij.lang.annotations.PrintFormat' annotation to mark the format string method parameter. In this case, the format arguments parameter must immediately follow the format string and be the last method parameter. Example: 'void myFormatMethod(int mode, @PrintFormat String formatString, Object... args) {...}' Methods annotated in this way will also be recognized by this inspection.", + "markdown": "Reports format strings that don't comply with the standard Java syntax.\n\nBy default, the inspection considers a compile-time constant a format string if it's used as an argument to the corresponding methods on\n`java.util.Formatter`, `java.lang.String`, `java.io.PrintWriter` or `java.io.PrintStream`.\n\n**Example:**\n\n\n String.format(\"x = %d, y = %d\", 42);\n\nUse the inspection settings to mark additional classes and methods as related to string formatting.\n\nAs an alternative, you can use the `org.intellij.lang.annotations.PrintFormat` annotation\nto mark the format string method parameter. In this case,\nthe format arguments parameter must immediately follow the format string and be the last method parameter. Example:\n\n\n void myFormatMethod(int mode, @PrintFormat String formatString, Object... args) {...}\n\n\nMethods annotated in this way will also be recognized by this inspection." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MalformedFormatString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadYield", + "shortDescription": { + "text": "Call to 'Thread.yield()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.yield()'. The behavior of 'yield()' is non-deterministic and platform-dependent, and it is rarely appropriate to use this method. Its use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect. Example: 'public static void main(String[] args) {\n Runnable r = () -> {\n for (int i = 0; i < 10; i++) {\n System.out.println(i);\n Thread.yield();\n }\n };\n new Thread(r).start();\n new Thread(r).start();\n }'", + "markdown": "Reports calls to `Thread.yield()`.\n\n\nThe behavior of `yield()` is non-deterministic and platform-dependent, and it is rarely appropriate to use this method.\nIts use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect.\n\n**Example:**\n\n\n public static void main(String[] args) {\n Runnable r = () -> {\n for (int i = 0; i < 10; i++) {\n System.out.println(i);\n Thread.yield();\n }\n };\n new Thread(r).start();\n new Thread(r).start();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadYield", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaCanBeMethodCall", + "shortDescription": { + "text": "Lambda can be replaced with method call" + }, + "fullDescription": { + "text": "Reports lambda expressions which can be replaced with a call to a JDK method. For example, an expression 'x -> x' of type 'Function' can be replaced with a 'Function.identity()' call. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8. New in 2017.1", + "markdown": "Reports lambda expressions which can be replaced with a call to a JDK method.\n\nFor example, an expression `x -> x` of type `Function`\ncan be replaced with a `Function.identity()` call.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LambdaCanBeMethodCall", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EndlessStream", + "shortDescription": { + "text": "Non-short-circuit operation consumes infinite stream" + }, + "fullDescription": { + "text": "Reports non-short-circuit operations consuming an infinite stream. Such operations can be completed only by throwing an exception. Example: 'Stream.iterate(0, i -> i + 1).collect(Collectors.toList())' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports non-short-circuit operations consuming an infinite stream. Such operations can be completed only by throwing an exception.\n\nExample:\n\n\n Stream.iterate(0, i -> i + 1).collect(Collectors.toList())\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EndlessStream", + "cweIds": [ + 835 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Singleton", + "shortDescription": { + "text": "Singleton" + }, + "fullDescription": { + "text": "Reports singleton classes. Singleton classes are declared in a way that only one instance of the class can ever be instantiated. Singleton classes complicate testing, and their presence may indicate a lack of object-oriented design. Example: 'class Singleton {\n private static final Singleton ourInstance = new Singleton();\n\n private Singleton() {\n }\n\n public Singleton getInstance() {\n return ourInstance;\n }\n }'", + "markdown": "Reports singleton classes.\n\nSingleton classes are declared in a way that only one instance of the class can ever be instantiated. Singleton classes complicate testing,\nand their presence may indicate a lack of object-oriented design.\n\n**Example:**\n\n\n class Singleton {\n private static final Singleton ourInstance = new Singleton();\n\n private Singleton() {\n }\n\n public Singleton getInstance() {\n return ourInstance;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Singleton", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalUtilityClass", + "shortDescription": { + "text": "Utility class is not 'final'" + }, + "fullDescription": { + "text": "Reports utility classes that aren't 'final' or 'abstract'. Utility classes have all fields and methods declared as 'static'. Making them 'final' prevents them from being accidentally subclassed. Example: 'public class UtilityClass {\n public static void foo() {}\n }' After the quick-fix is applied: 'public final class UtilityClass {\n public static void foo() {}\n }'", + "markdown": "Reports utility classes that aren't `final` or `abstract`.\n\nUtility classes have all fields and methods declared as `static`.\nMaking them `final` prevents them from being accidentally subclassed.\n\n**Example:**\n\n\n public class UtilityClass {\n public static void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public final class UtilityClass {\n public static void foo() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalUtilityClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FuseStreamOperations", + "shortDescription": { + "text": "Subsequent steps can be fused into Stream API chain" + }, + "fullDescription": { + "text": "Detects transformations outside a Stream API chain that could be incorporated into it. Example: 'List list = stream.collect(Collectors.toList());\n list.sort(null);\n return list.toArray(new String[list.size()]);' After the conversion: 'return stream.sorted().toArray(String[]::new);' Note that sometimes the converted stream chain may replace explicit 'ArrayList' with 'Collectors.toList()' or explicit 'HashSet' with 'Collectors.toSet()'. The current library implementation uses these collections internally. However, this approach is not very reliable and might change in the future altering the semantics of your code. If you are concerned about it, use the Do not suggest 'toList()' or 'toSet()' collectors option to suggest 'Collectors.toCollection()' instead of 'toList' and 'toSet' collectors. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Detects transformations outside a Stream API chain that could be incorporated into it.\n\nExample:\n\n\n List list = stream.collect(Collectors.toList());\n list.sort(null);\n return list.toArray(new String[list.size()]);\n\nAfter the conversion:\n\n\n return stream.sorted().toArray(String[]::new);\n\n\nNote that sometimes the converted stream chain may replace explicit `ArrayList` with `Collectors.toList()` or explicit\n`HashSet` with `Collectors.toSet()`. The current library implementation uses these collections internally. However,\nthis approach is not very reliable and might change in the future altering the semantics of your code.\n\nIf you are concerned about it, use the **Do not suggest 'toList()' or 'toSet()' collectors** option to suggest\n`Collectors.toCollection()` instead of `toList` and `toSet` collectors.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FuseStreamOperations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultNotLastCaseInSwitch", + "shortDescription": { + "text": "'default' not last case in 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions in which the 'default' branch is positioned before another case. Such a construct is unnecessarily confusing. A quick-fix is provided to move the 'default' branch to the last position, if possible. Example: 'switch (n) {\n default:\n System.out.println();\n break;\n case 1:\n break;\n }' After the quick-fix is applied: 'switch (n) {\n case 1:\n break;\n default:\n System.out.println();\n break;\n }'", + "markdown": "Reports `switch` statements or expressions in which the `default` branch is positioned before another case. Such a construct is unnecessarily confusing. A quick-fix is provided to move the `default` branch to the last position, if possible.\n\n**Example:**\n\n\n switch (n) {\n default:\n System.out.println();\n break;\n case 1:\n break;\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n break;\n default:\n System.out.println();\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DefaultNotLastCaseInSwitch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullThrown", + "shortDescription": { + "text": "'null' thrown" + }, + "fullDescription": { + "text": "Reports 'null' literals that are used as the argument of a 'throw' statement. Such constructs produce a 'java.lang.NullPointerException' that usually should not be thrown programmatically.", + "markdown": "Reports `null` literals that are used as the argument of a `throw` statement.\n\nSuch constructs produce a `java.lang.NullPointerException` that usually should not be thrown programmatically." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NullThrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalCanBeFinal", + "shortDescription": { + "text": "Local variable or parameter can be 'final'" + }, + "fullDescription": { + "text": "Reports parameters or local variables that may have the 'final' modifier added to their declaration. Example: 'ArrayList list = new ArrayList();\n fill(list);\n return list;' After the quick-fix is applied: 'final ArrayList list = new ArrayList();\n fill(list);\n return list;' Use the inspection's options to define whether parameters or local variables should be reported.", + "markdown": "Reports parameters or local variables that may have the `final` modifier added to their declaration.\n\nExample:\n\n\n ArrayList list = new ArrayList();\n fill(list);\n return list;\n\nAfter the quick-fix is applied:\n\n\n final ArrayList list = new ArrayList();\n fill(list);\n return list;\n\n\nUse the inspection's options to define whether parameters or local variables should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LocalCanBeFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldMayBeStatic", + "shortDescription": { + "text": "Field can be made 'static'" + }, + "fullDescription": { + "text": "Reports instance variables that can safely be made 'static'. A field can be static if it is declared 'final' and initialized with a constant. Example: 'public final String str = \"sample\";' The inspection does not report final fields that can be implicitly written. Use the \"Annotations\" button to modify the list of annotations that assume implicit field write.", + "markdown": "Reports instance variables that can safely be made `static`. A field can be static if it is declared `final` and initialized with a constant.\n\n**Example:**\n\n\n public final String str = \"sample\";\n\n\nThe inspection does not report final fields that can be implicitly written. Use the \"Annotations\" button to modify\nthe list of annotations that assume implicit field write." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayEquals", + "shortDescription": { + "text": "'equals()' called on array" + }, + "fullDescription": { + "text": "Reports 'equals()' calls that compare two arrays. Calling 'equals()' on an array compares identity and is equivalent to using '=='. Use 'Arrays.equals()' to compare the contents of two arrays, or 'Arrays.deepEquals()' for multi-dimensional arrays. Example: 'void sample(int[] first, int[] second){\n if (first.equals(second)) return;\n }' After the quick-fix is applied: 'void sample(int[] first, int[] second){\n if (Arrays.equals(first, second)) return;\n }'", + "markdown": "Reports `equals()` calls that compare two arrays.\n\nCalling `equals()` on an array compares identity and is equivalent to using `==`.\nUse `Arrays.equals()` to compare the contents of two arrays, or `Arrays.deepEquals()` for\nmulti-dimensional arrays.\n\n**Example:**\n\n\n void sample(int[] first, int[] second){\n if (first.equals(second)) return;\n }\n\nAfter the quick-fix is applied:\n\n\n void sample(int[] first, int[] second){\n if (Arrays.equals(first, second)) return;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ArrayEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProblematicVarargsMethodOverride", + "shortDescription": { + "text": "Non-varargs method overrides varargs method" + }, + "fullDescription": { + "text": "Reports methods that override a variable arity (a.k.a. varargs) method but replace the variable arity parameter with an array parameter. Though this code is valid, it may be confusing and should be avoided.", + "markdown": "Reports methods that override a variable arity (a.k.a. varargs) method but replace the variable arity parameter with an array parameter. Though this code is valid, it may be confusing and should be avoided." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProblematicVarargsMethodOverride", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledHeader", + "shortDescription": { + "text": "Unknown or misspelled header name" + }, + "fullDescription": { + "text": "Reports any unknown and probably misspelled header names and provides possible variants.", + "markdown": "Reports any unknown and probably misspelled header names and provides possible variants." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MisspelledHeader", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Manifest", + "index": 117, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AtomicFieldUpdaterIssues", + "shortDescription": { + "text": "Inconsistent 'AtomicFieldUpdater' declaration" + }, + "fullDescription": { + "text": "Reports issues with 'AtomicLongFieldUpdater', 'AtomicIntegerFieldUpdater', or 'AtomicReferenceFieldUpdater' fields (the 'java.util.concurrent.atomic' package). The reported issues are identical to the runtime problems that can happen with atomic field updaters: specified field not found, specified field not accessible, specified field has a wrong type, and so on. Examples: 'class A {\n private static volatile int value = 0;\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater((A.class), \"value\"); // warning: Field 'value' has 'static' modifier\n }' 'class B {\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater(B.class, \"value\"); // warning: No field named 'value' found in class 'B'\n }'", + "markdown": "Reports issues with `AtomicLongFieldUpdater`, `AtomicIntegerFieldUpdater`, or `AtomicReferenceFieldUpdater` fields (the `java.util.concurrent.atomic` package).\n\nThe reported issues are identical to the runtime problems that can happen with atomic field updaters:\nspecified field not found, specified field not accessible, specified field has a wrong type, and so on.\n\n**Examples:**\n\n*\n\n\n class A {\n private static volatile int value = 0;\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater((A.class), \"value\"); // warning: Field 'value' has 'static' modifier\n }\n \n*\n\n\n class B {\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater(B.class, \"value\"); // warning: No field named 'value' found in class 'B'\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "AtomicFieldUpdaterIssues", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageNamingConvention", + "shortDescription": { + "text": "Package naming convention" + }, + "fullDescription": { + "text": "Reports packages whose names are either too short, too long, or do not follow the specified regular expression pattern. Example: 'package io;' Use the options to specify the minimum and maximum length of the package name as well as a regular expression that matches valid package names (regular expressions are in standard 'java.util.regex' format).", + "markdown": "Reports packages whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:**\n\n\n package io;\n\n\nUse the options to specify the minimum and maximum length of the package name\nas well as a regular expression that matches valid package names\n(regular expressions are in standard `java.util.regex` format)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowableNotThrown", + "shortDescription": { + "text": "'Throwable' not thrown" + }, + "fullDescription": { + "text": "Reports instantiations of 'Throwable' or its subclasses, where the created 'Throwable' is never actually thrown. Additionally, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the result of the method call is not thrown. Calls to methods annotated with the Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. Example: 'void check(String s) {\n if (s == null) {\n new NullPointerException(\"s\");\n }\n // ...\n }'", + "markdown": "Reports instantiations of `Throwable` or its subclasses, where the created `Throwable` is never actually thrown. Additionally, this inspection reports method calls that return instances of `Throwable` or its subclasses, when the result of the method call is not thrown.\n\nCalls to methods annotated with the Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\n\n**Example:**\n\n\n void check(String s) {\n if (s == null) {\n new NullPointerException(\"s\");\n }\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowableNotThrown", + "cweIds": [ + 390, + 703 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CapturingCleaner", + "shortDescription": { + "text": "Cleaner captures object reference" + }, + "fullDescription": { + "text": "Reports 'Runnable' passed to a 'Cleaner.register()' capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked. Possible sources of this problem: Lambda using non-static methods, fields, or 'this' itself Non-static inner class (anonymous or not) always captures this reference in java up to 18 version Instance method reference Access to outer class non-static members from non-static inner class Sample of code that will be reported: 'int fileDescriptor;\n Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {\n System.out.println(\"adsad\");\n //this is captured via fileDescriptor\n fileDescriptor = 0;\n });' This inspection only reports if the language level of the project or module is 9 or higher. New in 2018.1", + "markdown": "Reports `Runnable` passed to a `Cleaner.register()` capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked.\n\nPossible sources of this problem:\n\n* Lambda using non-static methods, fields, or `this` itself\n* Non-static inner class (anonymous or not) always captures this reference in java up to 18 version\n* Instance method reference\n* Access to outer class non-static members from non-static inner class\n\nSample of code that will be reported:\n\n\n int fileDescriptor;\n Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {\n System.out.println(\"adsad\");\n //this is captured via fileDescriptor\n fileDescriptor = 0;\n });\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CapturingCleaner", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadStartInConstruction", + "shortDescription": { + "text": "Call to 'Thread.start()' during object construction" + }, + "fullDescription": { + "text": "Reports calls to 'start()' on 'java.lang.Thread' or any of its subclasses during object construction. While occasionally useful, such constructs should be avoided due to inheritance issues. Subclasses of a class that launches a thread during the object construction will not have finished any initialization logic of their own before the thread has launched. This inspection does not report if the class that starts a thread is declared 'final'. Example: 'class MyThread extends Thread {\n MyThread() {\n start();\n }\n }'", + "markdown": "Reports calls to `start()` on `java.lang.Thread` or any of its subclasses during object construction.\n\n\nWhile occasionally useful, such constructs should be avoided due to inheritance issues.\nSubclasses of a class that launches a thread during the object construction will not have finished\nany initialization logic of their own before the thread has launched.\n\nThis inspection does not report if the class that starts a thread is declared `final`.\n\n**Example:**\n\n\n class MyThread extends Thread {\n MyThread() {\n start();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadStartDuringObjectConstruction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithTooManyBranches", + "shortDescription": { + "text": "Maximum 'switch' branches" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions with too many 'case' labels. Such a long switch statement may be confusing and should probably be refactored. Sometimes, it is not a problem (for example, a domain is very complicated and has enums with a lot of constants). Example: 'switch (x) {\n case 1 -> {}\n case 2 -> {}\n case 3 -> {}\n case 4 -> {}\n case 5 -> {}\n case 6 -> {}\n case 7 -> {}\n case 8 -> {}\n case 9 -> {}\n case 10 -> {}\n case 11,12,13 -> {}\n default -> {}\n }' Use the Maximum number of branches field to specify the maximum number of 'case' labels expected.", + "markdown": "Reports `switch` statements or expressions with too many `case` labels.\n\nSuch a long switch statement may be confusing and should probably be refactored.\nSometimes, it is not a problem (for example, a domain is very complicated and has enums with a lot of constants).\n\nExample:\n\n\n switch (x) {\n case 1 -> {}\n case 2 -> {}\n case 3 -> {}\n case 4 -> {}\n case 5 -> {}\n case 6 -> {}\n case 7 -> {}\n case 8 -> {}\n case 9 -> {}\n case 10 -> {}\n case 11,12,13 -> {}\n default -> {}\n }\n\nUse the **Maximum number of branches** field to specify the maximum number of `case` labels expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SwitchStatementWithTooManyBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopConditionNotUpdatedInsideLoop", + "shortDescription": { + "text": "Loop variable not updated inside loop" + }, + "fullDescription": { + "text": "Reports any variables and parameters that are used in a loop condition and are not updated inside the loop. Such variables and parameters are usually used by mistake as they may cause an infinite loop if they are executed. Example: 'void loopDoesNotLoop(boolean b) {\n while (b) {\n System.out.println();\n break;\n }\n }' Configure the inspection: Use the Ignore possible non-local changes option to disable this inspection if the condition can be updated indirectly (e.g. via the called method or concurrently from another thread).", + "markdown": "Reports any variables and parameters that are used in a loop condition and are not updated inside the loop.\n\nSuch variables and parameters are usually used by mistake as they\nmay cause an infinite loop if they are executed.\n\nExample:\n\n\n void loopDoesNotLoop(boolean b) {\n while (b) {\n System.out.println();\n break;\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore possible non-local changes** option to disable this inspection\nif the condition can be updated indirectly (e.g. via the called method or concurrently from another thread)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LoopConditionNotUpdatedInsideLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleCheckedLocking", + "shortDescription": { + "text": "Double-checked locking" + }, + "fullDescription": { + "text": "Reports double-checked locking. Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization. Unfortunately it is not thread-safe when used on a field that is not declared 'volatile'. When using Java 1.4 or earlier, double-checked locking doesn't work even with a 'volatile' field. Read the article linked above for a detailed explanation of the problem. Example of incorrect double-checked locking: 'class Foo {\n private Helper helper = null;\n public Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) helper = new Helper();\n }\n return helper;\n }\n }\n // other functions and members...\n }'", + "markdown": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\nExample of incorrect double-checked locking:\n\n\n class Foo {\n private Helper helper = null;\n public Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) helper = new Helper();\n }\n return helper;\n }\n }\n // other functions and members...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DoubleCheckedLocking", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledMethodName", + "shortDescription": { + "text": "Method names differing only by case" + }, + "fullDescription": { + "text": "Reports cases in which multiple methods of a class have the names that differ only by case. Such names may be very confusing. Example: 'public int hashcode() { // reported, should be hashCode probably?\n return 0;\n }' A quick-fix that renames such methods is available only in the editor. Use the Ignore methods overriding/implementing a super method option to ignore methods overriding or implementing a method from the superclass.", + "markdown": "Reports cases in which multiple methods of a class have the names that differ only by case. Such names may be very confusing.\n\n**Example:**\n\n\n public int hashcode() { // reported, should be hashCode probably?\n return 0;\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nUse the **Ignore methods overriding/implementing a super method** option to ignore methods overriding or implementing a method from\nthe superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodNamesDifferingOnlyByCase", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableObjectBoundToHttpSession", + "shortDescription": { + "text": "Non-serializable object bound to 'HttpSession'" + }, + "fullDescription": { + "text": "Reports objects of classes not implementing 'java.io.Serializable' used as arguments to 'javax.servlet.http.HttpSession.setAttribute()' or 'javax.servlet.http.HttpSession.putValue()'. Such objects will not be serialized if the 'HttpSession' is passivated or migrated, and may result in difficult-to-diagnose bugs. This inspection assumes objects of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless type parameters are non-'Serializable'. Example: 'void foo(HttpSession session) {\n session.setAttribute(\"foo\", new NonSerializable());\n }\n static class NonSerializable {}'", + "markdown": "Reports objects of classes not implementing `java.io.Serializable` used as arguments to `javax.servlet.http.HttpSession.setAttribute()` or `javax.servlet.http.HttpSession.putValue()`.\n\n\nSuch objects will not be serialized if the `HttpSession` is passivated or migrated,\nand may result in difficult-to-diagnose bugs.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`,\nunless type parameters are non-`Serializable`.\n\n**Example:**\n\n\n void foo(HttpSession session) {\n session.setAttribute(\"foo\", new NonSerializable());\n }\n static class NonSerializable {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonSerializableObjectBoundToHttpSession", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadLocalNotStaticFinal", + "shortDescription": { + "text": "'ThreadLocal' field not declared 'static final'" + }, + "fullDescription": { + "text": "Reports fields of type 'java.lang.ThreadLocal' that are not declared 'static final'. In the most common case, a 'java.lang.ThreadLocal' instance associates state with a thread. A non-static non-final 'java.lang.ThreadLocal' field associates state with an instance-thread combination. This is usually unnecessary and quite often is a bug that can cause memory leaks and incorrect behavior. A quick-fix is suggested to make the field 'static final'. Example: 'private ThreadLocal tl = ThreadLocal.withInitial(() -> Boolean.TRUE);'", + "markdown": "Reports fields of type `java.lang.ThreadLocal` that are not declared `static final`.\n\n\nIn the most common case, a `java.lang.ThreadLocal` instance associates state with a thread.\nA non-static non-final `java.lang.ThreadLocal` field associates state with an instance-thread combination.\nThis is usually unnecessary and quite often is a bug that can cause memory leaks and incorrect behavior.\n\n\nA quick-fix is suggested to make the field `static final`.\n\n\n**Example:**\n\n\n private ThreadLocal tl = ThreadLocal.withInitial(() -> Boolean.TRUE);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThreadLocalNotStaticFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessStaticViaInstance", + "shortDescription": { + "text": "Access static member via instance reference" + }, + "fullDescription": { + "text": "Reports references to 'static' methods and fields via a class instance rather than the class itself. Even though referring to static members via instance variables is allowed by The Java Language Specification, this makes the code confusing as the reader may think that the result of the method depends on the instance. The quick-fix replaces the instance variable with the class name. Example: 'String s1 = s.valueOf(0);' After the quick-fix is applied: 'String s = String.valueOf(0);'", + "markdown": "Reports references to `static` methods and fields via a class instance rather than the class itself.\n\nEven though referring to static members via instance variables is allowed by The Java Language Specification,\nthis makes the code confusing as the reader may think that the result of the method depends on the instance.\n\nThe quick-fix replaces the instance variable with the class name.\n\nExample:\n\n\n String s1 = s.valueOf(0);\n\nAfter the quick-fix is applied:\n\n\n String s = String.valueOf(0);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AccessStaticViaInstance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToNativeMethodWhileLocked", + "shortDescription": { + "text": "Call to a 'native' method while locked" + }, + "fullDescription": { + "text": "Reports calls 'native' methods within a 'synchronized' block or method. When possible, it's better to keep calls to 'native' methods out of the synchronized context because such calls cause an expensive context switch and may lead to performance issues. Example: 'native void nativeMethod();\n\n void example(){\n synchronized (lock){\n nativeMethod();//warning\n }\n }'", + "markdown": "Reports calls `native` methods within a `synchronized` block or method.\n\n\nWhen possible, it's better to keep calls to `native` methods out of the synchronized context\nbecause such calls cause an expensive context switch and may lead to performance issues.\n\n**Example:**\n\n\n native void nativeMethod();\n\n void example(){\n synchronized (lock){\n nativeMethod();//warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToNativeMethodWhileLocked", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Dependency", + "shortDescription": { + "text": "Illegal package dependencies" + }, + "fullDescription": { + "text": "Reports illegal dependencies between scopes according to the dependency rules given. Dependency rules can be used to prohibit usage from a scope to another scope. Use the Configure dependency rules button below to customize validation rules.", + "markdown": "Reports illegal dependencies between scopes according to the dependency rules given. Dependency rules can be used to prohibit usage from a scope to another scope.\n\nUse the **Configure dependency rules** button below to customize validation rules." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "Dependency", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestingDepth", + "shortDescription": { + "text": "Overly nested method" + }, + "fullDescription": { + "text": "Reports methods whose body contain too deeply nested statements. Methods with too deep statement nesting may be confusing and are a good sign that refactoring may be necessary. Use the Nesting depth limit field to specify the maximum allowed nesting depth for a method.", + "markdown": "Reports methods whose body contain too deeply nested statements.\n\nMethods with too deep statement\nnesting may be confusing and are a good sign that refactoring may be necessary.\n\nUse the **Nesting depth limit** field to specify the maximum allowed nesting depth for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyNestedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitChronoField", + "shortDescription": { + "text": "Calls of 'java.time' methods with explicit 'ChronoField' or 'ChronoUnit' arguments can be simplified" + }, + "fullDescription": { + "text": "Reports 'java.time' method calls with 'java.time.temporal.ChronoField' and 'java.time.temporal.ChronoUnit' as arguments when these calls can be replaced with calls of more specific methods. Example: 'LocalTime localTime = LocalTime.now();\nint minute = localTime.get(ChronoField.MINUTE_OF_HOUR);' After the quick-fix is applied: 'LocalTime localTime = LocalTime.now();\nint minute = localTime.getMinute();' New in 2023.2", + "markdown": "Reports `java.time` method calls with `java.time.temporal.ChronoField` and `java.time.temporal.ChronoUnit` as arguments when these calls can be replaced with calls of more specific methods.\n\nExample:\n\n\n LocalTime localTime = LocalTime.now();\n int minute = localTime.get(ChronoField.MINUTE_OF_HOUR);\n\nAfter the quick-fix is applied:\n\n\n LocalTime localTime = LocalTime.now();\n int minute = localTime.getMinute();\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantExplicitChronoField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WriteOnlyObject", + "shortDescription": { + "text": "Write-only object" + }, + "fullDescription": { + "text": "Reports objects that are modified but never queried. The inspection relies on the method mutation contract, which could be inferred or pre-annotated for some library methods. This inspection does not report collections, maps, and string builders, as these types are reported by other more precise inspections. Example: 'AtomicReference ref = new AtomicReference<>();\n ref.set(\"hello\"); // ref is never used again' Use the Ignore impure constructors option to control whether to process objects created by constructor or method whose purity is not known. Unchecking the option may introduce some false-positives if the object reference is intentionally leaked during the construction. New in 2021.2", + "markdown": "Reports objects that are modified but never queried.\n\nThe inspection relies on the method mutation contract, which could be inferred\nor pre-annotated for some library methods. This inspection does not report collections, maps, and string builders, as these types\nare reported by other more precise inspections.\n\nExample:\n\n\n AtomicReference ref = new AtomicReference<>();\n ref.set(\"hello\"); // ref is never used again\n\n\nUse the **Ignore impure constructors** option to control whether to process objects created by constructor or method whose purity is not known.\nUnchecking the option may introduce some false-positives if the object reference is intentionally leaked during the construction.\n**New in 2021.2**" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "WriteOnlyObject", + "cweIds": [ + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SocketResource", + "shortDescription": { + "text": "Socket opened but not safely closed" + }, + "fullDescription": { + "text": "Reports socket resources that are not safely closed. Socket resources reported by this inspection include 'java.net.Socket', 'java.net.DatagramSocket', and 'java.net.ServerSocket'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'byte[] getMessage(ServerSocket socket) throws IOException {\n Socket client = socket.accept(); //socket is not closed\n return client.getInputStream().readAllBytes();\n }' Use the following options to configure the inspection: Whether a socket is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports socket resources that are not safely closed. Socket resources reported by this inspection include `java.net.Socket`, `java.net.DatagramSocket`, and `java.net.ServerSocket`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n byte[] getMessage(ServerSocket socket) throws IOException {\n Socket client = socket.accept(); //socket is not closed\n return client.getInputStream().readAllBytes();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a socket is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SocketOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterHidesVisibleType", + "shortDescription": { + "text": "Type parameter hides visible type" + }, + "fullDescription": { + "text": "Reports type parameters that have the same names as the visible types in the current scope. Such parameter names may be confusing. Example: 'abstract class MyList extends AbstractList {\n private List elements;\n // type parameter 'T' hides type parameter 'T'\n public T[] toArray(T[] array) {\n return elements.toArray(array);\n }\n}'", + "markdown": "Reports type parameters that have the same names as the visible types in the current scope. Such parameter names may be confusing.\n\nExample:\n\n\n abstract class MyList extends AbstractList {\n private List elements;\n // type parameter 'T' hides type parameter 'T'\n public T[] toArray(T[] array) {\n return elements.toArray(array);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "TypeParameterHidesVisibleType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MaskedAssertion", + "shortDescription": { + "text": "Assertion is suppressed by 'catch'" + }, + "fullDescription": { + "text": "Reports 'assert' statements and test framework assertions that are suppressed by a surrounding catch block. Such assertions will never fail, as the thrown 'AssertionError' will be caught and silently ignored. Example 1: 'void javaAssertion() {\n try {\n ...\n assert 1 == 2;\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' Example 2: '@Test\n void testWithAssertJ() {\n try {\n ...\n assertThat(1).as(\"test\").isEqualTo(2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' Example 3: '@Test\n void testWithJunit() {\n try {\n ...\n assertEquals(1, 2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' New in 2020.3", + "markdown": "Reports `assert` statements and test framework assertions that are suppressed by a surrounding catch block. Such assertions will never fail, as the thrown `AssertionError` will be caught and silently ignored.\n\n**Example 1:**\n\n\n void javaAssertion() {\n try {\n ...\n assert 1 == 2;\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 2:**\n\n\n @Test\n void testWithAssertJ() {\n try {\n ...\n assertThat(1).as(\"test\").isEqualTo(2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 3:**\n\n\n @Test\n void testWithJunit() {\n try {\n ...\n assertEquals(1, 2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MaskedAssertion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 128, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringTokenizerDelimiter", + "shortDescription": { + "text": "Duplicated delimiters in 'StringTokenizer'" + }, + "fullDescription": { + "text": "Reports 'StringTokenizer()' constructor calls or 'nextToken()' method calls that contain duplicate characters in the delimiter argument. Example: 'void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }' After the quick-fix is applied: 'void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }'", + "markdown": "Reports `StringTokenizer()` constructor calls or `nextToken()` method calls that contain duplicate characters in the delimiter argument.\n\n**Example:**\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StringTokenizerDelimiter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReflectionForUnavailableAnnotation", + "shortDescription": { + "text": "Reflective access to a source-only annotation" + }, + "fullDescription": { + "text": "Reports attempts to reflectively check for the presence of a non-runtime annotation. Using 'Class.isAnnotationPresent()' to test for an annotation whose retention policy is set to 'SOURCE' or 'CLASS' (the default) will always have a negative result. This mistake is easy to overlook. Example: '{\n getClass().isAnnotationPresent(SourceAnnotation.class); //always false\n }\n\n @Retention(RetentionPolicy.SOURCE)\n @interface SourceAnnotation {}' This inspection depends on the Java feature 'Annotations' which is available since Java 5.", + "markdown": "Reports attempts to reflectively check for the presence of a non-runtime annotation.\n\nUsing `Class.isAnnotationPresent()` to test for an annotation\nwhose retention policy is set to `SOURCE` or `CLASS`\n(the default) will always have a negative result. This mistake is easy to overlook.\n\n**Example:**\n\n\n {\n getClass().isAnnotationPresent(SourceAnnotation.class); //always false\n }\n\n @Retention(RetentionPolicy.SOURCE)\n @interface SourceAnnotation {}\n\n\nThis inspection depends on the Java feature 'Annotations' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReflectionForUnavailableAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstantiatingObjectToGetClassObject", + "shortDescription": { + "text": "Instantiating object to get 'Class' object" + }, + "fullDescription": { + "text": "Reports code that instantiates a class to get its class object. It is more performant to access the class object directly by name. Example: 'Class c = new Sample().getClass();' After the quick-fix is applied: 'Class c = Sample.class;'", + "markdown": "Reports code that instantiates a class to get its class object.\n\nIt is more performant to access the class object\ndirectly by name.\n\n**Example:**\n\n\n Class c = new Sample().getClass();\n\nAfter the quick-fix is applied:\n\n\n Class c = Sample.class;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InstantiatingObjectToGetClassObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithMultipleLoggers", + "shortDescription": { + "text": "Class with multiple loggers" + }, + "fullDescription": { + "text": "Reports classes that have multiple loggers declared. Ensuring that every class has a single dedicated logger is an important step in providing a unified logging implementation for an application. For example: 'public class Critical {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n protected static final Logger myLogger = Logger.getLogger(getClass());\n }' Use the table below to specify Logger class names. Classes which declare multiple fields that have the type of one of the specified classes will be reported by this inspection.", + "markdown": "Reports classes that have multiple loggers declared. Ensuring that every class has a single dedicated logger is an important step in providing a unified logging implementation for an application.\n\nFor example:\n\n\n public class Critical {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n protected static final Logger myLogger = Logger.getLogger(getClass());\n }\n\n\nUse the table below to specify Logger class names.\nClasses which declare multiple fields that have the type of one of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithMultipleLoggers", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 76, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ShiftOutOfRange", + "shortDescription": { + "text": "Shift operation by inappropriate constant" + }, + "fullDescription": { + "text": "Reports shift operations where the shift value is a constant outside the reasonable range. Integer shift operations outside the range '0..31' and long shift operations outside the range '0..63' are reported. Shifting by negative or overly large values is almost certainly a coding error. Example: 'int shiftSize = 32;\n // Warning: shift by 32 bits is equivalent to shift by 0 bits, so there's no shift at all.\n int mask = (1 << shiftSize) - 1;'", + "markdown": "Reports shift operations where the shift value is a constant outside the reasonable range.\n\nInteger shift operations outside the range `0..31` and long shift operations outside the\nrange `0..63` are reported. Shifting by negative or overly large values is almost certainly\na coding error.\n\n**Example:**\n\n\n int shiftSize = 32;\n // Warning: shift by 32 bits is equivalent to shift by 0 bits, so there's no shift at all.\n int mask = (1 << shiftSize) - 1;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ShiftOutOfRange", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 196, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadRun", + "shortDescription": { + "text": "Call to 'Thread.run()'" + }, + "fullDescription": { + "text": "Reports calls to 'run()' on 'java.lang.Thread' or any of its subclasses. While occasionally intended, this is usually a mistake, because 'run()' doesn't start a new thread. To execute the code in a separate thread, 'start()' should be used.", + "markdown": "Reports calls to `run()` on `java.lang.Thread` or any of its subclasses.\n\n\nWhile occasionally intended, this is usually a mistake, because `run()` doesn't start a new thread.\nTo execute the code in a separate thread, `start()` should be used." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadRun", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoBoxing", + "shortDescription": { + "text": "Auto-boxing" + }, + "fullDescription": { + "text": "Reports expressions that are affected by autoboxing conversion (automatic wrapping of primitive values as objects). Try not to use objects instead of primitives. It might significantly affect performance. Example: 'Integer x = 42;' The quick-fix makes the conversion explicit: 'Integer x = Integer.valueOf(42);' AutoBoxing appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports expressions that are affected by autoboxing conversion (automatic wrapping of primitive values as objects). Try not to use objects instead of primitives. It might significantly affect performance.\n\n**Example:**\n\n Integer x = 42;\n\nThe quick-fix makes the conversion explicit:\n\n Integer x = Integer.valueOf(42);\n\n\n*AutoBoxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AutoBoxing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsThrowable", + "shortDescription": { + "text": "Class directly extends 'Throwable'" + }, + "fullDescription": { + "text": "Reports classes that directly extend 'java.lang.Throwable'. Extending 'java.lang.Throwable' directly is generally considered bad practice. It is usually enough to extend 'java.lang.RuntimeException', 'java.lang.Exception', or - in special cases - 'java.lang.Error'. Example: 'class EnigmaThrowable extends Throwable {} // warning: Class 'EnigmaThrowable' directly extends 'java.lang.Throwable''", + "markdown": "Reports classes that directly extend `java.lang.Throwable`.\n\nExtending `java.lang.Throwable` directly is generally considered bad practice.\nIt is usually enough to extend `java.lang.RuntimeException`, `java.lang.Exception`, or - in special\ncases - `java.lang.Error`.\n\n**Example:**\n\n\n class EnigmaThrowable extends Throwable {} // warning: Class 'EnigmaThrowable' directly extends 'java.lang.Throwable'\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExtendsThrowable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceNeverImplemented", + "shortDescription": { + "text": "Interface which has no concrete subclass" + }, + "fullDescription": { + "text": "Reports interfaces that have no concrete subclasses. Configure the inspection: Use the list below to add annotations. Interfaces declared with one of these annotations will be ignored by the inspection. Use the checkbox below to ignore interfaces that only declare constant fields. Such interfaces may still be usable even without implementations.", + "markdown": "Reports interfaces that have no concrete subclasses.\n\nConfigure the inspection:\n\n* Use the list below to add annotations. Interfaces declared with one of these annotations will be ignored by the inspection.\n* Use the checkbox below to ignore interfaces that only declare constant fields. Such interfaces may still be usable even without implementations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InterfaceNeverImplemented", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadDeathRethrown", + "shortDescription": { + "text": "'ThreadDeath' not rethrown" + }, + "fullDescription": { + "text": "Reports 'try' statements that catch 'java.lang.ThreadDeath' and do not rethrow the exception. Example: 'try {\n executeInParallel(request);\n } catch (ThreadDeath ex) { // warning: ThreadDeath 'ex' not rethrown\n return false;\n }'", + "markdown": "Reports `try` statements that catch `java.lang.ThreadDeath` and do not rethrow the exception.\n\n**Example:**\n\n\n try {\n executeInParallel(request);\n } catch (ThreadDeath ex) { // warning: ThreadDeath 'ex' not rethrown\n return false;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThreadDeathNotRethrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneCallsConstructors", + "shortDescription": { + "text": "'clone()' instantiates objects with constructor" + }, + "fullDescription": { + "text": "Reports calls to object constructors inside 'clone()' methods. It is considered good practice to call 'clone()' to instantiate objects inside of a 'clone()' method instead of creating them directly to support later subclassing. This inspection will not report 'clone()' methods declared as 'final' or 'clone()' methods on 'final' classes.", + "markdown": "Reports calls to object constructors inside `clone()` methods.\n\nIt is considered good practice to call `clone()` to instantiate objects inside of a `clone()` method\ninstead of creating them directly to support later subclassing.\nThis inspection will not report\n`clone()` methods declared as `final`\nor `clone()` methods on `final` classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CloneCallsConstructors", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryModuleDependencyInspection", + "shortDescription": { + "text": "Unnecessary module dependency" + }, + "fullDescription": { + "text": "Reports dependencies on modules that are not used. The quick-fix safely removes such unused dependencies.", + "markdown": "Reports dependencies on modules that are not used. The quick-fix safely removes such unused dependencies." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryModuleDependencyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArraysAsListWithZeroOrOneArgument", + "shortDescription": { + "text": "Call to 'Arrays.asList()' with too few arguments" + }, + "fullDescription": { + "text": "Reports calls to 'Arrays.asList()' with at most one argument. Such calls could be replaced with 'Collections.singletonList()', 'Collections.emptyList()', or 'List.of()' on JDK 9 and later, which will save some memory. In particular, 'Collections.emptyList()' and 'List.of()' with no arguments always return a shared instance, while 'Arrays.asList()' with no arguments creates a new object every time it's called. Note: the lists returned by 'Collections.singletonList()' and 'List.of()' are immutable, while the list returned 'Arrays.asList()' allows calling the 'set()' method. This may break the code in rare cases. Example: 'List empty = Arrays.asList();\n List one = Arrays.asList(\"one\");' After the quick-fix is applied: 'List empty = Collections.emptyList();\n List one = Collections.singletonList(\"one\");'", + "markdown": "Reports calls to `Arrays.asList()` with at most one argument.\n\n\nSuch calls could be replaced\nwith `Collections.singletonList()`, `Collections.emptyList()`,\nor `List.of()` on JDK 9 and later, which will save some memory.\n\nIn particular, `Collections.emptyList()` and `List.of()` with no arguments\nalways return a shared instance,\nwhile `Arrays.asList()` with no arguments creates a new object every time it's called.\n\nNote: the lists returned by `Collections.singletonList()` and `List.of()` are immutable,\nwhile the list returned `Arrays.asList()` allows calling the `set()` method.\nThis may break the code in rare cases.\n\n**Example:**\n\n\n List empty = Arrays.asList();\n List one = Arrays.asList(\"one\");\n\nAfter the quick-fix is applied:\n\n\n List empty = Collections.emptyList();\n List one = Collections.singletonList(\"one\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ArraysAsListWithZeroOrOneArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnstableApiUsage", + "shortDescription": { + "text": "Unstable API Usage" + }, + "fullDescription": { + "text": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it. The annotations which are used to mark unstable APIs are shown in the list below. By default, the inspection ignores usages of unstable APIs if their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs. However, it may be inconvenient if the project is big, so one can switch off the Ignore API declared in this project option to report the usages of unstable APIs declared in both the project sources and libraries.", + "markdown": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnstableApiUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaUnfriendlyMethodOverload", + "shortDescription": { + "text": "Lambda-unfriendly method overload" + }, + "fullDescription": { + "text": "Reports overloaded methods that take functional interfaces with conflicting abstract method signatures. Such overloads introduce ambiguity and require callers to cast lambdas to a specific type or specify lambda parameter types explicitly. It is preferable to give the overloaded methods different names to eliminate ambiguity. Example: 'interface MyExecutor {\n void execute(Supplier supplier);\n void execute(Callable callable);\n }' Here, 'Supplier' and 'Callable' are functional interfaces whose single abstract methods do not take any parameters and return a non-void value. As a result, the type of the lambda cannot be inferred at the call site unless an explicit cast is used.", + "markdown": "Reports overloaded methods that take functional interfaces with conflicting abstract method signatures.\n\nSuch overloads introduce ambiguity and require callers to cast lambdas to a specific type or specify lambda parameter types explicitly.\nIt is preferable to give the overloaded methods different names to eliminate ambiguity.\n\nExample:\n\n\n interface MyExecutor {\n void execute(Supplier supplier);\n void execute(Callable callable);\n }\n\n\nHere, `Supplier` and `Callable` are functional interfaces\nwhose single abstract methods do not take any parameters and return a non-void value.\nAs a result, the type of the lambda cannot be inferred at the call site unless an explicit cast is used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LambdaUnfriendlyMethodOverload", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableRecordContainsIgnoredMembers", + "shortDescription": { + "text": "'record' contains ignored members" + }, + "fullDescription": { + "text": "Reports serialization methods or fields defined in a 'record' class. Serialization methods include 'writeObject()', 'readObject()', 'readObjectNoData()', 'writeExternal()', and 'readExternal()' and the field 'serialPersistentFields'. These members are not used for the serialization or deserialization of records and therefore unnecessary. Examples: 'record R1() implements Serializable {\n // The field is ignored during record serialization\n @Serial\n private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];\n\n // The method is ignored during record serialization\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }' 'record R2() implements Externalizable {\n // The method is ignored during record serialization\n @Override\n public void writeExternal(ObjectOutput out) throws IOException {\n }\n\n // The method is ignored during record serialization\n @Override\n public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\n }\n }' This inspection depends on the Java feature 'Records' which is available since Java 16. New in 2020.3", + "markdown": "Reports serialization methods or fields defined in a `record` class. Serialization methods include `writeObject()`, `readObject()`, `readObjectNoData()`, `writeExternal()`, and `readExternal()` and the field `serialPersistentFields`. These members are not used for the serialization or deserialization of records and therefore unnecessary.\n\n**Examples:**\n\n\n record R1() implements Serializable {\n // The field is ignored during record serialization\n @Serial\n private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];\n\n // The method is ignored during record serialization\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n record R2() implements Externalizable {\n // The method is ignored during record serialization\n @Override\n public void writeExternal(ObjectOutput out) throws IOException {\n }\n\n // The method is ignored during record serialization\n @Override\n public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\n }\n }\n\nThis inspection depends on the Java feature 'Records' which is available since Java 16.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableRecordContainsIgnoredMembers", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedInnerClassAccess", + "shortDescription": { + "text": "Unnecessarily qualified inner class access" + }, + "fullDescription": { + "text": "Reports any references to inner classes that are unnecessarily qualified with the name of the enclosing class. Such a qualification can be safely removed, which sometimes adds an import for the inner class. Example: 'class X {\n X.Y foo;\n class Y{}\n }' After the quick-fix is applied: 'class X {\n Y foo;\n class Y{}\n }' Use the Ignore references for which an import is needed option to ignore references to inner classes, where removing the qualification adds an import.", + "markdown": "Reports any references to inner classes that are unnecessarily qualified with the name of the enclosing class.\n\nSuch a qualification can be safely removed, which sometimes adds an import for the inner class.\n\nExample:\n\n\n class X {\n X.Y foo;\n class Y{}\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n Y foo;\n class Y{}\n }\n\nUse the **Ignore references for which an import is needed** option to ignore references to inner classes, where\nremoving the qualification adds an import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessarilyQualifiedInnerClassAccess", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocLinkAsPlainText", + "shortDescription": { + "text": "Link specified as plain text" + }, + "fullDescription": { + "text": "Reports plain text links in Javadoc comments. The quick-fix suggests to wrap the link in an '' tag. Example: 'class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }' After the quick-fix is applied: 'class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }' New in 2022.1", + "markdown": "Reports plain text links in Javadoc comments.\n\n\nThe quick-fix suggests to wrap the link in an `` tag.\n\n**Example:**\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JavadocLinkAsPlainText", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SharedThreadLocalRandom", + "shortDescription": { + "text": "'ThreadLocalRandom' instance might be shared" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.ThreadLocalRandom' instances which might be shared between threads. A 'ThreadLocalRandom' should not be shared between threads because that is not thread-safe. The inspection reports instances that are assigned to a field used as a method argument, or assigned to a local variable and used in anonymous or nested classes as they might get shared between threads. Usages of 'ThreadLocalRandom' should typically look like 'ThreadLocalRandom.current().nextInt(...)' (or 'nextDouble(...)' etc.). When all usages are in this form, 'ThreadLocalRandom' instances cannot be used accidentally by multiple threads. Example: 'class Main {\n void printRandomNumbersAsync() {\n ThreadLocalRandom random = ThreadLocalRandom.current();\n CompletableFuture.supplyAsync(() -> generateNumbers(random))\n .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));\n }\n\n private int[] generateNumbers(Random random) {\n return random.ints(1000, 0, 100).toArray();\n }\n }' Use the options to list methods that are safe to be passed to 'ThreadLocalRandom' instances as an argument. It's possible to use regular expressions for method names.", + "markdown": "Reports `java.util.concurrent.ThreadLocalRandom` instances which might be shared between threads.\n\n\nA `ThreadLocalRandom` should not be shared between threads because that is not thread-safe.\nThe inspection reports instances that are assigned to a field used as a method argument,\nor assigned to a local variable and used in anonymous or nested classes as they might get shared between threads.\n\n\nUsages of `ThreadLocalRandom` should typically look like `ThreadLocalRandom.current().nextInt(...)`\n(or `nextDouble(...)` etc.).\nWhen all usages are in this form, `ThreadLocalRandom` instances cannot be used accidentally by multiple threads.\n\n**Example:**\n\n\n class Main {\n void printRandomNumbersAsync() {\n ThreadLocalRandom random = ThreadLocalRandom.current();\n CompletableFuture.supplyAsync(() -> generateNumbers(random))\n .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));\n }\n\n private int[] generateNumbers(Random random) {\n return random.ints(1000, 0, 100).toArray();\n }\n }\n \n\nUse the options to list methods that are safe to be passed to `ThreadLocalRandom` instances as an argument.\nIt's possible to use regular expressions for method names." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SharedThreadLocalRandom", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhileCanBeDoWhile", + "shortDescription": { + "text": "'while' can be replaced with 'do while'" + }, + "fullDescription": { + "text": "Reports 'while' loops that could be more effectively written as 'do-while' loops. There are 'while' loops where the code just before the loop is identical to the code in the body of the loop. Replacing with a 'do-while' loop removes the duplicated code. For 'while' loops without such duplicated code, the quick fix is offered in the editor as well, but without highlighting. Example: 'foo();\n while (x) {\n foo();\n }' Can be replaced with: 'do {\n foo();\n } while (x);' New in 2024.1", + "markdown": "Reports `while` loops that could be more effectively written as `do-while` loops.\nThere are `while` loops where the code just before the loop is identical to the code in the body of the loop.\nReplacing with a `do-while` loop removes the duplicated code.\nFor `while` loops without such duplicated code, the quick fix is offered in the editor as well, but without highlighting.\n\n**Example:**\n\n\n foo();\n while (x) {\n foo();\n }\n\nCan be replaced with:\n\n\n do {\n foo();\n } while (x);\n\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "WhileCanBeDoWhile", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodOverridesConcreteMethod", + "shortDescription": { + "text": "Abstract method overrides concrete method" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that override concrete super methods. Methods overridden from 'java.lang.Object' are not reported by this inspection.", + "markdown": "Reports `abstract` methods that override concrete super methods.\n\nMethods overridden from `java.lang.Object` are not reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractMethodOverridesConcreteMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CodeBlock2Expr", + "shortDescription": { + "text": "Statement lambda can be replaced with expression lambda" + }, + "fullDescription": { + "text": "Reports lambda expressions with code block bodies when expression-style bodies can be used instead. The result of the conversion is shorter and more clear. Example: 'Comparable c = o -> {return 0;};' After the quick-fix is applied: 'Comparable c = o -> 0;' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambda expressions with code block bodies when expression-style bodies can be used instead. The result of the conversion is shorter and more clear.\n\nExample:\n\n\n Comparable c = o -> {return 0;};\n\nAfter the quick-fix is applied:\n\n\n Comparable c = o -> 0;\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CodeBlock2Expr", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyForEach", + "shortDescription": { + "text": "Simplifiable forEach() call" + }, + "fullDescription": { + "text": "Reports 'forEach()' calls that can be replaced with a more concise method or from which intermediate steps can be extracted. Example: 'List findNStrings(List list, int n) {\n List other = new ArrayList<>();\n list.forEach(s -> {\n if(s.length() > n) other.add(s);\n });\n return other;\n }' After the quick-fix is applied: 'List findNStrings(List list, int n) {\n List other = list.stream()\n .filter(s -> s.length() > n)\n .collect(Collectors.toList());\n return other;\n }' This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8. New in 2017.3", + "markdown": "Reports `forEach()` calls that can be replaced with a more concise method or from which intermediate steps can be extracted.\n\n**Example:**\n\n\n List findNStrings(List list, int n) {\n List other = new ArrayList<>();\n list.forEach(s -> {\n if(s.length() > n) other.add(s);\n });\n return other;\n }\n\nAfter the quick-fix is applied:\n\n\n List findNStrings(List list, int n) {\n List other = list.stream()\n .filter(s -> s.length() > n)\n .collect(Collectors.toList());\n return other;\n }\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifyForEach", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Since15", + "shortDescription": { + "text": "Usages of API which isn't available at the configured language level" + }, + "fullDescription": { + "text": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things: Highlight usage of generified classes when the language level is below Java 7. Highlight when default methods are not overridden and the language level is below Java 8. Highlight usage of API when the language level is lower than marked using the '@since' tag in the documentation. Use the Forbid API usages option to forbid usages of the API in respect to the project or custom language level.", + "markdown": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things:\n\n* Highlight usage of generified classes when the language level is below Java 7.\n* Highlight when default methods are not overridden and the language level is below Java 8.\n* Highlight usage of API when the language level is lower than marked using the `@since` tag in the documentation.\n\n\nUse the **Forbid API usages** option to forbid usages of the API in respect to the project or custom language level." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Since15", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantFieldInitialization", + "shortDescription": { + "text": "Redundant field initialization" + }, + "fullDescription": { + "text": "Reports fields explicitly initialized to their default values. Example: 'class Foo {\n int foo = 0;\n List bar = null;\n }' After the quick-fix is applied: 'class Foo {\n int foo;\n List bar;\n }' Use the inspection settings to only report explicit 'null' initialization, for example: 'class Foo {\n int foo = 0; // no warning\n List bar = null; // redundant field initialization warning\n }'", + "markdown": "Reports fields explicitly initialized to their default values.\n\n**Example:**\n\n\n class Foo {\n int foo = 0;\n List bar = null;\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n List bar;\n }\n\n\nUse the inspection settings to only report explicit `null` initialization, for example:\n\n\n class Foo {\n int foo = 0; // no warning\n List bar = null; // redundant field initialization warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantFieldInitialization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadObjectInitialization", + "shortDescription": { + "text": "Instance field may not be initialized by 'readObject()'" + }, + "fullDescription": { + "text": "Reports fields that are not guaranteed to be initialized after the object is deserialized by the 'readObject()' method. The inspection doesn't report transient fields. Note: This inspection uses a very conservative control flow algorithm, and may incorrectly report fields as uninitialized. Example: 'class DataObject implements Serializable {\n String s; // s is not initialized in readObject\n int i;\n\n private void readObject(ObjectInputStream stream) throws IOException {\n i = stream.readInt();\n }\n}'", + "markdown": "Reports fields that are not guaranteed to be initialized after the object is deserialized by the `readObject()` method.\n\nThe inspection doesn't report transient fields.\n\n\nNote: This inspection uses a very conservative control flow algorithm, and may incorrectly report fields\nas uninitialized.\n\n**Example:**\n\n\n class DataObject implements Serializable {\n String s; // s is not initialized in readObject\n int i;\n\n private void readObject(ObjectInputStream stream) throws IOException {\n i = stream.readInt();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceVariableMayNotBeInitializedByReadObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonAtomicOperationOnVolatileField", + "shortDescription": { + "text": "Non-atomic operation on 'volatile' field" + }, + "fullDescription": { + "text": "Reports non-atomic operations on volatile fields. An example of a non-atomic operation is updating the field using the increment operator. As the operation involves read and write, and other modifications may happen in between, data may become corrupted. The operation can be made atomic by surrounding it with a 'synchronized' block or using one of the classes from the 'java.util.concurrent.atomic' package. Example: 'private volatile int v = 1;\n\n void foo() {\n v = 2 * v;\n }'", + "markdown": "Reports non-atomic operations on volatile fields.\n\n\nAn example of a non-atomic operation is updating the field using the increment operator.\nAs the operation involves read and write, and other modifications may happen in between, data may become corrupted.\nThe operation can be made atomic by surrounding it with a `synchronized` block or\nusing one of the classes from the `java.util.concurrent.atomic` package.\n\n**Example:**\n\n\n private volatile int v = 1;\n\n void foo() {\n v = 2 * v;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NonAtomicOperationOnVolatileField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QuestionableName", + "shortDescription": { + "text": "Questionable name" + }, + "fullDescription": { + "text": "Reports variables, methods, or classes with questionable, not really descriptive names. Such names do not help to understand the code, and most probably were created as a temporary thing but were forgotten afterwards. Example: 'int aa = 42;' Rename quick-fix is suggested only in the editor. Use the option to list names that should be reported.", + "markdown": "Reports variables, methods, or classes with questionable, not really descriptive names. Such names do not help to understand the code, and most probably were created as a temporary thing but were forgotten afterwards.\n\n**Example:**\n\n\n int aa = 42;\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to list names that should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "QuestionableName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UNCHECKED_WARNING", + "shortDescription": { + "text": "Unchecked warning" + }, + "fullDescription": { + "text": "Reports code on which an unchecked warning will be issued by the javac compiler. Every unchecked warning may potentially trigger 'ClassCastException' at runtime. Example: 'List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // unchecked assignment'", + "markdown": "Reports code on which an unchecked warning will be issued by the javac compiler. Every unchecked warning may potentially trigger `ClassCastException` at runtime.\n\nExample:\n\n\n List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // unchecked assignment\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "unchecked", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 160, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLengthCheck", + "shortDescription": { + "text": "Redundant array length check" + }, + "fullDescription": { + "text": "Reports unnecessary array length checks followed by array iteration. When array length is zero, the iteration will be skipped anyway, so there's no need to check length explicitly. Example: 'void f(String[] array) {\n if (array.length != 0) { // unnecessary check\n for (String str : array) {\n System.out.println(str);\n }\n }\n }' A quick-fix is suggested to unwrap or remove the length check: 'void f(String[] array) {\n for (String str : array) {\n System.out.println(str);\n }\n }' New in 2022.3", + "markdown": "Reports unnecessary array length checks followed by array iteration. When array length is zero, the iteration will be skipped anyway, so there's no need to check length explicitly.\n\nExample:\n\n\n void f(String[] array) {\n if (array.length != 0) { // unnecessary check\n for (String str : array) {\n System.out.println(str);\n }\n }\n }\n\nA quick-fix is suggested to unwrap or remove the length check:\n\n\n void f(String[] array) {\n for (String str : array) {\n System.out.println(str);\n }\n }\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantLengthCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataFlowIssue", + "shortDescription": { + "text": "Nullability and data flow problems" + }, + "fullDescription": { + "text": "Reports code constructs that always violate nullability contracts, may throw exceptions, or are just redundant, based on data flow analysis. Examples: 'if (array.length < index) {\n System.out.println(array[index]);\n} // Array index is always out of bounds\n\nif (str == null) System.out.println(\"str is null\");\nSystem.out.println(str.trim());\n// the last statement may throw an NPE\n\n@NotNull\nInteger square(@Nullable Integer input) {\n // the method contract is violated\n return input == null ? null : input * input;\n}' The inspection behavior may be controlled by a number of annotations, such as nullability annotations, '@Contract' annotation, '@Range' annotation and so on. Configure the inspection: Use the Suggest @Nullable annotation for methods/fields/parameters where nullable values are used option to warn when a nullable value is passed as an argument to a method with a non-annotated parameter, stored into non-annotated field, or returned from a non-annotated method. In this case, the inspection will suggest propagating the '@Nullable' annotation. You can also configure nullability annotations using the Configure Annotations button. Use the Treat non-annotated members and parameters as @Nullable option to assume that non-annotated members can be null, so they must not be used in non-null context. Use the Report not-null required parameter with null-literal argument usages option to report method parameters that cannot be null (e.g. immediately dereferenced in the method body), but there are call sites where a 'null' literal is passed. Use the Report nullable methods that always return a non-null value option to report methods that are annotated as '@Nullable', but always return non-null value. In this case, it's suggested that you change the annotation to '@NotNull'. Use the Ignore assert statements option to control how the inspection treats 'assert' statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode). Use the Report problems that happen only on some code paths option to control whether to report problems that may happen only on some code path. If this option is disabled, warnings like exception is possible will not be reported. The inspection will report only warnings like exception will definitely occur. This mode may greatly reduce the number of false-positives, especially if the code is not consistently annotated with nullability and contract annotations. That is why it can be useful for finding the most important problems in legacy code bases. Before IntelliJ IDEA 2022.3, this inspection was part of the \"Constant Conditions & Exceptions\" inspection. Now, it is split into two inspections: \"Constant Values\" and \"Nullability and data flow problems\".", + "markdown": "Reports code constructs that always violate nullability contracts, may throw exceptions, or are just redundant, based on data flow analysis.\n\nExamples:\n\n if (array.length < index) {\n System.out.println(array[index]);\n } // Array index is always out of bounds\n\n if (str == null) System.out.println(\"str is null\");\n System.out.println(str.trim());\n // the last statement may throw an NPE\n\n @NotNull\n Integer square(@Nullable Integer input) {\n // the method contract is violated\n return input == null ? null : input * input;\n }\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Suggest @Nullable annotation for methods/fields/parameters where nullable values are used** option to warn when a nullable value is passed as an argument to a method with a non-annotated parameter, stored into non-annotated field, or returned from a non-annotated method. In this case, the inspection will suggest propagating the `@Nullable` annotation. You can also configure nullability annotations using the **Configure Annotations** button.\n* Use the **Treat non-annotated members and parameters as @Nullable** option to assume that non-annotated members can be null, so they must not be used in non-null context.\n* Use the **Report not-null required parameter with null-literal argument usages** option to report method parameters that cannot be null (e.g. immediately dereferenced in the method body), but there are call sites where a `null` literal is passed.\n* Use the **Report nullable methods that always return a non-null value** option to report methods that are annotated as `@Nullable`, but always return non-null value. In this case, it's suggested that you change the annotation to `@NotNull`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Report problems that happen only on some code paths** option to control whether to report problems that may happen only on some code path. If this option is disabled, warnings like *exception is possible* will not be reported. The inspection will report only warnings like *exception will definitely occur*. This mode may greatly reduce the number of false-positives, especially if the code is not consistently annotated with nullability and contract annotations. That is why it can be useful for finding the most important problems in legacy code bases.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of the \"Constant Conditions \\& Exceptions\" inspection.\nNow, it is split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DataFlowIssue", + "cweIds": [ + 129, + 252, + 253, + 394, + 395, + 476, + 570, + 571, + 690 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterCanBeLocal", + "shortDescription": { + "text": "Value passed as parameter never read" + }, + "fullDescription": { + "text": "Reports redundant method parameters that can be replaced with local variables. If all local usages of a parameter are preceded by assignments to that parameter, the parameter can be removed and its usages replaced with local variables. It makes no sense to have such a parameter, as values that are passed to it are overwritten. Usually, the problem appears as a result of refactoring. Example: 'void test(int p) {\n p = 1;\n System.out.print(p);\n }' After the quick-fix is applied: 'void test() {\n int p = 1;\n System.out.print(p);\n }'", + "markdown": "Reports redundant method parameters that can be replaced with local variables.\n\nIf all local usages of a parameter are preceded by assignments to that parameter, the\nparameter can be removed and its usages replaced with local variables.\nIt makes no sense to have such a parameter, as values that are passed to it are overwritten.\nUsually, the problem appears as a result of refactoring.\n\nExample:\n\n\n void test(int p) {\n p = 1;\n System.out.print(p);\n }\n\nAfter the quick-fix is applied:\n\n\n void test() {\n int p = 1;\n System.out.print(p);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterCanBeLocal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementDensity", + "shortDescription": { + "text": "'switch' statement with too low of a branch density" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions with a too low ratio of switch labels to executable statements. Such 'switch' statements may be confusing and should probably be refactored. Example: 'switch (i) { // one case and 5 executable statements -> 20% density\n case 1:\n System.out.println(\"1\");\n System.out.println(\"2\");\n System.out.println(\"3\");\n System.out.println(\"4\");\n System.out.println(\"5\");\n break;\n }' Use the Minimum density of branches field to specify the allowed ratio of the switch labels to executable statements.", + "markdown": "Reports `switch` statements or expressions with a too low ratio of switch labels to executable statements.\n\nSuch `switch` statements\nmay be confusing and should probably be refactored.\n\nExample:\n\n\n switch (i) { // one case and 5 executable statements -> 20% density\n case 1:\n System.out.println(\"1\");\n System.out.println(\"2\");\n System.out.println(\"3\");\n System.out.println(\"4\");\n System.out.println(\"5\");\n break;\n }\n\n\nUse the **Minimum density of branches** field to specify the allowed ratio of the switch labels to executable statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SwitchStatementDensity", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedJavadocCode", + "shortDescription": { + "text": "Mismatch between Javadoc and code" + }, + "fullDescription": { + "text": "Reports parts of method specification written in English that contradict with the method declaration. This includes: Method specified to return 'true' or 'false' but its return type is not boolean. Method specified to return 'null' but it's annotated as '@NotNull' or its return type is primitive. Method specified to return list but its return type is set or array. And so on. Example: '/**\n * @return true if user is found, false otherwise\n */\n User findUser(String name);' Note that false-positives are possible, as this inspection tries to interpret a human language. However, if the inspection reports incorrectly, it's still possible that the description is confusing and should be rewritten. New in 2022.3", + "markdown": "Reports parts of method specification written in English that contradict with the method declaration. This includes:\n\n* Method specified to return `true` or `false` but its return type is not boolean.\n* Method specified to return `null` but it's annotated as `@NotNull` or its return type is primitive.\n* Method specified to return list but its return type is set or array.\n* And so on.\n\n**Example:**\n\n\n /**\n * @return true if user is found, false otherwise\n */\n User findUser(String name);\n\n\nNote that false-positives are possible, as this inspection tries to interpret a human language. However, if the inspection reports\nincorrectly, it's still possible that the description is confusing and should be rewritten.\n\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedJavadocCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableAnnotation", + "shortDescription": { + "text": "Simplifiable annotation" + }, + "fullDescription": { + "text": "Reports annotations that can be simplified to their single-element or marker shorthand form. Problems reported: Redundant 'value=' in annotation name-value pairs Redundant braces around array values that contain only a single value Redundant whitespace between the @-sign and the name of annotations Redundant whitespace between annotation names and parameter lists Redundant parentheses in annotations without any parameters Example: '@interface Foo { String[] value(); }\n\n @ Foo({\"foo\"})\n public String name;' After the quick-fix is applied: '@interface Foo { String[] value(); }\n\n @Foo(\"foo\")\n public String name;'", + "markdown": "Reports annotations that can be simplified to their single-element or marker shorthand form.\n\n\nProblems reported:\n\n* Redundant `value=` in annotation name-value pairs\n* Redundant braces around array values that contain only a single value\n* Redundant whitespace between the @-sign and the name of annotations\n* Redundant whitespace between annotation names and parameter lists\n* Redundant parentheses in annotations without any parameters\n\n**Example:**\n\n\n @interface Foo { String[] value(); }\n\n @ Foo({\"foo\"})\n public String name;\n\nAfter the quick-fix is applied:\n\n\n @interface Foo { String[] value(); }\n\n @Foo(\"foo\")\n public String name;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifiableAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Guava", + "shortDescription": { + "text": "Guava's functional primitives can be replaced with Java" + }, + "fullDescription": { + "text": "Reports usages of Guava's functional primitives that can be migrated to standard Java API calls. For example, the inspection reports usages of classes and interfaces like 'FluentIterable', 'Optional', 'Function', 'Predicate', or 'Supplier'. Example: 'ImmutableList results = FluentIterable.from(List.of(1, 2, 3)).transform(Object::toString).toList();' After the quick-fix is applied: 'List results = List.of(1, 2, 3).stream().map(Object::toString).collect(Collectors.toList());' The quick-fix may change the semantics. Some lazy-evaluated Guava's iterables can be transformed to eager-evaluated. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports usages of Guava's functional primitives that can be migrated to standard Java API calls.\n\nFor example, the inspection reports usages of classes and interfaces like `FluentIterable`, `Optional`, `Function`,\n`Predicate`, or `Supplier`.\n\nExample:\n\n\n ImmutableList results = FluentIterable.from(List.of(1, 2, 3)).transform(Object::toString).toList();\n\nAfter the quick-fix is applied:\n\n\n List results = List.of(1, 2, 3).stream().map(Object::toString).collect(Collectors.toList());\n\n\nThe quick-fix may change the semantics. Some lazy-evaluated Guava's iterables can be transformed to eager-evaluated.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Guava", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoopMethodInAbstractClass", + "shortDescription": { + "text": "No-op method in 'abstract' class" + }, + "fullDescription": { + "text": "Reports no-op (for \"no operation\") methods in 'abstract' classes. It is usually a better design to make such methods 'abstract' themselves so that classes inheriting these methods provide their implementations. Example: 'abstract class Test {\n protected void doTest() {\n }\n }'", + "markdown": "Reports no-op (for \"no operation\") methods in `abstract` classes.\n\nIt is usually a better\ndesign to make such methods `abstract` themselves so that classes inheriting these\nmethods provide their implementations.\n\n**Example:**\n\n\n abstract class Test {\n protected void doTest() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NoopMethodInAbstractClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverridableMethodCallDuringObjectConstruction", + "shortDescription": { + "text": "Overridable method called during object construction" + }, + "fullDescription": { + "text": "Reports calls to overridable methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Methods are overridable if they are not declared as 'final', 'static', or 'private'. Package-local methods are considered safe, even though they are overridable. Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n }' This inspection shares the functionality with the following inspections: Abstract method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.", + "markdown": "Reports calls to overridable methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nMethods are overridable if they are not declared as `final`, `static`, or `private`.\nPackage-local methods are considered safe, even though they are overridable. Such calls may result in subtle bugs,\nas object initialization may happen before the method call.\n\n**Example:**\n\n\n class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n }\n\nThis inspection shares the functionality with the following inspections:\n\n* Abstract method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverridableMethodCallDuringObjectConstruction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitCallToSuper", + "shortDescription": { + "text": "Implicit call to 'super()'" + }, + "fullDescription": { + "text": "Reports constructors that do not begin with a call to \"super\" constructor or another constructor of the same class. Such constructors can be thought of as implicitly beginning with a call to 'super()'. Some coding standards prefer that such calls to 'super()' be made explicitly. Example: 'class Foo {\n Foo() {}\n }' After the quick-fix is applied: 'class Foo {\n Foo() {\n super();\n }\n }' Use the inspection settings to ignore classes extending directly from 'Object'. For instance: 'class Foo {\n Foo() {} // Not reported\n }\n\n class Bar extends Foo {\n Bar() {} // Implicit call to 'super()'\n }'", + "markdown": "Reports constructors that do not begin with a call to \"super\" constructor or another constructor of the same class.\n\nSuch constructors can be thought of as implicitly beginning with a\ncall to `super()`. Some coding standards prefer that such calls to\n`super()` be made explicitly.\n\n**Example:**\n\n\n class Foo {\n Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\n\nUse the inspection settings to ignore classes extending directly from `Object`.\nFor instance:\n\n\n class Foo {\n Foo() {} // Not reported\n }\n\n class Bar extends Foo {\n Bar() {} // Implicit call to 'super()'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ImplicitCallToSuper", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingDeprecatedAnnotation", + "shortDescription": { + "text": "Missing '@Deprecated' annotation" + }, + "fullDescription": { + "text": "Reports module declarations, classes, fields, or methods that have the '@deprecated' Javadoc tag but do not have the '@java.lang.Deprecated' annotation. Example: '/**\n * @deprecated use {@code example()} instead\n */\n void sample(){ }' After the quick-fix is applied: '/**\n * @deprecated use {@code example()} instead\n */\n @Deprecated\n void sample(){ }' This inspection reports only if the language level of the project or module is 5 or higher. Use the checkbox below to report members annotated with '@Deprecated' without an explanation in a Javadoc '@deprecated' tag. This inspection depends on the Java feature 'Annotations' which is available since Java 5.", + "markdown": "Reports module declarations, classes, fields, or methods that have the `@deprecated` Javadoc tag but do not have the `@java.lang.Deprecated` annotation.\n\n**Example:**\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n void sample(){ }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n @Deprecated\n void sample(){ }\n\nThis inspection reports only if the language level of the project or module is 5 or higher.\n\n\nUse the checkbox below to report members annotated with `@Deprecated` without\nan explanation in a Javadoc `@deprecated` tag.\n\nThis inspection depends on the Java feature 'Annotations' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingDeprecatedAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringTemplateMigration", + "shortDescription": { + "text": "String template can be used" + }, + "fullDescription": { + "text": "Reports 'String' concatenations that can be simplified by replacing them with a string template. Example: 'String name = \"Bob\";\n String greeting = \"Hello, \" + name + \". You are \" + 29 + \" years old.\";' After the quick-fix is applied: 'String name = \"Bob\";\n String greeting = STR.\"Hello, \\{name}. You are 29 years old.\";' This inspection depends on the Java feature 'String templates' which is available since Java 21-preview. New in 2023.3", + "markdown": "Reports `String` concatenations that can be simplified by replacing them with a string template.\n\n**Example:**\n\n\n String name = \"Bob\";\n String greeting = \"Hello, \" + name + \". You are \" + 29 + \" years old.\";\n\nAfter the quick-fix is applied:\n\n\n String name = \"Bob\";\n String greeting = STR.\"Hello, \\{name}. You are 29 years old.\";\n\nThis inspection depends on the Java feature 'String templates' which is available since Java 21-preview.\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringTemplateMigration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 21", + "index": 192, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CachedNumberConstructorCall", + "shortDescription": { + "text": "Number constructor call with primitive argument" + }, + "fullDescription": { + "text": "Reports instantiations of new 'Long', 'Integer', 'Short', or 'Byte' objects that have a primitive 'long', 'integer', 'short', or 'byte' argument. It is recommended that you use the static method 'valueOf()' introduced in Java 5. By default, this method caches objects for values between -128 and 127 inclusive. Example: 'Integer i = new Integer(1);\n Long l = new Long(1L);' After the quick-fix is applied, the code changes to: 'Integer i = Integer.valueOf(1);\n Long l = Long.valueOf(1L);' This inspection only reports if the language level of the project or module is 5 or higher Use the Ignore new number expressions with a String argument option to ignore calls to number constructors with a 'String' argument. Use the Report only when constructor is @Deprecated option to only report calls to deprecated constructors. 'Long', 'Integer', 'Short' and 'Byte' constructors are deprecated since JDK 9.", + "markdown": "Reports instantiations of new `Long`, `Integer`, `Short`, or `Byte` objects that have a primitive `long`, `integer`, `short`, or `byte` argument.\n\nIt is recommended that you use the static method `valueOf()`\nintroduced in Java 5. By default, this method caches objects for values between -128 and\n127 inclusive.\n\n**Example:**\n\n\n Integer i = new Integer(1);\n Long l = new Long(1L);\n\nAfter the quick-fix is applied, the code changes to:\n\n\n Integer i = Integer.valueOf(1);\n Long l = Long.valueOf(1L);\n\nThis inspection only reports if the language level of the project or module is 5 or higher\n\n\nUse the **Ignore new number expressions with a String argument** option to ignore calls to number constructors with a `String` argument.\n\n\nUse the **Report only when constructor is @Deprecated** option to only report calls to deprecated constructors.\n`Long`, `Integer`, `Short` and `Byte` constructors are deprecated since JDK 9." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CachedNumberConstructorCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MustAlreadyBeRemovedApi", + "shortDescription": { + "text": "API must already be removed" + }, + "fullDescription": { + "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' that should have been removed in the current version of the declaring library. It compares the specified scheduled removal version with the version that you can set below. Specify the version as a string separated with dots and optionally postfixed with 'alpha', 'beta', 'snapshot', or 'eap'. Examples of valid versions: '1.0', '2.3.1', '2018.1', '7.5-snapshot', '3.0-eap'. Version comparison is intuitive: '1.0 < 2.0', '1.0-eap < 1.0', '2.3-snapshot < 2.3' and so on. For detailed comparison logic, refer to the implementation of VersionComparatorUtil.", + "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` that should have been removed in the current version of the declaring library.\n\nIt compares the specified scheduled removal version with the version that you can set below.\n\n\nSpecify the version as a string separated with dots and optionally postfixed with\n`alpha`, `beta`, `snapshot`, or `eap`.\n\nExamples of valid versions: `1.0`, `2.3.1`, `2018.1`, `7.5-snapshot`, `3.0-eap`.\n\n\nVersion comparison is intuitive: `1.0 < 2.0`, `1.0-eap < 1.0`, `2.3-snapshot < 2.3` and so on.\nFor detailed comparison logic, refer to the implementation of [VersionComparatorUtil](https://github.com/JetBrains/intellij-community/blob/master/platform/util-rt/src/com/intellij/util/text/VersionComparatorUtil.java)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "MustAlreadyBeRemovedApi", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldHidesSuperclassField", + "shortDescription": { + "text": "Subclass field hides superclass field" + }, + "fullDescription": { + "text": "Reports fields in a derived class that are named identically a field of a superclass. Java fields cannot be overridden in derived classes, so the field in the derived class will hide the field from the superclass. As a result of such naming, you may accidentally use the field of the derived class where the identically named field of a base class is intended. A quick-fix is suggested to rename the field in the derived class. Example: 'class Parent {\n Parent parent;\n}\nclass Child extends Parent {\n Child parent;\n}' You can configure the following options for this inspection: Ignore non-accessible fields - indicates whether this inspection should report all name clashes, or only clashes with fields which are visible from the subclass. Ignore static fields hiding static fields - ignore 'static' fields which hide 'static' fields in base classes.", + "markdown": "Reports fields in a derived class that are named identically a field of a superclass. Java fields cannot be overridden in derived classes, so the field in the derived class will hide the field from the superclass.\n\n\nAs a result of such naming, you may accidentally use the field of the derived class\nwhere the identically named field of a base class is intended.\n\nA quick-fix is suggested to rename the field in the derived class.\n\n**Example:**\n\n class Parent {\n Parent parent;\n }\n class Child extends Parent {\n Child parent;\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - indicates whether this inspection should report all name clashes, or only clashes with fields which are visible from the subclass.\n2. **Ignore static fields hiding static fields** - ignore `static` fields which hide `static` fields in base classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldNameHidesFieldInSuperclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimpleDateFormatWithoutLocale", + "shortDescription": { + "text": "'SimpleDateFormat' without locale" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.SimpleDateFormat' or 'java.time.format.DateTimeFormatter' that do not specify a 'java.util.Locale'. These calls will use the platform default locale, which depends on the OS settings. This can lead to surprising behaviour when the code is run on a different platform or the OS settings are changed. 'Example:' 'new SimpleDateFormat(\"yyyy\");\n DateTimeFormatter.ofPattern(\"d/M/y\");'", + "markdown": "Reports instantiations of `java.util.SimpleDateFormat` or `java.time.format.DateTimeFormatter` that do not specify a `java.util.Locale`. These calls will use the platform default locale, which depends on the OS settings. This can lead to surprising behaviour when the code is run on a different platform or the OS settings are changed.\n\n`Example:`\n\n\n new SimpleDateFormat(\"yyyy\");\n DateTimeFormatter.ofPattern(\"d/M/y\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimpleDateFormatWithoutLocale", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnnotationClass", + "shortDescription": { + "text": "Annotation interface" + }, + "fullDescription": { + "text": "Reports annotation interfaces. Such interfaces are not supported under Java 1.4 and earlier.", + "markdown": "Reports annotation interfaces. Such interfaces are not supported under Java 1.4 and earlier." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnnotationClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Finalize", + "shortDescription": { + "text": "'finalize()' should not be overridden" + }, + "fullDescription": { + "text": "Reports overriding the 'Object.finalize()' method. According to the 'Object.finalize()' documentation: The finalization mechanism is inherently problematic. Finalization can lead to performance issues, deadlocks, and hangs. Errors in finalizers can lead to resource leaks; there is no way to cancel finalization if it is no longer necessary; and no ordering is specified among calls to 'finalize' methods of different objects. Furthermore, there are no guarantees regarding the timing of finalization. The 'finalize' method might be called on a finalizable object only after an indefinite delay, if at all. Configure the inspection: Use the Ignore for trivial 'finalize()' implementations option to ignore 'finalize()' implementations with an empty method body or a body containing only 'if' statements that have a condition which evaluates to 'false' and is a compile-time constant. For performance reasons it can be beneficial to override a non-trivial 'finalize()' with an empty implementation in a subclass. An empty final 'finalize()' implementation can also be used to prevent subclasses from overriding.", + "markdown": "Reports overriding the `Object.finalize()` method.\n\nAccording to the `Object.finalize()` documentation:\n>\n> The finalization mechanism is inherently problematic. Finalization can lead\n> to performance issues, deadlocks, and hangs. Errors in finalizers can lead\n> to resource leaks; there is no way to cancel finalization if it is no longer\n> necessary; and no ordering is specified among calls to `finalize`\n> methods of different objects. Furthermore, there are no guarantees regarding\n> the timing of finalization. The `finalize` method might be called\n> on a finalizable object only after an indefinite delay, if at all.\n\nConfigure the inspection:\n\n* Use the **Ignore for trivial 'finalize()' implementations** option to ignore `finalize()` implementations with an empty method body or a body containing only `if` statements that have a condition which evaluates to `false` and is a compile-time constant. For performance reasons it can be beneficial to override a non-trivial `finalize()` with an empty implementation in a subclass. An empty final `finalize()` implementation can also be used to prevent subclasses from overriding." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalizeDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 75, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessArithmeticExpression", + "shortDescription": { + "text": "Pointless arithmetic expression" + }, + "fullDescription": { + "text": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, and division by one. Such expressions may be the result of automated refactorings and they are unlikely to be what the developer intended to do. The quick-fix simplifies such expressions. Example: 'void f(int a) {\n int x = a - a;\n int y = a + 0;\n int res = x / x;\n }' After the quick-fix is applied: 'void f(int a) {\n int x = 0;\n int y = a;\n int res = 1;\n }' Note that in rare cases, the suggested replacement might not be completely equivalent to the original code for all possible inputs. For example, the inspection suggests replacing 'x / x' with '1'. However, if 'x' is zero, the original code throws 'ArithmeticException' or results in 'NaN'. Also, if 'x' is 'NaN', then the result is also 'NaN'. It's very unlikely that such behavior is intended.", + "markdown": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, and division by one.\n\nSuch expressions may be the result of automated refactorings and they are unlikely to be what the developer intended to do.\n\nThe quick-fix simplifies such expressions.\n\n**Example:**\n\n\n void f(int a) {\n int x = a - a;\n int y = a + 0;\n int res = x / x;\n }\n\nAfter the quick-fix is applied:\n\n\n void f(int a) {\n int x = 0;\n int y = a;\n int res = 1;\n }\n\n\nNote that in rare cases, the suggested replacement might not be completely equivalent to the original code\nfor all possible inputs. For example, the inspection suggests replacing `x / x` with `1`.\nHowever, if `x` is zero, the original code throws `ArithmeticException` or results in `NaN`.\nAlso, if `x` is `NaN`, then the result is also `NaN`. It's very unlikely that such behavior is intended." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessArithmeticExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyLargePrimitiveArrayInitializer", + "shortDescription": { + "text": "Overly large initializer for array of primitive type" + }, + "fullDescription": { + "text": "Reports array initializer expressions for primitive arrays that contain too many elements. Such initializers may result in overly large class files because code must be generated to initialize each array element. In memory or bandwidth constrained environments, it may be more efficient to load large arrays of primitives from resource files. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Use the option to specify the maximum number of elements to allow in primitive array initializers.", + "markdown": "Reports array initializer expressions for primitive arrays that contain too many elements. Such initializers may result in overly large class files because code must be generated to initialize each array element. In memory or bandwidth constrained environments, it may be more efficient to load large arrays of primitives from resource files.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in primitive array initializers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyLargePrimitiveArrayInitializer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectNotify", + "shortDescription": { + "text": "Call to 'notify()' instead of 'notifyAll()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.notify()'. While occasionally useful, in almost all cases 'Object.notifyAll()' is a better choice because calling 'Object.notify()' may lead to deadlocks. See Doug Lea's Concurrent Programming in Java for a discussion.", + "markdown": "Reports calls to `Object.notify()`. While occasionally useful, in almost all cases `Object.notifyAll()` is a better choice because calling `Object.notify()` may lead to deadlocks. See Doug Lea's *Concurrent Programming in Java* for a discussion." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToNotifyInsteadOfNotifyAll", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceVariableUninitializedUse", + "shortDescription": { + "text": "Instance field used before initialization" + }, + "fullDescription": { + "text": "Reports instance variables that are read before initialization. The inspection ignores equality checks with 'null'. Example: 'class Foo {\n int bar;\n\n Foo() {\n System.out.println(bar);\n }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore if annotated by option to specify special annotations. The inspection will ignore fields annotated with one of these annotations. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports instance variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n int bar;\n\n Foo() {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection will ignore fields\nannotated with one of these annotations.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceVariableUsedBeforeInitialized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExpressionMayBeFactorized", + "shortDescription": { + "text": "Expression can be factorized" + }, + "fullDescription": { + "text": "Reports expressions that can be factorized, i.e. reorganized to pull out a common factor. This reduces redundancy and could improve the readability of your code. Example: 'a && b || a && c' After the quick-fix is applied: 'a && (b || c)' New in 2021.3", + "markdown": "Reports expressions that can be factorized, i.e. reorganized to pull out a common factor. This reduces redundancy and could improve the readability of your code.\n\n**Example:**\n\n\n a && b || a && c\n\nAfter the quick-fix is applied:\n\n\n a && (b || c)\n\nNew in 2021.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ExpressionMayBeFactorized", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListRemoveInLoop", + "shortDescription": { + "text": "'List.remove()' called in loop" + }, + "fullDescription": { + "text": "Reports 'List.remove(index)' called in a loop that can be replaced with 'List.subList().clear()'. The replacement is more efficient for most 'List' implementations when many elements are deleted. Example: 'void removeRange(List list, int from, int to) {\n for (int i = from; i < to; i++) {\n list.remove(from);\n }\n }' After the quick-fix is applied: 'void removeRange(List list, int from, int to) {\n if (to > from) {\n list.subList(from, to).clear();\n }\n }' The quick-fix adds a range check automatically to prevent a possible 'IndexOutOfBoundsException' when the minimal value is bigger than the maximal value. It can be removed if such a situation is impossible in your code. New in 2018.2", + "markdown": "Reports `List.remove(index)` called in a loop that can be replaced with `List.subList().clear()`.\n\nThe replacement\nis more efficient for most `List` implementations when many elements are deleted.\n\nExample:\n\n\n void removeRange(List list, int from, int to) {\n for (int i = from; i < to; i++) {\n list.remove(from);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void removeRange(List list, int from, int to) {\n if (to > from) {\n list.subList(from, to).clear();\n }\n }\n\n\nThe quick-fix adds a range check automatically to prevent a possible `IndexOutOfBoundsException` when the minimal value is bigger\nthan the maximal value. It can be removed if such a situation is impossible in your code.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ListRemoveInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingOverrideAnnotation", + "shortDescription": { + "text": "Missing '@Override' annotation" + }, + "fullDescription": { + "text": "Reports methods overriding superclass methods but are not annotated with '@java.lang.Override'. Annotating methods with '@java.lang.Override' improves code readability since it shows the intent. In addition, the compiler emits an error when a signature of the overridden method doesn't match the superclass method. Example: 'class X {\n public String toString() {\n return \"hello world\";\n }\n }' After the quick-fix is applied: 'class X {\n @Override\n public String toString() {\n return \"hello world\";\n }\n }' Configure the inspection: Use the Ignore 'equals()', 'hashCode()' and 'toString()' option to ignore these 'java.lang.Object' methods: 'equals()', 'hashCode()', and 'toString()'. The risk that these methods will disappear and your code won't be compiling anymore due to the '@Override' annotation is relatively small. Use the Ignore methods in anonymous classes option to ignore methods in anonymous classes. Disable the Highlight method when its overriding methods do not all have the '@Override' annotation option to only warn on the methods missing an '@Override' annotation, and not on overridden methods where one or more descendants are missing an '@Override' annotation. This inspection depends on the Java feature 'Annotations' which is available since Java 5.", + "markdown": "Reports methods overriding superclass methods but are not annotated with `@java.lang.Override`.\n\n\nAnnotating methods with `@java.lang.Override` improves code readability since it shows the intent.\nIn addition, the compiler emits an error when a signature of the overridden method doesn't match the superclass method.\n\n**Example:**\n\n\n class X {\n public String toString() {\n return \"hello world\";\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class X {\n @Override\n public String toString() {\n return \"hello world\";\n }\n }\n \nConfigure the inspection:\n\n* Use the **Ignore 'equals()', 'hashCode()' and 'toString()'** option to ignore these `java.lang.Object` methods: `equals()`, `hashCode()`, and `toString()`. The risk that these methods will disappear and your code won't be compiling anymore due to the `@Override` annotation is relatively small.\n* Use the **Ignore methods in anonymous classes** option to ignore methods in anonymous classes.\n* Disable the **Highlight method when its overriding methods do not all have the '@Override' annotation** option to only warn on the methods missing an `@Override` annotation, and not on overridden methods where one or more descendants are missing an `@Override` annotation.\n\nThis inspection depends on the Java feature 'Annotations' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "override", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharUsedInArithmeticContext", + "shortDescription": { + "text": "'char' expression used in arithmetic context" + }, + "fullDescription": { + "text": "Reports expressions of the 'char' type used in addition or subtraction expressions. Such code is not necessarily an issue but may result in bugs (for example, if a string is expected). Example: 'int a = 'a' + 42;' After the quick-fix is applied: 'int a = (int) 'a' + 42;' For the 'String' context: 'int i1 = 1;\nint i2 = 2;\nSystem.out.println(i2 + '-' + i1 + \" = \" + (i2 - i1));' After the quick-fix is applied: 'System.out.println(i2 + \"-\" + i1 + \" = \" + (i2 - i1));'", + "markdown": "Reports expressions of the `char` type used in addition or subtraction expressions.\n\nSuch code is not necessarily an issue but may result in bugs (for example,\nif a string is expected).\n\n**Example:** `int a = 'a' + 42;`\n\nAfter the quick-fix is applied: `int a = (int) 'a' + 42;`\n\nFor the `String` context:\n\n int i1 = 1;\n int i2 = 2;\n System.out.println(i2 + '-' + i1 + \" = \" + (i2 - i1));\n\nAfter the quick-fix is applied:\n`System.out.println(i2 + \"-\" + i1 + \" = \" + (i2 - i1));`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CharUsedInArithmeticContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEqualsCharSequence", + "shortDescription": { + "text": "'String.equals()' called with 'CharSequence' argument" + }, + "fullDescription": { + "text": "Reports calls to 'String.equals()' with a 'CharSequence' as the argument. 'String.equals()' can only return 'true' for 'String' arguments. To compare the contents of a 'String' with a non-'String' 'CharSequence' argument, use the 'contentEquals()' method. Example: 'boolean equals(String s, CharSequence ch) {\n return s.equals(ch);\n }' After quick-fix is applied: 'boolean equals(String s, CharSequence ch) {\n return s.contentEquals(ch);\n }' New in 2017.3", + "markdown": "Reports calls to `String.equals()` with a `CharSequence` as the argument.\n\n\n`String.equals()` can only return `true` for `String` arguments.\nTo compare the contents of a `String` with a non-`String` `CharSequence` argument,\nuse the `contentEquals()` method.\n\n**Example:**\n\n\n boolean equals(String s, CharSequence ch) {\n return s.equals(ch);\n }\n\nAfter quick-fix is applied:\n\n\n boolean equals(String s, CharSequence ch) {\n return s.contentEquals(ch);\n }\n\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StringEqualsCharSequence", + "cweIds": [ + 597 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestFailedLine", + "shortDescription": { + "text": "Failed line in test" + }, + "fullDescription": { + "text": "Reports failed method calls or assertions in tests. It helps detect the failed line in code faster and start debugging it immediately. Example: '@Test\n fun foo() {\n assertEquals(1, 0) // highlighted\n }'", + "markdown": "Reports failed method calls or assertions in tests. It helps detect the failed line in code faster and start debugging it immediately.\n\n**Example:**\n\n\n @Test\n fun foo() {\n assertEquals(1, 0) // highlighted\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "TestFailedLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicStaticCollectionField", + "shortDescription": { + "text": "'public static' collection field" + }, + "fullDescription": { + "text": "Reports modifiable 'public' 'static' Collection fields. Even though they are often used to store collections of constant values, these fields nonetheless represent a security hazard, as their contents may be modified even if the field is declared as 'final'. Example: 'public static final List EVENTS = new ArrayList<>();'\n Use the table in the Options section to specify methods returning unmodifiable collections. 'public' 'static' collection fields initialized with these methods will not be reported.", + "markdown": "Reports modifiable `public` `static` Collection fields.\n\nEven though they are often used to store collections of constant values, these fields nonetheless represent a security\nhazard, as their contents may be modified even if the field is declared as `final`.\n\n**Example:**\n\n\n public static final List EVENTS = new ArrayList<>();\n \n\nUse the table in the **Options** section to specify methods returning unmodifiable collections.\n`public` `static` collection fields initialized with these methods will not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicStaticCollectionField", + "cweIds": [ + 732 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsConcreteCollection", + "shortDescription": { + "text": "Class explicitly extends a 'Collection' class" + }, + "fullDescription": { + "text": "Reports classes that extend concrete subclasses of the 'java.util.Collection' or 'java.util.Map' classes. Subclassing concrete collection types is a common yet poor practice. It is considerably more brittle than delegating collection calls.", + "markdown": "Reports classes that extend concrete subclasses of the `java.util.Collection` or `java.util.Map` classes.\n\n\nSubclassing concrete collection types is a common yet poor practice. It is considerably more brittle than delegating collection calls." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassExtendsConcreteCollection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectInstantiationInEqualsHashCode", + "shortDescription": { + "text": "Object instantiation inside 'equals()' or 'hashCode()'" + }, + "fullDescription": { + "text": "Reports construction of (temporary) new objects inside 'equals()', 'hashCode()', 'compareTo()', and 'Comparator.compare()' methods. Besides constructor invocations, new objects can also be created by autoboxing or iterator creation inside a 'foreach' statement. This can cause performance problems, for example, when objects are added to a 'Set' or 'Map', where these methods will be called often. The inspection will not report when the objects are created in a 'throw' or 'assert' statement. Example: 'class Person {\n private String name;\n private int age;\n\n public boolean equals(Object o) {\n return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});\n }\n\n public int hashCode() {\n return (name + age).hashCode();\n }\n }' In this example, two additional arrays are created inside 'equals()', usages of 'age' field require boxing, and 'name + age' implicitly creates a new string.", + "markdown": "Reports construction of (temporary) new objects inside `equals()`, `hashCode()`, `compareTo()`, and `Comparator.compare()` methods.\n\n\nBesides constructor invocations, new objects can also be created by autoboxing or iterator creation inside a\n`foreach` statement.\nThis can cause performance problems, for example, when objects are added to a `Set` or `Map`,\nwhere these methods will be called often.\n\n\nThe inspection will not report when the objects are created in a `throw` or `assert` statement.\n\n**Example:**\n\n\n class Person {\n private String name;\n private int age;\n\n public boolean equals(Object o) {\n return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});\n }\n\n public int hashCode() {\n return (name + age).hashCode();\n }\n }\n\n\nIn this example, two additional arrays are created inside `equals()`, usages of `age` field require boxing,\nand `name + age` implicitly creates a new string." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObjectInstantiationInEqualsHashCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnconditionalWait", + "shortDescription": { + "text": "Unconditional 'wait()' call" + }, + "fullDescription": { + "text": "Reports 'wait()' being called unconditionally within a synchronized context. Normally, 'wait()' is used to block a thread until some condition is true. If 'wait()' is called unconditionally, it often indicates that the condition was checked before a lock was acquired. In that case a data race may occur, with the condition becoming true between the time it was checked and the time the lock was acquired. While constructs found by this inspection are not necessarily incorrect, they are certainly worth examining. Example: 'class Bar {\n void foo() throws InterruptedException {\n synchronized (this) {\n wait(); // warning\n }\n }\n }'", + "markdown": "Reports `wait()` being called unconditionally within a synchronized context.\n\n\nNormally, `wait()` is used to block a thread until some condition is true. If\n`wait()` is called unconditionally, it often indicates that the condition was\nchecked before a lock was acquired. In that case a data race may occur, with the condition\nbecoming true between the time it was checked and the time the lock was acquired.\n\n\nWhile constructs found by this inspection are not necessarily incorrect, they are certainly worth examining.\n\n**Example:**\n\n\n class Bar {\n void foo() throws InterruptedException {\n synchronized (this) {\n wait(); // warning\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnconditionalWait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverridesInaccessibleMethodOfSuper", + "shortDescription": { + "text": "Method overrides inaccessible method of superclass" + }, + "fullDescription": { + "text": "Reports methods with the same signature as an inaccessible method of a superclass, for example, a private method, or a package-private method of a superclass in another package. Such method names may be confusing because the method in the subclass may look like an override when in fact it hides the inaccessible method of the superclass. Moreover, if the visibility of the method in the superclass changes later, it may either silently change the semantics of the subclass or cause a compilation error. A quick-fix is suggested to rename the method. Example: 'public class Super {\n private void test() {\n }\n }\n\n public class Sub extends Super {\n void test() { // making 'Super.test()' public causes a compilation error\n // making 'Super.test()' package-private makes 'Sub.test()' an override\n }\n }'", + "markdown": "Reports methods with the same signature as an inaccessible method of a superclass, for example, a private method, or a package-private method of a superclass in another package.\n\n\nSuch method names may be confusing because the method in the subclass may look like an override when in fact\nit hides the inaccessible method of the superclass.\nMoreover, if the visibility of the method in the superclass changes later,\nit may either silently change the semantics of the subclass or cause a compilation error.\n\nA quick-fix is suggested to rename the method.\n\n**Example:**\n\n\n public class Super {\n private void test() {\n }\n }\n\n public class Sub extends Super {\n void test() { // making 'Super.test()' public causes a compilation error\n // making 'Super.test()' package-private makes 'Sub.test()' an override\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodOverridesInaccessibleMethodOfSuper", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntLiteralMayBeLongLiteral", + "shortDescription": { + "text": "Cast to 'long' can be 'long' literal" + }, + "fullDescription": { + "text": "Reports 'int' literal expressions that are immediately cast to 'long'. Such literal expressions can be replaced with equivalent 'long' literals. Example: 'Long l = (long)42;' After the quick-fix is applied: 'Long l = 42L;'", + "markdown": "Reports `int` literal expressions that are immediately cast to `long`.\n\nSuch literal expressions can be replaced with equivalent `long` literals.\n\n**Example:**\n\n Long l = (long)42;\n\nAfter the quick-fix is applied:\n\n Long l = 42L;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IntLiteralMayBeLongLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 137, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleCharacterStartsWith", + "shortDescription": { + "text": "Single character 'startsWith()' or 'endsWith()'" + }, + "fullDescription": { + "text": "Reports calls to 'String.startsWith()' and 'String.endsWith()' where single character string literals are passed as an argument. A quick-fix is suggested to replace such calls with more efficiently implemented 'String.charAt()'. However, the performance gain of such change is minimal and the code becomes less readable because of the extra non-zero length check, so it is recommended to apply the quick-fix only inside tight loops. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'boolean startsWithX(String s) {\n return s.startsWith(\"x\");\n }' After the quick-fix is applied: 'boolean startsWithX(String s) {\n return !s.isEmpty() && s.charAt(0) == 'x';\n }'", + "markdown": "Reports calls to `String.startsWith()` and `String.endsWith()` where single character string literals are passed as an argument.\n\n\nA quick-fix is suggested to replace such calls with more efficiently implemented `String.charAt()`.\n\n\nHowever, the performance gain of such change is minimal and the code becomes less readable because of the extra non-zero length check,\nso it is recommended to apply the quick-fix only inside tight loops.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n boolean startsWithX(String s) {\n return s.startsWith(\"x\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean startsWithX(String s) {\n return !s.isEmpty() && s.charAt(0) == 'x';\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SingleCharacterStartsWith", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassCanBeEnum", + "shortDescription": { + "text": "Utility class can be 'enum'" + }, + "fullDescription": { + "text": "Reports utility classes that can be converted to enums. Some coding style guidelines require implementing utility classes as enums to avoid code coverage issues in 'private' constructors. Example: 'class StringUtils {\n public static final String EMPTY = \"\";\n }' After the quick-fix is applied: 'enum StringUtils {\n ;\n public static final String EMPTY = \"\";\n }' This inspection depends on the Java feature 'Enums' which is available since Java 5.", + "markdown": "Reports utility classes that can be converted to enums.\n\nSome coding style guidelines require implementing utility classes as enums\nto avoid code coverage issues in `private` constructors.\n\n**Example:**\n\n\n class StringUtils {\n public static final String EMPTY = \"\";\n }\n\nAfter the quick-fix is applied:\n\n\n enum StringUtils {\n ;\n public static final String EMPTY = \"\";\n }\n\nThis inspection depends on the Java feature 'Enums' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UtilityClassCanBeEnum", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsObject", + "shortDescription": { + "text": "Class explicitly extends 'Object'" + }, + "fullDescription": { + "text": "Reports any classes that are explicitly declared to extend 'java.lang.Object'. Such declaration is redundant and can be safely removed. Example: 'class MyClass extends Object {\n }' The quick-fix removes the redundant 'extends Object' clause: 'class MyClass {\n }'", + "markdown": "Reports any classes that are explicitly declared to extend `java.lang.Object`.\n\nSuch declaration is redundant and can be safely removed.\n\nExample:\n\n\n class MyClass extends Object {\n }\n\nThe quick-fix removes the redundant `extends Object` clause:\n\n\n class MyClass {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassExplicitlyExtendsObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReassignedVariable", + "shortDescription": { + "text": "Reassigned variable" + }, + "fullDescription": { + "text": "Reports reassigned variables, which complicate reading and understanding the code. Example: 'int value = 2 * (height + width);\n System.out.println(\"perimeter: \" + value);\n\n value = height * width;\n System.out.println(\"area: \" + value);'", + "markdown": "Reports reassigned variables, which complicate reading and understanding the code.\n\nExample:\n\n\n int value = 2 * (height + width);\n System.out.println(\"perimeter: \" + value);\n\n value = height * width;\n System.out.println(\"area: \" + value);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ReassignedVariable", + "ideaSeverity": "TEXT ATTRIBUTES", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodNameSameAsClassName", + "shortDescription": { + "text": "Method name same as class name" + }, + "fullDescription": { + "text": "Reports methods that are named identically to their class. While such naming is allowed by the Java language, by convention it is reserved for defining constructors. Using it for methods is probably a mistake or bad practice. Example: 'class MyClass {\n int val;\n\n // Method MyClass named identically to its containing class.\n // Likely, 'void' was added by mistake.\n void MyClass(int val) {\n this.val = val;\n }\n }' When appropriate, a quick-fix converts the method to a constructor: 'class MyClass {\n int val;\n\n MyClass(int val) {\n this.val = val;\n }\n }' Another quick-fix renames the method.", + "markdown": "Reports methods that are named identically to their class. While such naming is allowed by the Java language, by convention it is reserved for defining constructors. Using it for methods is probably a mistake or bad practice.\n\n**Example:**\n\n\n class MyClass {\n int val;\n\n // Method MyClass named identically to its containing class.\n // Likely, 'void' was added by mistake.\n void MyClass(int val) {\n this.val = val;\n }\n }\n\nWhen appropriate, a quick-fix converts the method to a constructor:\n\n\n class MyClass {\n int val;\n\n MyClass(int val) {\n this.val = val;\n }\n }\n\nAnother quick-fix renames the method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodNameSameAsClassName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableNamingConvention", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'int X = 42;' should be reported if the inspection is enabled with the default settings in which a variable name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for local variable names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard java.util.regex format. Use checkboxes to ignore 'for'-loop and 'catch' section parameters.", + "markdown": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `int X = 42;`\nshould be reported if the inspection is enabled with the default settings in which a variable name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for local variable names.\nSpecify **0** in order not to check the length of names. Regular expressions should be specified in the standard **java.util.regex** format.\n\nUse checkboxes to ignore `for`-loop and `catch` section parameters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LocalVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryJavaDocLink", + "shortDescription": { + "text": "Unnecessary Javadoc link" + }, + "fullDescription": { + "text": "Reports Javadoc '@see', '{@link}', and '{@linkplain}' tags that refer to the method owning the comment, the super method of the method owning the comment, or the class containing the comment. Such links are unnecessary and can be safely removed with this inspection's quick-fix. The quick-fix will remove the entire Javadoc comment if the tag is its only content. Example: 'class Example {\n /**\n * @see Example#method\n */\n public void method() { }\n }' After the quick-fix is applied: 'class Example {\n public void method() { }\n}' Use the checkbox below to ignore inline links ('{@link}' and '{@linkplain}') to super methods. Although a link to all super methods is automatically added by the Javadoc tool, an inline link to the super method may sometimes be needed in texts of the Javadoc comments.", + "markdown": "Reports Javadoc `@see`, `{@link}`, and `{@linkplain}` tags that refer to the method owning the comment, the super method of the method owning the comment, or the class containing the comment.\n\nSuch links are unnecessary and can be safely removed with this inspection's quick-fix. The\nquick-fix will remove the entire Javadoc comment if the tag is its only content.\n\n**Example:**\n\n\n class Example {\n /**\n * @see Example#method\n */\n public void method() { }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n public void method() { }\n }\n\n\nUse the checkbox below to ignore inline links (`{@link}` and `{@linkplain}`)\nto super methods. Although a link to all super methods is automatically added by the\nJavadoc tool, an inline link to the super method may sometimes be needed in texts of the Javadoc comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryJavaDocLink", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyTryBlock", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports empty 'try' blocks, including try-with-resources statements. 'try' blocks with comments are considered empty. This inspection doesn't report empty 'try' blocks found in JSP files.", + "markdown": "Reports empty `try` blocks, including try-with-resources statements.\n\n`try` blocks with comments are considered empty.\n\n\nThis inspection doesn't report empty `try` blocks found in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyTryBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedSwitchStatement", + "shortDescription": { + "text": "Nested 'switch' statement" + }, + "fullDescription": { + "text": "Reports nested 'switch' statements or expressions. Nested 'switch' statements may result in extremely confusing code. These statements may be extracted to a separate method. Example: 'int res = switch (i) {\n case 0 -> 0;\n default -> switch (i) {\n case 100 -> 0;\n default -> i;\n };\n };'", + "markdown": "Reports nested `switch` statements or expressions.\n\nNested `switch` statements\nmay result in extremely confusing code. These statements may be extracted to a separate method.\n\nExample:\n\n\n int res = switch (i) {\n case 0 -> 0;\n default -> switch (i) {\n case 100 -> 0;\n default -> i;\n };\n };\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedSwitchStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionsFieldAccessReplaceableByMethodCall", + "shortDescription": { + "text": "Reference to empty collection field can be replaced with method call" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Collections' fields: 'EMPTY_LIST', 'EMPTY_MAP' or 'EMPTY_SET'. These field usages may be replaced with the following method calls: 'emptyList()', 'emptyMap()', or 'emptySet()'. Such method calls prevent unchecked warnings by the compiler because the type parameters can be inferred. Example: 'List emptyList = Collections.EMPTY_LIST;' After the quick-fix is applied: 'List emptyList = Collections.emptyList();' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports usages of `java.util.Collections` fields: `EMPTY_LIST`, `EMPTY_MAP` or `EMPTY_SET`. These field usages may be replaced with the following method calls: `emptyList()`, `emptyMap()`, or `emptySet()`. Such method calls prevent unchecked warnings by the compiler because the type parameters can be inferred.\n\n**Example:**\n\n\n List emptyList = Collections.EMPTY_LIST;\n\nAfter the quick-fix is applied:\n\n\n List emptyList = Collections.emptyList();\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CollectionsFieldAccessReplaceableByMethodCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertWithSideEffects", + "shortDescription": { + "text": "'assert' statement with side effects" + }, + "fullDescription": { + "text": "Reports 'assert' statements that cause side effects. Since assertions can be switched off, these side effects are not guaranteed, which can cause subtle bugs. Common unwanted side effects detected by this inspection are modifications of variables and fields. When methods calls are involved, they are analyzed one level deep. Example: 'assert i++ < 10;'", + "markdown": "Reports `assert` statements that cause side effects.\n\n\nSince assertions can be switched off,\nthese side effects are not guaranteed, which can cause subtle bugs. Common unwanted side effects detected by this inspection are\nmodifications of variables and fields. When methods calls are involved, they are analyzed one level deep.\n\n**Example:**\n\n\n assert i++ < 10;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "AssertWithSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitOrAwaitWithoutTimeout", + "shortDescription": { + "text": "'wait()' or 'await()' without timeout" + }, + "fullDescription": { + "text": "Reports calls to 'Object.wait()' or 'Condition.await()' without specifying a timeout. Such calls may be dangerous in high-availability programs, as failures in one component may result in blockages of the waiting component if 'notify()'/'notifyAll()' or 'signal()'/'signalAll()' never get called. Example: 'void foo(Object bar) throws InterruptedException {\n bar.wait();\n }'", + "markdown": "Reports calls to `Object.wait()` or `Condition.await()` without specifying a timeout.\n\n\nSuch calls may be dangerous in high-availability programs, as failures in one\ncomponent may result in blockages of the waiting component\nif `notify()`/`notifyAll()`\nor `signal()`/`signalAll()` never get called.\n\n**Example:**\n\n\n void foo(Object bar) throws InterruptedException {\n bar.wait();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WaitOrAwaitWithoutTimeout", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalClass", + "shortDescription": { + "text": "Class is closed to inheritance" + }, + "fullDescription": { + "text": "Reports classes that are declared 'final'. Final classes that extend a 'sealed' class or interface are not reported. Such classes can't be inherited and may indicate a lack of object-oriented design. Some coding standards discourage 'final' classes. Example: 'public final class Main {\n }' After the quick-fix is applied: 'public class Main {\n }'", + "markdown": "Reports classes that are declared `final`. Final classes that extend a `sealed` class or interface are not reported. Such classes can't be inherited and may indicate a lack of object-oriented design. Some coding standards discourage `final` classes.\n\n**Example:**\n\n\n public final class Main {\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryEmptyArrayUsage", + "shortDescription": { + "text": "Unnecessary zero length array usage" + }, + "fullDescription": { + "text": "Reports allocations of arrays with known lengths of zero when there is a constant for that in the class of the array's element type. As zero-length arrays are immutable, you can save memory reusing the same array instance. Example: 'class Item {\n // Public zero-length array constant that can be reused \n public static final Item[] EMPTY_ARRAY = new Item[0];\n }\n class EmptyNode {\n Item[] getChildren() {\n // Unnecessary zero-length array creation\n return new Item[0];\n }\n }' After the quick-fix is applied: 'class EmptyNode {\n Item[] getChildren() {\n return Item.EMPTY_ARRAY;\n }\n }'", + "markdown": "Reports allocations of arrays with known lengths of zero when there is a constant for that in the class of the array's element type. As zero-length arrays are immutable, you can save memory reusing the same array instance.\n\n**Example:**\n\n\n class Item {\n // Public zero-length array constant that can be reused \n public static final Item[] EMPTY_ARRAY = new Item[0];\n }\n class EmptyNode {\n Item[] getChildren() {\n // Unnecessary zero-length array creation\n return new Item[0];\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class EmptyNode {\n Item[] getChildren() {\n return Item.EMPTY_ARRAY;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantForZeroLengthArrayAllocation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LiteralAsArgToStringEquals", + "shortDescription": { + "text": "String literal may be 'equals()' qualifier" + }, + "fullDescription": { + "text": "Reports 'String.equals()' or 'String.equalsIgnoreCase()' calls with a string literal argument. Some coding standards specify that string literals should be the qualifier of 'equals()', rather than argument, thus minimizing 'NullPointerException'-s. A quick-fix is available to exchange the literal and the expression. Example: 'boolean isFoo(String value) {\n return value.equals(\"foo\");\n }' After the quick-fix is applied: 'boolean isFoo(String value) {\n return \"foo\".equals(value);\n }'", + "markdown": "Reports `String.equals()` or `String.equalsIgnoreCase()` calls with a string literal argument.\n\nSome coding standards specify that string literals should be the qualifier of `equals()`, rather than\nargument, thus minimizing `NullPointerException`-s.\n\nA quick-fix is available to exchange the literal and the expression.\n\n**Example:**\n\n\n boolean isFoo(String value) {\n return value.equals(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isFoo(String value) {\n return \"foo\".equals(value);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LiteralAsArgToStringEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateExpressions", + "shortDescription": { + "text": "Multiple occurrences of the same expression" + }, + "fullDescription": { + "text": "Reports multiple equivalent occurrences of the same expression within a method (or constructor, or class initializer) if the result of the expression can be reused. The expression is reported if it's free of side effects and its result is always the same (in terms of 'Object.equals()'). The examples of such expressions are 'a + b', 'Math.max(a, b)', 'a.equals(b)', 's.substring(a,b)'. To make sure the result is always the same, it's verified that the variables used in the expression don't change their values between the occurrences of the expression. Such expressions may contain methods of immutable classes like 'String', 'BigDecimal', and so on, and of utility classes like 'Objects', 'Math' (except 'random()'). The well-known methods, such as 'Object.equals()', 'Object.hashCode()', 'Object.toString()', 'Comparable.compareTo()', and 'Comparator.compare()' are OK as well because they normally don't have any observable side effects. Use the Expression complexity threshold option to specify the minimal expression complexity threshold. Specifying bigger numbers will remove reports on short expressions. 'Path.of' and 'Paths.get' calls are treated as equivalent calls if they have the same arguments. These calls are always reported no matter how complex their arguments are. This behaviour can be tweaked using different complexity threshold. New in 2018.3", + "markdown": "Reports multiple equivalent occurrences of the same expression within a method (or constructor, or class initializer) if the result of the expression can be reused.\n\n\nThe expression is reported if it's free of side effects and its result is always the same (in terms of `Object.equals()`).\nThe examples of such expressions are `a + b`, `Math.max(a, b)`, `a.equals(b)`,\n`s.substring(a,b)`. To make sure the result is always the same, it's verified that the variables used in the expression don't\nchange their values between the occurrences of the expression.\n\n\nSuch expressions may contain methods of immutable classes like `String`, `BigDecimal`, and so on,\nand of utility classes like `Objects`, `Math` (except `random()`).\nThe well-known methods, such as `Object.equals()`, `Object.hashCode()`, `Object.toString()`,\n`Comparable.compareTo()`, and `Comparator.compare()` are OK as well because they normally don't have\nany observable side effects.\n\n\nUse the **Expression complexity threshold** option to specify the minimal expression complexity threshold. Specifying bigger\nnumbers will remove reports on short expressions.\n\n\n`Path.of` and `Paths.get` calls are treated as equivalent calls if they have the same arguments. These calls\nare always reported no matter how complex their arguments are. This behaviour can be tweaked using different complexity threshold.\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DuplicateExpressions", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanConstructor", + "shortDescription": { + "text": "Boolean constructor call" + }, + "fullDescription": { + "text": "Reports creation of 'Boolean' objects. Constructing new 'Boolean' objects is rarely necessary, and may cause performance problems if done often enough. Also, 'Boolean' constructors are deprecated since Java 9 and could be removed or made inaccessible in future Java versions. Example: 'Boolean b1 = new Boolean(true);\n Boolean b2 = new Boolean(str);' After the quick-fix is applied: 'Boolean b1 = Boolean.TRUE;\n Boolean b2 = Boolean.valueOf(str);'", + "markdown": "Reports creation of `Boolean` objects.\n\n\nConstructing new `Boolean` objects is rarely necessary,\nand may cause performance problems if done often enough. Also, `Boolean`\nconstructors are deprecated since Java 9 and could be removed or made\ninaccessible in future Java versions.\n\n**Example:**\n\n\n Boolean b1 = new Boolean(true);\n Boolean b2 = new Boolean(str);\n\nAfter the quick-fix is applied:\n\n\n Boolean b1 = Boolean.TRUE;\n Boolean b2 = Boolean.valueOf(str);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "BooleanConstructorCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadScope", + "shortDescription": { + "text": "Scope of variable is too broad" + }, + "fullDescription": { + "text": "Reports any variable declarations that can be moved to a smaller scope. This inspection is especially useful for Pascal style declarations at the beginning of a method. Additionally variables with too broad a scope are also often left behind after refactorings. Example: 'StringBuilder sb = new StringBuilder();\n System.out.println();\n sb.append(1);' After the quick-fix is applied: 'System.out.println();\n StringBuilder sb = new StringBuilder();\n sb.append(1);' Configure the inspection: Use the Only report variables that can be moved into inner blocks option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the 'sb' variable above. However, it will be suggested for the following code: 'StringBuilder sb = new StringBuilder(a);\n if (flag) {\n sb.append(1);\n }' Use the Report variables with a new expression as initializer (potentially unsafe) option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the 'foo' variable: 'class Foo {\n static List fooList = new ArrayList<>();\n String bar;\n\n Foo(String bar) {\n this.bar = bar;\n fooList.add(this);\n }\n\n public static void main(String[] args) {\n // movement is possible even though is unsafe\n Foo foo = new Foo(\"bar\");\n System.out.println(fooList.size());\n System.out.println(foo.bar);\n }\n }'", + "markdown": "Reports any variable declarations that can be moved to a smaller scope.\n\nThis inspection is especially\nuseful for *Pascal style* declarations at the beginning of a method. Additionally variables with too broad a\nscope are also often left behind after refactorings.\n\n**Example:**\n\n\n StringBuilder sb = new StringBuilder();\n System.out.println();\n sb.append(1);\n\nAfter the quick-fix is applied:\n\n\n System.out.println();\n StringBuilder sb = new StringBuilder();\n sb.append(1);\n\nConfigure the inspection:\n\n* Use the **Only report variables that can be moved into inner blocks** option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the `sb` variable above. However, it will be suggested for the following code:\n\n\n StringBuilder sb = new StringBuilder(a);\n if (flag) {\n sb.append(1);\n }\n\n* Use the **Report variables with a new expression as initializer\n (potentially unsafe)** option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the `foo` variable:\n\n\n class Foo {\n static List fooList = new ArrayList<>();\n String bar;\n\n Foo(String bar) {\n this.bar = bar;\n fooList.add(this);\n }\n\n public static void main(String[] args) {\n // movement is possible even though is unsafe\n Foo foo = new Foo(\"bar\");\n System.out.println(fooList.size());\n System.out.println(foo.bar);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TooBroadScope", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementMissingBreakInLoop", + "shortDescription": { + "text": "Early loop exit in 'if' condition" + }, + "fullDescription": { + "text": "Reports loops with an 'if' statement that can end with 'break' without changing the semantics. This prevents redundant loop iterations. Example: 'boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n }\n }' After the quick-fix is applied: 'boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n break;\n }\n }' New in 2019.2", + "markdown": "Reports loops with an `if` statement that can end with `break` without changing the semantics. This prevents redundant loop iterations.\n\n**Example:**\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n break;\n }\n }\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementMissingBreakInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowableSupplierOnlyThrowException", + "shortDescription": { + "text": "Throwable supplier never returns a value" + }, + "fullDescription": { + "text": "Reports 'Supplier' lambdas in 'Optional.orElseThrow()' calls that throw an exception, instead of returning it. Example: 'optional.orElseThrow(() -> {\n throw new RuntimeException();\n});' After the quick-fix is applied: 'optional.orElseThrow(() -> new RuntimeException());' New in 2023.1", + "markdown": "Reports `Supplier` lambdas in `Optional.orElseThrow()` calls that throw an exception, instead of returning it.\n\n**Example:**\n\n\n optional.orElseThrow(() -> {\n throw new RuntimeException();\n });\n\nAfter the quick-fix is applied:\n\n\n optional.orElseThrow(() -> new RuntimeException());\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowableSupplierOnlyThrowException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantStreamOptionalCall", + "shortDescription": { + "text": "Redundant step in 'Stream' or 'Optional' call chain" + }, + "fullDescription": { + "text": "Reports redundant 'Stream' or 'Optional' calls like 'map(x -> x)', 'filter(x -> true)' or redundant 'sorted()' or 'distinct()' calls. Note that a mapping operation in code like 'streamOfIntegers.map(Integer::valueOf)' works as 'requireNonNull()' check: if the stream contains 'null', it throws a 'NullPointerException', thus it's not absolutely redundant. Disable the Report redundant boxing in Stream.map() option if you do not want such cases to be reported. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports redundant `Stream` or `Optional` calls like `map(x -> x)`, `filter(x -> true)` or redundant `sorted()` or `distinct()` calls.\n\nNote that a mapping operation in code like `streamOfIntegers.map(Integer::valueOf)`\nworks as `requireNonNull()` check:\nif the stream contains `null`, it throws a `NullPointerException`, thus it's not absolutely redundant.\nDisable the **Report redundant boxing in Stream.map()** option if you do not want such cases to be reported.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantStreamOptionalCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadPriority", + "shortDescription": { + "text": "Call to 'Thread.setPriority()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.setPriority()'. Modifying priorities of threads is an inherently non-portable operation, as no guarantees are given in the Java specification of how priorities are used in scheduling threads, or even whether they are used at all.", + "markdown": "Reports calls to `Thread.setPriority()`. Modifying priorities of threads is an inherently non-portable operation, as no guarantees are given in the Java specification of how priorities are used in scheduling threads, or even whether they are used at all." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadSetPriority", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldOfException", + "shortDescription": { + "text": "Non-final field of 'Exception' class" + }, + "fullDescription": { + "text": "Reports fields in subclasses of 'java.lang.Exception' that are not declared 'final'. Data on exception objects should not be modified because this may result in losing the error context for later debugging and logging. Example: 'public class EditorException extends Exception {\n private String message; // warning: Non-final field 'message' of exception class\n }'", + "markdown": "Reports fields in subclasses of `java.lang.Exception` that are not declared `final`.\n\nData on exception objects should not be modified\nbecause this may result in losing the error context for later debugging and logging.\n\n**Example:**\n\n\n public class EditorException extends Exception {\n private String message; // warning: Non-final field 'message' of exception class\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalFieldOfException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantStringFormatCall", + "shortDescription": { + "text": "Redundant call to 'String.format()'" + }, + "fullDescription": { + "text": "Reports calls to methods like 'format()' and 'printf()' that can be safely removed or simplified. Example: 'System.out.println(String.format(\"Total count: %d\", 42));' After the quick-fix is applied: 'System.out.printf(\"Total count: %d%n\", 42);'", + "markdown": "Reports calls to methods like `format()` and `printf()` that can be safely removed or simplified.\n\n**Example:**\n\n\n System.out.println(String.format(\"Total count: %d\", 42));\n\nAfter the quick-fix is applied:\n\n\n System.out.printf(\"Total count: %d%n\", 42);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantStringFormatCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessNullCheck", + "shortDescription": { + "text": "Unnecessary 'null' check before method call" + }, + "fullDescription": { + "text": "Reports 'null' checks followed by a method call that will definitely return 'false' when 'null' is passed (e.g. 'Class.isInstance'). Such a check seems excessive as the method call will always return 'false' in this case. Example: 'if (x != null && myClass.isInstance(x)) { ... }' After the quick-fix is applied: 'if (myClass.isInstance(x)) { ... }'", + "markdown": "Reports `null` checks followed by a method call that will definitely return `false` when `null` is passed (e.g. `Class.isInstance`).\n\nSuch a check seems excessive as the method call will always return `false` in this case.\n\n**Example:**\n\n\n if (x != null && myClass.isInstance(x)) { ... }\n\nAfter the quick-fix is applied:\n\n\n if (myClass.isInstance(x)) { ... }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessNullCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverridesStaticMethod", + "shortDescription": { + "text": "Method tries to override 'static' method of superclass" + }, + "fullDescription": { + "text": "Reports 'static' methods with a signature identical to a 'static' method of a superclass. Such a method may look like an override when in fact it hides the method from the superclass because 'static' methods in Java cannot be overridden. Example: 'class Parent {\n static void method(){}\n }\n\n class Example extends Parent {\n static void method(){} //warning\n }'", + "markdown": "Reports `static` methods with a signature identical to a `static` method of a superclass. Such a method may look like an override when in fact it hides the method from the superclass because `static` methods in Java cannot be overridden.\n\n**Example:**\n\n\n class Parent {\n static void method(){}\n }\n\n class Example extends Parent {\n static void method(){} //warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodOverridesStaticMethodOfSuperclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnclearBinaryExpression", + "shortDescription": { + "text": "Multiple operators with different precedence" + }, + "fullDescription": { + "text": "Reports binary, conditional, or 'instanceof' expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example: 'int n = 3 + 9 * 8 + 1;' After quick-fix is applied: 'int n = 3 + (9 * 8) + 1;'", + "markdown": "Reports binary, conditional, or `instanceof` expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators.\n\nExample:\n\n\n int n = 3 + 9 * 8 + 1;\n\nAfter quick-fix is applied:\n\n\n int n = 3 + (9 * 8) + 1;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnclearExpression", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompareToJavaTime", + "shortDescription": { + "text": "Expression with 'java.time' 'compareTo()' call can be simplified" + }, + "fullDescription": { + "text": "Reports 'java.time' comparisons with 'compareTo()' calls that can be replaced with 'isAfter()', 'isBefore()' or 'isEqual()' calls. Example: 'LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.compareTo(date2) > 0;' After the quick-fix is applied: 'LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.isAfter(date2);' New in 2022.3", + "markdown": "Reports `java.time` comparisons with `compareTo()` calls that can be replaced with `isAfter()`, `isBefore()` or `isEqual()` calls.\n\nExample:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.compareTo(date2) > 0;\n\nAfter the quick-fix is applied:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.isAfter(date2);\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantCompareToJavaTime", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedMethodCall", + "shortDescription": { + "text": "Chained method calls" + }, + "fullDescription": { + "text": "Reports method calls whose target is another method call. The quick-fix suggests to introduce a local variable. Example: 'class X {\n int foo(File f) {\n return f.getName().length();\n }\n }' After the quick-fix is applied: 'class X {\n int foo(File f) {\n final String name = f.getName();\n return name.length();\n }\n }' Use the inspection options to toggle warnings for the following cases: chained method calls in field initializers, for instance, 'private final int i = new Random().nextInt();' chained method calls operating on the same type, for instance, 'new StringBuilder().append(\"x: \").append(new X()).append(\"y: \").append(new Y()).toString();'.", + "markdown": "Reports method calls whose target is another method call. The quick-fix suggests to introduce a local variable.\n\n**Example:**\n\n\n class X {\n int foo(File f) {\n return f.getName().length();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n int foo(File f) {\n final String name = f.getName();\n return name.length();\n }\n }\n\nUse the inspection options to toggle warnings for the following cases:\n\n*\n chained method calls in field initializers,\n for instance, `private final int i = new Random().nextInt();`\n\n*\n chained method calls operating on the same type,\n for instance, `new StringBuilder().append(\"x: \").append(new X()).append(\"y: \").append(new Y()).toString();`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainedMethodCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsUtilityClass", + "shortDescription": { + "text": "Class extends utility class" + }, + "fullDescription": { + "text": "Reports classes that extend a utility class. A utility class is a non-empty class in which all fields and methods are static. Extending a utility class also allows for inadvertent object instantiation of the utility class, because the constructor cannot be made private in order to allow extension. Configure the inspection: Use the Ignore if overriding class is a utility class option to ignore any classes that override a utility class but are also utility classes themselves.", + "markdown": "Reports classes that extend a utility class.\n\n\nA utility class is a non-empty class in which all fields and methods are static.\nExtending a utility class also allows for inadvertent object instantiation of the\nutility class, because the constructor cannot be made private in order to allow extension.\n\n\nConfigure the inspection:\n\n* Use the **Ignore if overriding class is a utility class** option to ignore any classes that override a utility class but are also utility classes themselves." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExtendsUtilityClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassWithoutPrivateConstructor", + "shortDescription": { + "text": "Utility class without 'private' constructor" + }, + "fullDescription": { + "text": "Reports utility classes without 'private' constructors. Utility classes have all fields and methods declared as 'static'. Creating 'private' constructors in utility classes prevents them from being accidentally instantiated. Use the Ignore if annotated by option to specify special annotations. The inspection ignores classes marked with one of these annotations. Use the Ignore classes with only a main method option to ignore classes with no methods other than the main one.", + "markdown": "Reports utility classes without `private` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating `private`\nconstructors in utility classes prevents them from being accidentally instantiated.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes marked with one of\nthese annotations.\n\n\nUse the **Ignore classes with only a main method** option to ignore classes with no methods other than the main one." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UtilityClassWithoutPrivateConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertMessageNotString", + "shortDescription": { + "text": "'assert' message is not a string" + }, + "fullDescription": { + "text": "Reports 'assert' messages that are not of the 'java.lang.String' type. Using a string provides more information to help diagnose the failure or the assertion reason. Example: 'void foo(List myList) {\n assert myList.isEmpty() : false;\n }' Use the Only warn when the 'assert' message type is 'boolean' or 'java.lang.Boolean' option to only warn when the 'assert' message type is 'boolean' or 'java.lang.Boolean'. A 'boolean' detail message is unlikely to provide additional information about an assertion failure and could result from a mistakenly entered ':' instead of '&'.", + "markdown": "Reports `assert` messages that are not of the `java.lang.String` type.\n\nUsing a string provides more information to help diagnose the failure\nor the assertion reason.\n\n**Example:**\n\n\n void foo(List myList) {\n assert myList.isEmpty() : false;\n }\n\n\nUse the **Only warn when the `assert` message type is 'boolean' or 'java.lang.Boolean'** option to only warn when the `assert` message type is `boolean` or `java.lang.Boolean`.\nA `boolean` detail message is unlikely to provide additional information about an assertion failure\nand could result from a mistakenly entered `:` instead of `&`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssertMessageNotString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternVariableCanBeUsed", + "shortDescription": { + "text": "Pattern variable can be used" + }, + "fullDescription": { + "text": "Reports local variable declarations that can be replaced with pattern variables, which are usually more compact. Example: 'if (obj instanceof String) {\n String str = (String) obj;\n System.out.println(str);\n }' Can be replaced with: 'if (obj instanceof String str) {\n System.out.println(str);\n }' This inspection depends on the Java feature 'Patterns in 'instanceof'' which is available since Java 16. New in 2020.1", + "markdown": "Reports local variable declarations that can be replaced with pattern variables, which are usually more compact.\n\n**Example:**\n\n\n if (obj instanceof String) {\n String str = (String) obj;\n System.out.println(str);\n }\n\nCan be replaced with:\n\n\n if (obj instanceof String str) {\n System.out.println(str);\n }\n\nThis inspection depends on the Java feature 'Patterns in 'instanceof'' which is available since Java 16.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PatternVariableCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 16", + "index": 185, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitToExplicitClassBackwardMigration", + "shortDescription": { + "text": "Implicitly declared class can be replaced with ordinary class" + }, + "fullDescription": { + "text": "Reports implicitly declared classes and suggests replacing them with regular classes. Example (in file Sample.java): 'public static void main() {\n System.out.println(\"Hello, world!\");\n }' After the quick-fix is applied: 'public class Sample {\n public static void main() {\n System.out.println(\"Hello, world!\");\n }\n}' This inspection can help to downgrade for backward compatibility with earlier Java versions. This inspection depends on the Java feature 'Implicitly declared classes' which is available since Java 21-preview. New in 2024.1", + "markdown": "Reports implicitly declared classes and suggests replacing them with regular classes.\n\n**Example (in file Sample.java):**\n\n\n public static void main() {\n System.out.println(\"Hello, world!\");\n }\n\nAfter the quick-fix is applied:\n\n\n public class Sample {\n public static void main() {\n System.out.println(\"Hello, world!\");\n }\n }\n\n\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nThis inspection depends on the Java feature 'Implicitly declared classes' which is available since Java 21-preview.\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ImplicitToExplicitClassBackwardMigration", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 21", + "index": 192, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassVariableHidesContainingMethodVariable", + "shortDescription": { + "text": "Anonymous class variable hides variable in containing method" + }, + "fullDescription": { + "text": "Reports fields in an anonymous class that are named identically to local variables or parameters of the containing method or lambda expression. As a result of such naming, you may accidentally use the anonymous class field where the identically named variable or parameter from the containing method is intended. A quick-fix is suggested to rename the field. Example: 'class Test {\n public Test(String value) {\n Object foo = new Object() {\n private String value = \"TEST\";\n public void foo() {\n System.out.println(value); //the field is accessed, not the parameter\n }\n };\n }\n }'", + "markdown": "Reports fields in an anonymous class that are named identically to local variables or parameters of the containing method or lambda expression.\n\n\nAs a result of such naming, you may accidentally use the anonymous class field where\nthe identically named variable or parameter from the containing method is intended.\n\nA quick-fix is suggested to rename the field.\n\n**Example:**\n\n\n class Test {\n public Test(String value) {\n Object foo = new Object() {\n private String value = \"TEST\";\n public void foo() {\n System.out.println(value); //the field is accessed, not the parameter\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousClassVariableHidesContainingMethodVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodRefCanBeReplacedWithLambda", + "shortDescription": { + "text": "Method reference can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports method references, like 'MyClass::myMethod' and 'myObject::myMethod', and suggests replacing them with an equivalent lambda expression. Lambda expressions can be easier to modify than method references. Example: 'System.out::println' After the quick-fix is applied: 's -> System.out.println(s)' By default, this inspection does not highlight the code in the editor, but only provides a quick-fix. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports method references, like `MyClass::myMethod` and `myObject::myMethod`, and suggests replacing them with an equivalent lambda expression.\n\nLambda expressions can be easier to modify than method references.\n\nExample:\n\n\n System.out::println\n\nAfter the quick-fix is applied:\n\n\n s -> System.out.println(s)\n\nBy default, this inspection does not highlight the code in the editor, but only provides a quick-fix.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MethodRefCanBeReplacedWithLambda", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedSynchronizedStatement", + "shortDescription": { + "text": "Nested 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports nested 'synchronized' statements. It is recommended to avoid nested synchronization if possible, because in some cases it may lead to a deadlock. Example: 'synchronized (lockA){\n //thread 1 is waiting for lockB\n synchronized (lockB){ //warning\n }\n }\n ...\n synchronized (lockB) {\n //thread 2 is waiting for lockA\n synchronized (lockA) { //warning\n }\n }'", + "markdown": "Reports nested `synchronized` statements. It is recommended to avoid nested synchronization if possible, because in some cases it may lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA){\n //thread 1 is waiting for lockB\n synchronized (lockB){ //warning\n }\n }\n ...\n synchronized (lockB) {\n //thread 2 is waiting for lockA\n synchronized (lockA) { //warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedSynchronizedStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectDateTimeFormat", + "shortDescription": { + "text": "Incorrect 'DateTimeFormat' pattern" + }, + "fullDescription": { + "text": "Reports incorrect date time format patterns. The following errors are reported: Unsupported pattern letters, like \"TT\" Using reserved characters, like \"#\" Incorrect use of padding Unbalanced brackets Incorrect amount of consecutive pattern letters Examples: 'DateTimeFormatter.ofPattern(\"[][]]\"); // Closing ']' without previous opening '['\n DateTimeFormatter.ofPattern(\"TT\"); // Illegal pattern letter 'T'\n DateTimeFormatter.ofPattern(\"{\"); // Use of reserved character '{'\n DateTimeFormatter.ofPattern(\"MMMMMM\"); // Too many consecutive pattern letters 'M'' New in 2022.3", + "markdown": "Reports incorrect date time format patterns.\n\nThe following errors are reported:\n\n* Unsupported pattern letters, like \"TT\"\n* Using reserved characters, like \"#\"\n* Incorrect use of padding\n* Unbalanced brackets\n* Incorrect amount of consecutive pattern letters\n\nExamples:\n\n\n DateTimeFormatter.ofPattern(\"[][]]\"); // Closing ']' without previous opening '['\n DateTimeFormatter.ofPattern(\"TT\"); // Illegal pattern letter 'T'\n DateTimeFormatter.ofPattern(\"{\"); // Use of reserved character '{'\n DateTimeFormatter.ofPattern(\"MMMMMM\"); // Too many consecutive pattern letters 'M'\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IncorrectDateTimeFormat", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryFullyQualifiedName", + "shortDescription": { + "text": "Unnecessary fully qualified name" + }, + "fullDescription": { + "text": "Reports fully qualified class names that can be shortened. The quick-fix shortens fully qualified names and adds import statements if necessary. Example: 'class ListWrapper {\n java.util.List l;\n }' After the quick-fix is applied: 'import java.util.List;\n class ListWrapper {\n List l;\n }' Configure the inspection: Use the Ignore in Java 9 module statements option to ignore fully qualified names inside the Java 9 'provides' and 'uses' module statements. In Settings | Editor | Code Style | Java | Imports, use the following options to configure the inspection: Use the Insert imports for inner classes option if references to inner classes should be qualified with the outer class. Use the Use fully qualified class names in JavaDoc option to allow fully qualified names in Javadocs.", + "markdown": "Reports fully qualified class names that can be shortened.\n\nThe quick-fix shortens fully qualified names and adds import statements if necessary.\n\nExample:\n\n\n class ListWrapper {\n java.util.List l;\n }\n\nAfter the quick-fix is applied:\n\n\n import java.util.List;\n class ListWrapper {\n List l;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore in Java 9 module statements** option to ignore fully qualified names inside the Java 9\n`provides` and `uses` module statements.\n\n\nIn [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?JavaDoc%20Inner),\nuse the following options to configure the inspection:\n\n* Use the **Insert imports for inner classes** option if references to inner classes should be qualified with the outer class.\n* Use the **Use fully qualified class names in JavaDoc** option to allow fully qualified names in Javadocs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessaryFullyQualifiedName", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditional", + "shortDescription": { + "text": "Conditional expression with negated condition" + }, + "fullDescription": { + "text": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches usually increases the clarity of such statements. Use the Ignore '!= null' comparisons and Ignore '!= 0' comparisons options to ignore comparisons of the form 'obj != null' or 'num != 0'. Since 'obj != null' effectively means \"obj exists\", the meaning of the whole expression does not involve any negation and is therefore easy to understand. The same reasoning applies to 'num != 0' expressions, especially when using bit masks. These forms have the added benefit of mentioning the interesting case first. In most cases, the value for the '== null' branch is 'null' itself, like in the following examples: 'static String getName(Person p) {\n return p != null ? p.getName() : null;\n }\n\n static String getExecutableString(int fileMode) {\n return (fileMode & 0b001001001) != 0 ? \"executable\" : \"non-executable\";\n }'", + "markdown": "Reports conditional expressions whose conditions are negated.\n\nFlipping the order of the conditional expression branches usually increases the clarity of such statements.\n\n\nUse the **Ignore '!= null' comparisons** and **Ignore '!= 0' comparisons** options to ignore comparisons of the form\n`obj != null` or `num != 0`.\nSince `obj != null` effectively means \"obj exists\",\nthe meaning of the whole expression does not involve any negation\nand is therefore easy to understand.\n\n\nThe same reasoning applies to `num != 0` expressions, especially when using bit masks.\n\n\nThese forms have the added benefit of mentioning the interesting case first.\nIn most cases, the value for the `== null` branch is `null` itself,\nlike in the following examples:\n\n\n static String getName(Person p) {\n return p != null ? p.getName() : null;\n }\n\n static String getExecutableString(int fileMode) {\n return (fileMode & 0b001001001) != 0 ? \"executable\" : \"non-executable\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionWithNegatedCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanParameter", + "shortDescription": { + "text": "'public' method with 'boolean' parameter" + }, + "fullDescription": { + "text": "Reports public methods that accept a 'boolean' parameter. It's almost always bad practice to add a 'boolean' parameter to a public method (part of an API) if that method is not a setter. When reading code using such a method, it can be difficult to decipher what the 'boolean' stands for without looking at the source or documentation. This problem is also known as the boolean trap. The 'boolean' parameter can often be replaced with an 'enum'. Example: '// Warning: it's hard to understand what the\n // boolean parameters mean when looking at\n // a call to this method\n public boolean setPermission(File f,\n int access,\n boolean enable,\n boolean ownerOnly) {\n // ...\n }' Use the Only report methods with multiple boolean parameters option to warn only when a method contains more than one boolean parameter.", + "markdown": "Reports public methods that accept a `boolean` parameter.\n\nIt's almost always bad practice to add a `boolean` parameter to a public method (part of an API) if that method is not a setter.\nWhen reading code using such a method, it can be difficult to decipher what the `boolean` stands for without looking at\nthe source or documentation.\n\nThis problem is also known as [the boolean trap](https://ariya.io/2011/08/hall-of-api-shame-boolean-trap).\nThe `boolean` parameter can often be replaced with an `enum`.\n\nExample:\n\n\n // Warning: it's hard to understand what the\n // boolean parameters mean when looking at\n // a call to this method\n public boolean setPermission(File f,\n int access,\n boolean enable,\n boolean ownerOnly) {\n // ...\n }\n\n\nUse the **Only report methods with multiple boolean parameters** option to warn only when a method contains more than one boolean parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BooleanParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestInProductSource", + "shortDescription": { + "text": "Test in product source" + }, + "fullDescription": { + "text": "Reports test classes and test methods that are located in production source trees. This most likely a mistake and can result in test code being shipped into production.", + "markdown": "Reports test classes and test methods that are located in production source trees. This most likely a mistake and can result in test code being shipped into production." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TestInProductSource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CopyConstructorMissesField", + "shortDescription": { + "text": "Copy constructor misses field" + }, + "fullDescription": { + "text": "Reports copy constructors that don't copy all the fields of the class. 'final' fields with initializers and 'transient' fields are considered unnecessary to copy. Example: 'class Point {\n\n private int x;\n private int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n Point(Point other) {\n // fields x and y are not initialized\n }\n }' New in 2018.1", + "markdown": "Reports copy constructors that don't copy all the fields of the class.\n\n\n`final` fields with initializers and `transient` fields are considered unnecessary to copy.\n\n**Example:**\n\n\n class Point {\n\n private int x;\n private int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n Point(Point other) {\n // fields x and y are not initialized\n }\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CopyConstructorMissesField", + "cweIds": [ + 665 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastCanBeRemovedNarrowingVariableType", + "shortDescription": { + "text": "Too weak variable type leads to unnecessary cast" + }, + "fullDescription": { + "text": "Reports type casts that can be removed if the variable type is narrowed to the cast type. Example: 'Object x = \" string \";\n System.out.println(((String)x).trim());' Here, changing the type of 'x' to 'String' makes the cast redundant. The suggested quick-fix updates the variable type and removes all redundant casts on that variable: 'String x = \" string \";\n System.out.println(x.trim());' New in 2018.2", + "markdown": "Reports type casts that can be removed if the variable type is narrowed to the cast type.\n\nExample:\n\n\n Object x = \" string \";\n System.out.println(((String)x).trim());\n\n\nHere, changing the type of `x` to `String` makes the cast redundant. The suggested quick-fix updates the variable type and\nremoves all redundant casts on that variable:\n\n\n String x = \" string \";\n System.out.println(x.trim());\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CastCanBeRemovedNarrowingVariableType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToStaticFieldFromInstanceMethod", + "shortDescription": { + "text": "Assignment to static field from instance context" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of 'static' fields from within an instance method. Although legal, such assignments are tricky to do safely and are often a result of marking fields 'static' inadvertently. Example: 'class Counter {\n private static int count = 0;\n\n void increment() {\n // Warning: updating a static field\n // from an instance method\n count++;\n }\n }'", + "markdown": "Reports assignment to, or modification of `static` fields from within an instance method.\n\nAlthough legal, such assignments are tricky to do\nsafely and are often a result of marking fields `static` inadvertently.\n\n**Example:**\n\n\n class Counter {\n private static int count = 0;\n\n void increment() {\n // Warning: updating a static field\n // from an instance method\n count++;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToStaticFieldFromInstanceMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassWithOnlyOneDirectInheritor", + "shortDescription": { + "text": "Abstract class with a single direct inheritor" + }, + "fullDescription": { + "text": "Reports abstract classes that have precisely one direct inheritor. While such classes may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the abstract class with its inheritor. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'abstract class Base {} // will be reported\n\n class Inheritor extends Base {}'", + "markdown": "Reports abstract classes that have precisely one direct inheritor. While such classes may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the abstract class with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n abstract class Base {} // will be reported\n\n class Inheritor extends Base {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractClassWithOnlyOneDirectInheritor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsecureRandomNumberGeneration", + "shortDescription": { + "text": "Insecure random number generation" + }, + "fullDescription": { + "text": "Reports any uses of 'java.lang.Random' or 'java.lang.Math.random()'. In secure environments, 'java.secure.SecureRandom' is a better choice, since is offers cryptographically secure random number generation. Example: 'long token = new Random().nextLong();'", + "markdown": "Reports any uses of `java.lang.Random` or `java.lang.Math.random()`.\n\n\nIn secure environments,\n`java.secure.SecureRandom` is a better choice, since is offers cryptographically secure\nrandom number generation.\n\n**Example:**\n\n\n long token = new Random().nextLong();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnsecureRandomNumberGeneration", + "cweIds": [ + 330 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullableProblems", + "shortDescription": { + "text": "@NotNull/@Nullable problems" + }, + "fullDescription": { + "text": "Reports problems related to nullability annotations. Examples: Overriding methods are not annotated: 'abstract class A {\n @NotNull abstract String m();\n}\nclass B extends A {\n String m() { return \"empty string\"; }\n}' Annotated primitive types: '@NotNull int myFoo;' Both '@Nullable' and '@NotNull' are present on the same member: '@Nullable @NotNull String myFooString;' Collection of nullable elements is assigned into a collection of non-null elements: 'void testList(List<@Nullable String> nullableList) {\n List<@NotNull String> list2 = nullableList;\n}' Use the Configure Annotations button to specify nullability annotations and the checkboxes to fine-tune where the inspection should provide warnings. This inspection only reports if the language level of the project or module is 5 or higher, and nullability annotations are available on the classpath.", + "markdown": "Reports problems related to nullability annotations.\n\n**Examples:**\n\n* Overriding methods are not annotated:\n\n\n abstract class A {\n @NotNull abstract String m();\n }\n class B extends A {\n String m() { return \"empty string\"; }\n }\n \n* Annotated primitive types: `@NotNull int myFoo;`\n* Both `@Nullable` and `@NotNull` are present on the same member: `@Nullable @NotNull String myFooString;`\n* Collection of nullable elements is assigned into a collection of non-null elements:\n\n\n void testList(List<@Nullable String> nullableList) {\n List<@NotNull String> list2 = nullableList;\n }\n \nUse the **Configure Annotations** button to specify nullability annotations and the checkboxes to fine-tune where the inspection should provide warnings.\n\nThis inspection only reports if the language level of the project or module is 5 or higher,\nand nullability annotations are available on the classpath." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NullableProblems", + "cweIds": [ + 476, + 754 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 172, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the target and argument are of incompatible types. While such a call might theoretically be useful, most likely it is a bug. Example: 'new HashSet().equals(new TreeSet());'", + "markdown": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it is a bug.\n\n**Example:**\n\n\n new HashSet().equals(new TreeSet());\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsBetweenInconvertibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnGetClass", + "shortDescription": { + "text": "Synchronization on 'getClass()'" + }, + "fullDescription": { + "text": "Reports synchronization on a call to 'getClass()'. If the class containing the synchronization is subclassed, the subclass will synchronize on a different class object. Usually the call to 'getClass()' can be replaced with a class literal expression, for example 'String.class'. An even better solution is synchronizing on a 'private static final' lock object, access to which can be completely controlled. Example: 'synchronized(getClass()) {}'", + "markdown": "Reports synchronization on a call to `getClass()`.\n\n\nIf the class containing the synchronization is subclassed, the subclass\nwill\nsynchronize on a different class object. Usually the call to `getClass()` can be replaced with a class literal expression, for\nexample `String.class`. An even better solution is synchronizing on a `private static final` lock object, access to\nwhich can be completely controlled.\n\n**Example:**\n\n synchronized(getClass()) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizationOnGetClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateCondition", + "shortDescription": { + "text": "Duplicate condition" + }, + "fullDescription": { + "text": "Reports duplicate conditions in '&&' and '||' expressions and branches of 'if' statements. While sometimes duplicate conditions are intended, in most cases they the result of an oversight. Example: 'boolean result = digit1 != digit2 || digit1 != digit2;' To ignore conditions that may produce side effects, use the Ignore conditions with side effects option. Disabling this option may lead to false-positives, for example, when the same method returns different values on subsequent invocations. Example: 'native boolean unknownMethod();\n \n ...\n \n if (unknownMethod() || unknownMethod()) {\n System.out.println(\"Got it\");\n }' Due to possible side effects of 'unknownMethod()' (on the example), the warning will only be triggered if the Ignore conditions with side effects option is disabled.", + "markdown": "Reports duplicate conditions in `&&` and `||` expressions and branches of `if` statements. While sometimes duplicate conditions are intended, in most cases they the result of an oversight.\n\nExample:\n\n\n boolean result = digit1 != digit2 || digit1 != digit2;\n\n\nTo ignore conditions that may produce side effects, use the **Ignore conditions with side effects** option.\nDisabling this option may lead to false-positives, for example, when the same method returns different values on subsequent invocations.\n\nExample:\n\n\n native boolean unknownMethod();\n \n ...\n \n if (unknownMethod() || unknownMethod()) {\n System.out.println(\"Got it\");\n }\n\nDue to possible side effects of `unknownMethod()` (on the example), the warning will only be\ntriggered if the **Ignore conditions with side effects** option is disabled." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrownExceptionsPerMethod", + "shortDescription": { + "text": "Method with too many exceptions declared" + }, + "fullDescription": { + "text": "Reports methods that have too many types of exceptions in its 'throws' list. Methods with too many exceptions declared are a good sign that your error handling code is getting overly complex. Use the Exceptions thrown limit field to specify the maximum number of exception types a method is allowed to have in its 'throws' list.", + "markdown": "Reports methods that have too many types of exceptions in its `throws` list.\n\nMethods with too many exceptions declared are a good sign that your error handling code is getting overly complex.\n\nUse the **Exceptions thrown limit** field to specify the maximum number of exception types a method is allowed to have in its `throws` list." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodWithTooExceptionsDeclared", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantThrows", + "shortDescription": { + "text": "Redundant 'throws' clause" + }, + "fullDescription": { + "text": "Reports exceptions that are declared in a method's signature but never thrown by the method itself or its implementations and overriding methods. The inspection ignores methods related to serialization, for example the methods 'readObject()' and 'writeObject()'. Example: 'void method() throws InterruptedException {\n System.out.println();\n }' The quick-fix removes unnecessary exceptions from the declaration and normalizes redundant 'try'-'catch' statements: 'void method() {\n System.out.println();\n }' Note: Some exceptions may not be reported during in-editor highlighting for performance reasons. To see all results, run the inspection by selecting Code | Inspect Code or Code | Analyze Code | Run Inspection by Name from the main menu. Use the Ignore exceptions thrown by entry point methods option to not report exceptions thrown by for example 'main()' methods. Entry point methods can be configured in the settings of the Java | Declaration redundancy | Unused declaration inspection.", + "markdown": "Reports exceptions that are declared in a method's signature but never thrown by the method itself or its implementations and overriding methods.\n\nThe inspection ignores methods related to serialization, for example the methods `readObject()` and `writeObject()`.\n\n**Example:**\n\n\n void method() throws InterruptedException {\n System.out.println();\n }\n\nThe quick-fix removes unnecessary exceptions from the declaration and normalizes redundant `try`-`catch` statements:\n\n\n void method() {\n System.out.println();\n }\n\n\n**Note:** Some exceptions may not be reported during in-editor highlighting for performance reasons.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the **Ignore exceptions thrown by entry point methods** option to not report exceptions thrown by\nfor example `main()` methods.\nEntry point methods can be configured in the settings of the\n[Java \\| Declaration redundancy \\| Unused declaration](settings://Errors?Unused%20Declaration%20entry%20point) inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantThrows", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfAnotherObjectsPrivateField", + "shortDescription": { + "text": "Accessing a non-public field of another object" + }, + "fullDescription": { + "text": "Reports accesses to 'private' or 'protected' fields of another object. Java allows access to such fields for objects of the same class as the current object but some coding styles discourage this use. Additionally, such direct access to 'private' fields may fail in component-oriented architectures, such as Spring or Hibernate, that expect all access to other objects to be through method calls so the framework can mediate access using proxies. Example: 'public class Base {\n protected int bar;\n\n void increment(Base base) {\n bar++;\n base.bar++; // warning: direct access to another object's non-public field\n }\n }' A quick-fix to encapsulate the field is available. Configure the inspection: Use the Ignore accesses from the same class option to ignore access from the same class and only report access from inner or outer classes. To ignore access from inner classes as well, use the nested Ignore accesses from inner classes. Use the Ignore accesses from 'equals()' method to ignore access from an 'equals()' method.", + "markdown": "Reports accesses to `private` or `protected` fields of another object. Java allows access to such fields for objects of the same class as the current object but some coding styles discourage this use. Additionally, such direct access to `private` fields may fail in component-oriented architectures, such as Spring or Hibernate, that expect all access to other objects to be through method calls so the framework can mediate access using proxies.\n\n**Example:**\n\n\n public class Base {\n protected int bar;\n\n void increment(Base base) {\n bar++;\n base.bar++; // warning: direct access to another object's non-public field\n }\n }\n\nA quick-fix to encapsulate the field is available.\n\nConfigure the inspection:\n\n* Use the **Ignore accesses from the same class** option to ignore access from the same class and only report access from inner or outer classes.\n\n To ignore access from inner classes as well, use the nested **Ignore accesses from inner classes**.\n* Use the **Ignore accesses from 'equals()' method** to ignore access from an `equals()` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AccessingNonPublicFieldOfAnotherObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBitwiseExpression", + "shortDescription": { + "text": "Pointless bitwise expression" + }, + "fullDescription": { + "text": "Reports pointless bitwise expressions. Such expressions include applying the '&' operator to the maximum value for the given type, applying the 'or' operator to zero, and shifting by zero. Such expressions may be the result of automated refactorings not followed through to completion and are unlikely to be originally intended. Examples: '// Warning: operation is pointless and can be replaced with just `flags`\n // 0xFFFF_FFFF is the maximum value for an integer, and both literals are treated\n // as 32 bit integer literals.\n int bits = flags & 0xFFFF_FFFF;\n\n // Warning: operation is pointless and can be replaced with just `bits`\n // OR-ing with 0 always outputs the other operand.\n int or = bits | 0x0;\n\n // Warning: operation is pointless, as always results in 0\n int xor = or ^ or;'", + "markdown": "Reports pointless bitwise expressions.\n\n\nSuch expressions include applying the `&` operator to the maximum value for the given type, applying the\n`or` operator to zero, and shifting by zero. Such expressions may be the result of automated\nrefactorings not followed through to completion and are unlikely to be originally intended.\n\n**Examples:**\n\n\n // Warning: operation is pointless and can be replaced with just `flags`\n // 0xFFFF_FFFF is the maximum value for an integer, and both literals are treated\n // as 32 bit integer literals.\n int bits = flags & 0xFFFF_FFFF;\n\n // Warning: operation is pointless and can be replaced with just `bits`\n // OR-ing with 0 always outputs the other operand.\n int or = bits | 0x0;\n\n // Warning: operation is pointless, as always results in 0\n int xor = or ^ or;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBitwiseExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 196, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateThrows", + "shortDescription": { + "text": "Duplicate throws" + }, + "fullDescription": { + "text": "Reports duplicate exceptions in a method 'throws' list. Example: 'void f() throws Exception, Exception {}' After the quick-fix is applied: 'void f() throws Exception {}' Use the Ignore exceptions subclassing others option to ignore exceptions subclassing other exceptions.", + "markdown": "Reports duplicate exceptions in a method `throws` list.\n\nExample:\n\n\n void f() throws Exception, Exception {}\n\nAfter the quick-fix is applied:\n\n\n void f() throws Exception {}\n\n\nUse the **Ignore exceptions subclassing others** option to ignore exceptions subclassing other exceptions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateThrows", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnstableTypeUsedInSignature", + "shortDescription": { + "text": "Unstable type is used in signature" + }, + "fullDescription": { + "text": "Reports declarations of classes, methods, and fields that reference an unstable API type in the signature, but are not marked with the same unstable annotation. This inspection ensures that the signatures of a public API do not expose any unstable (internal, experimental) types. For example, if a method returns an experimental class, the method itself is considered experimental because incompatible changes of the type (deletion or move to another package) lead to incompatible method signature changes. Use the list below to specify which annotations mark an unstable API.", + "markdown": "Reports declarations of classes, methods, and fields that reference an unstable API type in the signature, but are not marked with the same unstable annotation.\n\n\nThis inspection ensures that the signatures of a public API do not expose any *unstable* (internal, experimental) types.\nFor example, if a method returns an *experimental* class, the method itself is considered *experimental*\nbecause incompatible changes of the type (deletion or move to another package) lead to incompatible method signature changes.\n\nUse the list below to specify which annotations mark an unstable API." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnstableTypeUsedInSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrivateMemberAccessBetweenOuterAndInnerClass", + "shortDescription": { + "text": "Synthetic accessor call" + }, + "fullDescription": { + "text": "Reports references from a nested class to non-constant 'private' members of an outer class. For such references, javac will generate package-private synthetic accessor methods, which may compromise the security because members appearing to be private will in fact be accessible from the entire package. A nested class and its outer class are compiled to separate class files. The Java virtual machine normally prohibits access from a class to private fields and methods of another class. To enable access from a nested class to private members of an outer class, javac creates a package-private synthetic accessor method. By making the 'private' member package-private instead, the actual accessibility is made explicit. This also saves a little bit of memory, which may improve performance in resource constrained environments. This inspection only reports if the language level of the project or module is 10 or lower. Under Java 11 and higher accessor methods are not generated anymore, because of nest-based access control (JEP 181). Example: 'class Outer {\n private void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }' After the quick fix is applied: 'class Outer {\n void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }'", + "markdown": "Reports references from a nested class to non-constant `private` members of an outer class. For such references, javac will generate package-private synthetic accessor methods, which may compromise the security because members appearing to be private will in fact be accessible from the entire package.\n\n\nA nested class and its outer class are compiled to separate\nclass files. The Java virtual machine normally prohibits access from a class to private fields and methods of\nanother class. To enable access from a nested class to private members of an outer class, javac creates a package-private\nsynthetic accessor method.\n\n\nBy making the `private` member package-private instead, the actual accessibility is made explicit.\nThis also saves a little bit of memory, which may improve performance in resource constrained environments.\n\n\nThis inspection only reports if the language level of the project or module is 10 or lower.\nUnder Java 11 and higher accessor methods are not generated anymore,\nbecause of nest-based access control ([JEP 181](https://openjdk.org/jeps/181)).\n\n**Example:**\n\n\n class Outer {\n private void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Outer {\n void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SyntheticAccessorCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassIndependentOfModule", + "shortDescription": { + "text": "Class independent of its module" + }, + "fullDescription": { + "text": "Reports classes that: do not depend on any other class in their module are not a dependency for any other class in their module Such classes are an indication of ad-hoc or incoherent modularisation strategies, and may often profitably be moved. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that:\n\n* do not depend on any other class in their module\n* are not a dependency for any other class in their module\n\nSuch classes are an indication of ad-hoc or incoherent modularisation strategies,\nand may often profitably be moved.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassIndependentOfModule", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 77, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemRunFinalizersOnExit", + "shortDescription": { + "text": "Call to 'System.runFinalizersOnExit()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.runFinalizersOnExit()'. This call is one of the most dangerous in the Java language. It is inherently non-thread-safe, may result in data corruption, a deadlock, and may affect parts of the program far removed from its call point. It is deprecated and was removed in JDK 11, and its use is strongly discouraged. This inspection only reports if the language level of the project or module is 10 or lower.", + "markdown": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, a deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated and was removed in JDK 11, and its use is strongly discouraged.\n\nThis inspection only reports if the language level of the project or module is 10 or lower." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSystemRunFinalizersOnExit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceInefficientStreamCount", + "shortDescription": { + "text": "Inefficient Stream API call chains ending with count()" + }, + "fullDescription": { + "text": "Reports Stream API call chains ending with the 'count()' operation that could be optimized. The following call chains are replaced by this inspection: 'Collection.stream().count()' → 'Collection.size()'. In Java 8 'Collection.stream().count()' actually iterates over the collection elements to count them, while 'Collection.size()' is much faster for most of the collections. 'Stream.flatMap(Collection::stream).count()' → 'Stream.mapToLong(Collection::size).sum()'. Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up. 'Stream.filter(o -> ...).count() > 0' → 'Stream.anyMatch(o -> ...)'. Unlike the original call, 'anyMatch()' may stop the computation as soon as a matching element is found. 'Stream.filter(o -> ...).count() == 0' → 'Stream.noneMatch(o -> ...)'. Similar to the above. Note that if the replacement involves a short-circuiting operation like 'anyMatch()', there could be a visible behavior change, if the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports Stream API call chains ending with the `count()` operation that could be optimized.\n\n\nThe following call chains are replaced by this inspection:\n\n* `Collection.stream().count()` → `Collection.size()`. In Java 8 `Collection.stream().count()` actually iterates over the collection elements to count them, while `Collection.size()` is much faster for most of the collections.\n* `Stream.flatMap(Collection::stream).count()` → `Stream.mapToLong(Collection::size).sum()`. Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up.\n* `Stream.filter(o -> ...).count() > 0` → `Stream.anyMatch(o -> ...)`. Unlike the original call, `anyMatch()` may stop the computation as soon as a matching element is found.\n* `Stream.filter(o -> ...).count() == 0` → `Stream.noneMatch(o -> ...)`. Similar to the above.\n\n\nNote that if the replacement involves a short-circuiting operation like `anyMatch()`, there could be a visible behavior change,\nif the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceInefficientStreamCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterTypePreventsOverriding", + "shortDescription": { + "text": "Parameter type prevents overriding" + }, + "fullDescription": { + "text": "Reports parameter types of a subclass method that have the same name as the parameter type of the corresponding super method but belong to a different package. In these cases, the subclass method cannot override the super method. Example: 'public class A {\n public void method(Object o) {}\n}\n\npublic class B extends A {\n public void method(Object o) {} // warning on parameter type\n class Object {}\n}' After the quick-fix is applied: 'public class A {\n public void method(Object o) {}\n}\n\npublic class B extends A {\n public void method(java.lang.Object o) {} // new parameter type\n class Object {}\n}'", + "markdown": "Reports parameter types of a subclass method that have the same name as the parameter type of the corresponding super method but belong to a different package. In these cases, the subclass method cannot override the super method.\n\n**Example:**\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(Object o) {} // warning on parameter type\n class Object {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(java.lang.Object o) {} // new parameter type\n class Object {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterTypePreventsOverriding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtractMethodRecommender", + "shortDescription": { + "text": "Method can be extracted" + }, + "fullDescription": { + "text": "Suggests extracting fragments of code to a separate method to make code more clear. This inspection has a number of heuristics to select good candidates for extraction, including the following ones. The extracted fragment has no non-local control flow The extracted fragment has exactly one output variable There are no similar uses of output variable inside the extracted fragment and outside it The extracted fragment has only few input parameters (no more than three by default; configured with the inspection option) The extracted fragment is not smaller than the configured length (500 characters by default) but no bigger than 60% of the containing method body", + "markdown": "Suggests extracting fragments of code to a separate method to make code more clear. This inspection has a number of heuristics to select good candidates for extraction, including the following ones.\n\n* The extracted fragment has no non-local control flow\n* The extracted fragment has exactly one output variable\n* There are no similar uses of output variable inside the extracted fragment and outside it\n* The extracted fragment has only few input parameters (no more than three by default; configured with the inspection option)\n* The extracted fragment is not smaller than the configured length (500 characters by default) but no bigger than 60% of the containing method body" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExtractMethodRecommender", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringOperationCanBeSimplified", + "shortDescription": { + "text": "Redundant 'String' operation" + }, + "fullDescription": { + "text": "Reports redundant calls to 'String' constructors and methods like 'toString()' or 'substring()' that can be replaced with a simpler expression. For example, calls to these methods can be safely removed in code like '\"string\".substring(0)', '\"string\".toString()', or 'new StringBuilder().toString().substring(1,3)'. Example: 'System.out.println(new String(\"message\"));' After the quick-fix is applied: 'System.out.println(\"message\");' Note that the quick-fix removes the redundant constructor call, and this may affect 'String' referential equality. If you need to preserve it, even though it is considered bad practice, suppress the warning or use the inspection setting to ignore redundant 'String' constructor calls. Use the Do not report String constructor calls option below to not report code like the example above. This will avoid changing the outcome of String comparisons with '==' or '!=' after applying the quick-fix in code that uses 'new String()' calls to guarantee a different object identity. New in 2018.1", + "markdown": "Reports redundant calls to `String` constructors and methods like `toString()` or `substring()` that can be replaced with a simpler expression.\n\nFor example, calls to these methods can be safely removed in code\nlike `\"string\".substring(0)`, `\"string\".toString()`, or\n`new StringBuilder().toString().substring(1,3)`.\n\nExample:\n\n\n System.out.println(new String(\"message\"));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"message\");\n\n\nNote that the quick-fix removes the redundant constructor call, and this may affect `String` referential equality.\nIf you need to preserve it, even though it is considered bad practice, suppress the warning or use the inspection setting to ignore\nredundant `String` constructor calls.\n\n\nUse the **Do not report String constructor calls** option below to not report code like the example above.\nThis will avoid changing the outcome of String comparisons with `==` or `!=` after applying\nthe quick-fix in code that uses `new String()` calls to guarantee a different object identity.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringOperationCanBeSimplified", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassReferencesSubclass", + "shortDescription": { + "text": "Class references one of its subclasses" + }, + "fullDescription": { + "text": "Reports classes which contain references to one of their subclasses. Such references may be confusing and violate several rules of object-oriented design. Example: 'class Entity {\n // Warning: the class references its subclass\n void compare(SimpleEntity entity) {\n ...\n }\n }\n class SimpleEntity extends Entity {\n ...\n }'", + "markdown": "Reports classes which contain references to one of their subclasses. Such references may be confusing and violate several rules of object-oriented design.\n\nExample:\n\n\n class Entity {\n // Warning: the class references its subclass\n void compare(SimpleEntity entity) {\n ...\n }\n }\n class SimpleEntity extends Entity {\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassReferencesSubclass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DateToString", + "shortDescription": { + "text": "Call to 'Date.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on 'java.util.Date' objects. Such calls are usually incorrect in an internationalized environment.", + "markdown": "Reports `toString()` calls on `java.util.Date` objects. Such calls are usually incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToDateToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IterableUsedAsVararg", + "shortDescription": { + "text": "Iterable is used as vararg" + }, + "fullDescription": { + "text": "Reports suspicious usages of 'Collection' or 'Iterable' in vararg method calls. For example, in the following method: ' boolean contains(T needle, T... haystack) {...}' a call like 'if(contains(\"item\", listOfStrings)) {...}' looks suspicious as the list will be wrapped into a single element array. Such code can be successfully compiled and will likely run without exceptions, but it's probably used by mistake. This inspection depends on the Java feature 'Variable arity methods' which is available since Java 5. New in 2019.2", + "markdown": "Reports suspicious usages of `Collection` or `Iterable` in vararg method calls.\n\nFor example, in the following method:\n\n\n boolean contains(T needle, T... haystack) {...}\n\na call like\n\n\n if(contains(\"item\", listOfStrings)) {...}\n\nlooks suspicious as the list will be wrapped into a single element array.\nSuch code can be successfully compiled and will likely run without\nexceptions, but it's probably used by mistake.\n\nThis inspection depends on the Java feature 'Variable arity methods' which is available since Java 5.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IterableUsedAsVararg", + "cweIds": [ + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodNameSameAsParentName", + "shortDescription": { + "text": "Method name same as parent class name" + }, + "fullDescription": { + "text": "Reports methods that have the same name as the superclass of the method's class, as such a method name may be confusing. This inspection doesn't check interfaces or superclasses deep in the hierarchy. Example: 'class Parent {}\n class Child extends Parent {\n public Parent Parent() {\n return null;\n }\n }' A quick-fix that renames such methods is available only in the editor.", + "markdown": "Reports methods that have the same name as the superclass of the method's class, as such a method name may be confusing.\n\nThis inspection doesn't check interfaces or superclasses deep in the hierarchy.\n\n**Example:**\n\n\n class Parent {}\n class Child extends Parent {\n public Parent Parent() {\n return null;\n }\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodNameSameAsParentName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterNamingConvention", + "shortDescription": { + "text": "Lambda parameter naming convention" + }, + "fullDescription": { + "text": "Reports lambda parameters whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'Function id = X -> X;' should be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for lambda parameter names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports lambda parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `Function id = X -> X;`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for lambda parameter names.\nSpecify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LambdaParameterNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LawOfDemeter", + "shortDescription": { + "text": "Law of Demeter" + }, + "fullDescription": { + "text": "Reports Law of Demeter violations. The Law of Demeter is not really a law, but specifies a style guideline: never call a method on an object received from another call. The code that follows this guideline is easier to maintain, adapt, and refactor, has less coupling between methods, less duplication, and better information hiding. On the other hand, you may need to write many wrapper methods to meet this guideline. Example: 'boolean pay(Customer c, Invoice invoice) {\n int dollars = c.getWallet().contents; // violation\n if (dollars >= invoice.getAmount()) {\n Wallet w = c.getWallet();\n w.subtract(invoice.getAmount()); // violation\n return true;\n }\n return false;\n }' The above example might be better implemented as a method 'payInvoice(Invoice invoice)' in 'Customer'. Use the Ignore calls to library methods and access to library fields option to ignore Law of Demeter violations that can't be fixed without changing a library.", + "markdown": "Reports [Law of Demeter](https://en.wikipedia.org/wiki/Law_of_Demeter) violations.\n\n\nThe Law of Demeter is not really a law, but specifies a style guideline: never call a method on an object received from another call.\nThe code that follows this guideline is easier to maintain, adapt, and refactor, has less coupling between methods, less duplication,\nand better information hiding. On the other hand, you may need to write many wrapper methods to meet this guideline.\n\n**Example:**\n\n\n boolean pay(Customer c, Invoice invoice) {\n int dollars = c.getWallet().contents; // violation\n if (dollars >= invoice.getAmount()) {\n Wallet w = c.getWallet();\n w.subtract(invoice.getAmount()); // violation\n return true;\n }\n return false;\n }\n\nThe above example might be better implemented as a method `payInvoice(Invoice invoice)` in `Customer`.\n\n\nUse the **Ignore calls to library methods and access to library fields** option to ignore Law of Demeter violations\nthat can't be fixed without changing a library." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LawOfDemeter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousFieldAccess", + "shortDescription": { + "text": "Access to inherited field looks like access to element from surrounding code" + }, + "fullDescription": { + "text": "Reports access to a superclass field from an anonymous, inner or local class, if a local variable, parameter, or field with the same name is available in the code surrounding the class. In this case it may seem that an element from the surrounding code is accessed, when in fact it is an access to a field from the superclass. To clarify the intent of the code, it is recommended to add an explicit 'super' qualifier to the field access. Example: 'class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(ambiguous); // the field is accessed, not the parameter\n }\n };\n }\n }' After the quick-fix is applied: 'class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(super.ambiguous);\n }\n };\n }\n }'", + "markdown": "Reports access to a superclass field from an anonymous, inner or local class, if a local variable, parameter, or field with the same name is available in the code surrounding the class. In this case it may seem that an element from the surrounding code is accessed, when in fact it is an access to a field from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the field access.\n\n**Example:**\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(ambiguous); // the field is accessed, not the parameter\n }\n };\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(super.ambiguous);\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AmbiguousFieldAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonProtectedConstructorInAbstractClass", + "shortDescription": { + "text": "Public constructor in abstract class" + }, + "fullDescription": { + "text": "Reports 'public' constructors of 'abstract' classes. Constructors of 'abstract' classes can only be called from the constructors of their subclasses, declaring them 'public' may be confusing. The quick-fix makes such constructors protected. Example: 'public abstract class Foo {\n public Foo () { // warning: has 'public' modifier\n /* ... */\n }\n }' After the quick-fix is applied: 'public abstract class Foo {\n protected Foo () {\n /* ... */\n }\n }' Configure the inspection: Use the Ignore for non-public classes option below to ignore 'public' constructors in non-public classes.", + "markdown": "Reports `public` constructors of `abstract` classes.\n\n\nConstructors of `abstract` classes can only be called from the constructors of\ntheir subclasses, declaring them `public` may be confusing.\n\nThe quick-fix makes such constructors protected.\n\n**Example:**\n\n\n public abstract class Foo {\n public Foo () { // warning: has 'public' modifier\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public abstract class Foo {\n protected Foo () {\n /* ... */\n }\n }\n\nConfigure the inspection:\n\nUse the **Ignore for non-public classes** option below to ignore `public` constructors in non-public classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstructorNotProtectedInAbstractClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparableImplementedButEqualsNotOverridden", + "shortDescription": { + "text": "'Comparable' implemented but 'equals()' not overridden" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.lang.Comparable' but do not override 'equals()'. If 'equals()' is not overridden, the 'equals()' implementation is not consistent with the 'compareTo()' implementation. If an object of such a class is added to a collection such as 'java.util.SortedSet', this collection will violate the contract of 'java.util.Set', which is defined in terms of 'equals()'. Example: 'class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n }' After the quick fix is applied: 'class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n\n @Override\n public boolean equals(Object o) {\n return o instanceof Length && compareTo((Length) o) == 0;\n }\n }'", + "markdown": "Reports classes that implement `java.lang.Comparable` but do not override `equals()`.\n\n\nIf `equals()`\nis not overridden, the `equals()` implementation is not consistent with\nthe `compareTo()` implementation. If an object of such a class is added\nto a collection such as `java.util.SortedSet`, this collection will violate\nthe contract of `java.util.Set`, which is defined in terms of\n`equals()`.\n\n**Example:**\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n\n @Override\n public boolean equals(Object o) {\n return o instanceof Length && compareTo((Length) o) == 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ComparableImplementedButEqualsNotOverridden", + "cweIds": [ + 697 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MapReplaceableByEnumMap", + "shortDescription": { + "text": "'Map' can be replaced with 'EnumMap'" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.Map' objects whose key types are enumerated classes. Such 'java.util.Map' objects can be replaced with 'java.util.EnumMap' objects. 'java.util.EnumMap' implementations can be much more efficient because the underlying data structure is a simple array. Example: 'Map myEnums = new HashMap<>();' After the quick-fix is applied: 'Map myEnums = new EnumMap<>(MyEnum.class);'", + "markdown": "Reports instantiations of `java.util.Map` objects whose key types are enumerated classes. Such `java.util.Map` objects can be replaced with `java.util.EnumMap` objects.\n\n\n`java.util.EnumMap` implementations can be much more efficient\nbecause the underlying data structure is a simple array.\n\n**Example:**\n\n\n Map myEnums = new HashMap<>();\n\nAfter the quick-fix is applied:\n\n\n Map myEnums = new EnumMap<>(MyEnum.class);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MapReplaceableByEnumMap", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnNull", + "shortDescription": { + "text": "Return of 'null'" + }, + "fullDescription": { + "text": "Reports 'return' statements with 'null' return values. While occasionally useful, this construct may make the code more prone to failing with a 'NullPointerException'. If a method is designed to return 'null', it is suggested to mark it with the '@Nullable' annotation - such methods will be ignored by this inspection. Example: 'class Person {\n public String getName () {\n return null;\n }\n }' After the quick-fix is applied: 'class Person {\n @Nullable\n public String getName () {\n return null;\n }\n }' If the return type is 'java.util.Optional', an additional quick-fix to convert 'null' to 'Optional.empty()' is suggested. Use the following options to configure the inspection: Whether to ignore 'private' methods. This will also ignore return of 'null' from anonymous classes and lambdas. Whether 'null' values on array returns, collection object returns, plain object returns, or a combination of the three should be reported. Return of 'null' in methods with return type 'java.util.Optional' are always reported. Click Configure annotations to specify which annotations should be considered 'nullable'.", + "markdown": "Reports `return` statements with `null` return values. While occasionally useful, this construct may make the code more prone to failing with a `NullPointerException`.\n\n\nIf a method is designed to return `null`, it is suggested to mark it with the\n`@Nullable` annotation - such methods will be ignored by this inspection.\n\n**Example:**\n\n\n class Person {\n public String getName () {\n return null;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n @Nullable\n public String getName () {\n return null;\n }\n }\n\n\nIf the return type is `java.util.Optional`, an additional quick-fix to convert\n`null` to `Optional.empty()` is suggested.\n\n\nUse the following options to configure the inspection:\n\n* Whether to ignore `private` methods. This will also ignore return of `null` from anonymous classes and lambdas.\n* Whether `null` values on array returns, collection object returns, plain object returns, or a combination of the three should be reported. Return of `null` in methods with return type `java.util.Optional` are always reported.\n* Click **Configure annotations** to specify which annotations should be considered 'nullable'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReturnOfNull", + "cweIds": [ + 252, + 476 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 172, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggingStringTemplateAsArgument", + "shortDescription": { + "text": "String template as argument to logging call" + }, + "fullDescription": { + "text": "Reports string templates that are used as arguments to SLF4J and Log4j 2 logging methods. The method 'org.apache.logging.log4j.Logger.log()' and its overloads are supported only for all log levels option. String templates are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled. Example (for Kotlin): 'val variable1 = getVariable()\n logger.info(\"variable1: $variable1\")' After the quick-fix is applied (for Kotlin): 'val variable1 = getVariable()\n logger.info(\"variable1: {}\", variable1)' Note that the suggested replacement might not be equivalent to the original code, for example, when string templates contain method calls or assignment expressions. Use the Warn on list to ignore certain higher logging levels. Higher logging levels may be always enabled, and the arguments will always be evaluated. Use the Do not warn when only expressions with primitive types, their wrappers or String are included option to ignore string templates, which contain only expressions with primitive types, their wrappers or String. For example, it could be useful to prevent loading lazy collections. Note that, creating string even only with expressions with primitive types, their wrappers or String at runtime can negatively impact performance. New in 2023.1", + "markdown": "Reports string templates that are used as arguments to **SLF4J** and **Log4j 2** logging methods. The method `org.apache.logging.log4j.Logger.log()` and its overloads are supported only for **all log levels** option. String templates are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled.\n\n**Example (for Kotlin):**\n\n\n val variable1 = getVariable()\n logger.info(\"variable1: $variable1\")\n\n**After the quick-fix is applied (for Kotlin):**\n\n\n val variable1 = getVariable()\n logger.info(\"variable1: {}\", variable1)\n\n\nNote that the suggested replacement might not be equivalent to the original code, for example,\nwhen string templates contain method calls or assignment expressions.\n\n* Use the **Warn on** list to ignore certain higher logging levels. Higher logging levels may be always enabled, and the arguments will always be evaluated.\n* Use the **Do not warn when only expressions with primitive types, their wrappers or String are included** option to ignore string templates, which contain only expressions with primitive types, their wrappers or String. For example, it could be useful to prevent loading lazy collections. Note that, creating string even only with expressions with primitive types, their wrappers or String at runtime can negatively impact performance.\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LoggingStringTemplateAsArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Logging", + "index": 52, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnpredictableBigDecimalConstructorCall", + "shortDescription": { + "text": "Unpredictable 'BigDecimal' constructor call" + }, + "fullDescription": { + "text": "Reports calls to 'BigDecimal' constructors that accept a 'double' value. These constructors produce 'BigDecimal' that is exactly equal to the supplied 'double' value. However, because doubles are encoded in the IEEE 754 64-bit double-precision binary floating-point format, the exact value can be unexpected. For example, 'new BigDecimal(0.1)' yields a 'BigDecimal' object. Its value is '0.1000000000000000055511151231257827021181583404541015625' which is the nearest number to 0.1 representable as a double. To get 'BigDecimal' that stores the same value as written in the source code, use either 'new BigDecimal(\"0.1\")' or 'BigDecimal.valueOf(0.1)'. Example: 'class Constructor {\n void foo() {\n new BigDecimal(0.1);\n }\n }' After the quick-fix is applied: 'class Constructor {\n void foo() {\n new BigDecimal(\"0.1\");\n }\n }'", + "markdown": "Reports calls to `BigDecimal` constructors that accept a `double` value. These constructors produce `BigDecimal` that is exactly equal to the supplied `double` value. However, because doubles are encoded in the IEEE 754 64-bit double-precision binary floating-point format, the exact value can be unexpected.\n\nFor example, `new BigDecimal(0.1)` yields a `BigDecimal` object. Its value is\n`0.1000000000000000055511151231257827021181583404541015625`\nwhich is the nearest number to 0.1 representable as a double.\nTo get `BigDecimal` that stores the same value as written in the source code,\nuse either `new BigDecimal(\"0.1\")` or `BigDecimal.valueOf(0.1)`.\n\n**Example:**\n\n\n class Constructor {\n void foo() {\n new BigDecimal(0.1);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Constructor {\n void foo() {\n new BigDecimal(\"0.1\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnpredictableBigDecimalConstructorCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntegerDivisionInFloatingPointContext", + "shortDescription": { + "text": "Integer division in floating-point context" + }, + "fullDescription": { + "text": "Reports integer divisions where the result is used as a floating-point number. Such division is often an error and may have unexpected results due to the truncation that happens in integer division. Example: 'float x = 3.0F + 3 * 2 / 5;' After the quick-fix is applied: 'float x = 3.0F + ((float) (3 * 2)) /5;'", + "markdown": "Reports integer divisions where the result is used as a floating-point number. Such division is often an error and may have unexpected results due to the truncation that happens in integer division.\n\n**Example:**\n\n\n float x = 3.0F + 3 * 2 / 5;\n\nAfter the quick-fix is applied:\n\n\n float x = 3.0F + ((float) (3 * 2)) /5;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IntegerDivisionInFloatingPointContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertWithoutMessage", + "shortDescription": { + "text": "Message missing on assertion" + }, + "fullDescription": { + "text": "Reports calls to 'assertXXX()' or 'fail()' without an error message string argument. An error message on assertion failure may help clarify the test case's intent. Example: 'assertTrue(checkValid());' After the quick-fix is applied: 'assertTrue(checkValid(), \"|\");' The message argument is added before or after the existing arguments according to the assertions framework that you use.", + "markdown": "Reports calls to `assertXXX()` or `fail()` without an error message string argument. An error message on assertion failure may help clarify the test case's intent.\n\n**Example:**\n\n\n assertTrue(checkValid());\n\nAfter the quick-fix is applied:\n\n assertTrue(checkValid(), \"|\");\n\n\nThe message argument is added before or after the existing arguments according to the assertions framework that you use." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssertWithoutMessage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 128, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalBreakInInfiniteLoop", + "shortDescription": { + "text": "Conditional break inside loop" + }, + "fullDescription": { + "text": "Reports conditional breaks at the beginning or at the end of a loop and suggests adding a loop condition instead to shorten the code. Example: 'while (true) {\n if (i == 23) break;\n i++;\n }' After the quick fix is applied: 'while (i != 23) {\n i++;\n }'", + "markdown": "Reports conditional breaks at the beginning or at the end of a loop and suggests adding a loop condition instead to shorten the code.\n\nExample:\n\n\n while (true) {\n if (i == 23) break;\n i++;\n }\n\nAfter the quick fix is applied:\n\n\n while (i != 23) {\n i++;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalBreakInInfiniteLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedInnerClassAccess", + "shortDescription": { + "text": "Unqualified inner class access" + }, + "fullDescription": { + "text": "Reports references to inner classes that are not qualified with the name of the enclosing class. Example: 'import foo.Foo.Bar;\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Bar bar) {}\n }' After the quick-fix is applied: 'class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Foo.Bar bar) {}\n }' Use the inspection settings to ignore references to inner classes within the same class, which therefore do not require an import.", + "markdown": "Reports references to inner classes that are not qualified with the name of the enclosing class.\n\n**Example:**\n\n\n import foo.Foo.Bar;\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Bar bar) {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Foo.Bar bar) {}\n }\n\n\nUse the inspection settings to ignore references to inner classes within the same class,\nwhich therefore do not require an import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnqualifiedInnerClassAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantClassCall", + "shortDescription": { + "text": "Redundant 'isInstance()' or 'cast()' call" + }, + "fullDescription": { + "text": "Reports redundant calls of 'java.lang.Class' methods. For example, 'Xyz.class.isInstance(object)' can be replaced with 'object instanceof Xyz'. The instanceof check is preferred: even though the performance will probably be the same as these methods are intrinsics, they better indicate a static check. New in 2018.2", + "markdown": "Reports redundant calls of `java.lang.Class` methods.\n\nFor example, `Xyz.class.isInstance(object)` can be replaced with `object instanceof Xyz`.\nThe instanceof check is preferred: even though the performance will probably be the same as these methods are intrinsics,\nthey better indicate a static check.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantClassCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryStringEscape", + "shortDescription": { + "text": "Unnecessarily escaped character" + }, + "fullDescription": { + "text": "Reports unnecessarily escaped characters in 'String' and optionally 'char' literals. Escaped tab characters '\\t' are not reported, because tab characters are invisible. Examples: 'String s = \"\\'Scare\\' quotes\";\n String t = \"\"\"\n All you need is\\n\\tLove\\n\"\"\";' After the quick-fix is applied: 'String s = \"'Scare' quotes\";\n String t = \"\"\"\n All you need is\n \\tLove\n \"\"\";' New in 2019.3", + "markdown": "Reports unnecessarily escaped characters in `String` and optionally `char` literals.\n\nEscaped tab characters `\\t` are not reported, because tab characters are invisible.\n\nExamples:\n\n\n String s = \"\\'Scare\\' quotes\";\n String t = \"\"\"\n All you need is\\n\\tLove\\n\"\"\";\n\nAfter the quick-fix is applied:\n\n\n String s = \"'Scare' quotes\";\n String t = \"\"\"\n All you need is\n \\tLove\n \"\"\";\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryStringEscape", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldCanBeLocal", + "shortDescription": { + "text": "Field can be local" + }, + "fullDescription": { + "text": "Reports redundant class fields that can be replaced with local variables. If all local usages of a field are preceded by assignments to that field, the field can be removed, and its usages can be replaced with local variables.", + "markdown": "Reports redundant class fields that can be replaced with local variables.\n\nIf all local usages of a field are preceded by assignments to that field, the\nfield can be removed, and its usages can be replaced with local variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldCanBeLocal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UrlHashCode", + "shortDescription": { + "text": "Call to 'equals()' or 'hashCode()' on 'URL' object" + }, + "fullDescription": { + "text": "Reports 'hashCode()' and 'equals()' calls on 'java.net.URL' objects and calls that add 'URL' objects to maps and sets. 'URL''s 'equals()' and 'hashCode()' methods can perform a DNS lookup to resolve the host name. This may cause significant delays, depending on the availability and speed of the network and the DNS server. Using 'java.net.URI' instead of 'java.net.URL' will avoid the DNS lookup. Example: 'boolean urlEquals(URL url1, URL url2) {\n return url1.equals(url2);\n }'", + "markdown": "Reports `hashCode()` and `equals()` calls on `java.net.URL` objects and calls that add `URL` objects to maps and sets.\n\n\n`URL`'s `equals()` and `hashCode()` methods can perform a DNS lookup to resolve the host name.\nThis may cause significant delays, depending on the availability and speed of the network and the DNS server.\nUsing `java.net.URI` instead of `java.net.URL` will avoid the DNS lookup.\n\n**Example:**\n\n\n boolean urlEquals(URL url1, URL url2) {\n return url1.equals(url2);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UrlHashCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithIdenticalBranches", + "shortDescription": { + "text": "'if' statement with identical branches" + }, + "fullDescription": { + "text": "Reports 'if' statements in which common parts can be extracted from the branches. These common parts are independent from the condition and make 'if' statements harder to understand. Example: 'if (x > 12) {\n doSomethingBefore();\n doSomethingDifferent1();\n doSomethingAfter();\n } else {\n doSomethingBefore();\n doSomethingDifferent2();\n doSomethingAfter();\n }' After the quick-fix is applied: 'doSomethingBefore();\n if (x > 12) {\n doSomethingDifferent1();\n } else {\n doSomethingDifferent2();\n }\n doSomethingAfter();' Updated in 2018.1", + "markdown": "Reports `if` statements in which common parts can be extracted from the branches.\n\nThese common parts are independent from the condition and make `if` statements harder to understand.\n\nExample:\n\n\n if (x > 12) {\n doSomethingBefore();\n doSomethingDifferent1();\n doSomethingAfter();\n } else {\n doSomethingBefore();\n doSomethingDifferent2();\n doSomethingAfter();\n }\n\nAfter the quick-fix is applied:\n\n\n doSomethingBefore();\n if (x > 12) {\n doSomethingDifferent1();\n } else {\n doSomethingDifferent2();\n }\n doSomethingAfter();\n\nUpdated in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "IfStatementWithIdenticalBranches", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceWithOnlyOneDirectInheritor", + "shortDescription": { + "text": "Interface with a single direct inheritor" + }, + "fullDescription": { + "text": "Reports interfaces that have precisely one direct inheritor. While such interfaces may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the interface with its inheritor. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design.", + "markdown": "Reports interfaces that have precisely one direct inheritor. While such interfaces may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the interface with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InterfaceWithOnlyOneDirectInheritor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofChain", + "shortDescription": { + "text": "Chain of 'instanceof' checks" + }, + "fullDescription": { + "text": "Reports any chains of 'if'-'else' statements all of whose conditions are 'instanceof' expressions or class equality expressions (e.g. comparison with 'String.class'). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests. Example: 'double getArea(Shape shape) {\n // Warning: abstraction failure.\n // It would be better to declare a getArea()\n // abstract method in the shape interface\n // and implement it in every inheritor.\n if (shape instanceof Point) {\n return 0;\n }\n if (shape instanceof Circle) {\n return Math.PI *\n Math.pow(((Circle) shape).radius(), 2);\n }\n if (shape instanceof Rectangle) {\n return ((Rectangle) shape).width() *\n ((Rectangle) shape).height();\n }\n throw new IllegalArgumentException();\n }' Use the checkbox below to ignore 'instanceof' expressions on library classes.", + "markdown": "Reports any chains of `if`-`else` statements all of whose conditions are `instanceof` expressions or class equality expressions (e.g. comparison with `String.class`). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests.\n\nExample:\n\n\n double getArea(Shape shape) {\n // Warning: abstraction failure.\n // It would be better to declare a getArea()\n // abstract method in the shape interface\n // and implement it in every inheritor.\n if (shape instanceof Point) {\n return 0;\n }\n if (shape instanceof Circle) {\n return Math.PI *\n Math.pow(((Circle) shape).radius(), 2);\n }\n if (shape instanceof Rectangle) {\n return ((Rectangle) shape).width() *\n ((Rectangle) shape).height();\n }\n throw new IllegalArgumentException();\n }\n\n\nUse the checkbox below to ignore `instanceof` expressions on library classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainOfInstanceofChecks", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockMarkerComments", + "shortDescription": { + "text": "Block marker comment" + }, + "fullDescription": { + "text": "Reports comments which are used as code block markers. The quick-fix removes such comments. Example: 'while (i < 10) {\n i++;\n } // end while' After the quick-fix is applied: 'while (i < 10) {\n i++;\n }'", + "markdown": "Reports comments which are used as code block markers. The quick-fix removes such comments.\n\nExample:\n\n\n while (i < 10) {\n i++;\n } // end while\n\nAfter the quick-fix is applied:\n\n\n while (i < 10) {\n i++;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BlockMarkerComments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableHasSerializationMethods", + "shortDescription": { + "text": "Serializable class without 'readObject()' and 'writeObject()'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes that do not implement 'readObject()' and 'writeObject()' methods. If 'readObject()' and 'writeObject()' methods are not implemented, the default serialization algorithms are used, which may be sub-optimal for performance and compatibility in many environments. Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' classes without non-static fields. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports `Serializable` classes that do not implement `readObject()` and `writeObject()` methods.\n\n\nIf `readObject()` and `writeObject()` methods are not implemented,\nthe default serialization algorithms are used,\nwhich may be sub-optimal for performance and compatibility in many environments.\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` classes without non-static fields.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableHasSerializationMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IdempotentLoopBody", + "shortDescription": { + "text": "Idempotent loop body" + }, + "fullDescription": { + "text": "Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error. Such loops may iterate only zero, one, or infinite number of times. If the infinite number of times case is unreachable, such a loop can be replaced with an 'if' statement. Otherwise, there's a possibility that the program can get stuck. Example: 'public void foo(String baseName, String names) {\n int suffix = 1;\n String name = baseName;\n while (names.contains(name)) {\n // error: suffix is not updated making loop body idempotent\n name = baseName + suffix;\n }\n }' New in 2018.1", + "markdown": "Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error.\n\nSuch loops may iterate only zero, one, or infinite number of times.\nIf the infinite number of times case is unreachable, such a loop can be replaced with an `if` statement.\nOtherwise, there's a possibility that the program can get stuck.\n\nExample:\n\n\n public void foo(String baseName, String names) {\n int suffix = 1;\n String name = baseName;\n while (names.contains(name)) {\n // error: suffix is not updated making loop body idempotent\n name = baseName + suffix;\n }\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IdempotentLoopBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantImplements", + "shortDescription": { + "text": "Redundant interface declaration" + }, + "fullDescription": { + "text": "Reports interfaces in a class' 'implements' list or an interface's 'extends' list that are already implemented by a superclass or extended by a superinterface. Such declarations are unnecessary and may be safely removed. Example: 'class X implements One, Two {\n }\n interface One {}\n interface Two extends One {}' After the quick-fix is applied: 'class X implements Two {\n }\n interface One {}\n interface Two extends One {}' Use the options to not report on 'Serializable' or 'Externalizable' in an 'extends' or 'implements' list.", + "markdown": "Reports interfaces in a class' `implements` list or an interface's `extends` list that are already implemented by a superclass or extended by a superinterface. Such declarations are unnecessary and may be safely removed.\n\n**Example:**\n\n\n class X implements One, Two {\n }\n interface One {}\n interface Two extends One {}\n\nAfter the quick-fix is applied:\n\n\n class X implements Two {\n }\n interface One {}\n interface Two extends One {}\n\n\nUse the options to not report on `Serializable` or `Externalizable`\nin an `extends` or `implements` list." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantInterfaceDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FrequentlyUsedInheritorInspection", + "shortDescription": { + "text": "Class may extend a commonly used base class" + }, + "fullDescription": { + "text": "Reports classes or interfaces that can be replaced with an implementation or extension of a more specific commonly used class or interface. For this inspection to work, a superclass needs to be in project source files and the project needs to use the IntelliJ IDEA build system. Example: 'class MyInheritor implements A {} // B suggested on the A reference\n\n interface A {}\n\n abstract class B implements A {}\n\n abstract class C1 extends B {}\n abstract class C2 extends B {}\n abstract class C3 extends B {}\n abstract class C4 extends B {}\n abstract class C5 extends B {}' By default, this inspection doesn't highlight issues in the editor but only provides a quick-fix. New in 2017.2", + "markdown": "Reports classes or interfaces that can be replaced with an implementation or extension of a more specific commonly used class or interface.\n\nFor this inspection to work, a superclass needs to be in project source files and the project needs to use the IntelliJ IDEA build system.\n\n**Example:**\n\n\n class MyInheritor implements A {} // B suggested on the A reference\n\n interface A {}\n\n abstract class B implements A {}\n\n abstract class C1 extends B {}\n abstract class C2 extends B {}\n abstract class C3 extends B {}\n abstract class C4 extends B {}\n abstract class C5 extends B {}\n\nBy default, this inspection doesn't highlight issues in the editor but only provides a quick-fix.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FrequentlyUsedInheritorInspection", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldNamingConvention", + "shortDescription": { + "text": "Field naming convention" + }, + "fullDescription": { + "text": "Reports fields whose names are too short, too long, or do not follow the specified regular expression pattern. Example: if the inspection is enabled for constants, and the minimum specified length for a field name is 5 (the default), the following constant produces a warning because the length of its name is 3, which is less than 5: 'public static final int MAX = 42;'. A quick-fix that renames such fields is available only in the editor. Configure the inspection: Use the list in the Options section to specify which fields should be checked. Deselect the checkboxes for the fields for which you want to skip the check. For each field type, specify the minimum length, maximum length, and the regular expression expected for field names using the provided input fields. Specify 0 in the length fields to skip the corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports fields whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for constants, and the minimum specified length for a field name is 5 (the default), the following constant\nproduces a warning because the length of its name is 3, which is less than 5: `public static final int MAX = 42;`.\n\nA quick-fix that renames such fields is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which fields should be checked. Deselect the checkboxes for the fields for which\nyou want to skip the check.\n\nFor each field type, specify the minimum length, maximum length, and the regular expression expected for field names using the\nprovided input fields.\nSpecify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard\n`java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 81, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantConditionalExpression", + "shortDescription": { + "text": "Constant conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions in which the condition is either a 'true' or 'false' constant. These expressions sometimes occur as a result of automatic refactorings and may be simplified. Example: 'return true ? \"Yes\" : \"No\";' After quick-fix is applied: 'return \"Yes\";'", + "markdown": "Reports conditional expressions in which the condition is either a `true` or `false` constant. These expressions sometimes occur as a result of automatic refactorings and may be simplified.\n\nExample:\n\n\n return true ? \"Yes\" : \"No\";\n\nAfter quick-fix is applied:\n\n\n return \"Yes\";\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantConditionalExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNamePrefixedWithPackageName", + "shortDescription": { + "text": "Class name prefixed with package name" + }, + "fullDescription": { + "text": "Reports classes whose names are prefixed with their package names, ignoring differences in capitalization. While occasionally having such names is reasonable, they are often used due to a poor naming scheme, may be redundant and annoying. Example: 'package byteCode;\n class ByteCodeAnalyzer {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports classes whose names are prefixed with their package names, ignoring differences in capitalization.\n\nWhile occasionally having such names is reasonable, they are often used due to a poor naming scheme, may be redundant and\nannoying.\n\n**Example:**\n\n\n package byteCode;\n class ByteCodeAnalyzer {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassNamePrefixedWithPackageName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 82, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SameParameterValue", + "shortDescription": { + "text": "Method parameter always has the same value" + }, + "fullDescription": { + "text": "Reports method parameters that always have the same constant value. Example: 'static void printPoint(int x, int y) { // x is always 0\n System.out.println(x + \", \" + y);\n }\n\n public static void main(String[] args) {\n printPoint(0, 1);\n printPoint(0, 2);\n }' The quick-fix inlines the constant value. This may simplify the method implementation. Use the Ignore when a quick-fix can not be provided option to suppress the inspections when: the parameter is modified inside the method the parameter value that is being passed is a reference to an inaccessible field (Java ony) the parameter is a vararg (Java only) Use the Maximal method visibility option to control the maximum visibility of methods to be reported. Use the Minimal method usage count to report parameter field to specify the minimal number of method usages with the same parameter value.", + "markdown": "Reports method parameters that always have the same constant value.\n\nExample:\n\n\n static void printPoint(int x, int y) { // x is always 0\n System.out.println(x + \", \" + y);\n }\n\n public static void main(String[] args) {\n printPoint(0, 1);\n printPoint(0, 2);\n }\n\nThe quick-fix inlines the constant value. This may simplify the method implementation.\n\n\nUse the **Ignore when a quick-fix can not be provided** option to suppress the inspections when:\n\n* the parameter is modified inside the method\n* the parameter value that is being passed is a reference to an inaccessible field (Java ony)\n* the parameter is a vararg (Java only)\n\n\nUse the **Maximal method visibility** option to control the maximum visibility of methods to be reported.\n\n\nUse the **Minimal method usage count to report parameter** field to specify the minimal number of method usages with the same parameter value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SameParameterValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CatchMayIgnoreException", + "shortDescription": { + "text": "Catch block may ignore exception" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. Finally, the static code analyzer reports if it detects that a 'catch' block may silently ignore important VM exceptions like 'NullPointerException'. Ignoring such an exception (without logging or rethrowing it) may hide a bug. The inspection won't report any 'catch' parameters named 'ignore' or 'ignored'. Conversely, the inspection will warn you about any 'catch' parameters named 'ignore' or 'ignored' that are actually in use. Additionally, the inspection won't report 'catch' parameters inside test sources named 'expected' or 'ok'. You can use a quick-fix to change the exception name to 'ignored'. For empty catch blocks, an additional quick-fix to generate the catch body is suggested. You can modify the \"Catch Statement Body\" template on the Code tab in Settings | Editor | File and Code Templates. Example: 'try {\n throwingMethod();\n } catch (IOException ex) {\n\n }' After the quick-fix is applied: 'try {\n System.out.println(System.in.read());\n } catch (IOException ignored) {\n\n }' Configure the inspection: Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments. Use the Do not warn when 'catch' block is not empty option to ignore 'catch' blocks that contain statements or comments inside, while the variable itself is not used. Use the Do not warn when exception named 'ignore(d)' is not actually ignored option to ignore variables named 'ignored' if they are in use. New in 2018.1", + "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\nFinally, the static code analyzer reports if it detects that a `catch` block may silently ignore important VM\nexceptions like `NullPointerException`. Ignoring such an exception\n(without logging or rethrowing it) may hide a bug.\n\n\nThe inspection won't report any `catch` parameters named `ignore` or `ignored`.\nConversely, the inspection will warn you about any `catch` parameters named `ignore` or `ignored` that are actually in use.\nAdditionally, the inspection won't report `catch` parameters inside test sources named `expected` or `ok`.\n\n\nYou can use a quick-fix to change the exception name to `ignored`.\nFor empty **catch** blocks, an additional quick-fix to generate the **catch** body is suggested.\nYou can modify the \"Catch Statement Body\" template on the Code tab in\n[Settings \\| Editor \\| File and Code Templates](settings://fileTemplates).\n\n**Example:**\n\n\n try {\n throwingMethod();\n } catch (IOException ex) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n System.out.println(System.in.read());\n } catch (IOException ignored) {\n\n }\n\nConfigure the inspection:\n\n* Use the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments.\n* Use the **Do not warn when 'catch' block is not empty** option to ignore `catch` blocks that contain statements or comments inside, while the variable itself is not used.\n* Use the **Do not warn when exception named 'ignore(d)' is not actually ignored** option to ignore variables named `ignored` if they are in use.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CatchMayIgnoreException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyDependents", + "shortDescription": { + "text": "Class with too many dependents" + }, + "fullDescription": { + "text": "Reports a class on which too many other classes are directly dependent. Any modification to such a class may require changing many other classes, which may be expensive. Only top-level classes are reported. Use the field below to specify the maximum allowed number of dependents for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports a class on which too many other classes are directly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the field below to specify the maximum allowed number of dependents for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyDependents", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 144, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrongPackageStatement", + "shortDescription": { + "text": "Wrong package statement" + }, + "fullDescription": { + "text": "Detects 'package' statements that do not correspond to the project directory structure. Also, reports classes without 'package' statements if the class is not located directly in source root directory. While it's not strictly mandated by Java language, it's good practise to keep classes from package 'com.example.myapp' inside a 'com/example/myapp' directory directly under a source root. Failure to do this may confuse code readers and make some tools work incorrectly.", + "markdown": "Detects `package` statements that do not correspond to the project directory structure. Also, reports classes without `package` statements if the class is not located directly in source root directory.\n\nWhile it's not strictly mandated by Java language, it's good practise to keep classes\nfrom package `com.example.myapp` inside a `com/example/myapp` directory directly under\na source root. Failure to do this may confuse code readers and make some tools work incorrectly." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "WrongPackageStatement", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldNotUsedInToString", + "shortDescription": { + "text": "Field not used in 'toString()' method" + }, + "fullDescription": { + "text": "Reports fields that are not used in the 'toString()' method of a class. Helps discover fields added after the 'toString()' method was last updated. The quick-fix regenerates the 'toString()' method. In the Generate | toString() dialog, it is possible to exclude fields from this check. This inspection will also check for problems with getter methods if the Enable getters in code generation option is enabled there. Example: 'public class Relevant {\n private String name; // not used in toString()\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"index=\" + index +\n \", length=\" + length + '}';\n }\n }' After the quick-fix is applied: 'public class Relevant {\n private String name;\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"name='\" + name + '\\'' +\n \", index=\" + index + \", length=\" + length + '}';\n }\n }'", + "markdown": "Reports fields that are not used in the `toString()` method of a class.\n\nHelps discover fields added after the `toString()` method was last updated.\nThe quick-fix regenerates the `toString()` method.\n\n\nIn the **Generate \\| toString()** dialog, it is possible to exclude fields from this check.\nThis inspection will also check for problems with getter methods if the *Enable getters in code generation* option is enabled there.\n\nExample:\n\n\n public class Relevant {\n private String name; // not used in toString()\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"index=\" + index +\n \", length=\" + length + '}';\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Relevant {\n private String name;\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"name='\" + name + '\\'' +\n \", index=\" + index + \", length=\" + length + '}';\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldNotUsedInToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/toString() issues", + "index": 201, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CovariantEquals", + "shortDescription": { + "text": "Covariant 'equals()'" + }, + "fullDescription": { + "text": "Reports 'equals()' methods taking an argument type other than 'java.lang.Object' if the containing class does not have other overloads of 'equals()' that take 'java.lang.Object' as its argument type. A covariant version of 'equals()' does not override the 'Object.equals(Object)' method. It may cause unexpected behavior at runtime. For example, if the class is used to construct one of the standard collection classes, which expect that the 'Object.equals(Object)' method is overridden. Example: 'class Foo {\n public boolean equals(Foo foo) { // warning\n return false;\n }\n }\n class Bar {\n public boolean equals(Bar bar) { // no warning here\n return false;\n }\n @Override\n public boolean equals(Object obj) {\n return false;\n }\n }'", + "markdown": "Reports `equals()` methods taking an argument type other than `java.lang.Object` if the containing class does not have other overloads of `equals()` that take `java.lang.Object` as its argument type.\n\n\nA covariant version of `equals()` does not override the\n`Object.equals(Object)` method. It may cause unexpected\nbehavior at runtime. For example, if the class is used to construct\none of the standard collection classes, which expect that the\n`Object.equals(Object)` method is overridden.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Foo foo) { // warning\n return false;\n }\n }\n class Bar {\n public boolean equals(Bar bar) { // no warning here\n return false;\n }\n @Override\n public boolean equals(Object obj) {\n return false;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CovariantEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2Lambda", + "shortDescription": { + "text": "Anonymous type can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports anonymous classes which can be replaced with lambda expressions. Example: 'new Thread(new Runnable() {\n @Override\n public void run() {\n // run thread\n }\n });' After the quick-fix is applied: 'new Thread(() -> {\n // run thread\n });' Note that if an anonymous class is converted into a stateless lambda, the same lambda object can be reused by Java runtime during subsequent invocations. On the other hand, when an anonymous class is used, separate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases, e.g. when anonymous class instances are used as 'HashMap' keys. Use the Report when interface is not annotated with @FunctionalInterface option to ignore the cases in which an anonymous class implements an interface without '@FunctionalInterface' annotation. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports anonymous classes which can be replaced with lambda expressions.\n\nExample:\n\n\n new Thread(new Runnable() {\n @Override\n public void run() {\n // run thread\n }\n });\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n // run thread\n });\n\n\nNote that if an anonymous class is converted into a stateless lambda, the same lambda object\ncan be reused by Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to ignore the cases in which an anonymous\nclass implements an interface without `@FunctionalInterface` annotation.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Convert2Lambda", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableIfStatement", + "shortDescription": { + "text": "'if' statement can be replaced with conditional or boolean expression" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be replaced with conditions using the '&&', '||', '==', '!=', or '?:' operator. The result is usually shorter, but not always clearer, so it's not advised to apply the fix in every case. Example: 'if (condition) return true; else return foo;' After the quick-fix is applied: 'return condition || foo;' Configure the inspection: Use the Don't suggest '?:' operator option to disable the warning when the '?:' operator is suggested. In this case, only '&&', '||', '==', and '!=' suggestions will be highlighted. The quick-fix will still be available in the editor. Use the Ignore chained 'if' statements option to disable the warning for 'if-else' chains. The quick-fix will still be available in the editor. New in 2018.2", + "markdown": "Reports `if` statements that can be replaced with conditions using the `&&`, `||`, `==`, `!=`, or `?:` operator.\n\nThe result is usually shorter, but not always clearer, so it's not advised to apply the fix in every case.\n\nExample:\n\n\n if (condition) return true; else return foo;\n\nAfter the quick-fix is applied:\n\n\n return condition || foo;\n\nConfigure the inspection:\n\n* Use the **Don't suggest '?:' operator** option to disable the warning when the `?:` operator is suggested. In this case, only `&&`, `||`, `==`, and `!=` suggestions will be highlighted. The quick-fix will still be available in the editor.\n* Use the **Ignore chained 'if' statements** option to disable the warning for `if-else` chains. The quick-fix will still be available in the editor.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifiableIfStatement", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowCaughtLocally", + "shortDescription": { + "text": "'throw' caught by containing 'try' statement" + }, + "fullDescription": { + "text": "Reports 'throw' statements whose exceptions are always caught by containing 'try' statements. Using 'throw' statements as a \"goto\" to change the local flow of control is confusing and results in poor performance. Example: 'try {\n if (!Files.isDirectory(PROJECTS)) {\n throw new IllegalStateException(\"Directory not found.\"); // warning: 'throw' caught by containing 'try' statement\n }\n ...\n } catch (Exception e) {\n LOG.error(\"run failed\");\n }' Use the Ignore rethrown exceptions option to ignore exceptions that are rethrown.", + "markdown": "Reports `throw` statements whose exceptions are always caught by containing `try` statements.\n\nUsing `throw`\nstatements as a \"goto\" to change the local flow of control is confusing and results in poor performance.\n\n**Example:**\n\n\n try {\n if (!Files.isDirectory(PROJECTS)) {\n throw new IllegalStateException(\"Directory not found.\"); // warning: 'throw' caught by containing 'try' statement\n }\n ...\n } catch (Exception e) {\n LOG.error(\"run failed\");\n }\n\nUse the **Ignore rethrown exceptions** option to ignore exceptions that are rethrown." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowCaughtLocally", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableWithSerialVersionUIDField", + "shortDescription": { + "text": "Non-serializable class with 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' classes that define a 'serialVersionUID' field. A 'serialVersionUID' field in that context normally indicates an error because the field will be ignored and the class will not be serialized. Example: 'public class IWantToSerializeThis {\n private static final long serialVersionUID = 2669293150219020249L;\n }'", + "markdown": "Reports non-`Serializable` classes that define a `serialVersionUID` field. A `serialVersionUID` field in that context normally indicates an error because the field will be ignored and the class will not be serialized.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n private static final long serialVersionUID = 2669293150219020249L;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NonSerializableClassWithSerialVersionUID", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnValueBasedClass", + "shortDescription": { + "text": "Value-based warnings" + }, + "fullDescription": { + "text": "Reports attempts to synchronize on an instance of a value-based class that produce compile-time warnings and raise run-time exceptions starting from Java 16. For example, 'java.lang.Double' is annotated with 'jdk.internal.ValueBased', so the following code will produce a compile-time warning: 'Double d = 20.0;\nsynchronized (d) { ... } // javac warning' New in 2021.1", + "markdown": "Reports attempts to synchronize on an instance of a value-based class that produce compile-time warnings and raise run-time exceptions starting from Java 16.\n\n\nFor example, `java.lang.Double` is annotated with `jdk.internal.ValueBased`, so the following code will\nproduce a compile-time warning:\n\n\n Double d = 20.0;\n synchronized (d) { ... } // javac warning\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "synchronization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 160, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementsWithoutDefault", + "shortDescription": { + "text": "'switch' statement without 'default' branch" + }, + "fullDescription": { + "text": "Reports 'switch' statements that do not contain 'default' labels. Adding the 'default' label guarantees that all possible scenarios are covered, and it becomes easier to make assumptions about the current state of the program. Note that by default, the inspection does not report 'switch' statements if all cases for enums or 'sealed' classes are covered. Use the Ignore exhaustive switch statements option if you want to change this behavior.", + "markdown": "Reports `switch` statements that do not contain `default` labels.\n\nAdding the `default` label guarantees that all possible scenarios are covered, and it becomes\neasier to make assumptions about the current state of the program.\n\n\nNote that by default, the inspection does not report `switch` statements if all cases for enums or `sealed` classes are covered.\nUse the **Ignore exhaustive switch statements** option if you want to change this behavior." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SwitchStatementWithoutDefaultBranch", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompatibleMask", + "shortDescription": { + "text": "Incompatible bitwise mask operation" + }, + "fullDescription": { + "text": "Reports bitwise mask expressions which are guaranteed to evaluate to 'true' or 'false'. The inspection checks the expressions of the form '(var & constant1) == constant2' or '(var | constant1) == constant2', where 'constant1' and 'constant2' are incompatible bitmask constants. Example: '// Incompatible mask: as the mask ends in 00,\n // the result could be 0x1200 but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}'", + "markdown": "Reports bitwise mask expressions which are guaranteed to evaluate to `true` or `false`.\n\n\nThe inspection checks the expressions of the form `(var & constant1) == constant2` or\n`(var | constant1) == constant2`, where `constant1`\nand `constant2` are incompatible bitmask constants.\n\n**Example:**\n\n // Incompatible mask: as the mask ends in 00,\n // the result could be 0x1200 but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IncompatibleBitwiseMaskOperation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 196, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitArgumentCanBeLambda", + "shortDescription": { + "text": "Explicit argument can be lambda" + }, + "fullDescription": { + "text": "Reports method calls that accept a non-trivial expression and can be replaced with an equivalent method call which accepts a lambda instead. Converting an expression to a lambda ensures that the expression won't be evaluated if it's not used inside the method. For example, 'optional.orElse(createDefaultValue())' can be converted to 'optional.orElseGet(this::createDefaultValue)'. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8. New in 2018.1", + "markdown": "Reports method calls that accept a non-trivial expression and can be replaced with an equivalent method call which accepts a lambda instead.\n\n\nConverting an expression to a lambda ensures that the expression won't be evaluated\nif it's not used inside the method. For example, `optional.orElse(createDefaultValue())` can be converted\nto `optional.orElseGet(this::createDefaultValue)`.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ExplicitArgumentCanBeLambda", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsCalledOnEnumConstant", + "shortDescription": { + "text": "'equals()' called on enum value" + }, + "fullDescription": { + "text": "Reports 'equals()' calls on enum constants. Such calls can be replaced by an identity comparison ('==') because two enum constants are equal only when they have the same identity. A quick-fix is available to change the call to a comparison. Example: 'boolean foo(MyEnum value) {\n return value.equals(MyEnum.FOO);\n }' After the quick-fix is applied: 'boolean foo(MyEnum value) {\n return value == MyEnum.FOO;\n }'", + "markdown": "Reports `equals()` calls on enum constants.\n\nSuch calls can be replaced by an identity comparison (`==`) because two\nenum constants are equal only when they have the same identity.\n\nA quick-fix is available to change the call to a comparison.\n\n**Example:**\n\n\n boolean foo(MyEnum value) {\n return value.equals(MyEnum.FOO);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(MyEnum value) {\n return value == MyEnum.FOO;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsCalledOnEnumConstant", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardcodedLineSeparators", + "shortDescription": { + "text": "Hardcoded line separator" + }, + "fullDescription": { + "text": "Reports linefeed ('\\n') and carriage return ('\\r') character escape sequences used in string literals, character literals or text blocks. These characters are commonly used as line separators, and portability may suffer if they are hardcoded. Example: 'String count = \"first\\nsecond\\rthird\";'", + "markdown": "Reports linefeed (`\\n`) and carriage return (`\\r`) character escape sequences used in string literals, character literals or text blocks. These characters are commonly used as line separators, and portability may suffer if they are hardcoded.\n\n**Example:**\n\n\n String count = \"first\\nsecond\\rthird\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HardcodedLineSeparator", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryConstantArrayCreationExpression", + "shortDescription": { + "text": "Redundant 'new' expression in constant array creation" + }, + "fullDescription": { + "text": "Reports constant new array expressions that can be replaced with an array initializer. Array initializers can omit the type because it is already specified in the left side of the assignment. Example: 'int[] foo = new int[] {42};' After the quick-fix is applied: 'int[] foo = {42};'", + "markdown": "Reports constant new array expressions that can be replaced with an array initializer. Array initializers can omit the type because it is already specified in the left side of the assignment.\n\n**Example:**\n\n\n int[] foo = new int[] {42};\n\nAfter the quick-fix is applied:\n\n\n int[] foo = {42};\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryConstantArrayCreationExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LabeledStatement", + "shortDescription": { + "text": "Labeled statement" + }, + "fullDescription": { + "text": "Reports labeled statements that can complicate refactorings and control flow of the method. Example: 'label:\n while (true) {\n // code\n }'", + "markdown": "Reports labeled statements that can complicate refactorings and control flow of the method.\n\nExample:\n\n\n label:\n while (true) {\n // code\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LabeledStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousNameCombination", + "shortDescription": { + "text": "Suspicious variable/parameter name combination" + }, + "fullDescription": { + "text": "Reports assignments and function calls in which the name of the target variable or the function parameter does not match the name of the value assigned to it. Example 1: 'int x = 0;\n int y = x; // x is used as a y-coordinate' Example 2: 'int x = 0, y = 0;\n // x is used as a y-coordinate and y as an x-coordinate\n Rectangle rc = new Rectangle(y, x, 20, 20);' Configure the inspection: Use the Group of names area to specify the names which should not be used together: an error is reported if the parameter name or assignment target name contains words from one group and the name of the assigned or passed variable contains words from a different group. Use the Ignore methods area to specify the methods that should not be checked but have a potentially suspicious name. For example, the 'Integer.compare()' parameters are named 'x' and 'y' but are unrelated to coordinates.", + "markdown": "Reports assignments and function calls in which the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample 1:\n\n\n int x = 0;\n int y = x; // x is used as a y-coordinate\n \nExample 2:\n\n\n int x = 0, y = 0;\n // x is used as a y-coordinate and y as an x-coordinate\n Rectangle rc = new Rectangle(y, x, 20, 20);\n\nConfigure the inspection:\n\nUse the **Group of names** area to specify the names which should not be used together: an error is reported\nif the parameter name or assignment target name contains words from one group and the name of the assigned or passed\nvariable contains words from a different group.\n\nUse the **Ignore methods** area to specify the methods that should not be checked but have a potentially suspicious name.\nFor example, the `Integer.compare()` parameters are named `x` and `y` but are unrelated to coordinates." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousNameCombination", + "cweIds": [ + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitDefaultCharsetUsage", + "shortDescription": { + "text": "Implicit platform default charset" + }, + "fullDescription": { + "text": "Reports method and constructor calls that implicitly use the platform default charset. Such calls can produce different results on systems that use a different default charset and may result in unexpected behaviour. Example: 'void foo(byte[] bytes) {\n String s = new String(bytes);\n}'\n You can use a quick-fix that specifies the explicit UTF-8 charset if the corresponding overloaded method is available. After the quick-fix is applied: 'void foo(byte[] bytes) {\n String s = new String(bytes, StandardCharsets.UTF_8);\n}'", + "markdown": "Reports method and constructor calls that implicitly use the platform default charset. Such calls can produce different results on systems that use a different default charset and may result in unexpected behaviour.\n\n**Example:**\n\n void foo(byte[] bytes) {\n String s = new String(bytes);\n }\n\nYou can use a quick-fix that specifies the explicit UTF-8 charset if the corresponding overloaded method is available.\nAfter the quick-fix is applied:\n\n void foo(byte[] bytes) {\n String s = new String(bytes, StandardCharsets.UTF_8);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ImplicitDefaultCharsetUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DesignForExtension", + "shortDescription": { + "text": "Design for extension" + }, + "fullDescription": { + "text": "Reports methods which are not 'static', 'private', 'final' or 'abstract', and whose bodies are not empty. Coding in a style that avoids such methods protects the contracts of classes from being broken by their subclasses. The benefit of this style is that subclasses cannot corrupt the state of the superclass by forgetting to call the super method. The cost is that subclasses are limited in their flexibility, in particular they cannot prevent execution of code in the superclass. Use the quick-fix to add the missing modifiers. Example: 'class Foo {\n public boolean equals(Object o) { return true; }\n }' After the quick-fix is applied: 'class Foo {\n public final boolean equals(Object o) { return true; }\n }' This inspection is intended for code that is going to be used in secure environments, and is probably not appropriate for less restrictive environments.", + "markdown": "Reports methods which are not `static`, `private`, `final` or `abstract`, and whose bodies are not empty.\n\n\nCoding in a style that avoids such methods protects the contracts of classes from being broken by their subclasses. The\nbenefit of this style is that subclasses cannot corrupt the state of the superclass by forgetting to call the super method. The cost is\nthat\nsubclasses are limited in their flexibility, in particular they cannot prevent execution of code in the superclass. Use the quick-fix to\nadd\nthe missing modifiers.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Object o) { return true; }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final boolean equals(Object o) { return true; }\n }\n\nThis inspection is intended for code that is going to be used in secure environments, and is probably not appropriate for less restrictive environments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DesignForExtension", + "cweIds": [ + 668 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyStreamApiCallChains", + "shortDescription": { + "text": "Stream API call chain can be simplified" + }, + "fullDescription": { + "text": "Reports stream API call chains that can be simplified. Simplification will often avoid some temporary object creation during collection traversal. The inspection replaces the following call chains: 'collection.stream().forEach()' → 'collection.forEach()' 'collection.stream().collect(toList/toSet/toCollection())' → 'new CollectionType<>(collection)' 'collection.stream().toArray()' → 'collection.toArray()' 'Arrays.asList().stream()' → 'Arrays.stream()' or 'Stream.of()' 'IntStream.range(0, array.length).mapToObj(idx -> array[idx])' → 'Arrays.stream(array)' 'IntStream.range(0, list.size()).mapToObj(idx -> list.get(idx))' → 'list.stream()' 'Collections.singleton().stream()' → 'Stream.of()' 'Collections.emptyList().stream()' → 'Stream.empty()' 'stream.filter().findFirst().isPresent()' → 'stream.anyMatch()' 'stream.collect(counting())' → 'stream.count()' 'stream.collect(maxBy())' → 'stream.max()' 'stream.collect(mapping())' → 'stream.map().collect()' 'stream.collect(reducing())' → 'stream.reduce()' 'stream.collect(summingInt())' → 'stream.mapToInt().sum()' 'stream.mapToObj(x -> x)' → 'stream.boxed()' 'stream.map(x -> {...; return x;})' → 'stream.peek(x -> ...)' '!stream.anyMatch()' → 'stream.noneMatch()' '!stream.anyMatch(x -> !(...))' → 'stream.allMatch()' 'stream.map().anyMatch(Boolean::booleanValue)' → 'stream.anyMatch()' 'IntStream.range(expr1, expr2).mapToObj(x -> array[x])' → 'Arrays.stream(array, expr1, expr2)' 'Collection.nCopies(count, ...)' → 'Stream.generate().limit(count)' 'stream.sorted(comparator).findFirst()' → 'Stream.min(comparator)' 'optional.orElseGet(() -> { throw new ...; })' → 'optional.orElseThrow()' Note that the replacement semantics may have minor differences in some cases. For example, 'Collections.synchronizedList(...).stream().forEach()' is not synchronized while 'Collections.synchronizedList(...).forEach()' is synchronized. Also, 'collect(Collectors.maxBy())' returns an empty 'Optional' if the resulting element is 'null' while 'Stream.max()' throws 'NullPointerException' in this case. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports stream API call chains that can be simplified. Simplification will often avoid some temporary object creation during collection traversal.\n\n\nThe inspection replaces the following call chains:\n\n* `collection.stream().forEach()` → `collection.forEach()`\n* `collection.stream().collect(toList/toSet/toCollection())` → `new CollectionType<>(collection)`\n* `collection.stream().toArray()` → `collection.toArray()`\n* `Arrays.asList().stream()` → `Arrays.stream()` or `Stream.of()`\n* `IntStream.range(0, array.length).mapToObj(idx -> array[idx])` → `Arrays.stream(array)`\n* `IntStream.range(0, list.size()).mapToObj(idx -> list.get(idx))` → `list.stream()`\n* `Collections.singleton().stream()` → `Stream.of()`\n* `Collections.emptyList().stream()` → `Stream.empty()`\n* `stream.filter().findFirst().isPresent()` → `stream.anyMatch()`\n* `stream.collect(counting())` → `stream.count()`\n* `stream.collect(maxBy())` → `stream.max()`\n* `stream.collect(mapping())` → `stream.map().collect()`\n* `stream.collect(reducing())` → `stream.reduce()`\n* `stream.collect(summingInt())` → `stream.mapToInt().sum()`\n* `stream.mapToObj(x -> x)` → `stream.boxed()`\n* `stream.map(x -> {...; return x;})` → `stream.peek(x -> ...)`\n* `!stream.anyMatch()` → `stream.noneMatch()`\n* `!stream.anyMatch(x -> !(...))` → `stream.allMatch()`\n* `stream.map().anyMatch(Boolean::booleanValue)` → `stream.anyMatch()`\n* `IntStream.range(expr1, expr2).mapToObj(x -> array[x])` → `Arrays.stream(array, expr1, expr2)`\n* `Collection.nCopies(count, ...)` → `Stream.generate().limit(count)`\n* `stream.sorted(comparator).findFirst()` → `Stream.min(comparator)`\n* `optional.orElseGet(() -> { throw new ...; })` → `optional.orElseThrow()`\n\n\nNote that the replacement semantics may have minor differences in some cases. For example,\n`Collections.synchronizedList(...).stream().forEach()` is not synchronized while\n`Collections.synchronizedList(...).forEach()` is synchronized.\nAlso, `collect(Collectors.maxBy())` returns an empty `Optional` if the resulting element is\n`null` while `Stream.max()` throws `NullPointerException` in this case.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SimplifyStreamApiCallChains", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnknownGuard", + "shortDescription": { + "text": "Unknown '@GuardedBy' field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations in which the specified guarding field is unknown. Example: 'private Object state;\n\n @GuardedBy(\"lock\") //unknown guard reference\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations in which the specified guarding field is unknown.\n\nExample:\n\n\n private Object state;\n\n @GuardedBy(\"lock\") //unknown guard reference\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnknownGuard", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassExtendsConcreteClass", + "shortDescription": { + "text": "Abstract class extends concrete class" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that extend concrete classes.", + "markdown": "Reports `abstract` classes that extend concrete classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractClassExtendsConcreteClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8CollectionRemoveIf", + "shortDescription": { + "text": "Loop can be replaced with 'Collection.removeIf()'" + }, + "fullDescription": { + "text": "Reports loops which can be collapsed into a single 'Collection.removeIf' call. Example: 'for (Iterator it = collection.iterator(); it.hasNext(); ) {\n String aValue = it.next();\n if(shouldBeRemoved(aValue)) {\n it.remove();\n }\n }' After the quick-fix is applied: 'collection.removeIf(aValue -> shouldBeRemoved(aValue));' This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.", + "markdown": "Reports loops which can be collapsed into a single `Collection.removeIf` call.\n\nExample:\n\n\n for (Iterator it = collection.iterator(); it.hasNext(); ) {\n String aValue = it.next();\n if(shouldBeRemoved(aValue)) {\n it.remove();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n collection.removeIf(aValue -> shouldBeRemoved(aValue));\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java8CollectionRemoveIf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeVarargsDetector", + "shortDescription": { + "text": "Possible heap pollution from parameterized vararg type" + }, + "fullDescription": { + "text": "Reports methods with variable arity, which can be annotated as '@SafeVarargs'. The '@SafeVarargs' annotation suppresses unchecked warnings about parameterized array creation at call sites. Example: 'public class Foo {\n private List list = new ArrayList<>();\n\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }' After the quick-fix is applied: 'public class Foo {\n private List list = new ArrayList<>();\n\n @SafeVarargs\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }' This annotation is not supported under Java 1.6 or earlier JVMs.", + "markdown": "Reports methods with variable arity, which can be annotated as `@SafeVarargs`. The `@SafeVarargs` annotation suppresses unchecked warnings about parameterized array creation at call sites.\n\n**Example:**\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n @SafeVarargs\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\n\nThis annotation is not supported under Java 1.6 or earlier JVMs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "unchecked", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 159, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorMethodParameterNotUsed", + "shortDescription": { + "text": "Suspicious 'Comparator.compare()' implementation" + }, + "fullDescription": { + "text": "Reports problems in 'Comparator.compare()' and 'Comparable.compareTo()' implementations. The following cases are reported: A parameter is not used. Most likely this is a typo and the other parameter is compared with itself, or the method is not implemented correctly. It's evident that the method does not return '0' for the same elements. Such a comparison method violates the contract and can produce unpredictable results when equal elements are encountered. In particular, sorting may fail with an exception on some data. The comparison method never returns positive or negative value. To fulfill the contract, if the comparison method returns positive values, it should also return negative ones if arguments are supplied in reversed order. The comparison method returns 'Integer.MIN_VALUE'. While allowed by the contract, it may be error-prone, as some call sites may incorrectly try to invert the return value of the comparison method using the unary minus operator. The negated value of 'Integer.MIN_VALUE' is 'Integer.MIN_VALUE'. Example: 'Comparator lambda =\n (a, b) -> a.length() > b.length()\n ? 0\n : Math.random() > 0.5 ? -1 : 1;'", + "markdown": "Reports problems in `Comparator.compare()` and `Comparable.compareTo()` implementations.\n\nThe following cases are reported:\n\n* A parameter is not used. Most likely this is a typo and the other parameter is compared with itself, or the method is not implemented correctly.\n* It's evident that the method does not return `0` for the same elements. Such a comparison method violates the contract and can produce unpredictable results when equal elements are encountered. In particular, sorting may fail with an exception on some data.\n* The comparison method never returns positive or negative value. To fulfill the contract, if the comparison method returns positive values, it should also return negative ones if arguments are supplied in reversed order.\n* The comparison method returns `Integer.MIN_VALUE`. While allowed by the contract, it may be error-prone, as some call sites may incorrectly try to invert the return value of the comparison method using the unary minus operator. The negated value of `Integer.MIN_VALUE` is `Integer.MIN_VALUE`.\n\n**Example:**\n\n\n Comparator lambda =\n (a, b) -> a.length() > b.length()\n ? 0\n : Math.random() > 0.5 ? -1 : 1;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ComparatorMethodParameterNotUsed", + "cweIds": [ + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Annotation", + "shortDescription": { + "text": "Annotation" + }, + "fullDescription": { + "text": "Reports annotations. Annotations are not supported in Java 1.4 and earlier JVM.", + "markdown": "Reports annotations. Annotations are not supported in Java 1.4 and earlier JVM." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Annotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnicodeEscape", + "shortDescription": { + "text": "Unnecessary unicode escape sequence" + }, + "fullDescription": { + "text": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab). Example: 'String s = \"\\u0062\";'", + "markdown": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab).\n\n**Example:**\n\n String s = \"\\u0062\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryUnicodeEscape", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringTokenizer", + "shortDescription": { + "text": "Use of 'StringTokenizer'" + }, + "fullDescription": { + "text": "Reports usages of the 'StringTokenizer' class. Excessive use of 'StringTokenizer' is incorrect in an internationalized environment.", + "markdown": "Reports usages of the `StringTokenizer` class. Excessive use of `StringTokenizer` is incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfStringTokenizer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrimitiveArrayArgumentToVariableArgMethod", + "shortDescription": { + "text": "Confusing primitive array argument to varargs method" + }, + "fullDescription": { + "text": "Reports any calls to a variable arity method where the call has a primitive array in the variable arity parameter position (for example, 'System.out.printf(\"%s\", new int[]{1, 2, 3})'). Such a primitive-array argument may be confusing, as it will be wrapped as a single-element array, rather than each individual element being boxed, as might be expected. Example: 'String.format(\"%s\", new int[]{1, 2, 3});' After the quick-fix is applied: 'String.format(\"%s\", (Object) new int[]{1, 2, 3});' This inspection depends on the Java feature 'Variable arity methods' which is available since Java 5.", + "markdown": "Reports any calls to a variable arity method where the call has a primitive array in the variable arity parameter position (for example, `System.out.printf(\"%s\", new int[]{1, 2, 3})`). Such a primitive-array argument may be confusing, as it will be wrapped as a single-element array, rather than each individual element being boxed, as might be expected.\n\n**Example:**\n\n\n String.format(\"%s\", new int[]{1, 2, 3});\n\nAfter the quick-fix is applied:\n\n\n String.format(\"%s\", (Object) new int[]{1, 2, 3});\n\nThis inspection depends on the Java feature 'Variable arity methods' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "PrimitiveArrayArgumentToVarargsMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseBulkOperation", + "shortDescription": { + "text": "Bulk operation can be used instead of iteration" + }, + "fullDescription": { + "text": "Reports single operations inside loops that could be replaced with a bulk method. Not only are bulk methods shorter, but in some cases they may be more performant as well. Example: 'void test(Collection numbers) {\n List result = new ArrayList<>();\n for (Integer i : numbers) {\n result.add(i);\n }\n }' After the fix is applied: 'void test(Collection numbers) {\n List result = new ArrayList<>();\n result.addAll(numbers);\n }' The Use Arrays.asList() to wrap arrays option allows to report arrays, even if the bulk method requires a collection. In this case the quick-fix will automatically wrap the array in 'Arrays.asList()' call. New in 2017.1", + "markdown": "Reports single operations inside loops that could be replaced with a bulk method.\n\n\nNot only are bulk methods shorter, but in some cases they may be more performant as well.\n\n**Example:**\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n for (Integer i : numbers) {\n result.add(i);\n }\n }\n\nAfter the fix is applied:\n\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n result.addAll(numbers);\n }\n\n\nThe **Use Arrays.asList() to wrap arrays** option allows to report arrays, even if the bulk method requires a collection.\nIn this case the quick-fix will automatically wrap the array in `Arrays.asList()` call.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UseBulkOperation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessToNonThreadSafeStaticFieldFromInstance", + "shortDescription": { + "text": "Non-thread-safe 'static' field access" + }, + "fullDescription": { + "text": "Reports access to 'static' fields that are of a non-thread-safe type. When a 'static' field is accessed from an instance method or a non-synchronized block, multiple threads can access that field. This can lead to unspecified side effects, like exceptions and incorrect results. Example: 'class Sample {\n private static final SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\");\n String method() {\n return df.format(\"\");\n }\n }' You can specify which types should be considered not thread-safe. Only fields with these exact types or initialized with these exact types are reported, because there may exist thread-safe subclasses of these types.", + "markdown": "Reports access to `static` fields that are of a non-thread-safe type.\n\n\nWhen a `static` field is accessed from an instance method or a non-synchronized block,\nmultiple threads can access that field.\nThis can lead to unspecified side effects, like exceptions and incorrect results.\n\n**Example:**\n\n\n class Sample {\n private static final SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\");\n String method() {\n return df.format(\"\");\n }\n }\n\n\nYou can specify which types should be considered not thread-safe.\nOnly fields with these exact types or initialized with these exact types are reported,\nbecause there may exist thread-safe subclasses of these types." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AccessToNonThreadSafeStaticField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalEquals", + "shortDescription": { + "text": "'equals()' called on 'BigDecimal'" + }, + "fullDescription": { + "text": "Reports 'equals()' calls that compare two 'java.math.BigDecimal' numbers. This is normally a mistake, as two 'java.math.BigDecimal' numbers are only equal if they are equal in both value and scale. Example: 'if (new BigDecimal(\"2.0\").equals(\n new BigDecimal(\"2.00\"))) {} // false' After the quick-fix is applied: 'if (new BigDecimal(\"2.0\").compareTo(\n new BigDecimal(\"2.00\")) == 0) {} // true'", + "markdown": "Reports `equals()` calls that compare two `java.math.BigDecimal` numbers. This is normally a mistake, as two `java.math.BigDecimal` numbers are only equal if they are equal in both value and scale.\n\n**Example:**\n\n\n if (new BigDecimal(\"2.0\").equals(\n new BigDecimal(\"2.00\"))) {} // false\n\nAfter the quick-fix is applied:\n\n\n if (new BigDecimal(\"2.0\").compareTo(\n new BigDecimal(\"2.00\")) == 0) {} // true\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BigDecimalEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToCatchBlockParameter", + "shortDescription": { + "text": "Assignment to 'catch' block parameter" + }, + "fullDescription": { + "text": "Reports assignments to, 'catch' block parameters. Changing a 'catch' block parameter is very confusing and should be discouraged. The quick-fix adds a declaration of a new variable. Example: 'void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n if (ex instanceof UncheckedIOException) {\n // Warning: catch block parameter reassigned\n ex = ((UncheckedIOException) ex).getCause();\n }\n throw ex;\n }\n }' After the quick-fix is applied: 'void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n Exception unwrapped = ex;\n if (unwrapped instanceof UncheckedIOException) {\n unwrapped = ((UncheckedIOException)\n unwrapped).getCause();\n }\n throw unwrapped;\n }\n }'", + "markdown": "Reports assignments to, `catch` block parameters.\n\nChanging a `catch` block parameter is very confusing and should be discouraged.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n if (ex instanceof UncheckedIOException) {\n // Warning: catch block parameter reassigned\n ex = ((UncheckedIOException) ex).getCause();\n }\n throw ex;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n Exception unwrapped = ex;\n if (unwrapped instanceof UncheckedIOException) {\n unwrapped = ((UncheckedIOException)\n unwrapped).getCause();\n }\n throw unwrapped;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToCatchBlockParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodOverridesAbstractMethod", + "shortDescription": { + "text": "Abstract method overrides abstract method" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that override 'abstract' methods. Such methods don't make sense because any concrete child class will have to implement the abstract method anyway. Methods whose return types, exception declarations, annotations, or modifiers differ from the overridden method are not reported by this inspection. Configure the inspection: Use the Ignore methods with different Javadoc than their super methods option to ignore any abstract methods whose JavaDoc comment differs from their super method.", + "markdown": "Reports `abstract` methods that override `abstract` methods.\n\nSuch methods don't make sense because any concrete child class will have to implement the abstract method anyway.\n\n\nMethods whose return types, exception declarations, annotations, or modifiers differ from the overridden method are not reported by this inspection.\n\n\nConfigure the inspection:\n\n* Use the **Ignore methods with different Javadoc than their super methods** option to ignore any abstract methods whose JavaDoc comment differs from their super method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractMethodOverridesAbstractMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopStatementsThatDontLoop", + "shortDescription": { + "text": "Loop statement that does not loop" + }, + "fullDescription": { + "text": "Reports any instance of 'for', 'while', and 'do' statements whose bodies will be executed once at most. Normally, this is an indication of a bug. Use the Ignore enhanced for loops option to ignore the foreach loops. They are sometimes used to perform an action only on the first item of an iterable in a compact way. Example: 'for (String s : stringIterable) {\n doSomethingOnFirstString(s);\n break;\n }'", + "markdown": "Reports any instance of `for`, `while`, and `do` statements whose bodies will be executed once at most. Normally, this is an indication of a bug.\n\n\nUse the **Ignore enhanced for loops** option to ignore the foreach loops.\nThey are sometimes used to perform an action only on the first item of an iterable in a compact way.\n\nExample:\n\n\n for (String s : stringIterable) {\n doSomethingOnFirstString(s);\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LoopStatementThatDoesntLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayCreationWithoutNewKeyword", + "shortDescription": { + "text": "Array creation without 'new' expression" + }, + "fullDescription": { + "text": "Reports array initializers without 'new' array expressions and suggests adding them. Example: 'int[] a = {42}' After the quick-fix is applied: 'int[] a = new int[]{42}'", + "markdown": "Reports array initializers without `new` array expressions and suggests adding them.\n\nExample:\n\n\n int[] a = {42}\n\nAfter the quick-fix is applied:\n\n\n int[] a = new int[]{42}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ArrayCreationWithoutNewKeyword", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingOctalEscape", + "shortDescription": { + "text": "Confusing octal escape sequence" + }, + "fullDescription": { + "text": "Reports string literals containing an octal escape sequence immediately followed by a digit. Such strings may be confusing, and are often the result of errors in escape code creation. Example: 'System.out.println(\"\\1234\"); // Octal escape sequence '\\123' immediately followed by a digit'", + "markdown": "Reports string literals containing an octal escape sequence immediately followed by a digit.\n\nSuch strings may be confusing, and are often the result of errors in escape code creation.\n\n**Example:**\n\n\n System.out.println(\"\\1234\"); // Octal escape sequence '\\123' immediately followed by a digit\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingOctalEscapeSequence", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterHidingMemberVariable", + "shortDescription": { + "text": "Lambda parameter hides field" + }, + "fullDescription": { + "text": "Reports lambda parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the lambda parameter when using the identically named field is intended. A quick-fix is suggested to rename the lambda parameter. Example: 'public class MyClass {\n public Object foo;\n\n void sort(List list) {\n list.sort((foo, bar) -> foo - bar);\n }\n }' Use the option to choose whether to ignore fields that are not visible from the lambda expression. For example, private fields of a superclass. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambda parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the lambda parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the lambda parameter.\n\n**Example:**\n\n\n public class MyClass {\n public Object foo;\n\n void sort(List list) {\n list.sort((foo, bar) -> foo - bar);\n }\n }\n\n\nUse the option to choose whether to ignore fields that are not visible from the lambda expression.\nFor example, private fields of a superclass.\n\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LambdaParameterHidesMemberVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantMathCall", + "shortDescription": { + "text": "Constant call to 'Math'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Math' or 'java.lang.StrictMath' methods that can be replaced with simple compile-time constants. Example: 'double v = Math.sin(0.0);' After the quick-fix is applied: 'double v = 0.0;'", + "markdown": "Reports calls to `java.lang.Math` or `java.lang.StrictMath` methods that can be replaced with simple compile-time constants.\n\n**Example:**\n\n double v = Math.sin(0.0);\n\nAfter the quick-fix is applied:\n\n double v = 0.0;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantMathCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissortedModifiers", + "shortDescription": { + "text": "Missorted modifiers" + }, + "fullDescription": { + "text": "Reports declarations whose modifiers are not in the canonical preferred order (as stated in the Java Language Specification). Example: 'class Foo {\n native public final void foo();\n }' After the quick-fix is applied: 'class Foo {\n public final native void foo();\n }' Use the inspection settings to: toggle the reporting of misplaced annotations: (annotations with 'ElementType.TYPE_USE' not directly before the type and after the modifier keywords, or other annotations not before the modifier keywords). When this option is disabled, any annotation can be positioned before or after the modifier keywords. Modifier lists with annotations in between the modifier keywords will always be reported. specify whether the 'ElementType.TYPE_USE' annotation should be positioned directly before a type, even when the annotation has other targets specified.", + "markdown": "Reports declarations whose modifiers are not in the canonical preferred order (as stated in the Java Language Specification).\n\n**Example:**\n\n\n class Foo {\n native public final void foo();\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final native void foo();\n }\n\nUse the inspection settings to:\n\n*\n toggle the reporting of misplaced annotations:\n (annotations with `ElementType.TYPE_USE` *not* directly\n before the type and after the modifier keywords, or\n other annotations *not* before the modifier keywords).\n When this option is disabled, any annotation can be positioned before or after the modifier keywords.\n Modifier lists with annotations in between the modifier keywords will always be reported.\n\n*\n specify whether the `ElementType.TYPE_USE` annotation should be positioned directly before\n a type, even when the annotation has other targets specified." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MissortedModifiers", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TransientFieldInNonSerializableClass", + "shortDescription": { + "text": "Transient field in non-serializable class" + }, + "fullDescription": { + "text": "Reports 'transient' fields in classes that do not implement 'java.io.Serializable'. Example: 'public class NonSerializableClass {\n private transient String password;\n }' After the quick-fix is applied: 'public class NonSerializableClass {\n private String password;\n }'", + "markdown": "Reports `transient` fields in classes that do not implement `java.io.Serializable`.\n\n**Example:**\n\n\n public class NonSerializableClass {\n private transient String password;\n }\n\nAfter the quick-fix is applied:\n\n\n public class NonSerializableClass {\n private String password;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TransientFieldInNonSerializableClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SlowListContainsAll", + "shortDescription": { + "text": "Call to 'list.containsAll(collection)' may have poor performance" + }, + "fullDescription": { + "text": "Reports calls to 'containsAll()' on 'java.util.List'. The time complexity of this method call is O(n·m), where n is the number of elements in the list on which the method is called, and m is the number of elements in the collection passed to the method as a parameter. When the list is large, this can be an expensive operation. The quick-fix wraps the list in 'new java.util.HashSet<>()' since the time required to create 'java.util.HashSet' from 'java.util.List' and execute 'containsAll()' on 'java.util.HashSet' is O(n+m). Example: 'public boolean check(List list, Collection collection) {\n // O(n·m) complexity\n return list.containsAll(collection);\n }' After the quick-fix is applied: 'public boolean check(List list, Collection collection) {\n // O(n+m) complexity\n return new HashSet<>(list).containsAll(collection);\n }' New in 2022.1", + "markdown": "Reports calls to `containsAll()` on `java.util.List`.\n\n\nThe time complexity of this method call is O(n·m), where n is the number of elements in the list on which\nthe method is called, and m is the number of elements in the collection passed to the method as a parameter.\nWhen the list is large, this can be an expensive operation.\n\n\nThe quick-fix wraps the list in `new java.util.HashSet<>()` since the time required to create\n`java.util.HashSet` from `java.util.List` and execute `containsAll()` on\n`java.util.HashSet` is O(n+m).\n\n**Example:**\n\n public boolean check(List list, Collection collection) {\n // O(n·m) complexity\n return list.containsAll(collection);\n }\n\nAfter the quick-fix is applied:\n\n public boolean check(List list, Collection collection) {\n // O(n+m) complexity\n return new HashSet<>(list).containsAll(collection);\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SlowListContainsAll", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionPackage", + "shortDescription": { + "text": "Exception package" + }, + "fullDescription": { + "text": "Reports packages that only contain classes that extend 'java.lang.Throwable', either directly or indirectly. Although exceptions usually don't depend on other classes for their implementation, they are normally not used separately. It is often a better design to locate exceptions in the same package as the classes that use them. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages that only contain classes that extend `java.lang.Throwable`, either directly or indirectly.\n\nAlthough exceptions usually don't depend on other classes for their implementation, they are normally not used separately.\nIt is often a better design to locate exceptions in the same package as the classes that use them.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExceptionPackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterExtendsObject", + "shortDescription": { + "text": "Type parameter explicitly extends 'Object'" + }, + "fullDescription": { + "text": "Reports type parameters and wildcard type arguments that are explicitly declared to extend 'java.lang.Object'. Such 'extends' clauses are redundant as 'java.lang.Object' is a supertype for all classes. Example: 'class ClassA {}' If you need to preserve the 'extends Object' clause because of annotations, disable the Ignore when java.lang.Object is annotated option. This might be useful, for example, when you use a nullness analyzer, and the 'extends Object' clause holds a '@Nullable'/'@NotNull' annotation. Example: 'class MyClass {}'", + "markdown": "Reports type parameters and wildcard type arguments that are explicitly declared to extend `java.lang.Object`.\n\nSuch 'extends' clauses are redundant as `java.lang.Object` is a supertype for all classes.\n\n**Example:**\n\n class ClassA {}\n\n\nIf you need to preserve the 'extends Object' clause because of annotations, disable the\n**Ignore when java.lang.Object is annotated** option.\nThis might be useful, for example, when you use a nullness analyzer, and the 'extends Object' clause\nholds a `@Nullable`/`@NotNull` annotation.\n\n**Example:**\n\n class MyClass {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeParameterExplicitlyExtendsObject", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInsideStringBufferAppend", + "shortDescription": { + "text": "String concatenation as argument to 'StringBuilder.append()' call" + }, + "fullDescription": { + "text": "Reports 'String' concatenation used as the argument to 'StringBuffer.append()', 'StringBuilder.append()' or 'Appendable.append()'. Such calls may profitably be turned into chained append calls on the existing 'StringBuffer/Builder/Appendable' saving the cost of an extra 'StringBuffer/Builder' allocation. This inspection ignores compile-time evaluated 'String' concatenations, in which case the conversion would only worsen performance. Example: 'void bar(StringBuilder builder, String name) {\n builder.append(\"Hello,\" + name); //warning\n builder.append(\"Hello,\" + \"world\"); //no warning\n }'", + "markdown": "Reports `String` concatenation used as the argument to `StringBuffer.append()`, `StringBuilder.append()` or `Appendable.append()`.\n\n\nSuch calls may profitably be turned into chained append calls on the existing `StringBuffer/Builder/Appendable`\nsaving the cost of an extra `StringBuffer/Builder` allocation.\nThis inspection ignores compile-time evaluated `String` concatenations, in which case the conversion would only\nworsen performance.\n\n**Example:**\n\n\n void bar(StringBuilder builder, String name) {\n builder.append(\"Hello,\" + name); //warning\n builder.append(\"Hello,\" + \"world\"); //no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StringConcatenationInsideStringBufferAppend", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FeatureEnvy", + "shortDescription": { + "text": "Feature envy" + }, + "fullDescription": { + "text": "Reports the Feature Envy code smell. The warning is thrown when a method calls methods on another class three or more times. Calls to library classes, parent classes, contained or containing classes are not counted by this inspection. Feature envy is often an indication of the fact that this functionality is located in a wrong class. Example: 'class JobManager {\n // Warning: this method calls three methods\n // of the Job class\n // It would be better to move this chain of\n // calls to the Job class itself.\n void performJob(Job job) {\n job.beforeStart();\n job.process();\n job.afterProcessing();\n }\n }'", + "markdown": "Reports the *Feature Envy* code smell. The warning is thrown when a method calls methods on another class three or more times. Calls to library classes, parent classes, contained or containing classes are not counted by this inspection. Feature envy is often an indication of the fact that this functionality is located in a wrong class.\n\nExample:\n\n\n class JobManager {\n // Warning: this method calls three methods\n // of the Job class\n // It would be better to move this chain of\n // calls to the Job class itself.\n void performJob(Job job) {\n job.beforeStart();\n job.process();\n job.afterProcessing();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FeatureEnvy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoxingBoxedValue", + "shortDescription": { + "text": "Boxing of already boxed value" + }, + "fullDescription": { + "text": "Reports boxing of already boxed values. This is a redundant operation since any boxed value will first be auto-unboxed before boxing the value again. If done inside an inner loop, such code may cause performance problems. Example: 'Integer value = 1;\n method(Integer.valueOf(value));' After the quick fix is applied: 'Integer value = 1;\n method(value);'", + "markdown": "Reports boxing of already boxed values.\n\n\nThis is a redundant\noperation since any boxed value will first be auto-unboxed before boxing the\nvalue again. If done inside an inner loop, such code may cause performance\nproblems.\n\n**Example:**\n\n\n Integer value = 1;\n method(Integer.valueOf(value));\n\nAfter the quick fix is applied:\n\n\n Integer value = 1;\n method(value);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "BoxingBoxedValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCollectionOperation", + "shortDescription": { + "text": "Redundant 'Collection' operation" + }, + "fullDescription": { + "text": "Reports unnecessarily complex collection operations which have simpler alternatives. Example: 'void f(String[] array, Collection collection) {\n String[] strings = Arrays.asList(array).subList(0, 10).toArray(new String[0]);\n boolean contains = collection.containsAll(Collections.singletonList(\"x\"));\n }' After the quick-fix is applied: 'void f(String[] array, Collection collection) {\n String[] strings = Arrays.copyOf(array, 10);\n boolean contains = collection.contains(\"x\");\n }' New in 2018.1", + "markdown": "Reports unnecessarily complex collection operations which have simpler alternatives.\n\nExample:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.asList(array).subList(0, 10).toArray(new String[0]);\n boolean contains = collection.containsAll(Collections.singletonList(\"x\"));\n }\n\nAfter the quick-fix is applied:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.copyOf(array, 10);\n boolean contains = collection.contains(\"x\");\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantCollectionOperation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverriddenMethodCallDuringObjectConstruction", + "shortDescription": { + "text": "Overridden method called during object construction" + }, + "fullDescription": { + "text": "Reports any calls to overridden methods of the current class during object construction. This happens if an object construction is inside: A constructor A non-static instance initializer A non-static field initializer 'clone()' 'readObject()' 'readObjectNoData()' Such calls may result in subtle bugs, as the object is not guaranteed to be initialized before the method call occurs. Example: 'abstract class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n\n @Override\n void someMethod() { }\n }' This inspection shares its functionality with: The Abstract method called during object construction inspection The Overridable method called during object construction inspection Only one inspection should be enabled at the same time to prevent duplicate warnings.", + "markdown": "Reports any calls to overridden methods of the current class during object construction. This happens if an object construction is inside:\n\n* A constructor\n* A non-static instance initializer\n* A non-static field initializer\n* `clone()`\n* `readObject()`\n* `readObjectNoData()`\n\nSuch calls may result in subtle bugs, as the object is not guaranteed to be initialized before the method call occurs.\n\nExample:\n\n\n abstract class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n\n @Override\n void someMethod() { }\n }\n\nThis inspection shares its functionality with:\n\n* The **Abstract method called during object construction** inspection\n* The **Overridable method called during object construction** inspection\n\nOnly one inspection should be enabled at the same time to prevent duplicate warnings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverriddenMethodCallDuringObjectConstruction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassWithoutAbstractMethods", + "shortDescription": { + "text": "Abstract class without 'abstract' methods" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that have no 'abstract' methods. In most cases it does not make sense to have an 'abstract' class without any 'abstract' methods, and the 'abstract' modifier can be removed from the class. If the class was declared 'abstract' to prevent instantiation, it is often a better option to use a 'private' constructor to prevent instantiation instead. Example: 'abstract class Example {\n public String getName() {\n return \"IntelliJ IDEA\";\n }\n }' Use the option to ignore utility classes.", + "markdown": "Reports `abstract` classes that have no `abstract` methods. In most cases it does not make sense to have an `abstract` class without any `abstract` methods, and the `abstract` modifier can be removed from the class. If the class was declared `abstract` to prevent instantiation, it is often a better option to use a `private` constructor to prevent instantiation instead.\n\n**Example:**\n\n\n abstract class Example {\n public String getName() {\n return \"IntelliJ IDEA\";\n }\n }\n\nUse the option to ignore utility classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AbstractClassWithoutAbstractMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastThatLosesPrecision", + "shortDescription": { + "text": "Numeric cast that loses precision" + }, + "fullDescription": { + "text": "Reports cast operations between primitive numeric types that may result in precision loss. Such casts are not necessarily a problem but may result in difficult to trace bugs if the loss of precision is unexpected. Example: 'int a = 420;\n byte b = (byte) a;' Use the Ignore casts from int to char option to ignore casts from 'int' to 'char'. This type of cast is often used when implementing I/O operations because the 'read()' method of the 'java.io.Reader' class returns an 'int'. Use the Ignore casts from int 128-255 to byte option to ignore casts of constant values (128-255) from 'int' to 'byte'. Such values will overflow to negative numbers that still fit inside a byte.", + "markdown": "Reports cast operations between primitive numeric types that may result in precision loss.\n\nSuch casts are not necessarily a problem but may result in difficult to\ntrace bugs if the loss of precision is unexpected.\n\n**Example:**\n\n\n int a = 420;\n byte b = (byte) a;\n\nUse the **Ignore casts from int to char** option to ignore casts from `int` to `char`.\nThis type of cast is often used when implementing I/O operations because the `read()` method of the\n`java.io.Reader` class returns an `int`.\n\nUse the **Ignore casts from int 128-255 to byte** option to ignore casts of constant values (128-255) from `int` to\n`byte`.\nSuch values will overflow to negative numbers that still fit inside a byte." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NumericCastThatLosesPrecision", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 137, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SameReturnValue", + "shortDescription": { + "text": "Method always returns the same value" + }, + "fullDescription": { + "text": "Reports methods and method hierarchies that always return the same constant. The inspection works differently in batch-mode (from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name) and on-the-fly in the editor: In batch-mode, the inspection reports methods and method hierarchies that always return the same constant. In the editor, the inspection only reports methods that have more than one 'return' statement, do not have super methods, and cannot be overridden. If a method overrides or implements a method, a contract may require it to return a specific constant, but at the same time, we may want to have several exit points. If a method can be overridden, it is possible that a different value will be returned in subclasses. Example: 'class X {\n // Warn only in batch-mode:\n int xxx() { // Method 'xxx()' and all its overriding methods always return '0'\n return 0;\n }\n }\n\n class Y extends X {\n @Override\n int xxx() {\n return 0;\n }\n\n // Warn only in batch-mode:\n int yyy() { // Method 'yyy()' always returns '0'\n return 0;\n }\n\n // Warn both in batch-mode and on-the-fly:\n final int zzz(boolean flag) { // Method 'zzz()' always returns '0'\n if (Math.random() > 0.5) {\n return 0;\n }\n return 0;\n }\n }'", + "markdown": "Reports methods and method hierarchies that always return the same constant.\n\n\nThe inspection works differently in batch-mode\n(from **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**)\nand on-the-fly in the editor:\n\n* In batch-mode, the inspection reports methods and method hierarchies that always return the same constant.\n* In the editor, the inspection only reports methods that have more than one `return` statement, do not have super methods, and cannot be overridden. If a method overrides or implements a method, a contract may require it to return a specific constant, but at the same time, we may want to have several exit points. If a method can be overridden, it is possible that a different value will be returned in subclasses.\n\n**Example:**\n\n\n class X {\n // Warn only in batch-mode:\n int xxx() { // Method 'xxx()' and all its overriding methods always return '0'\n return 0;\n }\n }\n\n class Y extends X {\n @Override\n int xxx() {\n return 0;\n }\n\n // Warn only in batch-mode:\n int yyy() { // Method 'yyy()' always returns '0'\n return 0;\n }\n\n // Warn both in batch-mode and on-the-fly:\n final int zzz(boolean flag) { // Method 'zzz()' always returns '0'\n if (Math.random() > 0.5) {\n return 0;\n }\n return 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SameReturnValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowablePrintStackTrace", + "shortDescription": { + "text": "Call to 'printStackTrace()'" + }, + "fullDescription": { + "text": "Reports calls to 'Throwable.printStackTrace()' without arguments. Such statements are often used for temporary debugging and should be either removed from the production code or replaced with a more robust logging facility.", + "markdown": "Reports calls to `Throwable.printStackTrace()` without arguments.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToPrintStackTrace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferMustHaveInitialCapacity", + "shortDescription": { + "text": "'StringBuilder' without initial capacity" + }, + "fullDescription": { + "text": "Reports attempts to instantiate a new 'StringBuffer' or 'StringBuilder' object without specifying its initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify the initial capacity for 'StringBuffer' may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. Example: '// Capacity is not specified\n var sb = new StringBuilder();'", + "markdown": "Reports attempts to instantiate a new `StringBuffer` or `StringBuilder` object without specifying its initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal.\nFailing to specify the initial capacity for `StringBuffer` may result\nin performance issues if space needs to be reallocated and memory copied\nwhen the initial capacity is exceeded.\n\nExample:\n\n\n // Capacity is not specified\n var sb = new StringBuilder();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringBufferWithoutInitialCapacity", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreeNegationsPerMethod", + "shortDescription": { + "text": "Method with more than three negations" + }, + "fullDescription": { + "text": "Reports methods with three or more negations. Such methods may be confusing. Example: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (!flag && !flag2) {\n if (a != b) {\n doOther();\n }\n }\n }' Without negations, the method becomes easier to understand: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (flag1 || flag2 || a == b) return;\n doOther();\n }' Configure the inspection: Use the Ignore negations in 'equals()' methods option to disable the inspection within 'equals()' methods. Use the Ignore negations in 'assert' statements to disable the inspection within 'assert' statements.", + "markdown": "Reports methods with three or more negations. Such methods may be confusing.\n\n**Example:**\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (!flag && !flag2) {\n if (a != b) {\n doOther();\n }\n }\n }\n\nWithout negations, the method becomes easier to understand:\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (flag1 || flag2 || a == b) return;\n doOther();\n }\n\nConfigure the inspection:\n\n* Use the **Ignore negations in 'equals()' methods** option to disable the inspection within `equals()` methods.\n* Use the **Ignore negations in 'assert' statements** to disable the inspection within `assert` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodWithMoreThanThreeNegations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadWithDefaultRunMethod", + "shortDescription": { + "text": "Instantiating a 'Thread' with default 'run()' method" + }, + "fullDescription": { + "text": "Reports instantiations of 'Thread' or an inheritor without specifying a 'Runnable' parameter or overriding the 'run()' method. Such threads do nothing useful. Example: 'new Thread().start();'", + "markdown": "Reports instantiations of `Thread` or an inheritor without specifying a `Runnable` parameter or overriding the `run()` method. Such threads do nothing useful.\n\n**Example:**\n\n\n new Thread().start();\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InstantiatingAThreadWithDefaultRunMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestOnlyProblems", + "shortDescription": { + "text": "Test-only usage in production code" + }, + "fullDescription": { + "text": "Reports '@TestOnly'- and '@VisibleForTesting'-annotated methods and classes that are used in production code. Also reports usage of applying '@TestOnly' '@VisibleForTesting' to the same element. The problems are not reported if such method or class is referenced from: Code under the Test Sources folder A test class (JUnit/TestNG) Another '@TestOnly'-annotated method Example (in production code): '@TestOnly\n fun foo() { ... }\n\n fun main () {\n foo()\n }'", + "markdown": "Reports `@TestOnly`- and `@VisibleForTesting`-annotated methods and classes that are used in production code. Also reports usage of applying `@TestOnly` `@VisibleForTesting` to the same element.\n\nThe problems are not reported if such method or class is referenced from:\n\n* Code under the **Test Sources** folder\n* A test class (JUnit/TestNG)\n* Another `@TestOnly`-annotated method\n\n**Example (in production code):**\n\n\n @TestOnly\n fun foo() { ... }\n\n fun main () {\n foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TestOnlyProblems", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 122, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8MapApi", + "shortDescription": { + "text": "Simplifiable 'Map' operations" + }, + "fullDescription": { + "text": "Reports common usage patterns of 'java.util.Map' and suggests replacing them with: 'getOrDefault()', 'computeIfAbsent()', 'putIfAbsent()', 'merge()', or 'replaceAll()'. Example: 'map.containsKey(key) ? map.get(key) : \"default\";' After the quick-fix is applied: 'map.getOrDefault(key, \"default\");' Example: 'List list = map.get(key);\n if (list == null) {\n list = new ArrayList<>();\n map.put(key, list);\n }' After the quick-fix is applied: 'map.computeIfAbsent(key, localKey -> new ArrayList<>());' Example: 'Integer val = map.get(key);\n if (val == null) map.put(key, 1);\n else map.put(key, val + 1);' After the quick-fix is applied: 'map.merge(key, 1, (localKey, localValue) -> localValue + 1);' Example: 'for (Map.Entry entry : map.entrySet()) {\n map.put(entry.getKey(), transform(entry.getValue()));\n }' After the quick-fix is applied: 'map.replaceAll((localKey, localValue) -> transform(localValue));' Note that the replacement with 'computeIfAbsent()' or 'merge()' might work incorrectly for some 'Map' implementations if the code extracted to the lambda expression modifies the same 'Map'. By default, the warning doesn't appear if this code might have side effects. If necessary, enable the Suggest replacement even if lambda may have side effects option to always show the warning. Also, due to different handling of the 'null' value in old methods like 'put()' and newer methods like 'computeIfAbsent()' or 'merge()', semantics might change if storing the 'null' value into given 'Map' is important. The inspection won't suggest the replacement when the value is statically known to be nullable, but for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning and adding an explanatory comment. This inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8.", + "markdown": "Reports common usage patterns of `java.util.Map` and suggests replacing them with: `getOrDefault()`, `computeIfAbsent()`, `putIfAbsent()`, `merge()`, or `replaceAll()`.\n\nExample:\n\n\n map.containsKey(key) ? map.get(key) : \"default\";\n\nAfter the quick-fix is applied:\n\n\n map.getOrDefault(key, \"default\");\n\nExample:\n\n\n List list = map.get(key);\n if (list == null) {\n list = new ArrayList<>();\n map.put(key, list);\n }\n\nAfter the quick-fix is applied:\n\n\n map.computeIfAbsent(key, localKey -> new ArrayList<>());\n\nExample:\n\n\n Integer val = map.get(key);\n if (val == null) map.put(key, 1);\n else map.put(key, val + 1);\n\nAfter the quick-fix is applied:\n\n\n map.merge(key, 1, (localKey, localValue) -> localValue + 1);\n\nExample:\n\n\n for (Map.Entry entry : map.entrySet()) {\n map.put(entry.getKey(), transform(entry.getValue()));\n }\n\nAfter the quick-fix is applied:\n\n\n map.replaceAll((localKey, localValue) -> transform(localValue));\n\nNote that the replacement with `computeIfAbsent()` or `merge()` might work incorrectly for some `Map`\nimplementations if the code extracted to the lambda expression modifies the same `Map`. By default,\nthe warning doesn't appear if this code might have side effects. If necessary, enable the\n**Suggest replacement even if lambda may have side effects** option to always show the warning.\n\nAlso, due to different handling of the `null` value in old methods like `put()` and newer methods like\n`computeIfAbsent()` or `merge()`, semantics might change if storing the `null` value into given\n`Map` is important. The inspection won't suggest the replacement when the value is statically known to be nullable,\nbut for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning\nand adding an explanatory comment.\n\nThis inspection depends on the Java feature 'Lambda methods in collections' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Java8MapApi", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 121, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MeaninglessRecordAnnotationInspection", + "shortDescription": { + "text": "Meaningless record annotation" + }, + "fullDescription": { + "text": "Reports annotations used on record components that have no effect. This can happen in two cases: The reported annotation has the METHOD target, but the corresponding accessor is explicitly defined. The reported annotation has the PARAMETER target, but the canonical constructor is explicitly defined. Example: '@Target(ElementType.METHOD)\n@interface A { }\n \n// The annotation will not appear in bytecode at all,\n// as it should be propagated to the accessor but accessor is explicitly defined \nrecord R(@A int x) {\n public int x() { return x; }\n}' This inspection depends on the Java feature 'Records' which is available since Java 16. New in 2021.1", + "markdown": "Reports annotations used on record components that have no effect.\n\nThis can happen in two cases:\n\n* The reported annotation has the METHOD target, but the corresponding accessor is explicitly defined.\n* The reported annotation has the PARAMETER target, but the canonical constructor is explicitly defined.\n\nExample:\n\n\n @Target(ElementType.METHOD)\n @interface A { }\n \n // The annotation will not appear in bytecode at all,\n // as it should be propagated to the accessor but accessor is explicitly defined \n record R(@A int x) {\n public int x() { return x; }\n }\n\nThis inspection depends on the Java feature 'Records' which is available since Java 16.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MeaninglessRecordAnnotationInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FillPermitsList", + "shortDescription": { + "text": "Same file subclasses are missing from permits clause of a sealed class" + }, + "fullDescription": { + "text": "Reports sealed classes whose permits clauses do not contain some of the subclasses from the same file. Example: 'sealed class A {}\n final class B extends A {}' After the quick-fix is applied: 'sealed class A permits B {}\n final class B extends A {}' This inspection depends on the Java feature 'Sealed classes' which is available since Java 17. New in 2020.3", + "markdown": "Reports sealed classes whose permits clauses do not contain some of the subclasses from the same file.\n\nExample:\n\n\n sealed class A {}\n final class B extends A {}\n\nAfter the quick-fix is applied:\n\n\n sealed class A permits B {}\n final class B extends A {}\n\nThis inspection depends on the Java feature 'Sealed classes' which is available since Java 17.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FillPermitsList", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicConstant", + "shortDescription": { + "text": "Magic constant" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced with \"magic\" constants. Example 1: '// Bare literal \"2\" is used, warning:\n Font font = new Font(\"Arial\", 2)' Example 2: '// Predefined constant is used, good:\n Font font = new Font(\"Arial\", Font.ITALIC)' When possible, the quick-fix inserts an appropriate predefined constant. The behavior of this inspection is controlled by 'org.intellij.lang.annotations.MagicConstant' annotation. Some standard Java library methods are pre-annotated, but you can use this annotation in your code as well.", + "markdown": "Reports expressions that can be replaced with \"magic\" constants.\n\nExample 1:\n\n\n // Bare literal \"2\" is used, warning:\n Font font = new Font(\"Arial\", 2)\n\nExample 2:\n\n\n // Predefined constant is used, good:\n Font font = new Font(\"Arial\", Font.ITALIC)\n\n\nWhen possible, the quick-fix inserts an appropriate predefined constant.\n\n\nThe behavior of this inspection is controlled by `org.intellij.lang.annotations.MagicConstant` annotation.\nSome standard Java library methods are pre-annotated, but you can use this annotation in your code as well." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MagicConstant", + "cweIds": [ + 489 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousDateFormat", + "shortDescription": { + "text": "Suspicious date format pattern" + }, + "fullDescription": { + "text": "Reports date format patterns that are likely used by mistake. The following patterns are reported: Uppercase \"Y\", unless \"w\" appears nearby. It stands for \"Week year\" that is almost always the same as normal \"Year\" (lowercase \"y\" pattern), but may point to the next year at the end of December. Uppercase \"M\" (month) close to \"H\", \"K\", \"h\", or \"k\" (hour). It's likely that a lowercase \"m\" (minute) was intended. Lowercase \"m\" (minute) close to \"y\" (year) or \"d\" (day in month). It's likely that an uppercase \"M\" (month) was intended. Uppercase \"D\" (day in year) close to \"M\", or \"L\" (month). It's likely that a lowercase \"d\" (day in month) was intended. Uppercase \"S\" (milliseconds) close to \"m\" (minutes). It's likely that a lowercase \"s\" (seconds) was intended. Examples: 'new SimpleDateFormat(\"YYYY-MM-dd\")': likely '\"yyyy-MM-dd\"' was intended. 'new SimpleDateFormat(\"yyyy-MM-DD\")': likely '\"yyyy-MM-dd\"' was intended. 'new SimpleDateFormat(\"HH:MM\")': likely '\"HH:mm\"' was intended. New in 2020.1", + "markdown": "Reports date format patterns that are likely used by mistake.\n\nThe following patterns are reported:\n\n* Uppercase \"Y\", unless \"w\" appears nearby. It stands for \"Week year\" that is almost always the same as normal \"Year\" (lowercase \"y\" pattern), but may point to the next year at the end of December.\n* Uppercase \"M\" (month) close to \"H\", \"K\", \"h\", or \"k\" (hour). It's likely that a lowercase \"m\" (minute) was intended.\n* Lowercase \"m\" (minute) close to \"y\" (year) or \"d\" (day in month). It's likely that an uppercase \"M\" (month) was intended.\n* Uppercase \"D\" (day in year) close to \"M\", or \"L\" (month). It's likely that a lowercase \"d\" (day in month) was intended.\n* Uppercase \"S\" (milliseconds) close to \"m\" (minutes). It's likely that a lowercase \"s\" (seconds) was intended.\n\n\nExamples: \n\n`new SimpleDateFormat(\"YYYY-MM-dd\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"yyyy-MM-DD\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"HH:MM\")`: likely `\"HH:mm\"` was intended.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousDateFormat", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumericToString", + "shortDescription": { + "text": "Call to 'Number.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on objects of a class extending 'Number'. Such calls are usually incorrect in an internationalized environment and some locale specific formatting should be used instead. Example: 'void print(Double d) {\n System.out.println(d.toString());\n }' A possible way to fix this problem could be: 'void print(Double d) {\n System.out.printf(\"%f%n\", d);\n }' This formats the number using the default locale which is set during the startup of the JVM and is based on the host environment.", + "markdown": "Reports `toString()` calls on objects of a class extending `Number`. Such calls are usually incorrect in an internationalized environment and some locale specific formatting should be used instead.\n\n**Example:**\n\n\n void print(Double d) {\n System.out.println(d.toString());\n }\n\nA possible way to fix this problem could be:\n\n\n void print(Double d) {\n System.out.printf(\"%f%n\", d);\n }\n\nThis formats the number using the default locale which is set during the startup of the JVM and is based on the host environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToNumericToString", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryDefault", + "shortDescription": { + "text": "Unnecessary 'default' for enum 'switch' statement" + }, + "fullDescription": { + "text": "Reports enum 'switch' statements or expression with 'default' branches which can never be taken, because all possible values are covered by a 'case' branch. Such elements are redundant, especially for 'switch' expressions, because they don't compile when all enum constants are not covered by a 'case' branch. The language level needs to be configured to 14 to report 'switch' expressions. The provided quick-fix removes 'default' branches. Example: 'enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n default -> 3;\n };\n }' After the quick-fix is applied: 'enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n };\n }' Use the Only report switch expressions option to report only redundant 'default' branches in switch expressions.", + "markdown": "Reports enum `switch` statements or expression with `default` branches which can never be taken, because all possible values are covered by a `case` branch.\n\nSuch elements are redundant, especially for `switch` expressions, because they don't compile when all\nenum constants are not covered by a `case` branch.\n\n\nThe language level needs to be configured to 14 to report `switch` expressions.\n\nThe provided quick-fix removes `default` branches.\n\nExample:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n default -> 3;\n };\n }\n\nAfter the quick-fix is applied:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n };\n }\n\nUse the **Only report switch expressions** option to report only redundant `default` branches in switch expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryDefault", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VolatileArrayField", + "shortDescription": { + "text": "Volatile array field" + }, + "fullDescription": { + "text": "Reports array fields that are declared 'volatile'. Such declarations may be confusing because accessing the array itself follows the rules for 'volatile' fields, but accessing the array's contents does not. Example: 'class Data {\n private volatile int[] idx = new int[0];\n }' If such volatile access is needed for array contents, consider using 'java.util.concurrent.atomic' classes instead: 'class Data {\n private final AtomicIntegerArray idx = new AtomicIntegerArray(new int[0]);\n }'", + "markdown": "Reports array fields that are declared `volatile`. Such declarations may be confusing because accessing the array itself follows the rules for `volatile` fields, but accessing the array's contents does not.\n\n**Example:**\n\n\n class Data {\n private volatile int[] idx = new int[0];\n }\n\n\nIf such volatile access is needed for array contents, consider using\n`java.util.concurrent.atomic` classes instead:\n\n\n class Data {\n private final AtomicIntegerArray idx = new AtomicIntegerArray(new int[0]);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VolatileArrayField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryInheritDoc", + "shortDescription": { + "text": "Unnecessary '{@inheritDoc}' Javadoc comment" + }, + "fullDescription": { + "text": "Reports Javadoc comments that contain only an '{@inheritDoc}' tag. Since Javadoc copies the super class' comment if no comment is present, a comment containing only '{@inheritDoc}' adds nothing. Also, it reports the '{@inheritDoc}' usages in invalid locations, for example, in fields. Suggests removing the unnecessary Javadoc comment. Example: 'class Example implements Comparable {\n /**\n * {@inheritDoc}\n */\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }' After the quick-fix is applied: 'class Example implements Comparable {\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }'", + "markdown": "Reports Javadoc comments that contain only an `{@inheritDoc}` tag. Since Javadoc copies the super class' comment if no comment is present, a comment containing only `{@inheritDoc}` adds nothing.\n\nAlso, it reports the `{@inheritDoc}` usages in invalid locations, for example, in fields.\n\nSuggests removing the unnecessary Javadoc comment.\n\n**Example:**\n\n\n class Example implements Comparable {\n /**\n * {@inheritDoc}\n */\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example implements Comparable {\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryInheritDoc", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonReproducibleMathCall", + "shortDescription": { + "text": "Non-reproducible call to 'Math'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Math' methods, which results are not guaranteed to be reproduced precisely. In environments where reproducibility of results is required, 'java.lang.StrictMath' should be used instead.", + "markdown": "Reports calls to `java.lang.Math` methods, which results are not guaranteed to be reproduced precisely.\n\nIn environments where reproducibility of results is required, `java.lang.StrictMath`\nshould be used instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonReproducibleMathCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerConstructor", + "shortDescription": { + "text": "Constructor with too many parameters" + }, + "fullDescription": { + "text": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example. Example: 'public BankAccount(long accountNumber,\n String owner,\n double balance,\n double interestRate) {\n // fields initialization\n }' Configure the inspection: Use the Parameter limit field to specify the maximum allowed number of parameters in a constructor. Use the Ignore constructors with visibility list to specify whether the inspection should ignore constructors with specific visibility.", + "markdown": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example.\n\n**Example:**\n\n\n public BankAccount(long accountNumber,\n String owner,\n double balance,\n double interestRate) {\n // fields initialization\n }\n\nConfigure the inspection:\n\n* Use the **Parameter limit** field to specify the maximum allowed number of parameters in a constructor.\n* Use the **Ignore constructors with visibility** list to specify whether the inspection should ignore constructors with specific visibility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstructorWithTooManyParameters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MappingBeforeCount", + "shortDescription": { + "text": "Mapping call before count()" + }, + "fullDescription": { + "text": "Reports redundant 'Stream' API calls like 'map()', or 'boxed()' right before the 'count()' call. Such calls don't change the final count, so could be removed. It's possible that the code relies on a side effect from the lambda inside such a mapping call. However, relying on side effects inside the stream chain is extremely bad practice. There are no guarantees that the call will not be optimized out in future Java versions. Example: '// map() call is redundant\n long count = list.stream().filter(s -> !s.isEmpty()).map(s -> s.trim()).count();' This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2024.1", + "markdown": "Reports redundant `Stream` API calls like `map()`, or `boxed()` right before the `count()` call.\n\n\nSuch calls don't change the final count, so could be removed. It's possible that the code relies on\na side effect from the lambda inside such a mapping call. However, relying on side effects inside\nthe stream chain is extremely bad practice. There are no guarantees that the call will not be\noptimized out in future Java versions.\n\n**Example:**\n\n\n // map() call is redundant\n long count = list.stream().filter(s -> !s.isEmpty()).map(s -> s.trim()).count();\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MappingBeforeCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExtendableApiUsage", + "shortDescription": { + "text": "Class, interface, or method should not be extended" + }, + "fullDescription": { + "text": "Reports classes, interfaces and methods that extend, implement, or override API elements marked with '@ApiStatus.NonExtendable'. The '@ApiStatus.NonExtendable' annotation indicates that the class, interface, or method must not be extended, implemented, or overridden. Since casting such interfaces and classes to the internal library implementation is rather common, if a client provides a different implementation, you will get 'ClassCastException'. Adding new abstract methods to such classes and interfaces will break the compatibility with the client's implementations.", + "markdown": "Reports classes, interfaces and methods that extend, implement, or override API elements marked with `@ApiStatus.NonExtendable`.\n\n\nThe `@ApiStatus.NonExtendable` annotation indicates that the class, interface, or method **must not be extended,\nimplemented, or overridden** .\nSince casting such interfaces and classes to the internal library implementation is rather common,\nif a client provides a different implementation, you will get `ClassCastException`.\nAdding new abstract methods to such classes and interfaces will break the compatibility with the client's implementations." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NonExtendableApiUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedFieldAccess", + "shortDescription": { + "text": "Instance field access not qualified with 'this'" + }, + "fullDescription": { + "text": "Reports field access operations that are not qualified with 'this' or some other qualifier. Some coding styles mandate that all field access operations are qualified to prevent confusion with local variable or parameter access. Example: 'class Foo {\n int foo;\n\n void bar() {\n foo += 1;\n }\n }' After the quick-fix is applied: 'class Foo {\n int foo;\n\n void bar() {\n this.foo += 1;\n }\n }'", + "markdown": "Reports field access operations that are not qualified with `this` or some other qualifier.\n\n\nSome coding styles mandate that all field access operations are qualified to prevent confusion with local\nvariable or parameter access.\n\n**Example:**\n\n\n class Foo {\n int foo;\n\n void bar() {\n foo += 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n\n void bar() {\n this.foo += 1;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnqualifiedFieldAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedCollectionQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of collection" + }, + "fullDescription": { + "text": "Reports collections whose contents are either queried and not updated, or updated and not queried. Such inconsistent queries and updates are pointless and may indicate either dead code or a typo. Use the inspection settings to specify name patterns that correspond to update/query methods. Query methods that return an element are automatically detected, and only those that write data to an output parameter (for example, an 'OutputStream') need to be specified. Example: Suppose you have your custom 'FixedStack' class with method 'store()': 'public class FixedStack extends Collection {\n public T store(T t) {\n // implementation\n }\n }' You can add 'store' to the update methods table in order to report mismatched queries like: 'void test(int i) {\n FixedStack stack = new FixedStack<>();\n stack.store(i);\n }'", + "markdown": "Reports collections whose contents are either queried and not updated, or updated and not queried.\n\n\nSuch inconsistent queries and updates are pointless and may indicate\neither dead code or a typo.\n\n\nUse the inspection settings to specify name patterns that correspond to update/query methods.\nQuery methods that return an element are automatically detected, and only\nthose that write data to an output parameter (for example, an `OutputStream`) need to be specified.\n\n\n**Example:**\n\nSuppose you have your custom `FixedStack` class with method `store()`:\n\n\n public class FixedStack extends Collection {\n public T store(T t) {\n // implementation\n }\n }\n\nYou can add `store` to the update methods table in order to report mismatched queries like:\n\n\n void test(int i) {\n FixedStack stack = new FixedStack<>();\n stack.store(i);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedQueryAndUpdateOfCollection", + "cweIds": [ + 561, + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharacterComparison", + "shortDescription": { + "text": "Character comparison" + }, + "fullDescription": { + "text": "Reports ordinal comparisons of 'char' values. In an internationalized environment, such comparisons are rarely correct.", + "markdown": "Reports ordinal comparisons of `char` values. In an internationalized environment, such comparisons are rarely correct." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CharacterComparison", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnThis", + "shortDescription": { + "text": "Synchronization on 'this'" + }, + "fullDescription": { + "text": "Reports synchronization on 'this' or 'class' expressions. The reported constructs include 'synchronized' blocks and calls to 'wait()', 'notify()' or 'notifyAll()'. There are several reasons synchronization on 'this' or 'class' expressions may be a bad idea: it makes synchronization a part of the external interface of the class, which makes a future change to a different locking mechanism difficult, it becomes hard to track just who is locking on a given object, it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing. As an alternative, consider synchronizing on a 'private final' lock object, access to which can be completely controlled. Example: 'public void print() {\n synchronized(this) { // warning: Lock operations on 'this' may have unforeseen side-effects\n System.out.println(\"synchronized\");\n }\n }'", + "markdown": "Reports synchronization on `this` or `class` expressions. The reported constructs include `synchronized` blocks and calls to `wait()`, `notify()` or `notifyAll()`.\n\nThere are several reasons synchronization on `this` or `class` expressions may be a bad idea:\n\n1. it makes synchronization a part of the external interface of the class, which makes a future change to a different locking mechanism difficult,\n2. it becomes hard to track just who is locking on a given object,\n3. it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing.\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\n**Example:**\n\n\n public void print() {\n synchronized(this) { // warning: Lock operations on 'this' may have unforeseen side-effects\n System.out.println(\"synchronized\");\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizeOnThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports assignment values that are not used after assignment. If the assignment value is unused, it's better to remove the assignment to shorten the code and avoid redundant allocations. The following cases are reported: variables that are never read after assignment variables that are always overwritten with a new value before being read variable initializers that are redundant (for one of the two reasons above) Configure the inspection: Use the Report redundant initializers option to report redundant initializers: 'int getI() {\n int i = 0; // redundant initialization\n i = 2;\n return i;\n }' Use the Report prefix expressions that can be replaced with binary expressions option to report cases where an '++i' expression may be replaced with 'i + 1': 'int preInc(int value) {\n int res = value;\n return ++res;\n }' Use the Report postfix expressions where the changed value is not used option to report 'i++' cases where the value of 'i' is not used later: 'int postInc(int value) {\n int res = value;\n return res++;\n }' Use the Report pattern variables whose values are never used option to report cases where the value of a pattern variable is overwritten before it is read: 'if (object instanceof String s) {\n s = \"hello\";\n System.out.println(s);\n }' Use the Report iteration parameters whose values are never used option to report cases where the value of an iteration parameter of an enhanced 'for' statements is overwritten before it is read: 'for (String arg : args) {\n arg = \"test\";\n System.out.println(arg);\n }'", + "markdown": "Reports assignment values that are not used after assignment. If the assignment value is unused, it's better to remove the assignment to shorten the code and avoid redundant allocations.\n\nThe following cases are reported:\n\n* variables that are never read after assignment\n* variables that are always overwritten with a new value before being read\n* variable initializers that are redundant (for one of the two reasons above)\n\nConfigure the inspection:\n\n\nUse the **Report redundant initializers** option to report redundant initializers:\n\n\n int getI() {\n int i = 0; // redundant initialization\n i = 2;\n return i;\n }\n\n\nUse the **Report prefix expressions that can be replaced with binary expressions** option to report cases\nwhere an `++i` expression may be replaced with `i + 1`:\n\n\n int preInc(int value) {\n int res = value;\n return ++res;\n }\n\n\nUse the **Report postfix expressions where the changed value is not used** option to report `i++` cases\nwhere the value of `i` is not used later:\n\n\n int postInc(int value) {\n int res = value;\n return res++;\n }\n\n\nUse the **Report pattern variables whose values are never used** option to report cases where the value of a pattern variable\nis overwritten before it is read:\n\n\n if (object instanceof String s) {\n s = \"hello\";\n System.out.println(s);\n }\n\n\nUse the **Report iteration parameters whose values are never used** option to report cases where the value of an iteration parameter\nof an enhanced `for` statements is overwritten before it is read:\n\n\n for (String arg : args) {\n arg = \"test\";\n System.out.println(arg);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedAssignment", + "cweIds": [ + 561, + 563 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HashCodeUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'hashCode()'" + }, + "fullDescription": { + "text": "Reports implementations of 'hashCode()' that access non-'final' variables. Such access may result in 'hashCode()' returning different values at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes. Example: 'class Drink {\n String name;\n Drink(String name) { this.name = name; }\n @Override public int hashCode() {\n return Objects.hash(name); //warning\n }\n }\n ...\n Drink coffee = new Drink(\"Coffee\");\n priceMap.put(coffee, 10.0);\n coffee.name = \"Tea\";\n double coffeePrice = priceMap.get(coffee); //not found' A quick-fix is suggested to make the field final: 'class Drink {\n final String name;\n ...\n }'", + "markdown": "Reports implementations of `hashCode()` that access non-`final` variables.\n\n\nSuch access may result in `hashCode()`\nreturning different values at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes.\n\n**Example:**\n\n\n class Drink {\n String name;\n Drink(String name) { this.name = name; }\n @Override public int hashCode() {\n return Objects.hash(name); //warning\n }\n }\n ...\n Drink coffee = new Drink(\"Coffee\");\n priceMap.put(coffee, 10.0);\n coffee.name = \"Tea\";\n double coffeePrice = priceMap.get(coffee); //not found\n\nA quick-fix is suggested to make the field final:\n\n\n class Drink {\n final String name;\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonFinalFieldReferencedInHashCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedField", + "shortDescription": { + "text": "Protected field" + }, + "fullDescription": { + "text": "Reports 'protected' fields. Constants (that is, variables marked 'static' or 'final') are not reported. Example: 'public class A {\n protected Object object; // warning\n protected final static int MODE = 0; // constant, no warning\n }'", + "markdown": "Reports `protected` fields.\n\nConstants (that is, variables marked `static` or `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n protected Object object; // warning\n protected final static int MODE = 0; // constant, no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProtectedField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentUsedAsCondition", + "shortDescription": { + "text": "Assignment used as condition" + }, + "fullDescription": { + "text": "Reports assignments that are used as a condition of an 'if', 'while', 'for', or 'do' statement, or a conditional expression. Although occasionally intended, this usage is confusing and may indicate a typo, for example, '=' instead of '=='. The quick-fix replaces '=' with '=='. Example: 'void update(String str, boolean empty) {\n // Warning: 'empty' is reassigned,\n // not compared to str.isEmpty()\n if (empty = str.isEmpty()) {\n ...\n }\n }' After the quick-fix is applied: 'void update(String str, boolean empty) {\n if (empty == str.isEmpty()) {\n ...\n }\n }'", + "markdown": "Reports assignments that are used as a condition of an `if`, `while`, `for`, or `do` statement, or a conditional expression.\n\nAlthough occasionally intended, this usage is confusing and may indicate a typo, for example, `=` instead of `==`.\n\nThe quick-fix replaces `=` with `==`.\n\n**Example:**\n\n\n void update(String str, boolean empty) {\n // Warning: 'empty' is reassigned,\n // not compared to str.isEmpty()\n if (empty = str.isEmpty()) {\n ...\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void update(String str, boolean empty) {\n if (empty == str.isEmpty()) {\n ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentUsedAsCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofThis", + "shortDescription": { + "text": "'instanceof' check for 'this'" + }, + "fullDescription": { + "text": "Reports usages of 'instanceof' or 'getClass() == SomeClass.class' in which a 'this' expression is checked. Such expressions indicate a failure of the object-oriented design, and should be replaced by polymorphic constructions. Example: 'class Super {\n void process() {\n if (this instanceof Sub) { // warning\n doSomething();\n } else {\n doSomethingElse();\n }\n }\n}\n \nclass Sub extends Super {}' To fix the problem, use an overriding method: 'class Super {\n void process() {\n doSomethingElse();\n }\n}\n \nclass Sub extends Super {\n @Override\n void process() {\n doSomething();\n }\n}'", + "markdown": "Reports usages of `instanceof` or `getClass() == SomeClass.class` in which a `this` expression is checked.\n\nSuch expressions indicate a failure of the object-oriented design, and should be replaced by\npolymorphic constructions.\n\nExample:\n\n\n class Super {\n void process() {\n if (this instanceof Sub) { // warning\n doSomething();\n } else {\n doSomethingElse();\n }\n }\n }\n \n class Sub extends Super {}\n\nTo fix the problem, use an overriding method:\n\n\n class Super {\n void process() {\n doSomethingElse();\n }\n }\n \n class Sub extends Super {\n @Override\n void process() {\n doSomething();\n }\n } \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceofThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageInMultipleModules", + "shortDescription": { + "text": "Package with classes in multiple modules" + }, + "fullDescription": { + "text": "Reports non-empty packages that are present in several modules. When packages are contained in several modules, it is very easy to create a class with the same name in two modules. A module which depends on these modules will see a conflict if it tries to use such a class. The Java Platform Module System disallows packages contained in more than one module (also called split packages) Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports non-empty packages that are present in several modules. When packages are contained in several modules, it is very easy to create a class with the same name in two modules. A module which depends on these modules will see a conflict if it tries to use such a class. The Java Platform Module System disallows packages contained in more than one module (also called *split packages* )\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageInMultipleModules", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 44, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FloatingPointEquality", + "shortDescription": { + "text": "Floating-point equality comparison" + }, + "fullDescription": { + "text": "Reports floating-point values that are being compared using the '==' or '!=' operator. Floating-point values are inherently inaccurate, and comparing them for exact equality is seldom the desired semantics. This inspection ignores comparisons with zero and infinity literals. Example: 'void m(double d1, double d2) {\n if (d1 == d2) {}\n }'", + "markdown": "Reports floating-point values that are being compared using the `==` or `!=` operator.\n\nFloating-point values are inherently inaccurate, and comparing them for exact equality is seldom the desired semantics.\n\nThis inspection ignores comparisons with zero and infinity literals.\n\n**Example:**\n\n\n void m(double d1, double d2) {\n if (d1 == d2) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FloatingPointEquality", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SequencedCollectionMethodCanBeUsed", + "shortDescription": { + "text": "SequencedCollection method can be used" + }, + "fullDescription": { + "text": "Reports collection API method calls that can be simplified using 'SequencedCollection' methods. The following conversions are supported: 'list.add(0, element)' → 'list.addFirst(element);' 'list.get(0)' → 'list.getFirst();' 'list.get(list.size() - 1)' → 'list.getLast();' 'list.remove(0)' → 'list.removeFirst();' 'list.remove(list.size() - 1)' → 'list.removeLast();' 'collection.iterator().next()' → 'collection.getFirst();' This inspection depends on the Java feature 'Sequenced Collections' which is available since Java 21. New in 2023.3", + "markdown": "Reports collection API method calls that can be simplified using `SequencedCollection` methods.\n\nThe following conversions are supported:\n\n* `list.add(0, element)` → `list.addFirst(element);`\n* `list.get(0)` → `list.getFirst();`\n* `list.get(list.size() - 1)` → `list.getLast();`\n* `list.remove(0)` → `list.removeFirst();`\n* `list.remove(list.size() - 1)` → `list.removeLast();`\n* `collection.iterator().next()` → `collection.getFirst();`\n\nThis inspection depends on the Java feature 'Sequenced Collections' which is available since Java 21.\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SequencedCollectionMethodCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 21", + "index": 192, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicField", + "shortDescription": { + "text": "'public' field" + }, + "fullDescription": { + "text": "Reports 'public' fields. Constants (fields marked with 'static' and 'final') are not reported. Example: 'class Main {\n public String name;\n }' After the quick-fix is applied: 'class Main {\n private String name;\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n }' Configure the inspection: Use the Ignore If Annotated By list to specify annotations to ignore. The inspection will ignore fields with any of these annotations. Use the Ignore 'public final' fields of an enum option to ignore 'public final' fields of the 'enum' type.", + "markdown": "Reports `public` fields. Constants (fields marked with `static` and `final`) are not reported.\n\n**Example:**\n\n\n class Main {\n public String name;\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private String name;\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore If Annotated By** list to specify annotations to ignore. The inspection will ignore fields with any of these annotations.\n* Use the **Ignore 'public final' fields of an enum** option to ignore `public final` fields of the `enum` type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "PublicField", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferToStringInConcatenation", + "shortDescription": { + "text": "'StringBuilder.toString()' in concatenation" + }, + "fullDescription": { + "text": "Reports 'StringBuffer.toString()' or 'StringBuilder.toString()' calls in string concatenations. Such calls are unnecessary when concatenating and can be removed, saving a method call and an object allocation, which may improve performance.", + "markdown": "Reports `StringBuffer.toString()` or `StringBuilder.toString()` calls in string concatenations. Such calls are unnecessary when concatenating and can be removed, saving a method call and an object allocation, which may improve performance." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringBufferToStringInConcatenation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialAnnotationUsedOnWrongMember", + "shortDescription": { + "text": "'@Serial' annotation used on wrong member" + }, + "fullDescription": { + "text": "Reports methods and fields in the 'Serializable' and 'Externalizable' classes that are not suitable to be annotated with the 'java.io.Serial' annotation. Examples: 'class Test implements Serializable {\n @Serial // The annotated field is not a part of serialization mechanism because it's not final\n private static long serialVersionUID = 7874493593505141603L;\n\n @Serial // The annotated method is not a part of the serialization mechanism because it's not private\n void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' 'class Test implements Externalizable {\n @Serial // The annotated method is not a part of the serialization mechanism as it's inside Externalizable class\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' For information about all valid cases, refer the documentation for 'java.io.Serial'. This inspection depends on the Java feature '@Serial annotation' which is available since Java 14. New in 2020.3", + "markdown": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are not suitable to be annotated with the `java.io.Serial` annotation.\n\n**Examples:**\n\n\n class Test implements Serializable {\n @Serial // The annotated field is not a part of serialization mechanism because it's not final\n private static long serialVersionUID = 7874493593505141603L;\n\n @Serial // The annotated method is not a part of the serialization mechanism because it's not private\n void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n class Test implements Externalizable {\n @Serial // The annotated method is not a part of the serialization mechanism as it's inside Externalizable class\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nFor information about all valid cases, refer the documentation for `java.io.Serial`.\n\nThis inspection depends on the Java feature '@Serial annotation' which is available since Java 14.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "serial", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowsRuntimeException", + "shortDescription": { + "text": "Unchecked exception declared in 'throws' clause" + }, + "fullDescription": { + "text": "Reports declaration of an unchecked exception ('java.lang.RuntimeException' or one of its subclasses) in the 'throws' clause of a method. Declarations of unchecked exceptions are not required and may be deleted or moved to a Javadoc '@throws' tag. Example: 'public class InvalidDataException extends RuntimeException {}\n\n class TextEditor {\n void readSettings() throws InvalidDataException {} // warning: Unchecked exception 'InvalidDataException' declared in 'throws' clause\n }'", + "markdown": "Reports declaration of an unchecked exception (`java.lang.RuntimeException` or one of its subclasses) in the `throws` clause of a method.\n\nDeclarations of unchecked exceptions are not required and may be deleted or moved to a Javadoc `@throws` tag.\n\n**Example:**\n\n\n public class InvalidDataException extends RuntimeException {}\n\n class TextEditor {\n void readSettings() throws InvalidDataException {} // warning: Unchecked exception 'InvalidDataException' declared in 'throws' clause\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowsRuntimeException", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewObjectEquality", + "shortDescription": { + "text": "New object is compared using '=='" + }, + "fullDescription": { + "text": "Reports code that applies '==' or '!=' to a newly allocated object instead of calling 'equals()'. The references to newly allocated objects cannot point at existing objects, thus the comparison will always evaluate to 'false'. The inspection may also report newly created objects returned from simple methods. Example: 'void test(Object obj) {\n if (new Object() == obj) {...}\n }' After the quick-fix is applied: 'void test(Object obj) {\n if (new Object().equals(obj)) {...}\n }' New in 2018.3", + "markdown": "Reports code that applies `==` or `!=` to a newly allocated object instead of calling `equals()`.\n\n\nThe references to newly allocated objects cannot point at existing objects,\nthus the comparison will always evaluate to `false`. The inspection may also report newly\ncreated objects returned from simple methods.\n\n**Example:**\n\n\n void test(Object obj) {\n if (new Object() == obj) {...}\n }\n\nAfter the quick-fix is applied:\n\n\n void test(Object obj) {\n if (new Object().equals(obj)) {...}\n }\n\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "NewObjectEquality", + "cweIds": [ + 480 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JNDIResource", + "shortDescription": { + "text": "JNDI resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports JNDI resources that are not safely closed. JNDI resources reported by this inspection include 'javax.naming.InitialContext', and 'javax.naming.NamingEnumeration'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'Object findObject(Properties properties, String name) throws NamingException {\n Context context = new InitialContext(properties); //context is not closed\n return context.lookup(name);\n }' Use the following options to configure the inspection: Whether a JNDI Resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports JNDI resources that are not safely closed. JNDI resources reported by this inspection include `javax.naming.InitialContext`, and `javax.naming.NamingEnumeration`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n Object findObject(Properties properties, String name) throws NamingException {\n Context context = new InitialContext(properties); //context is not closed\n return context.lookup(name);\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JNDI Resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JNDIResourceOpenedButNotSafelyClosed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryWithIdenticalCatches", + "shortDescription": { + "text": "Identical 'catch' branches in 'try' statement" + }, + "fullDescription": { + "text": "Reports identical 'catch' sections in a single 'try' statement. Collapsing such sections into one multi-catch block reduces code duplication and prevents the situations when one 'catch' section is updated, and another one is not. Example: 'try {\n doSmth();\n }\n catch (IOException e) {\n LOG.error(e);\n }\n catch (URISyntaxException e) {\n LOG.error(e);\n }' A quick-fix is available to make the code more compact: 'try {\n doSmth();\n }\n catch (IOException | URISyntaxException e) {\n LOG.error(e);\n }' This inspection depends on the Java feature 'Multi-catches' which is available since Java 7.", + "markdown": "Reports identical `catch` sections in a single `try` statement.\n\nCollapsing such sections into one *multi-catch* block reduces code duplication and prevents\nthe situations when one `catch` section is updated, and another one is not.\n\n**Example:**\n\n\n try {\n doSmth();\n }\n catch (IOException e) {\n LOG.error(e);\n }\n catch (URISyntaxException e) {\n LOG.error(e);\n }\n\nA quick-fix is available to make the code more compact:\n\n\n try {\n doSmth();\n }\n catch (IOException | URISyntaxException e) {\n LOG.error(e);\n }\n\nThis inspection depends on the Java feature 'Multi-catches' which is available since Java 7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TryWithIdenticalCatches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 159, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompareCall", + "shortDescription": { + "text": "Redundant 'compare()' method call" + }, + "fullDescription": { + "text": "Reports comparisons in which the 'compare' method is superfluous. Example: 'boolean result = Integer.compare(a, b) == 0;' After the quick-fix is applied: 'boolean result = a == b;' New in 2018.2", + "markdown": "Reports comparisons in which the `compare` method is superfluous.\n\nExample:\n\n\n boolean result = Integer.compare(a, b) == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean result = a == b;\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantCompareCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaCanBeReplacedWithAnonymous", + "shortDescription": { + "text": "Lambda can be replaced with anonymous class" + }, + "fullDescription": { + "text": "Reports lambda expressions that can be replaced with anonymous classes. Expanding lambda expressions to anonymous classes may be useful if you need to implement other methods inside an anonymous class. Example: 's -> System.out.println(s)' After the quick-fix is applied: 'new Consumer() {\n @Override\n public void accept(String s) {\n System.out.println(s);\n }\n}' This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports lambda expressions that can be replaced with anonymous classes.\n\n\nExpanding lambda expressions to anonymous classes may be useful if you need to implement other\nmethods inside an anonymous class.\n\nExample:\n\n\n s -> System.out.println(s)\n\nAfter the quick-fix is applied:\n\n new Consumer() {\n @Override\n public void accept(String s) {\n System.out.println(s);\n }\n }\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LambdaCanBeReplacedWithAnonymous", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextBlockBackwardMigration", + "shortDescription": { + "text": "Text block can be replaced with regular string literal" + }, + "fullDescription": { + "text": "Reports text blocks that can be replaced with regular string literals. Example: 'Object obj = engine.eval(\"\"\"\n function hello() {\n print('\"Hello, world\"');\n }\n\n hello();\n \"\"\");' After the quick fix is applied: 'Object obj = engine.eval(\"function hello() {\\n\" +\n \" print('\\\"Hello, world\\\"');\\n\" +\n \"}\\n\" +\n \"\\n\" +\n \"hello();\\n\");' This inspection depends on the Java feature 'Text block literals' which is available since Java 15. New in 2019.3", + "markdown": "Reports text blocks that can be replaced with regular string literals.\n\n**Example:**\n\n\n Object obj = engine.eval(\"\"\"\n function hello() {\n print('\"Hello, world\"');\n }\n\n hello();\n \"\"\");\n\nAfter the quick fix is applied:\n\n\n Object obj = engine.eval(\"function hello() {\\n\" +\n \" print('\\\"Hello, world\\\"');\\n\" +\n \"}\\n\" +\n \"\\n\" +\n \"hello();\\n\");\n\nThis inspection depends on the Java feature 'Text block literals' which is available since Java 15.\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TextBlockBackwardMigration", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 15", + "index": 130, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyClass", + "shortDescription": { + "text": "Empty class" + }, + "fullDescription": { + "text": "Reports empty classes and empty Java files. A class is empty if it doesn't contain any fields, methods, constructors, or initializers. Empty classes are sometimes left over after significant changes or refactorings. Example: 'class Example {\n List getList() {\n return new ArrayList<>() {\n\n };\n }\n }' After the quick-fix is applied: 'class Example {\n List getList() {\n return new ArrayList<>();\n }\n }' Configure the inspection: Use the Ignore if annotated by option to specify special annotations. The inspection will ignore the classes marked with these annotations. Use the Ignore class if it is a parametrization of a super type option to ignore classes that parameterize a superclass. For example: 'class MyList extends ArrayList {}' Use the Ignore subclasses of java.lang.Throwable to ignore classes that extend 'java.lang.Throwable'. Use the Comments count as content option to ignore classes that contain comments.", + "markdown": "Reports empty classes and empty Java files.\n\nA class is empty if it doesn't contain any fields, methods, constructors, or initializers. Empty classes are sometimes left over\nafter significant changes or refactorings.\n\n**Example:**\n\n\n class Example {\n List getList() {\n return new ArrayList<>() {\n\n };\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n List getList() {\n return new ArrayList<>();\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore if annotated by** option to specify special annotations. The inspection will ignore the classes marked with these annotations.\n*\n Use the **Ignore class if it is a parametrization of a super type** option to ignore classes that parameterize a superclass. For example:\n\n class MyList extends ArrayList {}\n\n* Use the **Ignore subclasses of java.lang.Throwable** to ignore classes that extend `java.lang.Throwable`.\n* Use the **Comments count as content** option to ignore classes that contain comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalCanBeOptional", + "shortDescription": { + "text": "Conditional can be replaced with Optional" + }, + "fullDescription": { + "text": "Reports null-check conditions and suggests replacing them with 'Optional' chains. Example: 'return str == null ? \"\" : str.trim();' After applying the quick-fix: 'return Optional.ofNullable(str).map(String::trim).orElse(\"\");' While the replacement is not always shorter, it could be helpful for further refactoring (for example, for changing the method return value to 'Optional'). Note that when a not-null branch of the condition returns null, the corresponding mapping step will produce an empty 'Optional' possibly changing the semantics. If it cannot be statically proven that semantics will be preserved, the quick-fix action name will contain the \"(may change semantics)\" notice, and the inspection highlighting will be turned off. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2018.1", + "markdown": "Reports null-check conditions and suggests replacing them with `Optional` chains.\n\nExample:\n\n\n return str == null ? \"\" : str.trim();\n\nAfter applying the quick-fix:\n\n\n return Optional.ofNullable(str).map(String::trim).orElse(\"\");\n\nWhile the replacement is not always shorter, it could be helpful for further refactoring\n(for example, for changing the method return value to `Optional`).\n\nNote that when a not-null branch of the condition returns null, the corresponding mapping step will\nproduce an empty `Optional` possibly changing the semantics. If it cannot be statically\nproven that semantics will be preserved, the quick-fix action name will contain the \"(may change semantics)\"\nnotice, and the inspection highlighting will be turned off.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConditionalCanBeOptional", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToLambdaParameter", + "shortDescription": { + "text": "Assignment to lambda parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of lambda parameters. Although occasionally intended, this construct may be confusing and is often caused by a typo or use of a wrong variable. The quick-fix adds a declaration of a new variable. Example: 'list.forEach(s -> {\n s = s.trim();\n System.out.println(\"String: \" + s);\n });' After the quick-fix is applied: 'list.forEach(s -> {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n });' Use the Ignore if assignment is a transformation of the original parameter option to ignore assignments that modify the parameter value based on its previous value. This inspection depends on the Java feature 'Lambda expressions' which is available since Java 8.", + "markdown": "Reports assignment to, or modification of lambda parameters. Although occasionally intended, this construct may be confusing and is often caused by a typo or use of a wrong variable.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n list.forEach(s -> {\n s = s.trim();\n System.out.println(\"String: \" + s);\n });\n\nAfter the quick-fix is applied:\n\n\n list.forEach(s -> {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n });\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify the parameter\nvalue based on its previous value.\n\nThis inspection depends on the Java feature 'Lambda expressions' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToLambdaParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 87, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemGetenv", + "shortDescription": { + "text": "Call to 'System.getenv()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.getenv()'. Calls to 'System.getenv()' are inherently unportable.", + "markdown": "Reports calls to `System.getenv()`. Calls to `System.getenv()` are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToSystemGetenv", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 95, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantExpression", + "shortDescription": { + "text": "Constant expression can be evaluated" + }, + "fullDescription": { + "text": "Reports constant expressions, whose value can be evaluated statically, and suggests replacing them with their actual values. For example, you will be prompted to replace '2 + 2' with '4', or 'Math.sqrt(9.0)' with '3.0'. New in 2018.1", + "markdown": "Reports constant expressions, whose value can be evaluated statically, and suggests replacing them with their actual values. For example, you will be prompted to replace `2 + 2` with `4`, or `Math.sqrt(9.0)` with `3.0`.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConstantExpression", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageDotHtmlMayBePackageInfo", + "shortDescription": { + "text": "'package.html' may be converted to 'package-info.java'" + }, + "fullDescription": { + "text": "Reports any 'package.html' files which are used for documenting packages. Since JDK 1.5, it is recommended that you use 'package-info.java' files instead, as such files can also contain package annotations. This way, package-info.java becomes a sole repository for package level annotations and documentation. Example: 'package.html' '\n \n Documentation example.\n \n' After the quick-fix is applied: 'package-info.java' '/**\n * Documentation example.\n */\npackage com.sample;'", + "markdown": "Reports any `package.html` files which are used for documenting packages.\n\nSince JDK 1.5, it is recommended that you use `package-info.java` files instead, as such\nfiles can also contain package annotations. This way, package-info.java becomes a\nsole repository for package level annotations and documentation.\n\nExample: `package.html`\n\n\n \n \n Documentation example.\n \n \n\nAfter the quick-fix is applied: `package-info.java`\n\n\n /**\n * Documentation example.\n */\n package com.sample;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageDotHtmlMayBePackageInfo", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LongLiteralsEndingWithLowercaseL", + "shortDescription": { + "text": "'long' literal ending with 'l' instead of 'L'" + }, + "fullDescription": { + "text": "Reports 'long' literals ending with lowercase 'l'. These literals may be confusing, as the lowercase 'l' looks very similar to a literal '1' (one). Example: 'long nights = 100l;' After the quick-fix is applied: 'long nights = 100L;'", + "markdown": "Reports `long` literals ending with lowercase 'l'. These literals may be confusing, as the lowercase 'l' looks very similar to a literal '1' (one).\n\n**Example:**\n\n\n long nights = 100l;\n\nAfter the quick-fix is applied:\n\n\n long nights = 100L;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LongLiteralEndingWithLowercaseL", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantArrayCreation", + "shortDescription": { + "text": "Redundant array creation" + }, + "fullDescription": { + "text": "Reports arrays that are created specifically to be passed as a varargs parameter. Example: 'Arrays.asList(new String[]{\"Hello\", \"world\"})' The quick-fix replaces the array initializer with individual arguments: 'Arrays.asList(\"Hello\", \"world\")'", + "markdown": "Reports arrays that are created specifically to be passed as a varargs parameter.\n\nExample:\n\n`Arrays.asList(new String[]{\"Hello\", \"world\"})`\n\nThe quick-fix replaces the array initializer with individual arguments:\n\n`Arrays.asList(\"Hello\", \"world\")`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantArrayCreation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonShortCircuitBoolean", + "shortDescription": { + "text": "Non-short-circuit boolean expression" + }, + "fullDescription": { + "text": "Reports usages of the non-short-circuit forms of boolean 'and' and 'or' ('&', '|', '&=' and '|='). Although the non-short-circuit versions are occasionally useful, in most cases the short-circuit forms ('&&' and '||') are intended and such unintentional usages may lead to subtle bugs. A quick-fix is suggested to use the short-circuit versions. Example: 'void foo(boolean x, boolean y, boolean z) {\n if (x | y) { x |= z; }\n }' After the quick-fix is applied: 'void foo(boolean x, boolean y) {\n if (x || y) { x = x || z; }\n }'", + "markdown": "Reports usages of the non-short-circuit forms of boolean 'and' and 'or' (`&`, `|`, `&=` and `|=`). Although the non-short-circuit versions are occasionally useful, in most cases the short-circuit forms (`&&` and `||`) are intended and such unintentional usages may lead to subtle bugs.\n\n\nA quick-fix is suggested to use the short-circuit versions.\n\n**Example:**\n\n\n void foo(boolean x, boolean y, boolean z) {\n if (x | y) { x |= z; }\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(boolean x, boolean y) {\n if (x || y) { x = x || z; }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonShortCircuitBooleanExpression", + "cweIds": [ + 480, + 691 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowablePrintedToSystemOut", + "shortDescription": { + "text": "'Throwable' printed to 'System.out'" + }, + "fullDescription": { + "text": "Reports calls to 'System.out.println()' with an exception as an argument. Using print statements for logging exceptions hides the stack trace from you, which can complicate the investigation of the problem. It is recommended that you use logger instead. Calls to 'System.out.print()', 'System.err.println()', and 'System.err.print()' with an exception argument are also reported. It is better to use a logger to log exceptions instead. For example, instead of: 'try {\n foo();\n } catch (Exception e) {\n System.out.println(e);\n }' use the following code: 'try {\n foo();\n } catch (Exception e) {\n logger.warn(e); // logger call may be different\n }'", + "markdown": "Reports calls to `System.out.println()` with an exception as an argument.\n\nUsing print statements for logging exceptions hides the stack trace from you, which can complicate the investigation of the problem.\nIt is recommended that you use logger instead.\n\nCalls to `System.out.print()`, `System.err.println()`, and `System.err.print()` with an exception argument are also\nreported. It is better to use a logger to log exceptions instead.\n\nFor example, instead of:\n\n\n try {\n foo();\n } catch (Exception e) {\n System.out.println(e);\n }\n\nuse the following code:\n\n\n try {\n foo();\n } catch (Exception e) {\n logger.warn(e); // logger call may be different\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowablePrintedToSystemOut", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantRecordConstructor", + "shortDescription": { + "text": "Redundant record constructor" + }, + "fullDescription": { + "text": "Reports redundant constructors declared inside Java records. Example 1: 'record Point(int x, int y) {\n public Point {} // could be removed\n }\n \n record Point(int x, int y) {\n public Point(int x, int y) { // could be removed\n this.x = x;\n this.y = y;\n }\n }' The quick-fix removes the redundant constructors. Example 2: '// could be converted to compact constructor\n record Range(int from, int to) {\n public Range(int from, int to) {\n if (from > to) throw new IllegalArgumentException();\n this.from = from;\n this.to = to;\n }\n }' The quick-fix converts this code into a compact constructor. This inspection depends on the Java feature 'Records' which is available since Java 16. New in 2020.1", + "markdown": "Reports redundant constructors declared inside Java records.\n\n**Example 1:**\n\n\n record Point(int x, int y) {\n public Point {} // could be removed\n }\n \n record Point(int x, int y) {\n public Point(int x, int y) { // could be removed\n this.x = x;\n this.y = y;\n }\n }\n\nThe quick-fix removes the redundant constructors.\n\n**Example 2:**\n\n\n // could be converted to compact constructor\n record Range(int from, int to) {\n public Range(int from, int to) {\n if (from > to) throw new IllegalArgumentException();\n this.from = from;\n this.to = to;\n }\n }\n\nThe quick-fix converts this code into a compact constructor.\n\nThis inspection depends on the Java feature 'Records' which is available since Java 16.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantRecordConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousMethodCall", + "shortDescription": { + "text": "Call to inherited method looks like call to local method" + }, + "fullDescription": { + "text": "Reports calls to a superclass method from an anonymous, inner or local class, if a method with the same signature exists in the code surrounding the class. In this case it may seem that a method from the surrounding code is called, when in fact it is a call to a method from the superclass. To clarify the intent of the code, it is recommended to add an explicit 'super' qualifier to the method call. Example: 'class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n ambiguous(); //warning\n }\n }\n }' After the quick-fix is applied: 'class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n super.ambiguous();\n }\n }\n }'", + "markdown": "Reports calls to a superclass method from an anonymous, inner or local class, if a method with the same signature exists in the code surrounding the class. In this case it may seem that a method from the surrounding code is called, when in fact it is a call to a method from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the method call.\n\n**Example:**\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n ambiguous(); //warning\n }\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n super.ambiguous();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AmbiguousMethodCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 99, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticInheritance", + "shortDescription": { + "text": "Static inheritance" + }, + "fullDescription": { + "text": "Reports interfaces that are implemented only to provide access to constants. This kind of inheritance is often confusing and may hide important dependency information.", + "markdown": "Reports interfaces that are implemented only to provide access to constants. This kind of inheritance is often confusing and may hide important dependency information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticInheritance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 149, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnmodifiable", + "shortDescription": { + "text": "Redundant usage of unmodifiable collection wrappers" + }, + "fullDescription": { + "text": "Reports redundant calls to unmodifiable collection wrappers from the 'Collections' class. If the argument that is passed to an unmodifiable collection wrapper is already immutable, such a wrapping becomes redundant. Example: 'List x = Collections.unmodifiableList(Collections.singletonList(\"abc\"));' After the quick-fix is applied: 'List x = Collections.singletonList(\"abc\");' In order to detect the methods that return unmodifiable collections, the inspection uses the 'org.jetbrains.annotations.Unmodifiable' and 'org.jetbrains.annotations.UnmodifiableView' annotations. Use them to extend the inspection to your own unmodifiable collection wrappers. New in 2020.3", + "markdown": "Reports redundant calls to unmodifiable collection wrappers from the `Collections` class.\n\nIf the argument that is passed to an unmodifiable\ncollection wrapper is already immutable, such a wrapping becomes redundant.\n\nExample:\n\n\n List x = Collections.unmodifiableList(Collections.singletonList(\"abc\"));\n\nAfter the quick-fix is applied:\n\n\n List x = Collections.singletonList(\"abc\");\n\nIn order to detect the methods that return unmodifiable collections, the\ninspection uses the `org.jetbrains.annotations.Unmodifiable`\nand `org.jetbrains.annotations.UnmodifiableView` annotations.\nUse them to extend the inspection to your own unmodifiable collection\nwrappers.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantUnmodifiable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantValue", + "shortDescription": { + "text": "Constant values" + }, + "fullDescription": { + "text": "Reports expressions and conditions that always produce the same result, like true, false, null, or zero. Such expressions could be replaced with the corresponding constant value. Very often though they signal about a bug in the code. Examples: '// always true\n // root cause: || is used instead of &&\n if (x > 0 || x < 10) {}\n\n System.out.println(str.trim());\n // always false\n // root cause: variable was dereferenced before null-check\n if (str == null) {}' The inspection behavior may be controlled by a number of annotations, such as nullability annotations, '@Contract' annotation, '@Range' annotation and so on. Configure the inspection: Use the Don't report assertions with condition statically proven to be always true option to avoid reporting assertions that were statically proven to be always true. This also includes conditions like 'if (alwaysFalseCondition) throw new IllegalArgumentException();'. Use the Ignore assert statements option to control how the inspection treats 'assert' statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode). Use the Warn when constant is stored in variable option to display warnings when variable is used, whose value is known to be a constant. Before IntelliJ IDEA 2022.3, this inspection was part of \"Constant Conditions & Exceptions\" inspection. Now, it split into two inspections: \"Constant Values\" and \"Nullability and data flow problems\".", + "markdown": "Reports expressions and conditions that always produce the same result, like true, false, null, or zero. Such expressions could be replaced with the corresponding constant value. Very often though they signal about a bug in the code.\n\nExamples:\n\n // always true\n // root cause: || is used instead of &&\n if (x > 0 || x < 10) {}\n\n System.out.println(str.trim());\n // always false\n // root cause: variable was dereferenced before null-check\n if (str == null) {}\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Don't report assertions with condition statically proven to be always true** option to avoid reporting assertions that were statically proven to be always true. This also includes conditions like `if (alwaysFalseCondition) throw new IllegalArgumentException();`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Warn when constant is stored in variable** option to display warnings when variable is used, whose value is known to be a constant.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of \"Constant Conditions \\& Exceptions\" inspection. Now, it split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantValue", + "cweIds": [ + 570, + 571 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastCanBeReplacedWithVariable", + "shortDescription": { + "text": "Cast can be replaced with variable" + }, + "fullDescription": { + "text": "Reports type cast operations that can be replaced with existing local or pattern variables with the same value. Example: 'void foo(Object obj) {\n String s = (String) obj;\n System.out.println(((String) obj).trim());\n }' After the quick-fix is applied: 'void foo(Object obj) {\n String s = (String) obj;\n System.out.println(s.trim());\n }' New in 2022.3", + "markdown": "Reports type cast operations that can be replaced with existing local or pattern variables with the same value.\n\nExample:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(((String) obj).trim());\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(s.trim());\n }\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CastCanBeReplacedWithVariable", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2Diamond", + "shortDescription": { + "text": "Explicit type can be replaced with '<>'" + }, + "fullDescription": { + "text": "Reports 'new' expressions with type arguments that can be replaced a with diamond type '<>'. Example: 'List list = new ArrayList(); // reports array list type argument' After the quick-fix is applied: 'List list = new ArrayList<>();' This inspection depends on the Java feature 'Diamond types' which is available since Java 7.", + "markdown": "Reports `new` expressions with type arguments that can be replaced a with diamond type `<>`.\n\nExample:\n\n\n List list = new ArrayList(); // reports array list type argument\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n\nThis inspection depends on the Java feature 'Diamond types' which is available since Java 7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Convert2Diamond", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 159, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VarargParameter", + "shortDescription": { + "text": "Varargs method" + }, + "fullDescription": { + "text": "Reports methods that accept an arbitrary number of parameters (also known as varargs methods). Example: 'enum EnumConstants {\n A(null), B, C;\n\n EnumConstants(String... ss) {}\n}' A quick-fix is available to replace a variable argument parameter with an equivalent array parameter. Relevant arguments in method calls are wrapped in an array initializer expression. After the quick-fix is applied: 'enum EnumConstants {\n A(null), B(new String[]{}), C(new String[]{});\n\n EnumConstants(String[] ss) {}\n}' Varargs method appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports methods that accept an arbitrary number of parameters (also known as varargs methods).\n\n**Example:**\n\n\n enum EnumConstants {\n A(null), B, C;\n\n EnumConstants(String... ss) {}\n }\n\nA quick-fix is available to replace a variable argument\nparameter with an equivalent array parameter. Relevant arguments in method calls are wrapped in an array initializer expression.\nAfter the quick-fix is applied:\n\n\n enum EnumConstants {\n A(null), B(new String[]{}), C(new String[]{});\n\n EnumConstants(String[] ss) {}\n }\n\n\n*Varargs method* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "VariableArgumentMethod", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 145, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayLengthInLoopCondition", + "shortDescription": { + "text": "Array.length in loop condition" + }, + "fullDescription": { + "text": "Reports accesses to the '.length' property of an array in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'void foo(Object[] x) {\n for (int i = 0; i < x.length; i++) { /**/ }\n }'", + "markdown": "Reports accesses to the `.length` property of an array in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo(Object[] x) {\n for (int i = 0; i < x.length; i++) { /**/ }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ArrayLengthInLoopCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckForOutOfMemoryOnLargeArrayAllocation", + "shortDescription": { + "text": "Large array allocation with no OutOfMemoryError check" + }, + "fullDescription": { + "text": "Reports large array allocations which do not check for 'java.lang.OutOfMemoryError'. In memory constrained environments, allocations of large data objects should probably be checked for memory depletion. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Use the option to specify the maximum number of elements to allow in unchecked array allocations.", + "markdown": "Reports large array allocations which do not check for `java.lang.OutOfMemoryError`. In memory constrained environments, allocations of large data objects should probably be checked for memory depletion.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in unchecked array allocations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckForOutOfMemoryOnLargeArrayAllocation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 169, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutConstructor", + "shortDescription": { + "text": "Class without constructor" + }, + "fullDescription": { + "text": "Reports classes without constructors. Some coding standards prohibit such classes.", + "markdown": "Reports classes without constructors.\n\nSome coding standards prohibit such classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithoutConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 139, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageInfoWithoutPackage", + "shortDescription": { + "text": "'package-info.java' without 'package' statement" + }, + "fullDescription": { + "text": "Reports 'package-info.java' files without a 'package' statement. The Javadoc tool considers such files documentation for the default package even when the file is located somewhere else.", + "markdown": "Reports `package-info.java` files without a `package` statement.\n\n\nThe Javadoc tool considers such files documentation for the default package even when the file is located somewhere else." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageInfoWithoutPackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 78, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableWithSerializationMethods", + "shortDescription": { + "text": "Non-serializable class with 'readObject()' or 'writeObject()'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' classes that define 'readObject()' or 'writeObject()' methods. Such methods in that context normally indicate an error. Example: 'public class SampleClass {\n private void readObject(ObjectInputStream str) {}\n private void writeObject(ObjectOutputStream str) {}\n }'", + "markdown": "Reports non-`Serializable` classes that define `readObject()` or `writeObject()` methods. Such methods in that context normally indicate an error.\n\n**Example:**\n\n\n public class SampleClass {\n private void readObject(ObjectInputStream str) {}\n private void writeObject(ObjectOutputStream str) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonSerializableClassWithSerializationMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneReturnsClassType", + "shortDescription": { + "text": "'clone()' should have return type equal to the class it contains" + }, + "fullDescription": { + "text": "Reports 'clone()' methods with return types different from the class they're located in. Often a 'clone()' method will have a return type of 'java.lang.Object', which makes it harder to use by its clients. Effective Java (the second and third editions) recommends making the return type of the 'clone()' method the same as the class type of the object it returns. Example: 'class Foo implements Cloneable {\n public Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }' After the quick-fix is applied: 'class Foo implements Cloneable {\n public Foo clone() {\n try {\n return (Foo)super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }'", + "markdown": "Reports `clone()` methods with return types different from the class they're located in.\n\nOften a `clone()` method will have a return type of `java.lang.Object`, which makes it harder to use by its clients.\n*Effective Java* (the second and third editions) recommends making the return type of the `clone()` method the same as the\nclass type of the object it returns.\n\n**Example:**\n\n\n class Foo implements Cloneable {\n public Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Cloneable {\n public Foo clone() {\n try {\n return (Foo)super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CloneReturnsClassType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 116, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalToIf", + "shortDescription": { + "text": "'Optional' can be replaced with sequence of 'if' statements" + }, + "fullDescription": { + "text": "Reports 'Optional' call chains that can be replaced with a sequence of 'if' statements. Example: 'return Optional.ofNullable(name)\n .map(this::extractInitials)\n .map(initials -> initials.toUpperCase(Locale.ENGLISH))\n .orElseGet(this::getDefault);' After the quick-fix is applied: 'if (name != null) {\n String initials = extractInitials(name);\n if (initials != null) return initials.toUpperCase(Locale.ENGLISH);\n }\n return getDefault();' This inspection can help to downgrade for backward compatibility with earlier Java versions. This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8. New in 2020.2", + "markdown": "Reports `Optional` call chains that can be replaced with a sequence of `if` statements.\n\nExample:\n\n\n return Optional.ofNullable(name)\n .map(this::extractInitials)\n .map(initials -> initials.toUpperCase(Locale.ENGLISH))\n .orElseGet(this::getDefault);\n\nAfter the quick-fix is applied:\n\n\n if (name != null) {\n String initials = extractInitials(name);\n if (initials != null) return initials.toUpperCase(Locale.ENGLISH);\n }\n return getDefault();\n\n\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "OptionalToIf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IllegalDependencyOnInternalPackage", + "shortDescription": { + "text": "Illegal dependency on internal package" + }, + "fullDescription": { + "text": "Reports references in modules without 'module-info.java' on packages which are not exported from named modules. Such configuration may occur when some modules in the project are already migrated to Java modules but others are still non-modular. By analogy to the JDK, such non-modular code should not get access to the code in named modules which is not explicitly exported.", + "markdown": "Reports references in modules without `module-info.java` on packages which are not exported from named modules.\n\nSuch configuration may occur when some modules in the project are already migrated to Java modules but others are still non-modular.\nBy analogy to the JDK, such non-modular code should not get access to the code in named modules which is not explicitly exported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "IllegalDependencyOnInternalPackage", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalMethodWithoutRoundingCalled", + "shortDescription": { + "text": "Call to 'BigDecimal' method without a rounding mode argument" + }, + "fullDescription": { + "text": "Reports calls to 'divide()' or 'setScale()' without a rounding mode argument. Such calls can lead to an 'ArithmeticException' when the exact value cannot be represented in the result (for example, because it has a non-terminating decimal expansion). Specifying a rounding mode prevents the 'ArithmeticException'. Example: 'BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3));'", + "markdown": "Reports calls to `divide()` or `setScale()` without a rounding mode argument.\n\nSuch calls can lead to an `ArithmeticException` when the exact value cannot be represented in the result\n(for example, because it has a non-terminating decimal expansion).\n\nSpecifying a rounding mode prevents the `ArithmeticException`.\n\n**Example:**\n\n\n BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3));\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "BigDecimalMethodWithoutRoundingCalled", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexArithmeticExpression", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports arithmetic expressions with the excessive number of terms. Such expressions might be hard to understand and might contain errors. Parameters, field references, and other primary expressions are counted as a term. Example: 'int calc(int a, int b) {\n return a + a + a + b + b + b + b; // The line contains 7 terms and will be reported.\n }' Use the field below to specify a number of terms allowed in arithmetic expressions.", + "markdown": "Reports arithmetic expressions with the excessive number of terms. Such expressions might be hard to understand and might contain errors.\n\nParameters, field references, and other primary expressions are counted as a term.\n\n**Example:**\n\n int calc(int a, int b) {\n return a + a + a + b + b + b + b; // The line contains 7 terms and will be reported.\n }\n\nUse the field below to specify a number of terms allowed in arithmetic expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexArithmeticExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 31, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DriverManagerGetConnection", + "shortDescription": { + "text": "Use of 'DriverManager' to get JDBC connection" + }, + "fullDescription": { + "text": "Reports any uses of 'java.sql.DriverManager' to acquire a JDBC connection. 'java.sql.DriverManager' has been superseded by 'javax.sql.Datasource', which allows for connection pooling and other optimizations. Example: 'Connection conn = DriverManager.getConnection(url, username, password);'", + "markdown": "Reports any uses of `java.sql.DriverManager` to acquire a JDBC connection.\n\n\n`java.sql.DriverManager`\nhas been superseded by `javax.sql.Datasource`, which\nallows for connection pooling and other optimizations.\n\n**Example:**\n\n Connection conn = DriverManager.getConnection(url, username, password);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToDriverManagerGetConnection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 134, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadDumpStack", + "shortDescription": { + "text": "Call to 'Thread.dumpStack()'" + }, + "fullDescription": { + "text": "Reports usages of 'Thread.dumpStack()'. Such statements are often used for temporary debugging and should be either removed from the production code or replaced with a more robust logging facility.", + "markdown": "Reports usages of `Thread.dumpStack()`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallToThreadDumpStack", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBlockStatement", + "shortDescription": { + "text": "Unnecessary code block" + }, + "fullDescription": { + "text": "Reports code blocks that are redundant to the semantics of the program and can be replaced with their contents. The code blocks that are the bodies of 'if', 'do', 'while', or 'for' statements will not be reported by this inspection. Example: 'void foo() {\n { // unnecessary\n int result = call();\n analyze(result);\n } // unnecessary\n }' Configure the inspection: Use the Ignore branches of 'switch' statements option to ignore the code blocks that are used as branches of switch statements.", + "markdown": "Reports code blocks that are redundant to the semantics of the program and can be replaced with their contents.\n\nThe code blocks that are the bodies of `if`, `do`,\n`while`, or `for` statements will not be reported by this\ninspection.\n\nExample:\n\n\n void foo() {\n { // unnecessary\n int result = call();\n analyze(result);\n } // unnecessary\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore branches of 'switch' statements** option to ignore the code blocks that are used as branches of switch statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UnnecessaryCodeBlock", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalMethodInFinalClass", + "shortDescription": { + "text": "'final' method in 'final' class" + }, + "fullDescription": { + "text": "Reports 'final' methods in 'final' classes. Since 'final' classes cannot be inherited, marking a method as 'final' may be unnecessary and confusing. Example: 'record Bar(int a, int b) {\n public final int sum() { \n return a + b;\n }\n}'\n After the quick-fix is applied: 'record Bar(int a, int b) {\n public int sum() { \n return a + b;\n }\n}' As shown in the example, a class can be marked as 'final' explicitly or implicitly.", + "markdown": "Reports `final` methods in `final` classes.\n\nSince `final` classes cannot be inherited, marking a method as `final`\nmay be unnecessary and confusing.\n\n**Example:**\n\n record Bar(int a, int b) {\n public final int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n public int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalMethodInFinalClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalPrivateMethod", + "shortDescription": { + "text": "'private' method declared 'final'" + }, + "fullDescription": { + "text": "Reports methods that are marked with both 'final' and 'private' keywords. Since 'private' methods cannot be meaningfully overridden because of their visibility, declaring them 'final' is redundant.", + "markdown": "Reports methods that are marked with both `final` and `private` keywords.\n\nSince `private` methods cannot be meaningfully overridden because of their visibility, declaring them\n`final` is redundant." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FinalPrivateMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnboxing", + "shortDescription": { + "text": "Unnecessary unboxing" + }, + "fullDescription": { + "text": "Reports unboxing, that is explicit unwrapping of wrapped primitive values. Unboxing is unnecessary as of Java 5 and later, and can safely be removed. Examples: 'Integer i = Integer.valueOf(42).intValue();' → 'Integer i = Integer.valueOf(42);' 'int k = Integer.valueOf(42).intValue();' → 'int k = Integer.valueOf(42);' (reports only when the Only report truly superfluously unboxed expressions option is not checked) Use the Only report truly superfluously unboxed expressions option to only report truly superfluous unboxing, where an unboxed value is immediately boxed either implicitly or explicitly. In this case, the entire unboxing-boxing step can be removed. The inspection doesn't report simple explicit unboxing. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports unboxing, that is explicit unwrapping of wrapped primitive values.\n\nUnboxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = Integer.valueOf(42).intValue();` → `Integer i = Integer.valueOf(42);`\n* `int k = Integer.valueOf(42).intValue();` → `int k = Integer.valueOf(42);`\n\n (reports only when the **Only report truly superfluously unboxed expressions** option is not checked)\n\n\nUse the **Only report truly superfluously unboxed expressions** option to only report truly superfluous unboxing,\nwhere an unboxed value is immediately boxed either implicitly or explicitly.\nIn this case, the entire unboxing-boxing step can be removed. The inspection doesn't report simple explicit unboxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryUnboxing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 120, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentOrReturnOfFieldWithMutableType", + "shortDescription": { + "text": "Assignment or return of field with mutable type" + }, + "fullDescription": { + "text": "Reports return of, or assignment from a method parameter to an array or a mutable type like 'Collection', 'Date', 'Map', 'Calendar', etc. Because such types are mutable, this construct may result in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for performance reasons, it is inherently prone to bugs. The following mutable types are reported: 'java.util.Date' 'java.util.Calendar' 'java.util.Collection' 'java.util.Map' 'com.google.common.collect.Multimap' 'com.google.common.collect.Table' The quick-fix adds a call to the field's '.clone()' method. Example: 'class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages; // warning: Return of String[] field 'messages'\n }\n }' After the quick-fix is applied: 'class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages.clone();\n }\n }' Use the Ignore assignments in and returns from private methods option to ignore assignments and returns in 'private' methods.", + "markdown": "Reports return of, or assignment from a method parameter to an array or a mutable type like `Collection`, `Date`, `Map`, `Calendar`, etc.\n\nBecause such types are mutable, this construct may\nresult in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for\nperformance reasons, it is inherently prone to bugs.\n\nThe following mutable types are reported:\n\n* `java.util.Date`\n* `java.util.Calendar`\n* `java.util.Collection`\n* `java.util.Map`\n* `com.google.common.collect.Multimap`\n* `com.google.common.collect.Table`\n\nThe quick-fix adds a call to the field's `.clone()` method.\n\n**Example:**\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages; // warning: Return of String[] field 'messages'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages.clone();\n }\n }\n\nUse the **Ignore assignments in and returns from private methods** option to ignore assignments and returns in `private` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentOrReturnOfFieldWithMutableType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 126, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalAssignedToNull", + "shortDescription": { + "text": "Null value for Optional type" + }, + "fullDescription": { + "text": "Reports 'null' assigned to 'Optional' variable or returned from method returning 'Optional'. It's recommended that you use 'Optional.empty()' (or 'Optional.absent()' for Guava) to denote an empty value. Example: 'Optional foo(boolean flag) {\n return flag ? Optional.of(42) : null;\n }' After the quick-fix is applied: 'Optional foo(boolean flag) {\n return flag ? Optional.of(42) : Optional.empty();\n }' Configure the inspection: Use the Report comparison of Optional with null option to also report comparisons like 'optional == null'. While in rare cases (e.g. lazily initialized optional field) this might be correct, optional variable is usually never null, and probably 'optional.isPresent()' was intended. New in 2017.2 This inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8.", + "markdown": "Reports `null` assigned to `Optional` variable or returned from method returning `Optional`.\n\nIt's recommended that you use `Optional.empty()` (or `Optional.absent()` for Guava) to denote an empty value.\n\nExample:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : null;\n }\n\nAfter the quick-fix is applied:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : Optional.empty();\n }\n\nConfigure the inspection:\n\n\nUse the **Report comparison of Optional with null** option to also report comparisons like `optional == null`. While in rare cases (e.g. lazily initialized\noptional field) this might be correct, optional variable is usually never null, and probably `optional.isPresent()` was\nintended.\n\nNew in 2017.2\n\nThis inspection depends on the Java feature 'Stream and Optional API' which is available since Java 8." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OptionalAssignedToNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessIndexOfComparison", + "shortDescription": { + "text": "Pointless 'indexOf()' comparison" + }, + "fullDescription": { + "text": "Reports unnecessary comparisons with '.indexOf()' expressions. An example of such an expression is comparing the result of '.indexOf()' with numbers smaller than -1.", + "markdown": "Reports unnecessary comparisons with `.indexOf()` expressions. An example of such an expression is comparing the result of `.indexOf()` with numbers smaller than -1." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessIndexOfComparison", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IteratorHasNextCallsIteratorNext", + "shortDescription": { + "text": "'Iterator.hasNext()' which calls 'next()'" + }, + "fullDescription": { + "text": "Reports implementations of 'Iterator.hasNext()' or 'ListIterator.hasPrevious()' that call 'Iterator.next()' or 'ListIterator.previous()' on the iterator instance. Such calls are almost certainly an error, as methods like 'hasNext()' should not modify the iterators state, while 'next()' should. Example: 'class MyIterator implements Iterator {\n public boolean hasNext() {\n return next() != null;\n }\n }'", + "markdown": "Reports implementations of `Iterator.hasNext()` or `ListIterator.hasPrevious()` that call `Iterator.next()` or `ListIterator.previous()` on the iterator instance. Such calls are almost certainly an error, as methods like `hasNext()` should not modify the iterators state, while `next()` should.\n\n**Example:**\n\n\n class MyIterator implements Iterator {\n public boolean hasNext() {\n return next() != null;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "IteratorHasNextCallsIteratorNext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsAndHashcode", + "shortDescription": { + "text": "'equals()' and 'hashCode()' not paired" + }, + "fullDescription": { + "text": "Reports classes that override the 'equals()' method but do not override the 'hashCode()' method or vice versa, which can potentially lead to problems when the class is added to a 'Collection' or a 'HashMap'. The quick-fix generates the default implementation for an absent method. Example: 'class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n}' After the quick-fix is applied: 'class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (!(o instanceof StringHolder)) return false;\n\n StringHolder holder = (StringHolder)o;\n\n if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n return true;\n }\n}'", + "markdown": "Reports classes that override the `equals()` method but do not override the `hashCode()` method or vice versa, which can potentially lead to problems when the class is added to a `Collection` or a `HashMap`.\n\nThe quick-fix generates the default implementation for an absent method.\n\nExample:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (!(o instanceof StringHolder)) return false;\n\n StringHolder holder = (StringHolder)o;\n\n if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n return true;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EqualsAndHashcode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringRepeatCanBeUsed", + "shortDescription": { + "text": "String.repeat() can be used" + }, + "fullDescription": { + "text": "Reports loops that can be replaced with a single 'String.repeat()' method (available since Java 11). Example: 'void append(StringBuilder sb, int count, Object obj) {\n for (int i = 0; i < count; i++) {\n sb.append(obj);\n }\n }' After the quick-fix is applied: 'void append(StringBuilder sb, int count, Object obj) {\n sb.append(String.valueOf(obj).repeat(Math.max(0, count)));\n }' By default, the inspection may wrap 'count' with 'Math.max(0, count)' if it cannot prove statically that 'count' is not negative. This is done to prevent possible semantics change, as 'String.repeat()' rejects negative numbers. Use the Add Math.max(0,count) to avoid possible semantics change option to disable this behavior if required. Similarly, a string you want to repeat can be wrapped in 'String.valueOf' to prevent possible 'NullPointerException' if it's unknown whether it can be 'null'. This inspection only reports if the language level of the project or module is 11 or higher. New in 2019.1", + "markdown": "Reports loops that can be replaced with a single `String.repeat()` method (available since Java 11).\n\n**Example:**\n\n\n void append(StringBuilder sb, int count, Object obj) {\n for (int i = 0; i < count; i++) {\n sb.append(obj);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void append(StringBuilder sb, int count, Object obj) {\n sb.append(String.valueOf(obj).repeat(Math.max(0, count)));\n }\n\n\nBy default, the inspection may wrap `count` with `Math.max(0, count)` if it cannot prove statically that `count` is\nnot negative. This is done to prevent possible semantics change, as `String.repeat()` rejects negative numbers.\nUse the **Add Math.max(0,count) to avoid possible semantics change** option to disable this behavior if required.\n\nSimilarly, a string you want to repeat can be wrapped in\n`String.valueOf` to prevent possible `NullPointerException` if it's unknown whether it can be `null`.\n\nThis inspection only reports if the language level of the project or module is 11 or higher.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StringRepeatCanBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 11", + "index": 176, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MathRoundingWithIntArgument", + "shortDescription": { + "text": "Call math rounding with 'int' argument" + }, + "fullDescription": { + "text": "Reports calls to 'round()', 'ceil()', 'floor()', 'rint()' methods for 'Math' and 'StrictMath' with 'int' as the argument. These methods could be called in case the argument is expected to be 'long' or 'double', and it may have unexpected results. The inspection provides a fix that simplify such expressions (except 'round') to cast to 'double'. Example: 'int i = 2;\n double d1 = Math.floor(i);' After the quick-fix is applied: 'int i = 2;\n double d1 = i;' New in 2023.1", + "markdown": "Reports calls to `round()`, `ceil()`, `floor()`, `rint()` methods for `Math` and `StrictMath` with `int` as the argument.\n\nThese methods could be called in case the argument is expected to be `long` or `double`, and it may have unexpected results.\n\nThe inspection provides a fix that simplify such expressions (except `round`) to cast to `double`.\n\n**Example:**\n\n\n int i = 2;\n double d1 = Math.floor(i);\n\nAfter the quick-fix is applied:\n\n\n int i = 2;\n double d1 = i;\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MathRoundingWithIntArgument", + "cweIds": [ + 681 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnStaticField", + "shortDescription": { + "text": "Synchronization on 'static' field" + }, + "fullDescription": { + "text": "Reports synchronization on 'static' fields. While not strictly incorrect, synchronization on 'static' fields can lead to bad performance because of contention.", + "markdown": "Reports synchronization on `static` fields. While not strictly incorrect, synchronization on `static` fields can lead to bad performance because of contention." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SynchronizationOnStaticField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithConfusingDeclaration", + "shortDescription": { + "text": "Local variable used and declared in different 'switch' branches" + }, + "fullDescription": { + "text": "Reports local variables declared in one branch of a 'switch' statement and used in another branch. Such declarations can be extremely confusing. Example: 'switch(i) {\n case 2:\n int x = 0;\n break;\n case 3:\n x = 3;\n System.out.println(x);\n break;\n }'", + "markdown": "Reports local variables declared in one branch of a `switch` statement and used in another branch. Such declarations can be extremely confusing.\n\nExample:\n\n\n switch(i) {\n case 2:\n int x = 0;\n break;\n case 3:\n x = 3;\n System.out.println(x);\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "LocalVariableUsedAndDeclaredInDifferentSwitchBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldMayBeFinal", + "shortDescription": { + "text": "Field may be 'final'" + }, + "fullDescription": { + "text": "Reports fields that can be safely made 'final'. All 'final' fields have a value and this value does not change, which can make the code easier to reason about. To avoid too expensive analysis, this inspection only reports if the field has a 'private' modifier or it is defined in a local or anonymous class. A field can be 'final' if: It is 'static' and initialized once in its declaration or in one 'static' initializer. It is non-'static' and initialized once in its declaration, in one instance initializer or in every constructor And it is not modified anywhere else. Example: 'public class Person {\n private String name; // can be final\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }' After the quick-fix is applied: 'public class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }' Use the \"Annotations\" button to modify the list of annotations that assume implicit field write.", + "markdown": "Reports fields that can be safely made `final`. All `final` fields have a value and this value does not change, which can make the code easier to reason about.\n\nTo avoid too expensive analysis, this inspection only reports if the field has a `private` modifier\nor it is defined in a local or anonymous class.\nA field can be `final` if:\n\n* It is `static` and initialized once in its declaration or in one `static` initializer.\n* It is non-`static` and initialized once in its declaration, in one instance initializer or in every constructor\n\nAnd it is not modified anywhere else.\n\n**Example:**\n\n\n public class Person {\n private String name; // can be final\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n\n\nUse the \"Annotations\" button to modify the list of annotations that assume implicit field write." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldMayBeFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousArrayMethodCall", + "shortDescription": { + "text": "Suspicious 'Arrays' method call" + }, + "fullDescription": { + "text": "Reports calls to non-generic-array manipulation methods like 'Arrays.fill()' with mismatched argument types. Such calls don't do anything useful and are likely to be mistakes. Example: 'int foo(String[] strings) {\n return Arrays.binarySearch(strings, 1);\n }' New in 2017.2", + "markdown": "Reports calls to non-generic-array manipulation methods like `Arrays.fill()` with mismatched argument types. Such calls don't do anything useful and are likely to be mistakes.\n\n**Example:**\n\n\n int foo(String[] strings) {\n return Arrays.binarySearch(strings, 1);\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousArrayMethodCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassHasNoToStringMethod", + "shortDescription": { + "text": "Class does not override 'toString()' method" + }, + "fullDescription": { + "text": "Reports classes without a 'toString()' method.", + "markdown": "Reports classes without a `toString()` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassHasNoToStringMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/toString() issues", + "index": 201, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldAccessNotGuarded", + "shortDescription": { + "text": "Unguarded field access or method call" + }, + "fullDescription": { + "text": "Reports accesses of fields declared as '@GuardedBy' that are not guarded by an appropriate synchronization structure. Example: '@GuardedBy(\"this\")\n void x() {\n notify();\n }\n void y() {\n x(); // unguarded method call\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports accesses of fields declared as `@GuardedBy` that are not guarded by an appropriate synchronization structure.\n\nExample:\n\n\n @GuardedBy(\"this\")\n void x() {\n notify();\n }\n void y() {\n x(); // unguarded method call\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FieldAccessNotGuarded", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 101, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicStaticArrayField", + "shortDescription": { + "text": "'public static' array field" + }, + "fullDescription": { + "text": "Reports 'public' 'static' array fields. Such fields are often used to store arrays of constant values. Still, they represent a security hazard, as their contents may be modified, even if the field is declared 'final'. Example: 'public static String[] allowedPasswords = {\"foo\", \"bar\"};'", + "markdown": "Reports `public` `static` array fields.\n\n\nSuch fields are often used to store arrays of constant values. Still, they represent a security\nhazard, as their contents may be modified, even if the field is declared `final`.\n\n**Example:**\n\n\n public static String[] allowedPasswords = {\"foo\", \"bar\"};\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicStaticArrayField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 38, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicNumber", + "shortDescription": { + "text": "Magic number" + }, + "fullDescription": { + "text": "Reports \"magic numbers\": numeric literals that are not named by a constant declaration. Using magic numbers can lead to unclear code, as well as errors if a magic number is changed in one location but remains unchanged not another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0L, 1L, 2L, 0.0, 1.0, 0.0F and 1.0F are not reported by this inspection. Example: 'void checkFileSize(long bytes) {\n if (bytes > 1_048_576) {\n throw new IllegalArgumentException(\"too big\");\n }\n }' A quick-fix introduces a new constant: 'static final int MAX_SUPPORTED_FILE_SIZE = 1_048_576;\n\n void checkFileSize(long bytes) {\n if (bytes > MAX_SUPPORTED_FILE_SIZE) {\n throw new IllegalArgumentException(\"too big\");\n }\n }' Configure the inspection: Use the Ignore constants in 'hashCode()' methods option to disable this inspection within 'hashCode()' methods. Use the Ignore in annotations option to ignore magic numbers in annotations. Use the Ignore initial capacity for StringBuilders and Collections option to ignore magic numbers used as initial capacity when constructing 'Collection', 'Map', 'StringBuilder' or 'StringBuffer' objects.", + "markdown": "Reports \"magic numbers\": numeric literals that are not named by a constant declaration.\n\nUsing magic numbers can lead to unclear code, as well as errors if a magic\nnumber is changed in one location but remains unchanged not another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0L, 1L, 2L,\n0.0, 1.0, 0.0F and 1.0F are not reported by this inspection.\n\nExample:\n\n\n void checkFileSize(long bytes) {\n if (bytes > 1_048_576) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nA quick-fix introduces a new constant:\n\n\n static final int MAX_SUPPORTED_FILE_SIZE = 1_048_576;\n\n void checkFileSize(long bytes) {\n if (bytes > MAX_SUPPORTED_FILE_SIZE) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore constants in 'hashCode()' methods** option to disable this inspection within `hashCode()` methods.\n* Use the **Ignore in annotations** option to ignore magic numbers in annotations.\n* Use the **Ignore initial capacity for StringBuilders and Collections** option to ignore magic numbers used as initial capacity when constructing `Collection`, `Map`, `StringBuilder` or `StringBuffer` objects." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MagicNumber", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 86, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumSwitchStatementWhichMissesCases", + "shortDescription": { + "text": "Enum 'switch' statement that misses case" + }, + "fullDescription": { + "text": "Reports 'switch' statements over enumerated types that are not exhaustive. Example: 'enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n\n }\n }\n }' After the quick-fix is applied: 'enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n case A -> {}\n case B -> {}\n case C -> {}\n }\n }\n }' Use the Ignore switch statements with a default branch option to ignore 'switch' statements that have a 'default' branch. This inspection depends on the Java feature 'Enums' which is available since Java 5.", + "markdown": "Reports `switch` statements over enumerated types that are not exhaustive.\n\n**Example:**\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n case A -> {}\n case B -> {}\n case C -> {}\n }\n }\n }\n\n\nUse the **Ignore switch statements with a default branch** option to ignore `switch`\nstatements that have a `default` branch.\n\n\nThis inspection depends on the Java feature 'Enums' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EnumSwitchStatementWhichMissesCases", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousIntegerDivAssignment", + "shortDescription": { + "text": "Suspicious integer division assignment" + }, + "fullDescription": { + "text": "Reports assignments whose right side is a division that shouldn't be truncated to integer. While occasionally intended, this construction is often buggy. Example: 'int x = 18;\n x *= 3/2; // doesn't change x because of the integer division result' This code should be replaced with: 'int x = 18;\n x *= 3.0/2;' In the inspection options, you can disable warnings for suspicious but possibly correct divisions, for example, when the dividend can't be calculated statically. 'void calc(int d) {\n int x = 18;\n x *= d/2;\n }' New in 2019.2", + "markdown": "Reports assignments whose right side is a division that shouldn't be truncated to integer.\n\nWhile occasionally intended, this construction is often buggy.\n\n**Example:**\n\n\n int x = 18;\n x *= 3/2; // doesn't change x because of the integer division result\n\n\nThis code should be replaced with:\n\n\n int x = 18;\n x *= 3.0/2;\n\n\nIn the inspection options, you can disable warnings for suspicious but possibly correct divisions,\nfor example, when the dividend can't be calculated statically.\n\n\n void calc(int d) {\n int x = 18;\n x *= d/2;\n }\n\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousIntegerDivAssignment", + "cweIds": [ + 682 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegativelyNamedBooleanVariable", + "shortDescription": { + "text": "Negatively named boolean variable" + }, + "fullDescription": { + "text": "Reports negatively named variables, for example: 'disabled', 'hidden', or 'isNotChanged'. Usually, inverting the 'boolean' value and removing the negation from the name makes the code easier to understand. Example: 'boolean disabled = false;'", + "markdown": "Reports negatively named variables, for example: `disabled`, `hidden`, or `isNotChanged`.\n\nUsually, inverting the `boolean` value and removing the negation from the name makes the code easier to understand.\n\nExample:\n\n\n boolean disabled = false;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegativelyNamedBooleanVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 65, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodWithMultipleLoops", + "shortDescription": { + "text": "Method with multiple loops" + }, + "fullDescription": { + "text": "Reports methods that contain more than one loop statement. Example: The method below will be reported because it contains two loops: 'void methodWithTwoLoops(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n System.out.println(i);\n }\n\n int j = 0;\n while (j < n2) {\n System.out.println(j);\n j++;\n }\n }' The following method will also be reported because it contains a nested loop: 'void methodWithNestedLoop(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n for (int j = 0; j < n2; j++) {\n System.out.println(i + j);\n }\n }\n }'", + "markdown": "Reports methods that contain more than one loop statement.\n\n**Example:**\n\nThe method below will be reported because it contains two loops:\n\n\n void methodWithTwoLoops(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n System.out.println(i);\n }\n\n int j = 0;\n while (j < n2) {\n System.out.println(j);\n j++;\n }\n }\n\nThe following method will also be reported because it contains a nested loop:\n\n\n void methodWithNestedLoop(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n for (int j = 0; j < n2; j++) {\n System.out.println(i + j);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodWithMultipleLoops", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 133, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SleepWhileHoldingLock", + "shortDescription": { + "text": "Call to 'Thread.sleep()' while synchronized" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' methods that occur within a 'synchronized' block or method. 'sleep()' within a 'synchronized' block may result in decreased performance, poor scalability, and possibly even deadlocking. Consider using 'wait()' instead, as it will release the lock held. Example: 'synchronized (lock) {\n Thread.sleep(100);\n }'", + "markdown": "Reports calls to `java.lang.Thread.sleep()` methods that occur within a `synchronized` block or method.\n\n\n`sleep()` within a\n`synchronized` block may result in decreased performance, poor scalability, and possibly\neven deadlocking. Consider using `wait()` instead,\nas it will release the lock held.\n\n**Example:**\n\n\n synchronized (lock) {\n Thread.sleep(100);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SleepWhileHoldingLock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 29, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedClassUsageInspection", + "shortDescription": { + "text": "Deprecated API usage in XML" + }, + "fullDescription": { + "text": "Reports usages of deprecated classes and methods in XML files.", + "markdown": "Reports usages of deprecated classes and methods in XML files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedClassUsageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodReturnAlwaysConstant", + "shortDescription": { + "text": "Method returns per-class constant" + }, + "fullDescription": { + "text": "Reports methods that only return a constant, which may differ for various inheritors. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports methods that only return a constant, which may differ for various inheritors.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MethodReturnAlwaysConstant", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateBranchesInSwitch", + "shortDescription": { + "text": "Duplicate branches in 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions that contain the same code in different branches and suggests merging the duplicate branches. Example: 'switch (n) {\n case 1:\n System.out.println(n);\n break;\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }' After the quick-fix is applied: 'switch (n) {\n case 1:\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }' New in 2019.1", + "markdown": "Reports `switch` statements or expressions that contain the same code in different branches and suggests merging the duplicate branches.\n\nExample:\n\n\n switch (n) {\n case 1:\n System.out.println(n);\n break;\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DuplicateBranchesInSwitch", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleElementAnnotation", + "shortDescription": { + "text": "Non-normalized annotation" + }, + "fullDescription": { + "text": "Reports annotations in a shorthand form and suggests rewriting them in a normal form with an attribute name. Example: '@SuppressWarnings(\"foo\")' After the quick-fix is applied: '@SuppressWarnings(value = \"foo\")'", + "markdown": "Reports annotations in a shorthand form and suggests rewriting them in a normal form with an attribute name.\n\nExample:\n\n\n @SuppressWarnings(\"foo\")\n\nAfter the quick-fix is applied:\n\n\n @SuppressWarnings(value = \"foo\")\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SingleElementAnnotation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualMinMaxCalculation", + "shortDescription": { + "text": "Manual min/max calculation" + }, + "fullDescription": { + "text": "Reports cases where the minimum or the maximum of two numbers can be calculated using a 'Math.max()' or 'Math.min()' call, instead of doing it manually. Example: 'public int min(int a, int b) {\n return b < a ? b : a;\n }' After the quick-fix is applied: 'public int min(int a, int b) {\n return Math.min(a, b);\n }' Use the Disable for float and double option to disable this inspection for 'double' and 'float' types. This is useful because the quick-fix may slightly change the semantics for 'float'/ 'double' types when handling 'NaN'. Nevertheless, in most cases this will actually fix a subtle bug where 'NaN' is not taken into account. New in 2019.2", + "markdown": "Reports cases where the minimum or the maximum of two numbers can be calculated using a `Math.max()` or `Math.min()` call, instead of doing it manually.\n\n**Example:**\n\n\n public int min(int a, int b) {\n return b < a ? b : a;\n }\n\nAfter the quick-fix is applied:\n\n\n public int min(int a, int b) {\n return Math.min(a, b);\n }\n\n\nUse the **Disable for float and double** option to disable this inspection for `double` and `float` types.\nThis is useful because the quick-fix may slightly change the semantics for `float`/\n`double` types when handling `NaN`. Nevertheless, in most cases this will actually fix\na subtle bug where `NaN` is not taken into account.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ManualMinMaxCalculation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SillyAssignment", + "shortDescription": { + "text": "Variable is assigned to itself" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself. Example: 'a = a;' The quick-fix removes the assigment.", + "markdown": "Reports assignments of a variable to itself.\n\n**Example:**\n\n\n a = a;\n\nThe quick-fix removes the assigment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SillyAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 13, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoundedWildcard", + "shortDescription": { + "text": "Can use bounded wildcard" + }, + "fullDescription": { + "text": "Reports generic method parameters that can make use of bounded wildcards. Example: 'void process(Consumer consumer);' should be replaced with: 'void process(Consumer consumer);' This method signature is more flexible because it accepts more types: not only 'Consumer', but also 'Consumer'. Likewise, type parameters in covariant position: 'T produce(Producer p);' should be replaced with: 'T produce(Producer p);' To quote Joshua Bloch in Effective Java third Edition: Item 31: Use bounded wildcards to increase API flexibility Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers. Use the inspection options to toggle the reporting for: invariant classes. An example of an invariant class is 'java.util.List' because it both accepts values (via the 'List.add(T)' method) and produces values (via the 'T List.get()' method). On the other hand, 'contravariant' classes only receive values, for example, 'java.util.function.Consumer' with the only method 'accept(T)'. Similarly, 'covariant' classes only produce values, for example, 'java.util.function.Supplier' with the only method 'T get()'. People often use bounded wildcards in covariant/contravariant classes but avoid wildcards in invariant classes, for example, 'void process(List l)'. Disable this option to ignore such invariant classes and leave them rigidly typed, for example, 'void process(List l)'. 'private' methods, which can be considered as not a part of the public API instance methods", + "markdown": "Reports generic method parameters that can make use of [bounded wildcards](https://en.wikipedia.org/wiki/Wildcard_(Java)).\n\n**Example:**\n\n\n void process(Consumer consumer);\n\nshould be replaced with:\n\n\n void process(Consumer consumer);\n\n\nThis method signature is more flexible because it accepts more types: not only\n`Consumer`, but also `Consumer`.\n\nLikewise, type parameters in covariant position:\n\n\n T produce(Producer p);\n\nshould be replaced with:\n\n\n T produce(Producer p);\n\n\nTo quote [Joshua Bloch](https://en.wikipedia.org/wiki/Joshua_Bloch#Effective_Java) in *Effective Java* third Edition:\n>\n> #### Item 31: Use bounded wildcards to increase API flexibility\n>\n> Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers.\n\n\nUse the inspection options to toggle the reporting for:\n\n*\n invariant classes. An example of an invariant class is `java.util.List` because it both accepts values\n (via the `List.add(T)` method)\n and produces values (via the `T List.get()` method).\n\n\n On the\n other hand, `contravariant` classes only receive values, for example, `java.util.function.Consumer`\n with the only method `accept(T)`. Similarly, `covariant` classes\n only produce values, for example, `java.util.function.Supplier`\n with the only method `T get()`.\n\n\n People often use bounded wildcards in covariant/contravariant\n classes but avoid wildcards in invariant classes, for example, `void process(List l)`.\n Disable this option to ignore such invariant classes and leave them rigidly typed, for example, `void\n process(List l)`.\n*\n `private` methods, which can be considered as not a part of the public API\n\n*\n instance methods" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BoundedWildcard", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 11, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceVariableInitialization", + "shortDescription": { + "text": "Instance field may not be initialized" + }, + "fullDescription": { + "text": "Reports instance variables that may be uninitialized upon object initialization. Example: 'class Foo {\n public int bar;\n\n static { }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports instance variables that may be uninitialized upon object initialization.\n\n**Example:**\n\n\n class Foo {\n public int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InstanceVariableMayNotBeInitialized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 33, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithTooManyBranches", + "shortDescription": { + "text": "'if' statement with too many branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with too many branches. Such statements may be confusing and are often a sign of inadequate levels of design abstraction. Use the Maximum number of branches field to specify the maximum number of branches an 'if' statement is allowed to have.", + "markdown": "Reports `if` statements with too many branches.\n\nSuch statements may be confusing and are often a sign of inadequate levels of design\nabstraction.\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches an `if` statement is allowed to have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementWithTooManyBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableObjectPassedToObjectStream", + "shortDescription": { + "text": "Non-serializable object passed to 'ObjectOutputStream'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' objects used as arguments to 'java.io.ObjectOutputStream.write()'. Such calls will result in runtime exceptions. This inspection assumes objects of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless the types they are declared in are non-'Serializable'. Example: 'public class IWantToSerializeThis {\n public static void main(String[] args) throws IOException {\n try(var stream = new ObjectOutputStream(Files.newOutputStream(Paths.get(\"output\")))) {\n // Warning -- will fail with NotSerializableException\n stream.writeObject(new IWantToSerializeThis());\n }\n }\n }'", + "markdown": "Reports non-`Serializable` objects used as arguments to `java.io.ObjectOutputStream.write()`. Such calls will result in runtime exceptions.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n public static void main(String[] args) throws IOException {\n try(var stream = new ObjectOutputStream(Files.newOutputStream(Paths.get(\"output\")))) {\n // Warning -- will fail with NotSerializableException\n stream.writeObject(new IWantToSerializeThis());\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonSerializableObjectPassedToObjectStream", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 21, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfObsoleteDateTimeApi", + "shortDescription": { + "text": "Use of obsolete date-time API" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Date', 'java.util.Calendar', 'java.util.GregorianCalendar', 'java.util.TimeZone', and 'java.util.SimpleTimeZone'. While still supported, these classes were made obsolete by the JDK8 Date-Time API and should probably not be used in new development.", + "markdown": "Reports usages of `java.util.Date`, `java.util.Calendar`, `java.util.GregorianCalendar`, `java.util.TimeZone`, and `java.util.SimpleTimeZone`.\n\nWhile still supported, these classes were made obsolete by the JDK8 Date-Time API and should probably\nnot be used in new development." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfObsoleteDateTimeApi", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 56, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullArgumentToVariableArgMethod", + "shortDescription": { + "text": "Confusing argument to varargs method" + }, + "fullDescription": { + "text": "Reports calls to variable arity methods that have a single argument in the vararg parameter position, which is either a 'null' or an array of a subtype of the vararg parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired. Example: 'String[] ss = new String[]{\"foo\", \"bar\"};\n System.out.printf(\"%s\", ss);' In this example only the first element of the array will be printed, not the entire array. This inspection depends on the Java feature 'Variable arity methods' which is available since Java 5.", + "markdown": "Reports calls to variable arity methods that have a single argument in the vararg parameter position, which is either a `null` or an array of a subtype of the vararg parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired.\n\n**Example:**\n\n\n String[] ss = new String[]{\"foo\", \"bar\"};\n System.out.printf(\"%s\", ss);\n\nIn this example only the first element of the array will be printed, not the entire array.\n\nThis inspection depends on the Java feature 'Variable arity methods' which is available since Java 5." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingArgumentToVarargsMethod", + "cweIds": [ + 628 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 15, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ModuleWithTooFewClasses", + "shortDescription": { + "text": "Module with too few classes" + }, + "fullDescription": { + "text": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum number of classes a module may have.", + "markdown": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum number of classes a module may have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ModuleWithTooFewClasses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 77, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverloadedVarargsMethod", + "shortDescription": { + "text": "Overloaded varargs method" + }, + "fullDescription": { + "text": "Reports varargs methods with the same name as other methods in the class or in a superclass. Overloaded methods that take a variable number of arguments can be very confusing because it is often unclear which overload gets called. Example: 'public void execute(Runnable... r) {} // warning\n public void execute(Runnable r1, Runnable r2) {}' Use the option to ignore overloaded methods whose parameter types are definitely incompatible.", + "markdown": "Reports varargs methods with the same name as other methods in the class or in a superclass. Overloaded methods that take a variable number of arguments can be very confusing because it is often unclear which overload gets called.\n\n**Example:**\n\n\n public void execute(Runnable... r) {} // warning\n public void execute(Runnable r1, Runnable r2) {}\n\n\nUse the option to ignore overloaded methods whose parameter types are definitely incompatible." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverloadedVarargsMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 109, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousInnerClassMayBeStatic", + "shortDescription": { + "text": "Anonymous class may be a named 'static' inner class" + }, + "fullDescription": { + "text": "Reports anonymous classes that may be safely replaced with 'static' inner classes. An anonymous class may be a 'static' inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method. A 'static' inner class does not keep an implicit reference to its enclosing instance. This prevents a common cause of memory leaks and uses less memory per class instance. Since Java 18, only serializable anonymous classes keep an implicit reference to its enclosing instance, if this reference is not used. So, if module language level is Java 18 or higher, this inspection reports serializable classes only. The quick-fix extracts the anonymous class into a named 'static' inner class. Example: 'void sample() {\n Thread thread = new Thread(new Runnable() {\n @Override\n public void run() {\n }\n });\n }' After the quick-fix is applied: 'void sample() {\n Thread thread = new Thread(new Task());\n }\n\n private static class Task implements Runnable {\n @Override\n public void run() {\n }\n }'", + "markdown": "Reports anonymous classes that may be safely replaced with `static` inner classes. An anonymous class may be a `static` inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method.\n\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per class instance.\n\n\nSince Java 18, only serializable anonymous classes keep an implicit reference to its enclosing instance,\nif this reference is not used. So, if module language level is Java 18 or higher,\nthis inspection reports serializable classes only.\n\nThe quick-fix extracts the anonymous class into a named `static` inner class.\n\n**Example:**\n\n\n void sample() {\n Thread thread = new Thread(new Runnable() {\n @Override\n public void run() {\n }\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void sample() {\n Thread thread = new Thread(new Task());\n }\n\n private static class Task implements Runnable {\n @Override\n public void run() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousInnerClassMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 164, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicConstructor", + "shortDescription": { + "text": "'public' constructor can be replaced with factory method" + }, + "fullDescription": { + "text": "Reports 'public' constructors. Some coding standards discourage the use of 'public' constructors and recommend 'static' factory methods instead. This way the implementation can be swapped out without affecting the call sites. Example: 'class Test {\n private String name;\n\n public Test(String name) {\n this.name = name;\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n new Test(\"str\").test();\n }\n }' After quick-fix is applied: 'class Test {\n private String name;\n\n private Test(String name) {\n this.name = name;\n }\n\n public static Test getInstance(String name) {\n return new Test(name);\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n getInstance(\"str\").test();\n }\n }'", + "markdown": "Reports `public` constructors.\n\nSome coding standards discourage the use of `public` constructors and recommend\n`static` factory methods instead.\nThis way the implementation can be swapped out without affecting the call sites.\n\n**Example:**\n\n\n class Test {\n private String name;\n\n public Test(String name) {\n this.name = name;\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n new Test(\"str\").test();\n }\n }\n\nAfter quick-fix is applied:\n\n\n class Test {\n private String name;\n\n private Test(String name) {\n this.name = name;\n }\n\n public static Test getInstance(String name) {\n return new Test(name);\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n getInstance(\"str\").test();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PublicConstructor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEmbeddedExpression", + "shortDescription": { + "text": "Redundant embedded expression in string template" + }, + "fullDescription": { + "text": "Reports redundant embedded expressions in 'STR' templates, such as trivial literals or empty expressions. Example: 'System.out.println(STR.\"Hello \\{\"world\"}\");' After the quick-fix is applied: 'System.out.println(STR.\"Hello world\");' This inspection depends on the Java feature 'String templates' which is available since Java 21-preview. New in 2023.3", + "markdown": "Reports redundant embedded expressions in `STR` templates, such as trivial literals or empty expressions.\n\nExample:\n\n\n System.out.println(STR.\"Hello \\{\"world\"}\");\n\nAfter the quick-fix is applied:\n\n\n System.out.println(STR.\"Hello world\");\n\nThis inspection depends on the Java feature 'String templates' which is available since Java 21-preview.\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantEmbeddedExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithTooFewBranches", + "shortDescription": { + "text": "Minimum 'switch' branches" + }, + "fullDescription": { + "text": "Reports 'switch' statements and expressions with too few 'case' labels, and suggests rewriting them as 'if' and 'else if' statements. Example (minimum branches == 3): 'switch (expression) {\n case \"foo\" -> foo();\n case \"bar\" -> bar();\n }' After the quick-fix is applied: 'if (\"foo\".equals(expression)) {\n foo();\n } else if (\"bar\".equals(expression)) {\n bar();\n }' Exhaustive switch expressions (Java 14+) or pattern switch statements (Java 17 preview) without the 'default' branch are not reported. That's because compile-time exhaustiveness check will be lost when the 'switch' is converted to 'if' which might be undesired. Configure the inspection: Use the Minimum number of branches field to specify the minimum expected number of 'case' labels. Use the Do not report pattern switch statements option to avoid reporting switch statements and expressions that have pattern branches. E.g.: 'String result = switch(obj) {\n case String str -> str.trim();\n default -> \"none\";\n };' It might be preferred to keep the switch even with a single pattern branch, rather than using the 'instanceof' statement.", + "markdown": "Reports `switch` statements and expressions with too few `case` labels, and suggests rewriting them as `if` and `else if` statements.\n\nExample (minimum branches == 3):\n\n\n switch (expression) {\n case \"foo\" -> foo();\n case \"bar\" -> bar();\n }\n\nAfter the quick-fix is applied:\n\n\n if (\"foo\".equals(expression)) {\n foo();\n } else if (\"bar\".equals(expression)) {\n bar();\n }\n\nExhaustive switch expressions (Java 14+) or pattern switch statements (Java 17 preview) without the 'default' branch are not reported.\nThat's because compile-time exhaustiveness check will be lost when the `switch` is converted to `if`\nwhich might be undesired.\n\nConfigure the inspection:\n\nUse the **Minimum number of branches** field to specify the minimum expected number of `case` labels.\n\nUse the **Do not report pattern switch statements** option to avoid reporting switch statements and expressions that\nhave pattern branches. E.g.:\n\n\n String result = switch(obj) {\n case String str -> str.trim();\n default -> \"none\";\n };\n\nIt might be preferred to keep the switch even with a single pattern branch, rather than using the `instanceof` statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SwitchStatementWithTooFewBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsagesOfObsoleteApi", + "shortDescription": { + "text": "Usages of ApiStatus.@Obsolete" + }, + "fullDescription": { + "text": "Reports declarations (classes, methods, fields) annotated as '@ApiStatus.Obsolete'. Sometimes it's impossible to delete the current API, though it might not work correctly, there is a newer, or better, or more generic API. This way, it's a weaker variant of '@Deprecated' annotation. The annotated API is not supposed to be used in the new code, but it's permitted to postpone the migration of the existing code, therefore the usage is not considered a warning.", + "markdown": "Reports declarations (classes, methods, fields) annotated as `@ApiStatus.Obsolete`.\n\n\nSometimes it's impossible to delete the current API, though it might not work correctly, there is a newer, or better, or more generic API.\nThis way, it's a weaker variant of `@Deprecated` annotation.\nThe annotated API is not supposed to be used in the new code, but it's permitted to postpone the migration of the existing code,\ntherefore the usage is not considered a warning." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UsagesOfObsoleteApi", + "ideaSeverity": "TEXT ATTRIBUTES", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantDeclaredInInterface", + "shortDescription": { + "text": "Constant declared in interface" + }, + "fullDescription": { + "text": "Reports constants ('public static final' fields) declared in interfaces. Some coding standards require declaring constants in abstract classes instead.", + "markdown": "Reports constants (`public static final` fields) declared in interfaces.\n\nSome coding standards require declaring constants in abstract classes instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantDeclaredInInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 20, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoExplicitFinalizeCalls", + "shortDescription": { + "text": "'finalize()' called explicitly" + }, + "fullDescription": { + "text": "Reports calls to 'Object.finalize()'. Calling 'Object.finalize()' explicitly may result in objects being placed in an inconsistent state. The garbage collector automatically calls this method on an object when it determines that there are no references to this object. The inspection doesn't report calls to 'super.finalize()' from within implementations of 'finalize()' as they're benign. Example: 'MyObject m = new MyObject();\n m.finalize();\n System.gc()'", + "markdown": "Reports calls to `Object.finalize()`.\n\nCalling `Object.finalize()` explicitly may result in objects being placed in an\ninconsistent state.\nThe garbage collector automatically calls this method on an object when it determines that there are no references to this object.\n\nThe inspection doesn't report calls to `super.finalize()` from within implementations of `finalize()` as\nthey're benign.\n\n**Example:**\n\n\n MyObject m = new MyObject();\n m.finalize();\n System.gc()\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "FinalizeCalledExplicitly", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 75, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticImport", + "shortDescription": { + "text": "Static import" + }, + "fullDescription": { + "text": "Reports 'import static' statements. Such 'import' statements are not supported under Java 1.4 or earlier JVMs. Configure the inspection: Use the table below to specify the classes that will be ignored by the inspection when used in an 'import static' statement. Use the Ignore single field static imports checkbox to ignore single-field 'import static' statements. Use the Ignore single method static imports checkbox to ignore single-method 'import static' statements.", + "markdown": "Reports `import static` statements.\n\nSuch `import` statements are not supported under Java 1.4 or earlier JVMs.\n\nConfigure the inspection:\n\n* Use the table below to specify the classes that will be ignored by the inspection when used in an `import static` statement.\n* Use the **Ignore single field static imports** checkbox to ignore single-field `import static` statements.\n* Use the **Ignore single method static imports** checkbox to ignore single-method `import static` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 24, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNullCheck", + "shortDescription": { + "text": "Null check can be replaced with method call" + }, + "fullDescription": { + "text": "Reports 'null' checks that can be replaced with a call to a static method from 'Objects' or 'Stream'. Example: 'if (message == null) {\n application.messageStorage().save(new EmptyMessage());\n } else {\n application.messageStorage().save(message);\n }' After the quick-fix is applied: 'application.messageStorage()\n .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));' Use the Don't warn if the replacement is longer than the original option to ignore the cases when the replacement is longer than the original code. New in 2017.3", + "markdown": "Reports `null` checks that can be replaced with a call to a static method from `Objects` or `Stream`.\n\n**Example:**\n\n\n if (message == null) {\n application.messageStorage().save(new EmptyMessage());\n } else {\n application.messageStorage().save(message);\n }\n\nAfter the quick-fix is applied:\n\n\n application.messageStorage()\n .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));\n\n\nUse the **Don't warn if the replacement is longer than the original** option to ignore the cases when the replacement is longer than the\noriginal code.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReplaceNullCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 88, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedIfElse", + "shortDescription": { + "text": "'if' statement with negated condition" + }, + "fullDescription": { + "text": "Reports 'if' statements that contain 'else' branches and whose conditions are negated. Flipping the order of the 'if' and 'else' branches usually increases the clarity of such statements. There is a fix that inverts the current 'if' statement. Example: 'void m(Object o1, Object o2) {\n if (o1 != o2) {\n System.out.println(1);\n }\n else {\n System.out.println(2);\n }\n }' After applying the quick-fix: 'void m(Object o1, Object o2) {\n if (o1 == o2) {\n System.out.println(2);\n } else {\n System.out.println(1);\n }\n }' Use the Ignore '!= null' comparisons option to ignore comparisons of the '!= null' form. Use the Ignore '!= 0' comparisons option to ignore comparisons of the '!= 0' form.", + "markdown": "Reports `if` statements that contain `else` branches and whose conditions are negated.\n\nFlipping the order of the `if` and `else`\nbranches usually increases the clarity of such statements.\n\nThere is a fix that inverts the current `if` statement.\n\nExample:\n\n\n void m(Object o1, Object o2) {\n if (o1 != o2) {\n System.out.println(1);\n }\n else {\n System.out.println(2);\n }\n }\n\nAfter applying the quick-fix:\n\n\n void m(Object o1, Object o2) {\n if (o1 == o2) {\n System.out.println(2);\n } else {\n System.out.println(1);\n }\n }\n\nUse the **Ignore '!= null' comparisons** option to ignore comparisons of the `!= null` form.\n\nUse the **Ignore '!= 0' comparisons** option to ignore comparisons of the `!= 0` form." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementWithNegatedCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 30, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldCount", + "shortDescription": { + "text": "Class with too many fields" + }, + "fullDescription": { + "text": "Reports classes whose number of fields exceeds the specified maximum. Classes with a large number of fields are often trying to do too much. Consider splitting such a class into multiple smaller classes. Configure the inspection: Use the Field count limit field to specify the maximum allowed number of fields in a class. Use the Include constant fields in count option to indicate whether constant fields should be counted. By default only immutable 'static final' objects are counted as constants. Use the 'static final' fields count as constant option to count any 'static final' field as constant. Use the Include enum constants in count option to specify whether 'enum' constants in 'enum' classes should be counted.", + "markdown": "Reports classes whose number of fields exceeds the specified maximum.\n\nClasses with a large number of fields are often trying to do too much. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Field count limit** field to specify the maximum allowed number of fields in a class.\n* Use the **Include constant fields in count** option to indicate whether constant fields should be counted.\n* By default only immutable `static final` objects are counted as constants. Use the **'static final' fields count as constant** option to count any `static final` field as constant.\n* Use the **Include enum constants in count** option to specify whether `enum` constants in `enum` classes should be counted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClassWithTooManyFields", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 124, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring", + "version": "241.17569", + "rules": [ + { + "id": "SpringBeanConstructorArgInspection", + "shortDescription": { + "text": "Incorrect constructor injection in XML Spring bean" + }, + "fullDescription": { + "text": "Reports Spring '' using constructor-based dependency injection. The inspection triggers when it can't find an appropriate constructor or factory method for '' with the configured '' tags and defined 'autowire' policy. Example: 'public class MyComponent {\n // constructor\n public MyComponent(MyBean bean) {}\n // factory method\n public static MyComponent getInstance(String name, int port) {\n }' '\n \n \n \n \n\n \n \n \n '", + "markdown": "Reports Spring `` using constructor-based dependency injection.\n\nThe inspection triggers when it can't find an appropriate constructor or factory method for `` with the configured\n`` tags and defined `autowire` policy.\n\n**Example:**\n\n\n public class MyComponent {\n // constructor\n public MyComponent(MyBean bean) {}\n // factory method\n public static MyComponent getInstance(String name, int port) {\n }\n\n\n \n \n \n \n \n\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringBeanConstructorArgInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringTestingSqlInspection", + "shortDescription": { + "text": "Invalid @Sql and @SqlGroup configurations" + }, + "fullDescription": { + "text": "Reports unresolved file references in the 'scripts' attributes of the @Sql annotation and the corresponding aliased attributes of the '@Sql' meta annotations. Example: '@SqlGroup({\n @Sql(\"not-found\"), // reports \"Cannot resolve file 'not-found\"\n @Sql(\"found.sql\")\n })\n public class MyTestWithSqlData {...}'", + "markdown": "Reports unresolved file references in the `scripts` attributes of the\n[@Sql](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/jdbc/Sql.html)\nannotation and the corresponding aliased attributes of the `@Sql` meta annotations.\n\n**Example:**\n\n\n @SqlGroup({\n @Sql(\"not-found\"), // reports \"Cannot resolve file 'not-found\"\n @Sql(\"found.sql\")\n })\n public class MyTestWithSqlData {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringTestingSqlInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringJavaAutowiredFieldsWarningInspection", + "shortDescription": { + "text": "Non recommended 'field' injections" + }, + "fullDescription": { + "text": "Reports injected or autowired fields in Spring components. The quick-fix suggests the recommended constructor-based dependency injection in beans and assertions for mandatory fields. Example: 'class MyComponent {\n @Inject MyCollaborator collaborator; // injected field\n\n public void myBusinessMethod() {\n collaborator.doSomething(); // throws NullPointerException\n }\n}' After applying the quick-fix: 'class MyComponent {\n\n private final MyCollaborator collaborator;\n\n @Inject\n public MyComponent(MyCollaborator collaborator) {\n Assert.notNull(collaborator, \"MyCollaborator must not be null!\");\n this.collaborator = collaborator;\n }\n\n public void myBusinessMethod() {\n collaborator.doSomething(); // now this call is safe\n }\n}'", + "markdown": "Reports injected or autowired fields in Spring components.\n\nThe quick-fix suggests the recommended constructor-based dependency injection in beans\nand assertions for mandatory fields.\n\n**Example:**\n\n\n class MyComponent {\n @Inject MyCollaborator collaborator; // injected field\n\n public void myBusinessMethod() {\n collaborator.doSomething(); // throws NullPointerException\n }\n }\n\nAfter applying the quick-fix:\n\n\n class MyComponent {\n\n private final MyCollaborator collaborator;\n\n @Inject\n public MyComponent(MyCollaborator collaborator) {\n Assert.notNull(collaborator, \"MyCollaborator must not be null!\");\n this.collaborator = collaborator;\n }\n\n public void myBusinessMethod() {\n collaborator.doSomething(); // now this call is safe\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "SpringJavaAutowiredFieldsWarningInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBeanInstantiationInspection", + "shortDescription": { + "text": "Invalid non-abstract bean instantiation" + }, + "fullDescription": { + "text": "Reports instantiation errors on interface/abstract class declarations. Example: '\n \n \n '", + "markdown": "Reports instantiation errors on interface/abstract class **\\** declarations.\n\n**Example:**\n\n\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringBeanInstantiationInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RequiredBeanTypeInspection", + "shortDescription": { + "text": "Incorrect injected bean type" + }, + "fullDescription": { + "text": "Reports incorrect types of custom schema bean injections defined in the XML application context. Example: 'public class SimpleBean{}' '\n \n \n message-codes-resolver=\"simpleBean\" \n validator=\"simpleBean\" \n />\n '", + "markdown": "Reports incorrect types of custom schema bean injections defined in the XML application context.\n\n**Example:**\n\n\n public class SimpleBean{}\n\n\n \n \n \n message-codes-resolver=\"simpleBean\" \n validator=\"simpleBean\" \n />\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RequiredBeanTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContextComponentScanInconsistencyInspection", + "shortDescription": { + "text": "Invalid filter definition in XML-based component scans" + }, + "fullDescription": { + "text": "Reports inconsistent definitions in of XML application contexts. Example: 'public class NonAnnotationTypeClass {}' '\n \n \n \n ' In this example, 'NonAnnotationTypeClass' is expected to be an annotation type.", + "markdown": "Reports inconsistent **\\** definitions in **\\** of XML application contexts.\n\n**Example:**\n\n\n public class NonAnnotationTypeClass {}\n\n\n \n \n \n \n \n\nIn this example, `NonAnnotationTypeClass` is expected to be an annotation type." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "ContextComponentScanInconsistencyInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilSchemaInspection", + "shortDescription": { + "text": "Incorrectly configured 'util' schema beans defined in XML application context" + }, + "fullDescription": { + "text": "Reports incorrect schema beans defined in XML application contexts. '\n \n \n // reports \"Class must be inheritor of 'java.util.List'\"\n \n \n // reports \"Cannot be added in collection of 'MyBean' type\"\n \n '", + "markdown": "Reports incorrect [schema beans](https://www.springframework.org/schema/util) defined in XML application contexts.\n\n\n \n \n \n // reports \"Class must be inheritor of 'java.util.List'\"\n \n \n // reports \"Cannot be added in collection of 'MyBean' type\"\n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "UtilSchemaInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringContextConfigurationInspection", + "shortDescription": { + "text": "Invalid @ContextConfiguration" + }, + "fullDescription": { + "text": "Reports incorrect Spring context configurations. Unresolved files and directories in 'locations' attributes and corresponding aliased attributes of '@ContextConfiguration' meta annotations Missing default application context file For more information, see @ContextConfiguration. Example: '@ContextConfiguration(locations = \"classpath:META-INF/unknown-context.xml\") // reports \"Cannot resolve file 'unknown-context.xml'\"\n class MyTests {...}'", + "markdown": "Reports incorrect Spring context configurations.\n\n* Unresolved files and directories in `locations` attributes and corresponding aliased attributes of `@ContextConfiguration` meta annotations\n* Missing default application context file\n\nFor more information, see [@ContextConfiguration](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/ContextConfiguration.html).\n\n**Example:**\n\n\n @ContextConfiguration(locations = \"classpath:META-INF/unknown-context.xml\") // reports \"Cannot resolve file 'unknown-context.xml'\"\n class MyTests {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringContextConfigurationInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringScopesInspection", + "shortDescription": { + "text": "Unknown scope" + }, + "fullDescription": { + "text": "Reports unknown values of the 'scope' attribute in '' elements. Example: '\n \n \n \n \n\n\n\n \n \n \n \n \n \n \n \n \n \n'", + "markdown": "Reports incorrect aspects and pointcuts.\nWhen some AOP advice matches an aspect bean, it can lead to runtime errors.\n\n**Example:**\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringAopWarningsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring AOP", + "index": 132, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringRequiredAnnotationInspection", + "shortDescription": { + "text": "@Required Spring bean property is not injected" + }, + "fullDescription": { + "text": "Reports '@Required' setter bean properties that are not injected or autowired. Example: '\n \n \n' 'public class MyComponent {\n @Required\n public void setPort(int port) // reports \"Required property 'port' is not injected\"\n {...}\n}'", + "markdown": "Reports `@Required` setter bean properties that are not injected or autowired.\n\n**Example:**\n\n\n \n \n \n \n\n\n public class MyComponent {\n @Required\n public void setPort(int port) // reports \"Required property 'port' is not injected\"\n {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringRequiredAnnotationInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCacheableComponentsInspection", + "shortDescription": { + "text": "Incorrectly configured 'caching' annotation" + }, + "fullDescription": { + "text": "Reports incorrect 'caching' annotations: '@Cacheable', '@CacheEvict', '@CachePut', '@CacheConfig', and so on. Example: '@org.springframework.stereotype.Component\npublic class MyCacheManager implements CacheManager {...}\n\npublic class MyConfiguration {\n @Cacheable(value = \"a\",\n cacheResolver =\"myCacheManager\") // reports \"Bean must be of 'org.springframework.cache.interceptor.CacheResolver' type\"\n public String getCache(String isbn) {...}\n\n @Cacheable(value = \"abc\",\n private String getAbc() // reports \"Caching annotations should be defined on public methods\"\n {...}\n}'", + "markdown": "Reports incorrect 'caching' annotations: `@Cacheable`, `@CacheEvict`, `@CachePut`, `@CacheConfig`, and so on.\n\n**Example:**\n\n\n @org.springframework.stereotype.Component\n public class MyCacheManager implements CacheManager {...}\n\n public class MyConfiguration {\n @Cacheable(value = \"a\",\n cacheResolver =\"myCacheManager\") // reports \"Bean must be of 'org.springframework.cache.interceptor.CacheResolver' type\"\n public String getCache(String isbn) {...}\n\n @Cacheable(value = \"abc\",\n private String getAbc() // reports \"Caching annotations should be defined on public methods\"\n {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringCacheableComponentsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringFactoryMethodInspection", + "shortDescription": { + "text": "Incorrectly defined method referenced in \"factory-method\" attribute" + }, + "fullDescription": { + "text": "Reports incorrect method references in the 'factory-method' attribute of the '' element. Example: 'public class MyFactory {\npublic static FooBean createBean() {}\n}' '\n \n \n'", + "markdown": "Reports incorrect method references in the `factory-method` attribute of the `` element.\n\n**Example:**\n\n\n public class MyFactory {\n public static FooBean createBean() {}\n }\n\n\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringFactoryMethodInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringComponentScan", + "shortDescription": { + "text": "Invalid package in @ComponentScan or its meta annotation" + }, + "fullDescription": { + "text": "Reports unresolved packages in @ComponentScan annotations and corresponding aliased attributes of '@ComponentScan' meta annotations. Example: '@ComponentScan(basePackages = {\n \"com.my.company\",\n \"com.unknown\" // reports \"'Cannot resolve package 'unknown'\"\n }) +\n @Configuration +\n public class MyConfiguration {}'", + "markdown": "Reports unresolved packages in\n[@ComponentScan](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html)\nannotations and corresponding aliased attributes of `@ComponentScan` meta annotations. \n\n**Example:**\n\n\n @ComponentScan(basePackages = {\n \"com.my.company\",\n \"com.unknown\" // reports \"'Cannot resolve package 'unknown'\"\n }) +\n @Configuration +\n public class MyConfiguration {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringComponentScan", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ScheduledMethodInspection", + "shortDescription": { + "text": "Incorrect @Scheduled method signature" + }, + "fullDescription": { + "text": "Reports incorrect @Scheduled methods. According to Spring Documentation, methods to be scheduled must return void and must not expect any arguments. If the method needs to interact with other objects from the Application Context, they should be provided through dependency injection.", + "markdown": "Reports incorrect [@Scheduled](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html) methods.\n\nAccording to Spring Documentation, methods to be scheduled must return void and must not expect any arguments.\nIf the method needs to interact with other objects from the Application Context,\nthey should be provided through dependency injection." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ScheduledMethodInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringLookupInjectionInspection", + "shortDescription": { + "text": "Incorrectly referenced bean in @Lookup annotation of Spring component" + }, + "fullDescription": { + "text": "Reports incorrect bean references in the 'value' parameter of the @Lookup annotation. Example: '@Component public class FooBean {...}\n @Component public class OtherBean {...}\n\n @Component public class MyComponent {\n @Lookup(\"fooBean\")\n public FooBean fooBean() {...}\n\n @Lookup(\"fooBean\") // reports \"Bean must be of 'OtherBean' type\"\n public OtherBean otherBean() {...}\n\n @Lookup(\"unknown\") // reports \"Cannot resolve bean 'unknown'\"\n public OtherBean fooBean() {...}\n }'", + "markdown": "Reports incorrect bean references in the `value` parameter of the\n[@Lookup](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Lookup.html)\nannotation.\n\n**Example:**\n\n\n @Component public class FooBean {...}\n @Component public class OtherBean {...}\n\n @Component public class MyComponent {\n @Lookup(\"fooBean\")\n public FooBean fooBean() {...}\n\n @Lookup(\"fooBean\") // reports \"Bean must be of 'OtherBean' type\"\n public OtherBean otherBean() {...}\n\n @Lookup(\"unknown\") // reports \"Cannot resolve bean 'unknown'\"\n public OtherBean fooBean() {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringLookupInjectionInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringTestingTransactionalInspection", + "shortDescription": { + "text": "Invalid transactional lifecycle method declaration" + }, + "fullDescription": { + "text": "Reports invalid transactional lifecycle method declarations annotated with @BeforeTransaction and @AfterTransaction in testing classes annotated as @Transactional. Annotated methods must have no arguments and no return type. Example: '@ContextConfiguration\n @Transactional\n public class AbstractShowcaseTest {\n @BeforeTransaction // Expected method return type is 'void'\n public boolean setupData() {...}\n\n @AfterTransaction // Wrong number of arguments\n public void disposeData(boolean a) throws Exception {...}\n }'", + "markdown": "Reports invalid transactional lifecycle method declarations annotated with\n[@BeforeTransaction](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/transaction/BeforeTransaction.html)\nand [@AfterTransaction](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/transaction/AfterTransaction.html)\nin testing classes annotated as\n[@Transactional](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html).\n\nAnnotated methods must have no arguments and no return type.\n\n**Example:**\n\n\n @ContextConfiguration\n @Transactional\n public class AbstractShowcaseTest {\n @BeforeTransaction // Expected method return type is 'void'\n public boolean setupData() {...}\n\n @AfterTransaction // Wrong number of arguments\n public void disposeData(boolean a) throws Exception {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringTestingTransactionalInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AsyncMethodInspection", + "shortDescription": { + "text": "Incorrect @Async method signature" + }, + "fullDescription": { + "text": "Reports incorrect return types of @Async methods. For target method signatures, any parameter types are allowed. However, the return type should be either 'void' or Future. It is also possible to return the more specific ListenableFuture or CompletableFuture types, which allow for richer interaction with the asynchronous task and for immediate composition with further processing steps.", + "markdown": "Reports incorrect return types of [@Async](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Async.html) methods.\n\nFor target method signatures, any parameter types are allowed.\nHowever, the return type should be either `void` or [Future](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html).\nIt is also possible to return the more specific [ListenableFuture](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/concurrent/ListenableFuture.html) or [CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html) types,\nwhich allow for richer interaction with the asynchronous task and for immediate composition with further processing steps." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "AsyncMethodInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringXmlModelInspection", + "shortDescription": { + "text": "Incorrect Spring Core XML-based application context" + }, + "fullDescription": { + "text": "Reports issues with the Spring Framework XML-based application context: Unresolved bean references Missing required tags or attributes Incorrect property types Inconsistent 'enum' properties Incorrect types of referenced beans", + "markdown": "Reports issues with the [Spring Framework](https://spring.io/projects/spring-framework) XML-based application context:\n\n* Unresolved bean references\n* Missing required tags or attributes\n* Incorrect property types\n* Inconsistent `enum` properties\n* Incorrect types of referenced beans" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringXmlModelInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringTransactionalMethodCallsInspection", + "shortDescription": { + "text": "@Transactional self-invocation method calls" + }, + "fullDescription": { + "text": "Using @Transactional: In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) does not lead to an actual transaction at runtime even if the invoked method is marked with @Transactional.", + "markdown": "[Using\n@Transactional](https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#transaction-declarative-annotations): In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) does not lead to an actual transaction at runtime even if the invoked method is marked with @Transactional." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringTransactionalMethodCallsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringJavaInjectionPointsAutowiringInspection", + "shortDescription": { + "text": "Incorrect autowiring in Spring bean components" + }, + "fullDescription": { + "text": "Reports autowiring problems on injection points of Spring beans @Component, @Service, and so on. More than one bean of 'concrete' type No beans of 'concrete' type No bean with qualifier Incorrect usages of '@Autowired' on Spring bean constructors Injected or autowired fields/methods in classes that are not valid Spring beans Example: 'public interface FooInterface {...}\n @Component public class FooBean implements FooInterface {...}\n @Component public class OtherBean implements FooInterface {...}\n\n@Component\npublic class MyComponent {\n\t@Autowired\n\tFooInterface foo; // \"Could not autowire. There is more than one bean of 'FooInterface' type.\n // Beans: fooBean(FooBean.java), otherBean(OtherBean.java)\"\n}' Example: '@Component\npublic class MyComponent {\n\t@Autowired\n\tpublic MyComponent(BarBean bean) {...} // reports 'Only one @Autowired constructor is allowed'\n\n\t@Autowired\n\tpublic MyComponent(FooBean bean) {...} // reports 'Only one @Autowired constructor is allowed'\n}\n\n@Component\npublic class MyFactory { // reports ' No matching @Autowired constructor'\n\tpublic MyFactory(String str) {...}\n\tpublic MyFactory(int count) {...}\n}' Example: 'public class FooBeanClass {\n @Autowired // reports 'Autowired members must be defined in valid Spring beans: @Component, @Service, and so on'\n ServiceBean bean;\n }'", + "markdown": "Reports autowiring problems on injection points of Spring beans\n[@Component](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html),\n[@Service](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Service.html),\nand so on.\n\n* More than one bean of 'concrete' type\n* No beans of 'concrete' type\n* No bean with qualifier\n* Incorrect usages of `@Autowired` on Spring bean constructors\n* Injected or autowired fields/methods in classes that are not valid Spring beans\n\n**Example:**\n\n\n public interface FooInterface {...}\n @Component public class FooBean implements FooInterface {...}\n @Component public class OtherBean implements FooInterface {...}\n\n @Component\n public class MyComponent {\n \t@Autowired\n \tFooInterface foo; // \"Could not autowire. There is more than one bean of 'FooInterface' type.\n // Beans: fooBean(FooBean.java), otherBean(OtherBean.java)\"\n }\n\n**Example:**\n\n\n @Component\n public class MyComponent {\n \t@Autowired\n \tpublic MyComponent(BarBean bean) {...} // reports 'Only one @Autowired constructor is allowed'\n\n \t@Autowired\n \tpublic MyComponent(FooBean bean) {...} // reports 'Only one @Autowired constructor is allowed'\n }\n\n @Component\n public class MyFactory { // reports ' No matching @Autowired constructor'\n \tpublic MyFactory(String str) {...}\n \tpublic MyFactory(int count) {...}\n }\n\n**Example:**\n\n\n public class FooBeanClass {\n @Autowired // reports 'Autowired members must be defined in valid Spring beans: @Component, @Service, and so on'\n ServiceBean bean;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringJavaInjectionPointsAutowiringInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBeanAttributesInspection", + "shortDescription": { + "text": "Conflicting Spring bean attribute" + }, + "fullDescription": { + "text": "Reports configuration conflicts on '' attributes. Example: '\n \n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n '", + "markdown": "Reports configuration conflicts on `` attributes.\n\n**Example:**\n\n\n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringBeanAttributesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingAspectjAutoproxyInspection", + "shortDescription": { + "text": "Missing aspectj-autoproxy" + }, + "fullDescription": { + "text": "Reports '@Aspect' annotations in Spring versions earlier than 2.5 if there is no element in the XML configuration. Example: '@Aspect // '@AspectJ support isn't enabled\nclass MyAspect {\n ...\n}' '\n \n'", + "markdown": "Reports `@Aspect` annotations in Spring versions earlier than 2.5\nif there is no **\\** element in the XML configuration.\n\n**Example:**\n\n\n @Aspect // '@AspectJ support isn't enabled\n class MyAspect {\n ...\n }\n\n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MissingAspectjAutoproxyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring AOP", + "index": 132, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringInactiveProfileHighlightingInspection", + "shortDescription": { + "text": "Inactive profile highlighting" + }, + "fullDescription": { + "text": "Reports inactive profiles in the Spring XML application contexts. Example: '\n \n \n \n \n \n \n \n \n '", + "markdown": "Reports inactive profiles in the Spring XML application contexts.\n\n**Example:**\n\n\n \n \n \n \n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringInactiveProfileHighlightingInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringInjectionValueStyleInspection", + "shortDescription": { + "text": "Injection value in XML application context violates conventions" + }, + "fullDescription": { + "text": "Reports properties configured via '' or '' sub-elements and offers to replace them with the corresponding attributes. Example: '\n \n\n \n \n \n \n \n ' After applying the quick-fix: '\n \n \n \n \n '", + "markdown": "Reports properties configured via `` or `` sub-elements and offers to replace them with the corresponding attributes.\n\n**Example:**\n\n\n \n \n\n \n \n \n \n \n \n\nAfter applying the quick-fix:\n\n\n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringInjectionValueStyleInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringEventListenerInspection", + "shortDescription": { + "text": "Incorrectly configured @EventListener methods" + }, + "fullDescription": { + "text": "Reports incorrect @EventListener methods. Example: '@Configuration @ComponentScan\n open class Config\n\n data class MyEvent(val string: String)\n\n @Component\n class LogComponent {\n @EventListener // Method annotated with @EventListener must be public\n private fun logCommands(commandName: MyEvent) {}\n\n @EventListener // Method must have maximum one parameter\n fun processCommand(commandName: MyEvent, text: String) {}\n }'", + "markdown": "Reports incorrect\n[@EventListener](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/event/EventListener.html) methods.\n\n**Example:**\n\n\n @Configuration @ComponentScan\n open class Config\n\n data class MyEvent(val string: String)\n\n @Component\n class LogComponent {\n @EventListener // Method annotated with @EventListener must be public\n private fun logCommands(commandName: MyEvent) {}\n\n @EventListener // Method must have maximum one parameter\n fun processCommand(commandName: MyEvent, text: String) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringEventListenerInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InjectionValueTypeInspection", + "shortDescription": { + "text": "Unassignable injection point type in XML application context" + }, + "fullDescription": { + "text": "Reports invalid injection point types (properties and constructor arguments). The following injection point types are allowed: 'ref', 'idref', any collection type, inner beans, and so on. Example: 'public class InjectionValueTypes{\n public List setListBeans() {...}\n public MyBean setMyBean() {...}\n }\n }' '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n '", + "markdown": "Reports invalid injection point types (properties and constructor arguments).\n\nThe following injection point types are allowed: `ref`, `idref`, any collection type, inner beans, and so on.\n\n**Example:**\n\n\n public class InjectionValueTypes{\n public List setListBeans() {...}\n public MyBean setMyBean() {...}\n }\n }\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "InjectionValueTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringInjectionValueConsistencyInspection", + "shortDescription": { + "text": "Inconsistent injection value in XML application context" + }, + "fullDescription": { + "text": "Reports inconsistent tags and attributes on injection points in XML application contexts. '' and '' must specify a 'ref', 'value', or a sub-element '' and '' cannot contain more than one sub-element '' can contain either a 'bean' attribute, a 'local' attribute, or a 'parent' attribute '' must specify a bean '' can contain either a 'bean' attribute or a 'local' attribute '' must specify a bean '' must specify a key '' can contain either a 'key' attribute, a 'key-ref' attribute, or a '' sub-element Example: '\n\n \n \n \n \n \n\n \n \n \n bean \n foo \n \n \n\n \n \n \n \n \n \n \n \n '", + "markdown": "Reports inconsistent tags and attributes on injection points in XML application contexts.\n\n* `` and `` must specify a `ref`, `value`, or a sub-element\n* `` and `` cannot contain more than one sub-element\n* `` can contain either a `bean` attribute, a `local` attribute, or a `parent` attribute\n* `` must specify a bean\n* `` can contain either a `bean` attribute or a `local` attribute\n* `` must specify a bean\n* `` must specify a key\n* `` can contain either a `key` attribute, a `key-ref` attribute, or a `` sub-element\n\n**Example:**\n\n\n \n\n \n \n \n \n \n\n \n \n \n bean \n foo \n \n \n\n \n \n \n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringInjectionValueConsistencyInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContextJavaBeanUnresolvedMethodsInspection", + "shortDescription": { + "text": "Unknown init/destroy method in the @Bean annotation" + }, + "fullDescription": { + "text": "Reports unresolved method references on 'initMethod' and 'destroyMethod' parameters of the @Bean annotation. Example: \"Cannot resolve method\" will be reported on 'doInit' expression if MyBean class doesn't contain 'public void 'doInit'(){...}' method 'public class MyBean {...}\n\n @Component\n public class MyComponent {\n @Bean(initMethod=\"doInit\" )\n public MyBean myBean() {...}\n }' In this example, the inspection will report an unresolved method reference if 'MyBean' doesn't define the 'doInit()' method.", + "markdown": "Reports unresolved method references on `initMethod` and `destroyMethod` parameters\nof the [@Bean](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html) annotation.\n\n**Example:**\n\"Cannot resolve method\" will be reported on 'doInit' expression if MyBean class doesn't contain 'public void 'doInit'(){...}' method\n\n\n public class MyBean {...}\n\n @Component\n public class MyComponent {\n @Bean(initMethod=\"doInit\" )\n public MyBean myBean() {...}\n }\n\nIn this example, the inspection will report an unresolved method reference if `MyBean` doesn't define the `doInit()` method." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "ContextJavaBeanUnresolvedMethodsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatedBeanNamesInspection", + "shortDescription": { + "text": "Duplicated bean names in XML-based application context" + }, + "fullDescription": { + "text": "Reports duplicate bean names defined in the application context. Example: '\n \n \n \n\n \n '", + "markdown": "Reports duplicate bean names defined in the application context.\n\n**Example:**\n\n\n \n \n \n \n\n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicatedBeanNamesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCacheAnnotationsOnInterfaceInspection", + "shortDescription": { + "text": "Cache* annotations defined on interfaces/interface methods" + }, + "fullDescription": { + "text": "Reports '@Cache*' annotations on interfaces. You should annotate only concrete classes (and methods of concrete classes) with '@Cache*'. Annotating an interface (or an interface method) with '@Cache*' requires using interface-based proxies. Since Java annotations are not inherited from interfaces, the proxying and weaving infrastructure will not be able to recognize the caching settings when using class-based proxies ('proxy-target-class=\"true\"') or the weaving-based aspect ('mode=\"aspectj\"'). As a result, the object will not be wrapped in a caching proxy.", + "markdown": "Reports `@Cache*` annotations on interfaces.\n\nYou should annotate only concrete classes (and methods of concrete classes) with `@Cache*`.\nAnnotating an interface (or an interface method) with `@Cache*` requires using interface-based proxies.\nSince Java annotations are not inherited from interfaces, the proxying and weaving infrastructure will not be able to recognize the caching settings\nwhen using class-based proxies (`proxy-target-class=\"true\"`) or the weaving-based aspect (`mode=\"aspectj\"`).\nAs a result, the object will not be wrapped in a caching proxy." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCacheAnnotationsOnInterfaceInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JdkProxiedBeanTypeInspection", + "shortDescription": { + "text": "Incorrect JDK-proxied bean type" + }, + "fullDescription": { + "text": "Reports incorrectly configured JDK-proxied bean types. For more information, see JDK- and CGLIB-based proxies.", + "markdown": "Reports incorrectly configured JDK-proxied bean types.\n\nFor more information, see [JDK- and CGLIB-based proxies](https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-pfb-proxy-types)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "JdkProxiedBeanTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring AOP", + "index": 132, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringDependsOnUnresolvedBeanInspection", + "shortDescription": { + "text": "Incorrectly referenced bean in @DependsOn annotation" + }, + "fullDescription": { + "text": "Reports incorrect bean references in the 'value' parameter of the @DependsOn annotation. Example: '@Component\n @DependsOn(\"unknown\") // reports \"Cannot resolve bean 'unknown'\"\n public class MyComponent {\n }'", + "markdown": "Reports incorrect bean references in the `value` parameter of the\n[@DependsOn](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/DependsOn.html)\nannotation.\n\n**Example:**\n\n\n @Component\n @DependsOn(\"unknown\") // reports \"Cannot resolve bean 'unknown'\"\n public class MyComponent {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringDependsOnUnresolvedBeanInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringIncorrectResourceTypeInspection", + "shortDescription": { + "text": "Incorrect resource type" + }, + "fullDescription": { + "text": "Reports incorrect files referenced in the XML application context. Example: '\n \n \n '", + "markdown": "Reports incorrect files referenced in the XML application context.\n\n**Example:**\n\n\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringIncorrectResourceTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringRequiredPropertyInspection", + "shortDescription": { + "text": "Missing @Required property injections in the spring xml bean declaration" + }, + "fullDescription": { + "text": "Reports '@Required' setter bean properties that are not injected or autowired. Example: '\n \n \n' 'public class MyComponent {\n @Required\n public void setPort(int port) // reports \"Required property 'port' is not injected\"\n {...}\n}'", + "markdown": "Reports `@Required` setter bean properties that are not injected or autowired.\n\n**Example:**\n\n\n \n \n \n \n\n\n public class MyComponent {\n @Required\n public void setPort(int port) // reports \"Required property 'port' is not injected\"\n {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringRequiredPropertyInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringScheduledMethodsInspection", + "shortDescription": { + "text": "Incorrectly referenced bean in @Scheduled annotation" + }, + "fullDescription": { + "text": "Reports incorrect bean references in the 'scheduler' parameter of the @Scheduled annotation. Example: '@Component public class UserController {...}\n @Component public class UserServiceAsyncTaskScheduler extends SimpleAsyncTaskScheduler {...}\n\n @Component public class UserService {\n @Scheduled(scheduler=\"userServiceAsyncTaskScheduler\", cron=\"1 * * * * * ?\")\n public void scheduleTask() {...}\n\n @Scheduled(scheduler=\"userController\", cron=\"1 * * * * * ?\") // reports \"Bean must be one of these types: TaskScheduler,ScheduledExecutorService \"\n public void scheduleTask_2() {...}\n\n @Scheduled(scheduler=\"unknown\", cron=\"1 * * * * * ?\") // reports \"Cannot resolve bean 'unknown'\"\n public void scheduleTask_3() {...}\n }'", + "markdown": "Reports incorrect bean references in the `scheduler` parameter of the @Scheduled annotation.\n\n**Example:**\n\n\n @Component public class UserController {...}\n @Component public class UserServiceAsyncTaskScheduler extends SimpleAsyncTaskScheduler {...}\n\n @Component public class UserService {\n @Scheduled(scheduler=\"userServiceAsyncTaskScheduler\", cron=\"1 * * * * * ?\")\n public void scheduleTask() {...}\n\n @Scheduled(scheduler=\"userController\", cron=\"1 * * * * * ?\") // reports \"Bean must be one of these types: TaskScheduler,ScheduledExecutorService \"\n public void scheduleTask_2() {...}\n\n @Scheduled(scheduler=\"unknown\", cron=\"1 * * * * * ?\") // reports \"Cannot resolve bean 'unknown'\"\n public void scheduleTask_3() {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringScheduledMethodsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringXmlAutowiringInspection", + "shortDescription": { + "text": "Incorrect XML Spring bean autowiring" + }, + "fullDescription": { + "text": "Reports incorrect autowiring of Spring beans configured in XML application contexts. Example: 'public interface FooInterface {...}\n@Component public class FooBean implements FooInterface {...}\n@Component public class OtherBean implements FooInterface {...}\n\n@Component\npublic class MyComponent {\n\t public void setFooInterface(FooInterface foo) {...}\n}' '\n\t\n\t\n\n\t \n \n'", + "markdown": "Reports incorrect autowiring of Spring beans configured in XML application contexts.\n\n**Example:**\n\n\n public interface FooInterface {...}\n @Component public class FooBean implements FooInterface {...}\n @Component public class OtherBean implements FooInterface {...}\n\n @Component\n public class MyComponent {\n \t public void setFooInterface(FooInterface foo) {...}\n }\n\n\n \n \t\n \t\n\n \t \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringXmlAutowiringInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCacheableAndCachePutInspection", + "shortDescription": { + "text": "Incorrect usage of @CachePut and @Cacheable on the same method" + }, + "fullDescription": { + "text": "Reports @CachePut and @Cacheable annotations declared on the same method. While '@Cacheable' causes the method to skip the execution using the cache, '@CachePut' forces the execution in order to update the cache. This leads to unexpected behavior and should be avoided, except in very specific cases when conditions in annotations exclude them from each other. Note also that such conditions should not rely on the result object (the '#result' variable) as these are validated upfront to confirm the exclusion.", + "markdown": "Reports [@CachePut](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/cache/annotation/CachePut.html)\nand [@Cacheable](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/cache/annotation/Cacheable.html)\nannotations declared on the same method.\nWhile `@Cacheable` causes the method to skip the execution using the cache, `@CachePut` forces the execution in order to update the cache. This leads to unexpected behavior and should be avoided, except in very specific cases when conditions in annotations exclude them from each other. Note also that such conditions should not rely on the result object (the `#result` variable) as these are validated upfront to confirm the exclusion." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCacheableAndCachePutInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringConfigurationProxyMethods", + "shortDescription": { + "text": "@Configuration proxyMethods usage warnings" + }, + "fullDescription": { + "text": "Reports warnings on incorrectly used proxy methods. Spring Framework 5.2 has introduced an optimization for @Configuration class processing that can be enabled via an attribute @Configuration(proxyBeanMethods = false). If you disable 'proxyBeanMethods', the proxy instances are no longer created and calling the method invokes it again (returning a new instance every time). As a result, you have no guarantee that you're actually injecting the corresponding bean in the context. Incorrect bean method call example: '@Configuration(proxyBeanMethods = false)\nclass TestConfiguration {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean() {\n return new SecondBean(firstBean()); // -> incorrect call\n }\n}' You can set 'proxyBeanMethods' to true or rewrite the code as follows: '@Configuration(proxyBeanMethods = false)\nclass TestConfiguration {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean(FirstBean someBean) { // -> correct injected instance\n return new SecondBean(someBean);\n }\n}' Also, the inspection checks '@Bean' method calls in a class without the '@Configuration' stereotype (in \"bean lite mode\"): '@Component\nclass TestComponent {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean() {\n return new SecondBean(firstBean()); // -> incorrect call\n }\n}'", + "markdown": "Reports warnings on incorrectly used proxy methods. Spring Framework 5.2 has introduced an optimization for @Configuration class processing that can be enabled via an attribute @Configuration(proxyBeanMethods = false).\n\n\nIf you disable `proxyBeanMethods`,\nthe proxy instances are no longer created and calling the method invokes it again (returning a new instance every time).\nAs a result, you have no guarantee that you're actually injecting the corresponding bean in the context.\n\nIncorrect bean method call example:\n\n\n @Configuration(proxyBeanMethods = false)\n class TestConfiguration {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean() {\n return new SecondBean(firstBean()); // -> incorrect call\n }\n }\n\nYou can set `proxyBeanMethods` to true or rewrite the code as follows:\n\n\n @Configuration(proxyBeanMethods = false)\n class TestConfiguration {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean(FirstBean someBean) { // -> correct injected instance\n return new SecondBean(someBean);\n }\n }\n\nAlso, the inspection checks `@Bean` method calls in a class without the `@Configuration` stereotype (in \"bean lite mode\"):\n\n\n @Component\n class TestComponent {\n @Bean\n public FirstBean firstBean() {\n return new FirstBean();\n }\n\n @Bean\n public SecondBean secondBean() {\n return new SecondBean(firstBean()); // -> incorrect call\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringConfigurationProxyMethods", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringAopErrorsInspection", + "shortDescription": { + "text": "Incorrect Spring AOP advice or advisor element" + }, + "fullDescription": { + "text": "Reports incorrect advices and advisor elements if there are no 'pointcut' or 'pointcut-ref' attributes. Example: '\n \n \n \n \n \n \n \n \n'", + "markdown": "Reports incorrect advices and advisor elements if there are no `pointcut` or `pointcut-ref` attributes.\n\n**Example:**\n\n\n \n \n \n \n \n \n \n \n \n \n\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringAopErrorsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring AOP", + "index": 132, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringAopPointcutExpressionInspection", + "shortDescription": { + "text": "Incorrect Spring AOP pointcut expression" + }, + "fullDescription": { + "text": "Reports AspectJ pointcut designators which are not supported by Spring. Example: '\n \n \n and adviceexecution()\"/> \n \n \n'", + "markdown": "Reports AspectJ pointcut designators which are not supported by Spring.\n\n**Example:**\n\n\n \n \n \n and adviceexecution()\"/> \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringAopPointcutExpressionInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring AOP", + "index": 132, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBeanNameConventionInspection", + "shortDescription": { + "text": "Spring bean name violates conventions" + }, + "fullDescription": { + "text": "Reports names that don't follow the bean naming conventions. The convention is to use the standard Java convention for instance field names when naming beans. That is, bean names start with a lowercase letter and are camel-cased from there. Examples of such names include 'accountManager', 'accountService', 'userDao', 'loginController', and so on. Naming beans consistently makes your configuration easier to read and understand. Also, if you are using Spring AOP, it helps a lot when applying an advice to a set of beans related by name.", + "markdown": "Reports **\\** names that don't follow the bean naming conventions.\n\n\nThe convention is to use the standard Java convention for instance field names when naming beans.\nThat is, bean names start with a lowercase letter and are camel-cased from there.\nExamples of such names include `accountManager`, `accountService`, `userDao`, `loginController`, and so on.\nNaming beans consistently makes your configuration easier to read and understand.\nAlso, if you are using Spring AOP, it helps a lot when applying an advice to a set of beans related by name." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringBeanNameConventionInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnparsedCustomBeanInspection", + "shortDescription": { + "text": "Unparsed custom Spring beans" + }, + "fullDescription": { + "text": "Reports unknown Spring bean types that have not yet been parsed or if a bean uses an unsupported tag for the custom namespace.", + "markdown": "Reports unknown Spring bean types that have not yet been parsed or if a bean uses an unsupported tag for the custom namespace." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnparsedCustomBeanInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringXmlAutowireExplicitlyInspection", + "shortDescription": { + "text": "Unnecessary autowired dependency in XML application context" + }, + "fullDescription": { + "text": "Reports 'autowire' attributes in '' elements and suggests to explicitly inject bean properties if possible. Example: 'public class MyComponent {\n public void setOtherBean(OtherBean bean){...}\n }' '\n \n \n \n \n ' After applying the quick-fix: '\n \n \n \n \n '", + "markdown": "Reports `autowire` attributes in `` elements and suggests to explicitly inject bean properties if possible.\n\n**Example:**\n\n\n public class MyComponent {\n public void setOtherBean(OtherBean bean){...}\n }\n\n\n \n \n \n \n \n \n\nAfter applying the quick-fix:\n\n\n \n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringXmlAutowireExplicitlyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringHandlersSchemasHighlighting", + "shortDescription": { + "text": "Unresolved file or class reference in a spring.handlers or spring.schemas file" + }, + "fullDescription": { + "text": "Reports unresolved class and file references in 'spring.handlers' and 'spring.schemas' files. Example 'spring.handlers' file: 'a=my.company.MyHandler\n b=my.company.UnknownHandler // reports \"Cannot resolve class 'my.company.UnknownHandler'\"'", + "markdown": "Reports unresolved class and file references in `spring.handlers` and `spring.schemas` files.\n\n**Example `spring.handlers` file:**\n\n\n a=my.company.MyHandler\n b=my.company.UnknownHandler // reports \"Cannot resolve class 'my.company.UnknownHandler'\"\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringHandlersSchemasHighlighting", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core", + "index": 8, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringTestingDirtiesContextInspection", + "shortDescription": { + "text": "Invalid @DirtiesContext 'mode' configuration" + }, + "fullDescription": { + "text": "Reports incorrect 'mode' configuration in the @DirtiesContext annotation. Example: '@ContextConfiguration\n @DirtiesContext(methodMode = MethodMode.AFTER_METHOD, // Setting the method mode on an annotated test class has no meaning. For class-level control, use classMode instead.\n hierarchyMode = DirtiesContext.HierarchyMode.CURRENT_LEVEL) // hierarchyMode should be used when the context is configured as part of a hierarchy via @ContextHierarchy\n public class MyTest {\n @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS, // Setting the class mode on an annotated test method has no meaning. For method-level control use methodMode instead..\n hierarchyMode = DirtiesContext.HierarchyMode.CURRENT_LEVEL) // hierarchyMode should be used when the context is configured as part of a hierarchy via @ContextHierarchy\n public void testFoo() {...}\n }'", + "markdown": "Reports incorrect 'mode' configuration in the\n[@DirtiesContext](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/annotation/DirtiesContext.html)\nannotation.\n\n**Example:**\n\n\n @ContextConfiguration\n @DirtiesContext(methodMode = MethodMode.AFTER_METHOD, // Setting the method mode on an annotated test class has no meaning. For class-level control, use classMode instead.\n hierarchyMode = DirtiesContext.HierarchyMode.CURRENT_LEVEL) // hierarchyMode should be used when the context is configured as part of a hierarchy via @ContextHierarchy\n public class MyTest {\n @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS, // Setting the class mode on an annotated test method has no meaning. For method-level control use methodMode instead..\n hierarchyMode = DirtiesContext.HierarchyMode.CURRENT_LEVEL) // hierarchyMode should be used when the context is configured as part of a hierarchy via @ContextHierarchy\n public void testFoo() {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringTestingDirtiesContextInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCacheNamesInspection", + "shortDescription": { + "text": "Incorrect required cache names definition" + }, + "fullDescription": { + "text": "Reports incorrect '@Cache*' annotation names. At least one cache name should be provided per cache operation: '@Cacheable(\"cache_name\")' or '@Cacheable(cacheNames =\"cache_name\")'. '@CacheConfig#cacheNames()' can be used for sharing common cache-related settings at the class level.", + "markdown": "Reports incorrect `@Cache*` annotation names.\n\nAt least one cache name should be provided per cache operation: `@Cacheable(\"cache_name\")` or `@Cacheable(cacheNames =\"cache_name\")`.\n`@CacheConfig#cacheNames()` can be used for sharing common cache-related settings at the class level." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCacheNamesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringJavaStaticMembersAutowiringInspection", + "shortDescription": { + "text": "Incorrect Spring component autowiring or injection on a static class member" + }, + "fullDescription": { + "text": "Reports autowired and injected static methods/fields of Spring components. Example: '@Component\npublic class MyComponent {\n\t@Autowired\n\tstatic FooInterface foo; // reports \"Don't autowire static members\"\n}'", + "markdown": "Reports autowired and injected static methods/fields of Spring components.\n\n**Example:**\n\n\n @Component\n public class MyComponent {\n \t@Autowired\n \tstatic FooInterface foo; // reports \"Don't autowire static members\"\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringJavaStaticMembersAutowiringInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringPlaceholdersInspection", + "shortDescription": { + "text": "Unresolved placeholders configured in the Spring XML application context" + }, + "fullDescription": { + "text": "Reports unresolved placeholders configured in Spring XML contexts. Example: '\n \n\n \n \n \n \n '", + "markdown": "Reports unresolved placeholders configured in Spring XML contexts.\n\n**Example:**\n\n\n \n \n\n \n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringPlaceholdersInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCacheableMethodCallsInspection", + "shortDescription": { + "text": "@Cacheable self-invocation method calls" + }, + "fullDescription": { + "text": "Using @Cacheable: In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) will not lead to an actual caching at runtime even if the invoked method is marked with @Cacheable", + "markdown": "[Using @Cacheable](https://docs.spring.io/spring-framework/reference/integration/cache/annotations.html): In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) will not lead to an actual caching at runtime even if the invoked method is marked with @Cacheable" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCacheableMethodCallsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringImportResource", + "shortDescription": { + "text": "Unresolved file references in @ImportResource locations" + }, + "fullDescription": { + "text": "Reports unresolved files and directories in 'locations' attributes of @ImportResource annotations and the corresponding aliased attributes of the '@ImportResource' meta annotations. Example: '@Configuration\n @ImportResource(locations = \"classpath:META-INF/unknown-context.xml\") // reports \"Cannot resolve file 'unknown-context.xml'\"\n public class MyConfiguration {...}'", + "markdown": "Reports unresolved files and directories in `locations` attributes\nof [@ImportResource](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ImportResource.html) annotations\nand the corresponding aliased attributes of the `@ImportResource` meta annotations.\n\n**Example:**\n\n\n @Configuration\n @ImportResource(locations = \"classpath:META-INF/unknown-context.xml\") // reports \"Cannot resolve file 'unknown-context.xml'\"\n public class MyConfiguration {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringImportResource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringTransactionalComponentInspection", + "shortDescription": { + "text": "Invalid 'PlatformTransactionManager' declaration in @Transactional component" + }, + "fullDescription": { + "text": "Reports PlatformTransactionManager classes that are not correctly defined in the application context for the current @Transactional component.", + "markdown": "Reports [PlatformTransactionManager](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/PlatformTransactionManager.html) classes that are not correctly defined in the application context for the current [@Transactional](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html) component." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringTransactionalComponentInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBeanLookupMethodInspection", + "shortDescription": { + "text": "Incorrectly configured XML bean lookup-method" + }, + "fullDescription": { + "text": "Reports incorrect for a bean in XML application contexts. Example: 'public abstract class FooLookupBean {\n protected abstract FooBean createCommand();\n private FooBean createCommand() {...}\n protected static FooBean createCommandStatic() {...}\n protected abstract FooBean createWithArgs(String foo);\n protected abstract OtherBean createOtherBean();\n }' '\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n '", + "markdown": "Reports incorrect **\\** for a bean in XML application contexts.\n\n**Example:**\n\n\n public abstract class FooLookupBean {\n protected abstract FooBean createCommand();\n private FooBean createCommand() {...}\n protected static FooBean createCommandStatic() {...}\n protected abstract FooBean createWithArgs(String foo);\n protected abstract OtherBean createOtherBean();\n }\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringBeanLookupMethodInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringPropertySource", + "shortDescription": { + "text": "Unresolved file references in @PropertySource and @TestPropertySource locations" + }, + "fullDescription": { + "text": "Reports unresolved files or directories in @PropertySource and @TestPropertySource annotations. Example: '@Configuration\n @PropertySource(\"classpath:/com/mycompany/unknown.properties\") // reports \"Cannot resolve file unknown.properties\"\n public class AppConfig {...}'", + "markdown": "Reports unresolved files or directories in\n[@PropertySource](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html)\nand [@TestPropertySource](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html)\nannotations.\n\n**Example:**\n\n\n @Configuration\n @PropertySource(\"classpath:/com/mycompany/unknown.properties\") // reports \"Cannot resolve file unknown.properties\"\n public class AppConfig {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringPropertySource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringProfileExpression", + "shortDescription": { + "text": "Incorrectly configured @Profile expression" + }, + "fullDescription": { + "text": "Reports incorrect @Profile expressions: Spring profiles must not be empty '&' and '|' operators must not be mixed without parentheses in Spring profile expressions Examples: '// correctly configured\n @Configuration\n @Profile(\"a & (b | c)\")\n public class MyConfiguration {...}\n\n // empty\n @Configuration\n @Profile() // reports \"Profile expression must contain text\"\n public class MyConfiguration {...}\n\n // mixed operators without parentheses\n @Configuration\n @Profile(\"a & b | c\") // reports \"Malformed profile expression\"\n public class MyConfiguration {...}'", + "markdown": "Reports incorrect\n[@Profile](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Profile.html)\nexpressions:\n\n* Spring profiles must not be empty\n* '\\&' and '\\|' operators must not be mixed without parentheses in Spring profile expressions\n\n**Examples:**\n\n\n // correctly configured\n @Configuration\n @Profile(\"a & (b | c)\")\n public class MyConfiguration {...}\n\n // empty\n @Configuration\n @Profile() // reports \"Profile expression must contain text\"\n public class MyConfiguration {...}\n\n // mixed operators without parentheses\n @Configuration\n @Profile(\"a & b | c\") // reports \"Malformed profile expression\"\n public class MyConfiguration {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringProfileExpression", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/Code", + "index": 12, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractBeanReferencesInspection", + "shortDescription": { + "text": "Incorrect reference to abstract bean" + }, + "fullDescription": { + "text": "Reports referenced abstract beans. Abstract beans can be used only as template bean definitions, that is, parents for child definitions. Trying to use such an abstract parent bean on its own by referring to it as a ref property of another bean, or by calling 'getBean()' with the parent bean id, will result in an error. Example: '\n \n \n ' In this example, the parent bean can't be instantiated on its own since it is incomplete and explicitly marked as abstract.", + "markdown": "Reports referenced abstract beans.\n\nAbstract beans can be used only as template bean definitions, that is, parents for child definitions.\nTrying to use such an abstract parent bean on its own by referring to it as a ref property of another bean,\nor by calling `getBean()` with the parent bean id, will result in an error.\n\n**Example:**\n\n\n \n \n \n \n\nIn this example, the parent bean can't be instantiated on its own since it is incomplete and explicitly marked as abstract." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "AbstractBeanReferencesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Core/XML", + "index": 9, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.cloud", + "version": "241.17569", + "rules": [ + { + "id": "SpringBootBootstrapConfigurationInspection", + "shortDescription": { + "text": "Bootstrap configuration included in application context" + }, + "fullDescription": { + "text": "Reports 'BootstrapConfiguration' included into the Spring Boot application context via a component scan where it might not be needed. For more information, see Spring Cloud Commons documentation.", + "markdown": "Reports `BootstrapConfiguration` included into the Spring Boot application context via a component scan where it might not be needed.\n\nFor more information, see [Spring Cloud Commons documentation](https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#customizing-the-bootstrap-configuration)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "SpringBootBootstrapConfigurationInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Cloud", + "index": 17, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCloudStreamMessageChannelInspection", + "shortDescription": { + "text": "Unresolved message channel" + }, + "fullDescription": { + "text": "Reports unresolved channel attributes in '@StreamListener', '@SendTo', '@Output', and '@Input' annotations. Using invalid binding name results in 'bean not found' error at runtime. Example: '@EnableBinding(Sink.class)\n public class LogSource {\n @StreamListener(Sink.class)\n\t public void log1() {\n }\n\n @StreamListener(\"invalid\") // Reports 'Cannot find channel'\n\t public void log2() {\n }\n }'", + "markdown": "Reports unresolved channel attributes in `@StreamListener`, `@SendTo`, `@Output`, and `@Input` annotations.\n\nUsing invalid binding name results in 'bean not found' error at runtime.\n\n**Example:**\n\n\n @EnableBinding(Sink.class)\n public class LogSource {\n @StreamListener(Sink.class)\n \t public void log1() {\n }\n\n @StreamListener(\"invalid\") // Reports 'Cannot find channel'\n \t public void log2() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCloudStreamMessageChannelInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Cloud Stream", + "index": 175, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringCloudStreamInconsistencyInspection", + "shortDescription": { + "text": "Stream handler method error" + }, + "fullDescription": { + "text": "Reports inconsistency errors in stream handler methods. Input and output stream handler methods annotated with '@StreamListener' or '@StreamEmitter' have various constraints. Violation of the constraints results in errors at runtime. For example: Channel defined in '@StreamListener' 'value' attribute may never be combined with method parameters annotated with '@Input' or '@Output' An input channel must be specified for a method annotated with '@StreamListener' An output channel must be specified for a method that can return a value An output channel cannot be specified for a method that does not return a value '@StreamListener' 'condition' attribute cannot be set for methods that return a value", + "markdown": "Reports inconsistency errors in stream handler methods.\n\n\nInput and output stream handler methods annotated with `@StreamListener` or `@StreamEmitter` have various constraints.\nViolation of the constraints results in errors at runtime.\n\nFor example:\n\n* Channel defined in `@StreamListener` `value` attribute may never be combined with method parameters annotated with `@Input` or `@Output`\n* An input channel must be specified for a method annotated with `@StreamListener`\n* An output channel must be specified for a method that can return a value\n* An output channel cannot be specified for a method that does not return a value\n* `@StreamListener` `condition` attribute cannot be set for methods that return a value" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringCloudStreamInconsistencyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Cloud Stream", + "index": 175, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "Karma", + "version": "241.17569", + "rules": [ + { + "id": "KarmaConfigFile", + "shortDescription": { + "text": "Invalid Karma configuration file" + }, + "fullDescription": { + "text": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, 'karma.conf.js'.", + "markdown": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, `karma.conf.js`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KarmaConfigFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unit testing", + "index": 19, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.groovy", + "version": "241.17569", + "rules": [ + { + "id": "GroovyListSetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to List.set can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.List.set()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def list = [\"foo\"]\nlist.set(0, \"bar\") // list.set(0, \"bar\") could be replaced with list[0] = \"bar\"'\n After the quick-fix is applied: 'def list = [\"foo\"]\nlist[0] = \"bar\"'", + "markdown": "Reports calls to `java.util.List.set()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n list.set(0, \"bar\") // list.set(0, \"bar\") could be replaced with list[0] = \"bar\"\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n list[0] = \"bar\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyListSetCanBeKeyedAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 23, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantNamingConvention", + "shortDescription": { + "text": "Constant naming convention" + }, + "fullDescription": { + "text": "Reports constant with names which don't match the specified convention. Constants are fields of immutable type declared with 'static' and 'final' modifiers. Reports constants whose names are either too short, too long, or do not follow the specified regular expression pattern. Configure the inspection: Use the Pattern field to specify 'java.util.regex.Pattern' which a constant name is expected to match. Use the Min length field to specify the minimum length of a constant name. Use the Max length field to specify the maximum length of a constant name.", + "markdown": "Reports constant with names which don't match the specified convention.\n\nConstants are fields of immutable type declared with `static` and `final` modifiers.\nReports constants whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\nConfigure the inspection:\n\n* Use the **Pattern** field to specify `java.util.regex.Pattern` which a constant name is expected to match.\n* Use the **Min length** field to specify the minimum length of a constant name.\n* Use the **Max length** field to specify the maximum length of a constant name." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConstantNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInArgumentCheck", + "shortDescription": { + "text": "Incompatible 'in' argument types" + }, + "fullDescription": { + "text": "Reports usages of membership operator 'in' with items and containers of incompatible types. Example: 'def list = [1, 2]\nif (\"foo\" in list) {} // list of Integers can't contain String'", + "markdown": "Reports usages of membership operator `in` with items and containers of incompatible types.\n\n**Example:**\n\n\n def list = [1, 2]\n if (\"foo\" in list) {} // list of Integers can't contain String\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyInArgumentCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMapPutCanBeKeyedAccess", + "shortDescription": { + "text": "Call to Map.put can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Map.put()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def map = [\"foo\": \"bar\"]\nmap.put(\"foo\", \"baz\") // map.put(\"foo\", \"baz\") could be replaced with map[\"foo\"] = \"baz\"'\n After the quick-fix is applied: 'def map = [\"foo\": \"bar\"]\nmap[\"foo\"] = \"baz\"'", + "markdown": "Reports calls to `java.util.Map.put()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n map.put(\"foo\", \"baz\") // map.put(\"foo\", \"baz\") could be replaced with map[\"foo\"] = \"baz\"\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n map[\"foo\"] = \"baz\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMapPutCanBeKeyedAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 23, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAccessibility", + "shortDescription": { + "text": "Inaccessible element" + }, + "fullDescription": { + "text": "Reports references which exceed access rights. Access to private members breaks encapsulation.", + "markdown": "Reports references which exceed access rights.\n\nAccess to private members breaks encapsulation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyAccessibility", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDoubleCheckedLocking", + "shortDescription": { + "text": "Double-checked locking" + }, + "fullDescription": { + "text": "Reports double-checked locking. Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization. Unfortunately it is not thread-safe when used on a field that is not declared 'volatile'. When using Java 1.4 or earlier, double-checked locking doesn't work even with a 'volatile' field. Read the article linked above for a detailed explanation of the problem. Example: 'class Foo {\n private Helper helper = null\n\n Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) {\n helper = new Helper()\n }\n }\n }\n return helper;\n }\n }'", + "markdown": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\n**Example:**\n\n\n class Foo {\n private Helper helper = null\n\n Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) {\n helper = new Helper()\n }\n }\n }\n return helper;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyDoubleCheckedLocking", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyFallthrough", + "shortDescription": { + "text": "Fallthrough in 'switch' statement" + }, + "fullDescription": { + "text": "Reports fallthrough in switch statements. While occasionally useful, fallthrough is often unintended, and may lead to surprising bugs. Example: 'switch(n) {\n case 1:\n print 1\n case 2: // \"case 1\" fallthrough to \"case 2\". Statements from \"case 2\" will be executed immediately after \"case 1\".\n print 2\n break\n default:\n print \"Default\"\n}'", + "markdown": "Reports *fallthrough* in switch statements. While occasionally useful, fallthrough is often unintended, and may lead to surprising bugs.\n\n**Example:**\n\n\n switch(n) {\n case 1:\n print 1\n case 2: // \"case 1\" fallthrough to \"case 2\". Statements from \"case 2\" will be executed immediately after \"case 1\".\n print 2\n break\n default:\n print \"Default\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyFallthrough", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLocalVariableNamingConvention", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyLocalVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyIfStatementWithIdenticalBranches", + "shortDescription": { + "text": "If statement with identical branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with identical \"then\" and 'else' branches. Such statements are almost certainly programmer error. Example: 'if (condition) {\n print \"foo\"\n} else {\n print \"foo\"\n}'\n After the quick-fix is applied: 'print \"foo\"'", + "markdown": "Reports `if` statements with identical \"then\" and `else` branches. Such statements are almost certainly programmer error.\n\n**Example:**\n\n\n if (condition) {\n print \"foo\"\n } else {\n print \"foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n print \"foo\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyIfStatementWithIdenticalBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNonShortCircuitBoolean", + "shortDescription": { + "text": "Non short-circuit boolean" + }, + "fullDescription": { + "text": "Reports the non-short-circuit forms of boolean operators 'and' and 'or' ( '&' and '|' ). The non-short-circuit versions are occasionally useful, but their presence is often due to typos of the short-circuit forms ( '&&' and '||' ), and may lead to subtle bugs. Example: 'if (a & b) {}' After the quick-fix is applied: 'if (a && b) {}'", + "markdown": "Reports the non-short-circuit forms of boolean operators 'and' and 'or' ( `&` and `|` ).\n\n\nThe non-short-circuit versions are occasionally useful, but\ntheir presence is often due to typos of the short-circuit forms ( `&&`\nand `||` ), and may lead to subtle bugs.\n\n**Example:**\n\n\n if (a & b) {}\n\nAfter the quick-fix is applied:\n\n\n if (a && b) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNonShortCircuitBoolean", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaStylePropertiesInvocation", + "shortDescription": { + "text": "Java-style property access" + }, + "fullDescription": { + "text": "Reports properties accessed via method calls. Example: 'class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.getFoo())' After the quick-fix is applied: 'class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.foo)'", + "markdown": "Reports properties accessed via method calls.\n\n**Example:**\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.getFoo())\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.foo)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JavaStylePropertiesInvocation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyTrivialConditional", + "shortDescription": { + "text": "Redundant conditional expression" + }, + "fullDescription": { + "text": "Reports ternary conditional operators of the form 'x ? true : false' or similar, which can be trivially simplified. Example: 'foo() ? true : false' After the quick-fix is applied: 'foo()'", + "markdown": "Reports ternary conditional operators of the form `x ? true : false` or similar, which can be trivially simplified.\n\n**Example:**\n\n\n foo() ? true : false\n\nAfter the quick-fix is applied:\n\n\n foo()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyTrivialConditional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrFinalVariableAccess", + "shortDescription": { + "text": "Final variable access" + }, + "fullDescription": { + "text": "Reports uninitialized final fields, invalid assignments to final variables, and parameters and fields.", + "markdown": "Reports uninitialized final fields, invalid assignments to final variables, and parameters and fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrFinalVariableAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DelegatesTo", + "shortDescription": { + "text": "@DelegatesTo" + }, + "fullDescription": { + "text": "Reports unused '@DelegatesTo.Target' annotations and unresolved '@DelegatedTo.target' annotation attribute values. Example: '// unused target 't1' and unresolved target 't2'\n def m(\n @DelegatesTo.Target('t1') target,\n @DelegatesTo(target = 't2') Closure c\n ) {}'", + "markdown": "Reports unused `@DelegatesTo.Target` annotations and unresolved `@DelegatedTo.target` annotation attribute values.\n\n**Example:**\n\n\n // unused target 't1' and unresolved target 't2'\n def m(\n @DelegatesTo.Target('t1') target,\n @DelegatesTo(target = 't2') Closure c\n ) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DelegatesTo", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 113, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexArithmeticExpression", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports arithmetic expressions with too many terms. Such expressions may be confusing and bug-prone. Use the Maximum number of terms field to specify the maximum number of terms allowed in an arithmetic expression.", + "markdown": "Reports arithmetic expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in an arithmetic expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOverlyComplexArithmeticExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyThrowFromFinallyBlock", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'throw' statements inside of 'finally' blocks. While occasionally intended, such 'throw' statements may mask exceptions thrown and tremendously complicate debugging.", + "markdown": "Reports `throw` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `throw` statements may mask exceptions thrown and\ntremendously complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyThrowFromFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChangeToOperator", + "shortDescription": { + "text": "Method call can be replaced with operator invocation" + }, + "fullDescription": { + "text": "Reports method calls that can be replaced with operator invocations. Example: 'a.plus(b)' After the quick-fix is applied: 'a + b'", + "markdown": "Reports method calls that can be replaced with operator invocations.\n\n**Example:**\n\n\n a.plus(b)\n\nAfter the quick-fix is applied:\n\n\n a + b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ChangeToOperator", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMapGetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to Map.get can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Map.get()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def map = [\"foo\": \"bar\"]\ndef str = map.get(\"foo\") // map.get(\"foo\") could be replaced with map[\"foo\"]'\n After the quick-fix is applied: 'def map = [\"foo\": \"bar\"]\ndef str = map[\"foo\"]'", + "markdown": "Reports calls to `java.util.Map.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n def str = map.get(\"foo\") // map.get(\"foo\") could be replaced with map[\"foo\"]\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n def str = map[\"foo\"]\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMapGetCanBeKeyedAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 23, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfAssignmentUsed", + "shortDescription": { + "text": "Result of assignment used" + }, + "fullDescription": { + "text": "Reports assignment expressions nested inside other expressions to use the assigned value immediately. Such expressions may be confusing and violating the general design principle that a given construct should do precisely one thing.", + "markdown": "Reports assignment expressions nested inside other expressions to use the assigned value immediately.\n\n\nSuch expressions may be confusing and violating the general design principle that a\ngiven construct should do precisely one thing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyResultOfAssignmentUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedAssignment", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports assignment expressions nested inside other expressions. While admirably terse, such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing. Example: 'a = b = 1'", + "markdown": "Reports assignment expressions nested inside other expressions. While admirably terse, such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing.\n\n**Example:**\n\n\n a = b = 1\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNestedAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizedMethod", + "shortDescription": { + "text": "Synchronized method" + }, + "fullDescription": { + "text": "Reports the 'synchronized' modifier on methods. Some coding standards prohibit the use of the 'synchronized' modifier, in favor of 'synchronized' statements.", + "markdown": "Reports the `synchronized` modifier on methods.\n\n\nSome coding standards\nprohibit the use of the `synchronized` modifier, in favor of `synchronized` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySynchronizedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnconditionalWait", + "shortDescription": { + "text": "Unconditional 'wait' call" + }, + "fullDescription": { + "text": "Reports wait() being called unconditionally within a synchronized context. Normally, wait() is used to block a thread until some condition is true. If wait() is called unconditionally, that often indicates that the condition was checked before a lock was acquired. In that case, a data race may occur, with the condition becoming true between the time it was checked and the time the lock was acquired. While constructs found by this inspection are not necessarily incorrect, they are certainly worth examining.", + "markdown": "Reports **wait()**\nbeing called unconditionally within a synchronized context.\nNormally, **wait()** is\nused to block a thread until some condition is true. If **wait()**\nis called unconditionally, that often indicates that the condition was checked before a lock was\nacquired. In that case, a data race may occur, with the condition becoming true between the time\nit was checked and the time the lock was acquired. While constructs found by this inspection\nare not necessarily incorrect, they are certainly worth examining." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnconditionalWait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyContinue", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements.", + "markdown": "Reports `continue` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyContinue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnsynchronizedMethodOverridesSynchronizedMethod", + "shortDescription": { + "text": "Unsynchronized method overrides synchronized method" + }, + "fullDescription": { + "text": "Reports non-synchronized methods overriding synchronized methods. Example: 'abstract class Base {\n synchronized void foo() {\n // ...\n }\n }\n class Derived extends Base {\n @Override\n void foo() {\n super.foo()\n // ...\n }\n }' Here the non-synchronized method 'foo()' in class 'Bar' overrides synchronized method.", + "markdown": "Reports non-**synchronized** methods overriding **synchronized** methods.\n\n**Example:**\n\n\n abstract class Base {\n synchronized void foo() {\n // ...\n }\n }\n class Derived extends Base {\n @Override\n void foo() {\n super.foo()\n // ...\n }\n }\n\nHere the non-synchronized method `foo()` in class `Bar` overrides synchronized method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnsynchronizedMethodOverridesSynchronizedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNegatedIf", + "shortDescription": { + "text": "Negated if condition expression" + }, + "fullDescription": { + "text": "Reports 'if' statements which contain 'else' branches and whose conditions are negated. Flipping the order of the 'if' and 'else' branches will usually increase the clarity of such statements. Example: 'if (!condition) {\n return \"1\"\n} else {\n return \"2\"\n}'", + "markdown": "Reports `if` statements which contain `else` branches and whose conditions are negated. Flipping the order of the `if` and `else` branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n if (!condition) {\n return \"1\"\n } else {\n return \"2\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNegatedIf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewGroovyClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern. For each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the provided input fields. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports classes whose names are too short, too long, or do not follow\nthe specified regular expression pattern.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NewGroovyClassNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClashingGetters", + "shortDescription": { + "text": "Clashing getters" + }, + "fullDescription": { + "text": "Reports boolean methods which can be accessed via the same property name. The result of accessing such property might be unexpected. Example: 'class X {\n boolean isFoo() { true }\n boolean getFoo() { false }\n }\n\n // getFoo() will be called\n new X().foo'", + "markdown": "Reports boolean methods which can be accessed via the same property name.\n\nThe result of accessing such property might be unexpected.\n\n**Example:**\n\n\n class X {\n boolean isFoo() { true }\n boolean getFoo() { false }\n }\n\n // getFoo() will be called\n new X().foo\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClashingGetters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySwitchStatementWithNoDefault", + "shortDescription": { + "text": "Switch statement with no default case" + }, + "fullDescription": { + "text": "Reports 'switch' statements that do not contain 'default' labels. Some coding practices may insist on adding this label to all 'switch' statements.", + "markdown": "Reports `switch` statements that do not contain `default` labels.\n\n\nSome coding practices may insist on adding this label to all `switch` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySwitchStatementWithNoDefault", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyListGetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to List.get can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.List.get()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def list = [\"foo\"]\ndef str = list.get(0) // list.get(0) could be replaced with list[0]'\n After the quick-fix is applied: 'def list = [\"foo\"]\ndef str = list[0]'", + "markdown": "Reports calls to `java.util.List.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n def str = list.get(0) // list.get(0) could be replaced with list[0]\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n def str = list[0]\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyListGetCanBeKeyedAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 23, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewInstanceOfSingleton", + "shortDescription": { + "text": "New instance of class annotated with @groovy.lang.Singleton" + }, + "fullDescription": { + "text": "Reports new instance creation of classes annotated with '@groovy.lang.Singleton'. Such constructions can lead to runtime exception Can't instantiate singleton. Example: '@Singleton\n class Foo{\n }\n \n Foo foo = new Foo()' After the quick-fix is applied: '@Singleton\n class Foo{\n }\n \n Foo foo = Foo.instance'", + "markdown": "Reports new instance creation of classes annotated with `@groovy.lang.Singleton`.\nSuch constructions can lead to runtime exception **Can't instantiate singleton**.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = new Foo()\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = Foo.instance\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NewInstanceOfSingleton", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrReassignedInClosureLocalVar", + "shortDescription": { + "text": "Local variable is reassigned in closure or anonymous class" + }, + "fullDescription": { + "text": "Reports local variables assigned to expression with different type inside of closure or anonymous class. Example: 'int sum = 0\n [1, 2, 3].each { sum += 'as' }\n println(sum)' As a result, the 'integer' variable sum is reassigned to a 'String' expression.", + "markdown": "Reports local variables assigned to expression with different type inside of closure or anonymous class.\n\n**Example:**\n\n\n int sum = 0\n [1, 2, 3].each { sum += 'as' }\n println(sum)\n\nAs a result, the `integer` variable **sum** is reassigned to a `String` expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrReassignedInClosureLocalVar", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMethodParameterCount", + "shortDescription": { + "text": "Method with too many parameters" + }, + "fullDescription": { + "text": "Reports methods with too many parameters. Method with too many parameters is a good sign that refactoring is necessary. Methods whose signatures are inherited from library classes are ignored by this inspection. Use the Maximum number of parameters: field to specify the maximum acceptable number of parameters a method might have.", + "markdown": "Reports methods with too many parameters. Method with too many parameters is a good sign that refactoring is necessary. Methods whose signatures are inherited from library classes are ignored by this inspection.\n\n\nUse the **Maximum number of parameters:** field to specify the maximum acceptable number of parameters a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMethodParameterCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedConditional", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. \"Elvis\" expressions are counted as conditionals for purpose of this inspection. Example: 'return (condition ? \"result\" : null) ?: \"fail\"'", + "markdown": "Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. \"Elvis\" expressions are counted as conditionals for purpose of this inspection.\n\n**Example:**\n\n\n return (condition ? \"result\" : null) ?: \"fail\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNestedConditional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLabeledStatement", + "shortDescription": { + "text": "Labeled statement inspection" + }, + "fullDescription": { + "text": "Reports labels already used in parent workflow. Example: 'def list = [\"foo\"]\ncycle:\nfor (element in list) {\n cycle: // confusing label repeat\n element.chars().forEach {\n }\n}'", + "markdown": "Reports labels already used in parent workflow.\n\n**Example:**\n\n\n def list = [\"foo\"]\n cycle:\n for (element in list) {\n cycle: // confusing label repeat\n element.chars().forEach {\n }\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyLabeledStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyStatementBody", + "shortDescription": { + "text": "Statement with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing, and often the result of a typo. Example: 'if (condition) {}\nwhile(true){}'", + "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies. While occasionally intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n if (condition) {}\n while(true){}\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyEmptyStatementBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentToForLoopParameter", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports assignments to for loop parameters inside the for loop body. While occasionally intended, this construct can be extremely confusing, and is often the result of a typo. Example: 'for (value in [1, 2, 3]) {\n value = 4 // warning\n }'", + "markdown": "Reports assignments to **for** loop parameters inside the **for** loop body.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n for (value in [1, 2, 3]) {\n value = 4 // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyAssignmentToForLoopParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentCanBeOperatorAssignment", + "shortDescription": { + "text": "Assignment can be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports assignments which can be replaced by an operator assignment. Example: 'a = a + b' After the quick-fix is applied: 'a += b' Configure the inspection: Use the Ignore conditional operators option to ignore '&&' and '||' operators. Use the Ignore obscure operators option to ignore '^' and '%' operators.", + "markdown": "Reports assignments which can be replaced by an operator assignment.\n\n**Example:**\n\n\n a = a + b\n\nAfter the quick-fix is applied:\n\n\n a += b\n\nConfigure the inspection:\n\n* Use the **Ignore conditional operators** option to ignore `&&` and `||` operators.\n* Use the **Ignore obscure operators** option to ignore `^` and `%` operators." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GroovyAssignmentCanBeOperatorAssignment", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyImplicitNullArgumentCall", + "shortDescription": { + "text": "Implicit null argument" + }, + "fullDescription": { + "text": "Reports calls with no arguments to method that has exactly one parameter. This is equivalent to call with 'null', and that behavior is often confusing and unintended. Example: 'def foo(String s){}\nfoo() // this call is actually 'foo(null)' call'", + "markdown": "Reports calls with no arguments to method that has exactly one parameter. This is equivalent to call with `null`, and that behavior is often confusing and unintended.\n\n**Example:**\n\n\n def foo(String s){}\n foo() // this call is actually 'foo(null)' call\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GroovyImplicitNullArgumentCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalWithIdenticalBranches", + "shortDescription": { + "text": "Ternary expression with identical branches" + }, + "fullDescription": { + "text": "Reports ternary expressions with identical \"then\" and \"else\" branches. Such expressions are almost certainly a programmer error. The quick-fix replaces the expression with its \"then\" branch. Example: 'condition ? a.foo() : a.foo()' After the quick-fix is applied: 'a.foo()'", + "markdown": "Reports ternary expressions with identical \"then\" and \"else\" branches. Such expressions are almost certainly a programmer error.\n\nThe quick-fix replaces the expression with its \"then\" branch.\n\n**Example:**\n\n\n condition ? a.foo() : a.foo()\n\nAfter the quick-fix is applied:\n\n\n a.foo()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConditionalWithIdenticalBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrAnnotationReferencingUnknownIdentifiers", + "shortDescription": { + "text": "@TupleConstructor and @MapConstructor" + }, + "fullDescription": { + "text": "Reports unresolved identifiers in '@TupleConstructor' and '@MapConstructor' 'includes' and 'excludes' annotation attribute values. Example: '// unresolved 'c'\n @TupleConstructor(includes = ['a', 'b', 'c'])\n class X {\n def a\n def b\n }'", + "markdown": "Reports unresolved identifiers in `@TupleConstructor` and `@MapConstructor` `includes` and `excludes` annotation attribute values.\n\n**Example:**\n\n\n // unresolved 'c'\n @TupleConstructor(includes = ['a', 'b', 'c'])\n class X {\n def a\n def b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrAnnotationReferencingUnknownIdentifiers", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 113, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryDefModifier", + "shortDescription": { + "text": "Unnecessary 'def'" + }, + "fullDescription": { + "text": "Reports unnecessary 'def' modifiers when used with explicit type declaration. Example: 'def boolean foo() {} // modifier is unnecessary\n def Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n def (int a, String b) = []'", + "markdown": "Reports unnecessary `def` modifiers when used with explicit type declaration.\n\n**Example:**\n\n\n def boolean foo() {} // modifier is unnecessary\n def Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n def (int a, String b) = []\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessaryDefModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPOJO", + "shortDescription": { + "text": "@POJO without @CompileStatic" + }, + "fullDescription": { + "text": "Reports annotation '@groovy.transform.stc.POJO' applied without '@groovy.transform.CompileStatic'. Annotation '@POJO' changes compilation process of Groovy classes to bytecode. It has no effect without explicitly enabled static compilation (which is done via '@CompileStatic' annotation). Example: '@POJO // reports @POJO\n class A {}'", + "markdown": "Reports annotation `@groovy.transform.stc.POJO` applied without `@groovy.transform.CompileStatic`.\n\nAnnotation `@POJO` changes compilation process of Groovy classes to bytecode. It has no effect without explicitly enabled static compilation (which is done via `@CompileStatic` annotation).\n\n**Example:**\n\n\n @POJO // reports @POJO\n class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrPOJO", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 113, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWaitWhileNotSynchronized", + "shortDescription": { + "text": "'wait()' while not synced" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' not made inside a corresponding synchronized statement or synchronized method. Calling 'wait()' on an object without holding a lock on that object will result in an 'IllegalMonitorStateException' being thrown. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but its worth looking at.", + "markdown": "Reports calls to `wait()` not made inside a corresponding synchronized\nstatement or synchronized method.\n\nCalling `wait()` on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but its worth looking at." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyWaitWhileNotSynchronized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalCanBeElvis", + "shortDescription": { + "text": "Ternary expression can be replaced with elvis expression" + }, + "fullDescription": { + "text": "Reports ternary expressions which can be replaced by an elvis expression. Example: 'def notNull(o, defaultValue) {\n o != null ? o : defaultValue\n }' After the quick-fix is applied: 'def notNull(o, defaultValue) {\n o ?: defaultValue\n }'", + "markdown": "Reports ternary expressions which can be replaced by an elvis expression.\n\n**Example:**\n\n\n def notNull(o, defaultValue) {\n o != null ? o : defaultValue\n }\n\nAfter the quick-fix is applied:\n\n\n def notNull(o, defaultValue) {\n o ?: defaultValue\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GroovyConditionalCanBeElvis", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyLongMethod", + "shortDescription": { + "text": "Overly long method" + }, + "fullDescription": { + "text": "Reports methods that are too long. Methods that are too long may be confusing, and are a good sign that refactoring is necessary. Use the Maximum statements per method field to specify the maximum acceptable number of non-comment source statements a method might have.", + "markdown": "Reports methods that are too long.\n\n\nMethods that are too long\nmay be confusing, and are a good sign that refactoring is necessary.\n\n\nUse the **Maximum statements per method** field to specify the maximum acceptable number of non-comment source\nstatements a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOverlyLongMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SecondUnsafeCall", + "shortDescription": { + "text": "Second unsafe call" + }, + "fullDescription": { + "text": "Reports possible NullPointerException during chain methods or properties call. Example: 'domain?.getZone().getName()' After the quick-fix is applied: 'domain?.getZone()?.getName()'", + "markdown": "Reports possible **NullPointerException** during chain methods or properties call.\n\n**Example:**\n\n\n domain?.getZone().getName()\n\nAfter the quick-fix is applied:\n\n\n domain?.getZone()?.getName()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SecondUnsafeCall", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPackage", + "shortDescription": { + "text": "Package mismatch" + }, + "fullDescription": { + "text": "Reports files with a declared package that does not match the package expected. Also, reports files without 'package' statements if the class is not located directly in the source root directory.", + "markdown": "Reports files with a declared package that does not match the package expected. Also, reports files without `package` statements if the class is not located directly in the source root directory." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrPackage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexBooleanExpression", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone. Use the Maximum number of terms field to specify the maximum number of terms allowed in a boolean expression.", + "markdown": "Reports boolean expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOverlyComplexBooleanExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySystemRunFinalizersOnExit", + "shortDescription": { + "text": "Call to System.runFinalizersOnExit()" + }, + "fullDescription": { + "text": "Reports calls to 'System.runFinalizersOnExit()'. This call is one of the most dangerous in the Java language. It is inherently non-thread-safe, may result in data corruption, deadlock, and may affect parts of the program far removed from its call point. It is deprecated, and its use is strongly discouraged.", + "markdown": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated, and its use is strongly discouraged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySystemRunFinalizersOnExit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryPublicModifier", + "shortDescription": { + "text": "Unnecessary 'public'" + }, + "fullDescription": { + "text": "Reports unnecessary 'public' modifiers as Groovy classes and methods are 'public' by default. Example: 'public class Foo{\n public void bar(){\n }\n }' After the quick-fix is applied: 'class Foo{\n void bar(){\n }\n }'", + "markdown": "Reports unnecessary `public` modifiers as Groovy classes and methods are `public` by default.\n\n**Example:**\n\n\n public class Foo{\n public void bar(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo{\n void bar(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessaryPublicModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingletonConstructor", + "shortDescription": { + "text": "@Singleton constructors" + }, + "fullDescription": { + "text": "Reports constructors of classes annotated by '@Singleton' unless it is declared non-strict. Example: '@Singleton\n class Foo{\n Foo(){\n }\n }' There are two possible quick-fixes: either to remove the constructor or to declare '@Singleton' non-strict. After the quick-fix is applied: '@Singleton\n class Foo{\n }' or: '@Singleton(strict = false)\n class Foo{\n Foo(){\n }\n }'", + "markdown": "Reports constructors of classes annotated by `@Singleton` unless it is declared non-strict.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n Foo(){\n }\n }\n\nThere are two possible quick-fixes: either to remove the constructor or to declare `@Singleton` non-strict.\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n\nor:\n\n\n @Singleton(strict = false)\n class Foo{\n Foo(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SingletonConstructor", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 113, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedIncOrDec", + "shortDescription": { + "text": "Unused incrementing or decrementing" + }, + "fullDescription": { + "text": "Reports unused incrementing and decrementing expressions.", + "markdown": "Reports unused incrementing and decrementing expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnusedIncOrDec", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 179, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyCatchBlock", + "shortDescription": { + "text": "Empty 'catch' block" + }, + "fullDescription": { + "text": "Reports empty 'catch' blocks. While occasionally intended, empty 'catch' blocks can make debugging extremely difficult. Example: 'try {\n throw new Exception()\n}\ncatch (Exception e) {\n}'\n After the quick-fix is applied: 'try {\n throw new Exception()\n}\ncatch (Exception ignored) {\n}'", + "markdown": "Reports empty `catch` blocks. While occasionally intended, empty `catch` blocks can make debugging extremely difficult.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n catch (Exception e) {\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throw new Exception()\n }\n catch (Exception ignored) {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyEmptyCatchBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyNestedMethod", + "shortDescription": { + "text": "Overly nested method" + }, + "fullDescription": { + "text": "Reports methods whose bodies are too deeply nested. Methods with too much statement nesting may be confusing, and are a good sign that refactoring may be necessary. Use the Maximum nesting depth field to specify the maximum acceptable nesting depth a method might have.", + "markdown": "Reports methods whose bodies are too deeply nested.\n\n\nMethods with too much statement\nnesting may be confusing, and are a good sign that refactoring may be necessary.\n\n\nUse the **Maximum nesting depth** field to specify the maximum acceptable nesting depth a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOverlyNestedMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyVariableNotAssigned", + "shortDescription": { + "text": "Variable not assigned" + }, + "fullDescription": { + "text": "Reports variables that might not have been initialized.", + "markdown": "Reports variables that might not have been initialized." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyVariableNotAssigned", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 179, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMethodWithMoreThanThreeNegations", + "shortDescription": { + "text": "Method with more than three negations" + }, + "fullDescription": { + "text": "Reports methods with three or more negation operations ('!' or '!='). Such methods may be unnecessarily confusing.", + "markdown": "Reports methods with three or more negation operations (`!` or `!=`). Such methods may be unnecessarily confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMethodWithMoreThanThreeNegations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrNamedVariantLabels", + "shortDescription": { + "text": "@NamedVariant/@NamedParam/@NamedDelegate unresolved label" + }, + "fullDescription": { + "text": "Reports unresolved argument labels in calls of methods annotated by '@NamedVariant'/'@NamedParam'/'@NamedDelegate'. Example: '@groovy.transform.NamedVariant\n def foo(a, b) {}\n\n // unresolved label 'c'\n foo(a: 1, b: 2, c: 3)'", + "markdown": "Reports unresolved argument labels in calls of methods annotated by `@NamedVariant`/`@NamedParam`/`@NamedDelegate`.\n\n**Example:**\n\n\n @groovy.transform.NamedVariant\n def foo(a, b) {}\n\n // unresolved label 'c'\n foo(a: 1, b: 2, c: 3)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrNamedVariantLabels", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 113, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNegatedConditional", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches will usually increase the clarity of such statements. Example: '~condition ? \"1\" : \"2\"'", + "markdown": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n ~condition ? \"1\" : \"2\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNegatedConditional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWhileLoopSpinsOnField", + "shortDescription": { + "text": "While loop spins on field" + }, + "fullDescription": { + "text": "Reports 'while' loops, which spin on the value of a non-'volatile' field, waiting for it to be changed by another thread. In addition to being potentially extremely CPU intensive when little work is done inside the loop, such loops likely have different semantics than intended. The Java Memory Model allows that loop to never complete even if another thread changes the field's value. Example: 'class SpinsOnField {\n boolean ready = false;\n\n void run() {\n // the loop may never complete even after\n // markAsReady call from the other thread\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' Additionally since Java 9, calling 'Thread.onSpinWait()' inside spin loop on a 'volatile' field is recommended, which may significantly improve performance on some hardware. Use the checkbox below to have this inspection report only empty 'while' loops.", + "markdown": "Reports `while` loops, which spin on the\nvalue of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops likely have different semantics than intended. The Java Memory Model allows that loop to never complete even\nif another thread changes the field's value.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n // the loop may never complete even after\n // markAsReady call from the other thread\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nAdditionally since Java 9, calling `Thread.onSpinWait()` inside spin loop\non a `volatile` field is recommended, which may significantly improve performance on some hardware.\n\n\nUse the checkbox below to have this inspection report only empty `while` loops." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyWhileLoopSpinsOnField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySillyAssignment", + "shortDescription": { + "text": "Silly assignment" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself.", + "markdown": "Reports assignments of a variable to itself." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySillyAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedSwitch", + "shortDescription": { + "text": "Nested switch statement" + }, + "fullDescription": { + "text": "Reports 'switch' statements that are nested inside other 'switch' statements. Such nested switch statements are confusing, and may result in unexpected behaviour. Example: 'switch (outer) {\n case 1:\n switch (inner) {\n case 1:\n print \"inner 1\"\n break\n default:\n print \"inner default\"\n }\n break\n default:\n print \"default\"\n}'", + "markdown": "Reports `switch` statements that are nested inside other `switch` statements. Such nested switch statements are confusing, and may result in unexpected behaviour.\n\n**Example:**\n\n\n switch (outer) {\n case 1:\n switch (inner) {\n case 1:\n print \"inner 1\"\n break\n default:\n print \"inner default\"\n }\n break\n default:\n print \"default\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNestedSwitch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyRangeTypeCheck", + "shortDescription": { + "text": "Incorrect range arguments" + }, + "fullDescription": { + "text": "Reports types used in ranges that do not have a 'next()' or 'previous()' method or do not implement the 'java.lang.Comparable' interface.", + "markdown": "Reports types used in ranges that do not have a `next()` or `previous()` method or do not implement the `java.lang.Comparable` interface." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyRangeTypeCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessarySealedModifier", + "shortDescription": { + "text": "Unnecessary 'sealed' modifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'sealed' modifiers which used on methods, fields, or variables. This modifier has effect only on classes, interfaces and traits. Example: 'sealed boolean foo() {} // modifier is unnecessary\n sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n sealed class A {}'", + "markdown": "Reports unnecessary `sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n sealed boolean foo() {} // modifier is unnecessary\n sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n sealed class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessarySealedModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrDeprecatedAPIUsage", + "shortDescription": { + "text": "Deprecated API usage" + }, + "fullDescription": { + "text": "Reports references to deprecated classes, fields, and methods.", + "markdown": "Reports references to deprecated classes, fields, and methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrDeprecatedAPIUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMissingReturnStatement", + "shortDescription": { + "text": "Missing return statement" + }, + "fullDescription": { + "text": "Reports missing 'return' statements at the end of methods with a non-void return type. The end of method should be reachable by the method's execution flow. Example: 'String foo(int a) {\n if (a > 0) {\n return \"more than zero\"\n }\n} // foo(-1) will return 'null'\n\nint bar(int a) {\n if (a > 0) {\n return a\n }\n} // bar(-1) will fall with runtime exception'", + "markdown": "Reports missing `return` statements at the end of methods with a non-**void** return type. The end of method should be reachable by the method's execution flow.\n\n**Example:**\n\n\n String foo(int a) {\n if (a > 0) {\n return \"more than zero\"\n }\n } // foo(-1) will return 'null'\n\n int bar(int a) {\n if (a > 0) {\n return a\n }\n } // bar(-1) will fall with runtime exception\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMissingReturnStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 179, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPublicFieldAccessedInSynchronizedContext", + "shortDescription": { + "text": "Non-private field accessed in synchronized context" + }, + "fullDescription": { + "text": "Reports non-'final', non-'private' fields which are accessed in a synchronized context. A non-private field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\" access may result in unexpectedly inconsistent data structures. Accesses in constructors an initializers are ignored for purposes of this inspection.", + "markdown": "Reports non-`final`, non-`private` fields which are accessed in a synchronized context.\n\n\nA non-private field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures. Accesses in constructors an initializers are ignored\nfor purposes of this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyPublicFieldAccessedInSynchronizedContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports the cases where a variable is redundant as its value is never used after its assignment. If the variable is unused, we recommend removing it to shorten the code and to avoid redundant allocations. The following cases are reported: the variable never gets read after assignment the value is always overwritten with another assignment before the next variable read the variable initializer is redundant (for one of the above two reasons) For more info see the same inspection in Java.", + "markdown": "Reports the cases where a variable is redundant as its value is never used after its assignment.\n\nIf the variable is unused, we recommend removing it to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* the variable never gets read after assignment\n* the value is always overwritten with another assignment before the next variable read\n* the variable initializer is redundant (for one of the above two reasons)\n\nFor more info see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnusedAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 179, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyBusyWait", + "shortDescription": { + "text": "Busy wait" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' that occur inside loops. Such calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks as busy-waiting threads do not release locked resources.", + "markdown": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\n\nSuch calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyBusyWait", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOctalInteger", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals.", + "markdown": "Reports octal integer literals.\n\n\nSome coding standards prohibit the\nuse of octal literals, as they may be easily confused with decimal literals." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOctalInteger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnVariableInitializedWithLiteral", + "shortDescription": { + "text": "Synchronization on variable initialized with literal" + }, + "fullDescription": { + "text": "Reports synchronized blocks which lock on an object which is initialized with a literal. String literals are interned and 'Number' literals can be allocated from a cache. Because of this, it is possible that some other part of the system which uses an object initialized with the same literal, is actually holding a reference to the exact same object. This can create unexpected dead-lock situations, if the string was thought to be private.", + "markdown": "Reports synchronized blocks which lock on an object which is initialized with a literal.\n\n\nString literals are interned and `Number` literals can be allocated from a cache. Because of\nthis, it is possible that some other part of the system which uses an object initialized with the same\nliteral, is actually holding a reference to the exact same object. This can create unexpected dead-lock\nsituations, if the string was thought to be private." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySynchronizationOnVariableInitializedWithLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfIncrementOrDecrementUsed", + "shortDescription": { + "text": "Result of increment or decrement used" + }, + "fullDescription": { + "text": "Reports increment or decrement expressions nested inside other expressions. Such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing.", + "markdown": "Reports increment or decrement expressions nested inside other expressions.\n\n\nSuch expressions may be confusing, and violate the general design principle that a\ngiven construct should do precisely one thing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyResultOfIncrementOrDecrementUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnNonFinalField", + "shortDescription": { + "text": "Synchronization on non-final field" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements where the lock expression is a non-'final' field. Such statements are unlikely to have useful semantics, as different threads may be locking on different objects even when operating on the same object.", + "markdown": "Reports `synchronized` statements where the lock expression is a non-`final` field.\n\n\nSuch statements are unlikely to have useful semantics, as different\nthreads may be locking on different objects even when operating on the same object." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySynchronizationOnNonFinalField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyThreadStopSuspendResume", + "shortDescription": { + "text": "Call to Thread.stop(), Thread.suspend(), or Thread.resume()" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.stop()','Thread.suspend()', or 'Thread.resume()'. These calls are inherently prone to data corruption and deadlock, and their use is strongly discouraged.", + "markdown": "Reports calls to `Thread.stop()`,`Thread.suspend()`, or `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlock, and their use is strongly\ndiscouraged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyThreadStopSuspendResume", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyContinueOrBreakFromFinallyBlock", + "shortDescription": { + "text": "'continue' or 'break' from 'finally' block" + }, + "fullDescription": { + "text": "Reports 'break' and 'continue' statements inside of 'finally' blocks. While occasionally intended, such statements are very confusing, may mask thrown exceptions, and tremendously complicate debugging.", + "markdown": "Reports `break` and `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and tremendously complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyContinueOrBreakFromFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentToMethodParameter", + "shortDescription": { + "text": "Assignment to method parameter" + }, + "fullDescription": { + "text": "Reports assignment to method parameters. While occasionally intended, this construct can be extremely confusing, and is often the result of a typo. Example: 'def m(a, b, c) {\n a = [] // warning\n }'", + "markdown": "Reports assignment to method parameters.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n def m(a, b, c) {\n a = [] // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyAssignmentToMethodParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyStaticMethodNamingConvention", + "shortDescription": { + "text": "Static method naming convention" + }, + "fullDescription": { + "text": "Reports static methods whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for static method names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports static methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyStaticMethodNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyTrivialIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements which can be simplified to single assignment or 'return' statements. Example: 'if (foo())\n return true;\n else\n return false;' After the quick-fix is applied: 'return foo();'", + "markdown": "Reports `if` statements which can be simplified to single assignment or `return` statements.\n\n**Example:**\n\n\n if (foo())\n return true;\n else\n return false;\n\nAfter the quick-fix is applied:\n\n\n return foo();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyTrivialIf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPointlessArithmetic", + "shortDescription": { + "text": "Pointless arithmetic expression" + }, + "fullDescription": { + "text": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may be the result of automated refactorings not completely followed through to completion, and in any case are unlikely to be what the developer intended to do. Example: 'a + 0' After the quick-fix is applied: 'a'", + "markdown": "Reports pointless arithmetic expressions.\n\n\nSuch expressions include adding or subtracting zero, multiplying by zero or one,\ndivision by one, and shift by zero. Such expressions may be the result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n a + 0\n\nAfter the quick-fix is applied:\n\n\n a\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyPointlessArithmetic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUncheckedAssignmentOfMemberOfRawType", + "shortDescription": { + "text": "Unchecked assignment from members of raw type" + }, + "fullDescription": { + "text": "Reports unchecked assignments from members of raw type. Example: 'List list = new ArrayList()\n List<String> a = list.get(0)'", + "markdown": "Reports unchecked assignments from members of raw type.\n\n**Example:**\n\n\n List list = new ArrayList()\n List<String> a = list.get(0)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUncheckedAssignmentOfMemberOfRawType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrMethodMayBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports methods which may safely be made 'static'. A method may be 'static' if it is not 'synchronized', it does not reference any of its class' instance methods and instance fields, and it is not overridden in a subclass.", + "markdown": "Reports methods which may safely be made `static`.\n\n\nA method may be `static` if it is not `synchronized`,\nit does not reference any of its class' instance methods and instance fields,\nand it is not overridden in a subclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrMethodMayBeStatic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Other", + "index": 194, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDivideByZero", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports divisions by zero or remainders by zero. Example: 'def a = 42\n a / 0 // warning\n a % 0.0 // warning'", + "markdown": "Reports divisions by zero or remainders by zero.\n\n**Example:**\n\n\n def a = 42\n a / 0 // warning\n a % 0.0 // warning\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyDivideByZero", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessarySemicolon", + "shortDescription": { + "text": "Unnecessary semicolon" + }, + "fullDescription": { + "text": "Reports unnecessary semicolons. Example: 'print 2; print 3 // semicolon is required\n print 2; // semicolon is unnecessary'", + "markdown": "Reports unnecessary semicolons.\n\n**Example:**\n\n\n print 2; print 3 // semicolon is required\n print 2; // semicolon is unnecessary\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessarySemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryQualifiedReference", + "shortDescription": { + "text": "Unnecessary qualified reference" + }, + "fullDescription": { + "text": "Reports fully qualified references, which can be replaced with import. Example: 'def swingBuilder = new groovy.swing.SwingBuilder()' After the quick-fix is applied: 'import groovy.swing.SwingBuilder\n \n def swingBuilder = new SwingBuilder()'", + "markdown": "Reports fully qualified references, which can be replaced with import.\n\n**Example:**\n\n\n def swingBuilder = new groovy.swing.SwingBuilder()\n\nAfter the quick-fix is applied:\n\n\n import groovy.swing.SwingBuilder\n \n def swingBuilder = new SwingBuilder()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryQualifiedReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChangeToMethod", + "shortDescription": { + "text": "Operator invocation can be replaced with method call" + }, + "fullDescription": { + "text": "Reports operator invocations that can be replaced with method calls. Example: 'a + b' After the quick-fix is applied: 'a.plus(b)'", + "markdown": "Reports operator invocations that can be replaced with method calls.\n\n**Example:**\n\n\n a + b\n\nAfter the quick-fix is applied:\n\n\n a.plus(b)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ChangeToMethod", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyBreak", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements outside of 'switch' statements.", + "markdown": "Reports `break` statements outside of `switch` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyBreak", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantConditional", + "shortDescription": { + "text": "Constant conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions with boolean constant as a condition. Example: 'true ? result1 : result2\n false ? result1 : result2'", + "markdown": "Reports conditional expressions with boolean constant as a condition.\n\n**Example:**\n\n\n true ? result1 : result2\n false ? result1 : result2\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConstantConditional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrSwitchExhaustivenessCheck", + "shortDescription": { + "text": "Exhaustiveness check for switch expressions" + }, + "fullDescription": { + "text": "Reports switch expressions that do not cover all possible outcomes of the matched expression. Groovy does not require that switch expression must be exhaustive. It acts as if an implicit 'default -> null' branch is inserted. It may cause unexpected nulls if a developer forgets to insert necessary 'case' branches. Example: 'enum A { X, Y }\n\n def foo(A a) {\n def x = switch (a) { // reports switch\n case A.X -> ...\n }\n }'", + "markdown": "Reports switch expressions that do not cover all possible outcomes of the matched expression.\n\nGroovy does not require that switch expression must be exhaustive. It acts as if an implicit `default -> null` branch is inserted.\nIt may cause unexpected nulls if a developer forgets to insert necessary `case` branches.\n\n**Example:**\n\n\n enum A { X, Y }\n\n def foo(A a) {\n def x = switch (a) { // reports switch\n case A.X -> ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrSwitchExhaustivenessCheck", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignabilityCheck", + "shortDescription": { + "text": "Incompatible type assignments" + }, + "fullDescription": { + "text": "Reports assignments with incompatible types. Such assignments might result in various runtime exceptions. Example: 'class A {}\n class B {}\n\n // incompatible assignment\n A a = new B()'", + "markdown": "Reports assignments with incompatible types.\n\nSuch assignments might result in various runtime exceptions.\n\n**Example:**\n\n\n class A {}\n class B {}\n\n // incompatible assignment\n A a = new B()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyAssignabilityCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 123, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUntypedAccess", + "shortDescription": { + "text": "Untyped reference expression" + }, + "fullDescription": { + "text": "Reports reference expressions whose type can't be determined.", + "markdown": "Reports reference expressions whose type can't be determined." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUntypedAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfObjectAllocationIgnored", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocation where the result of this operation is ignored. Such allocation expressions are legal Groovy, but are usually either inadvertent, or evidence of a complicated object initialization strategy.", + "markdown": "Reports object allocation where the result of this operation is ignored.\n\n\nSuch allocation expressions are legal Groovy, but are usually either inadvertent, or\nevidence of a complicated object initialization strategy." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyResultOfObjectAllocationIgnored", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDocCheck", + "shortDescription": { + "text": "Unresolved GroovyDoc reference" + }, + "fullDescription": { + "text": "Reports unresolved references inside GroovyDoc comments.", + "markdown": "Reports unresolved references inside GroovyDoc comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GroovyDocCheck", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedCatchParameter", + "shortDescription": { + "text": "Unused 'catch' parameter" + }, + "fullDescription": { + "text": "Reports catch parameters that are unused in their corresponding blocks. This inspection will not report any catch parameters named \"ignore\" or \"ignored\". Example: 'try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ex) {\n println('Catching the exception')\n }' Here the parameter ex is never used in catch block. After the quick-fix is applied: 'try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ignored) {\n println('Catching the exception')\n }'", + "markdown": "Reports **catch** parameters that are unused in their\ncorresponding blocks. This inspection will not report any **catch** parameters\nnamed \"ignore\" or \"ignored\".\n\n**Example:**\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ex) {\n println('Catching the exception')\n }\n\nHere the parameter **ex** is never used in **catch** block.\n\nAfter the quick-fix is applied:\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ignored) {\n println('Catching the exception')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnusedCatchParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInstanceMethodNamingConvention", + "shortDescription": { + "text": "Instance method naming convention" + }, + "fullDescription": { + "text": "Reports instance methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods are ignored by this inspection. Use the fields provided below to specify minimum length, maximum length and regular expression expected for instance method names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports instance methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods are ignored by this inspection.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for instance method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyInstanceMethodNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDuplicateSwitchBranch", + "shortDescription": { + "text": "Duplicate switch case" + }, + "fullDescription": { + "text": "Reports duplicated expressions in 'case' labels for 'switch' statements. Example: 'switch (n) {\n case 1: //duplicate\n break\n case 1: //duplicate\n System.out.println(\"2\")\n break\n default:\n System.out.println(\"default\");\n}'", + "markdown": "Reports duplicated expressions in `case` labels for `switch` statements.\n\n**Example:**\n\n\n switch (n) {\n case 1: //duplicate\n break\n case 1: //duplicate\n System.out.println(\"2\")\n break\n default:\n System.out.println(\"default\");\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyDuplicateSwitchBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Validity issues", + "index": 197, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnThis", + "shortDescription": { + "text": "Synchronization on 'this'" + }, + "fullDescription": { + "text": "Reports synchronization which uses 'this' as its lock expression. Constructs reported include 'synchronized' blocks which lock 'this', and calls to 'wait()' 'notify()' or 'notifyAll()' which target 'wait()'. Such constructs, like synchronized methods, make it hard to track just who is locking on a given object, and make possible \"denial of service\" attacks on objects. As an alternative, consider locking on a private instance variable, access to which can be completely controlled.", + "markdown": "Reports synchronization which uses `this` as its lock expression.\n\n\nConstructs reported include `synchronized`\nblocks which lock `this`, and calls to `wait()`\n`notify()` or `notifyAll()` which target `wait()`.\nSuch constructs, like synchronized methods, make it hard to track just who is locking on a given\nobject, and make possible \"denial of service\" attacks on objects. As an alternative, consider\nlocking on a private instance variable, access to which can be completely controlled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovySynchronizationOnThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedSynchronizedStatement", + "shortDescription": { + "text": "Nested 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports nested 'synchronized' statements. Nested 'synchronized' statements are either redundant (if the lock objects are identical) or prone to deadlock.", + "markdown": "Reports nested `synchronized` statements.\n\n\nNested `synchronized` statements\nare either redundant (if the lock objects are identical) or prone to deadlock." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNestedSynchronizedStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyGStringKey", + "shortDescription": { + "text": "GString map key" + }, + "fullDescription": { + "text": "Reports statements which use a 'groovy.lang.GString' object as a key to map. In general 'GString' objects are mutable and probably should not be used as keys. Also, a 'GString' entry cannot be accessed with a 'java.lang.String' object with same value. Example: 'def map = [:]\ndef key = 'foo'\nmap << [\"${key}\": 'bar']\nassert map[key] == null // confusing 'true' result of comparison'\n New in 2017.1", + "markdown": "Reports statements which use a `groovy.lang.GString` object as a key to map. In general `GString` objects are mutable and probably should not be used as keys. Also, a `GString` entry cannot be accessed with a `java.lang.String` object with same value.\n\n**Example:**\n\n\n def map = [:]\n def key = 'foo'\n map << [\"${key}\": 'bar']\n assert map[key] == null // confusing 'true' result of comparison\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyGStringKey", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyVariableCanBeFinal", + "shortDescription": { + "text": "Variable can be final" + }, + "fullDescription": { + "text": "Reports parameters or local variables that may have a final modifier added. Example: 'def list = [1,2,3]\n return list' After the quick-fix is applied: 'final def list = [1,2,3]\n return list' For more information, see the same inspection in Java.", + "markdown": "Reports parameters or local variables that may have a final modifier added.\n\n**Example:**\n\n\n def list = [1,2,3]\n return list\n\nAfter the quick-fix is applied:\n\n\n final def list = [1,2,3]\n return list\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyVariableCanBeFinal", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 179, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWaitCallNotInLoop", + "shortDescription": { + "text": "'wait()' not in loop" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' not made inside a loop. 'wait()' is normally used to suspend a thread until a condition is true, and that condition should be checked after the 'wait()' returns. A loop is the clearest way to achieve this.", + "markdown": "Reports calls to `wait()` not made inside a loop.\n\n`wait()` is normally used to suspend a thread until a condition is true, and that condition should be checked after the `wait()`\nreturns. A loop is the clearest way to achieve this." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyWaitCallNotInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnnecessaryReturn", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports 'return' statements at the end of constructors and methods returning 'void'. These are unnecessary and may be safely removed. Example: 'void foo (String s){\n print(s)\n return\n }' After the quick-fix is applied: 'void foo (String s){\n print(s)\n }' For more information, see the same inspection in Java.", + "markdown": "Reports `return` statements at the end of constructors and methods returning\n`void`. These are unnecessary and may be safely removed.\n\n**Example:**\n\n\n void foo (String s){\n print(s)\n return\n }\n\nAfter the quick-fix is applied:\n\n\n void foo (String s){\n print(s)\n }\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnnecessaryReturn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditional", + "shortDescription": { + "text": "Ternary expression" + }, + "fullDescription": { + "text": "Reports ternary expressions. Some coding standards prohibit the use of the condition operator in favor of 'if' statements.", + "markdown": "Reports ternary expressions.\n\nSome coding standards prohibit the use of the condition operator in favor of `if` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConditional", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAccessToStaticFieldLockedOnInstance", + "shortDescription": { + "text": "Access to static field locked on instance data" + }, + "fullDescription": { + "text": "Reports accesses to a non-constant static field which is locked on either 'this' or an instance field of 'this'. Locking a static field on instance data does not prevent the field from being modified by other instances, and thus may result in surprising race conditions. Example: 'static String s;\n def foo() {\n synchronized (this) {\n System.out.println(s); // warning\n }\n }'", + "markdown": "Reports accesses to a non-constant static field which is locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in surprising race conditions.\n\n**Example:**\n\n\n static String s;\n def foo() {\n synchronized (this) {\n System.out.println(s); // warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyAccessToStaticFieldLockedOnInstance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryAlias", + "shortDescription": { + "text": "Unnecessary import alias" + }, + "fullDescription": { + "text": "Reports unnecessary import aliases. Example: 'import com.foo.Bar as Bar' After the quick-fix is applied: 'import com.foo.Bar'", + "markdown": "Reports unnecessary import aliases.\n\n**Example:**\n\n\n import com.foo.Bar as Bar\n\nAfter the quick-fix is applied:\n\n\n import com.foo.Bar\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrUnnecessaryAlias", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyReturnFromFinallyBlock", + "shortDescription": { + "text": "'return' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'return' statements inside of 'finally' blocks. While occasionally intended, such 'return' statements may mask exceptions thrown, and complicate debugging.", + "markdown": "Reports `return` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `return` statements may mask exceptions thrown, and\ncomplicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyReturnFromFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstructorNamedArguments", + "shortDescription": { + "text": "Named arguments of constructor call" + }, + "fullDescription": { + "text": "Reports named arguments of a default class constructor call which don't correspond to properties of this class. Example: 'class Person {\n def name\n def age\n }\n\n // 'firstName' property doesn't exist\n new Person(firstName: \"John\")'", + "markdown": "Reports named arguments of a default class constructor call which don't correspond to properties of this class.\n\n**Example:**\n\n\n class Person {\n def name\n def age\n }\n\n // 'firstName' property doesn't exist\n new Person(firstName: \"John\")\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConstructorNamedArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryNonSealedModifier", + "shortDescription": { + "text": "Unnecessary 'non-sealed' modifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'non-sealed' modifiers which used on methods, fields, or variables. This modifier has effect only on classes, interfaces and traits. Example: 'non-sealed boolean foo() {} // modifier is unnecessary\n non-sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n non-sealed class A {}'", + "markdown": "Reports unnecessary `non-sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n non-sealed boolean foo() {} // modifier is unnecessary\n non-sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n non-sealed class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessaryNonSealedModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnresolvedAccess", + "shortDescription": { + "text": "Unresolved reference expression" + }, + "fullDescription": { + "text": "Reports reference expressions which cannot be resolved.", + "markdown": "Reports reference expressions which cannot be resolved." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrUnresolvedAccess", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMultipleReturnPointsPerMethod", + "shortDescription": { + "text": "Method with multiple return points" + }, + "fullDescription": { + "text": "Reports methods with too many return points. Methods with too many return points may be confusing, and hard to refactor. Example: 'int foo(int a) {\n if (a > 0) {\n return a\n }\n if (a < 0) return -a\n return 0\n }'\n Use the field provided below to specify the maximum acceptable number of return points a method might have.", + "markdown": "Reports methods with too many return points. Methods with too many return points may be confusing, and hard to refactor.\n\n**Example:**\n\n\n int foo(int a) {\n if (a > 0) {\n return a\n }\n if (a < 0) return -a\n return 0\n }\n\n\nUse the field provided below to specify the maximum acceptable number of return points a method\nmight have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyMultipleReturnPointsPerMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryFinalModifier", + "shortDescription": { + "text": "Unnecessary 'final'" + }, + "fullDescription": { + "text": "Reports unnecessary 'final' modifiers when used with the record definition. Example: 'final record R(int a) {} // modifier is unnecessary'", + "markdown": "Reports unnecessary `final` modifiers when used with the record definition.\n\n**Example:**\n\n\n final record R(int a) {} // modifier is unnecessary\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrUnnecessaryFinalModifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnreachableStatement", + "shortDescription": { + "text": "Unreachable statement" + }, + "fullDescription": { + "text": "Reports statements that are unreachable. This can occur if the statement is after an infinite loop, 'return', 'break', or 'continue' statement. Example: 'void foo (int n) {\n if (n < 1) {\n return\n print('This statement is unreachable')\n }\n while (true){\n print ('Hello, world!')\n }\n print('This statement is unreachable too')\n }'", + "markdown": "Reports statements that are unreachable. This can occur if the statement is after an infinite loop,\n`return`, `break`, or `continue` statement.\n\n**Example:**\n\n\n void foo (int n) {\n if (n < 1) {\n return\n print('This statement is unreachable')\n }\n while (true){\n print ('Hello, world!')\n }\n print('This statement is unreachable too')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnreachableStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Validity issues", + "index": 197, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInstanceVariableNamingConvention", + "shortDescription": { + "text": "Instance variable naming convention" + }, + "fullDescription": { + "text": "Reports instance variables whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for instance variable names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports instance variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for\ninstance variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyInstanceVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantIfStatement", + "shortDescription": { + "text": "Constant if statement" + }, + "fullDescription": { + "text": "Reports 'if' statements with boolean constant as a condition. Example: 'if (true) {\n // ...\n }\n if (false) {\n // ...\n }'", + "markdown": "Reports `if` statements with boolean constant as a condition.\n\n**Example:**\n\n\n if (true) {\n // ...\n }\n if (false) {\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyConstantIfStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyParameterNamingConvention", + "shortDescription": { + "text": "Method parameter naming convention" + }, + "fullDescription": { + "text": "Reports method parameters whose names are either too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for method parameter names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports method parameters whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for method parameter names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyParameterNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrStringStyleViolation", + "shortDescription": { + "text": "String style violation" + }, + "fullDescription": { + "text": "Reports strings with quotation that doesn't match code style. Example: 'def hw = \"Hello, world!\"' After the quick-fix is applied: 'def hw = 'Hello, world!'' Use the fields provided below to specify code style for different kinds of strings.", + "markdown": "Reports strings with quotation that doesn't match code style.\n\n**Example:**\n\n\n def hw = \"Hello, world!\"\n\nAfter the quick-fix is applied:\n\n\n def hw = 'Hello, world!'\n\nUse the fields provided below to specify code style for different kinds of strings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrStringStyleViolation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 93, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPointlessBoolean", + "shortDescription": { + "text": "Pointless boolean expression" + }, + "fullDescription": { + "text": "Reports pointless or pointlessly complicated boolean expressions. Such expressions include conjunction with true, disjunction with false, equality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be the result of automated refactorings not completely followed through to completion, and in any case are unlikely to be what the developer intended to do. Example: 'if (someBool && true) {}' After the quick-fix is applied: 'if (someBool) {}'", + "markdown": "Reports pointless or pointlessly complicated boolean expressions.\n\n\nSuch expressions include conjunction with true,\ndisjunction with false,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be\nthe result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n if (someBool && true) {}\n\nAfter the quick-fix is applied:\n\n\n if (someBool) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyPointlessBoolean", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyStaticVariableNamingConvention", + "shortDescription": { + "text": "Static variable naming convention" + }, + "fullDescription": { + "text": "Reports 'static' variables whose names are too short, too long, or do not follow the specified regular expression pattern. Constants, i.e. variables of immutable type declared 'static final', are not checked by this inspection Use the fields provided below to specify minimum length, maximum length and regular expression expected for static variable names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports `static` variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nConstants, i.e. variables of immutable type declared\n`static final`, are not checked by this inspection\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyStaticVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 42, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInfiniteLoopStatement", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports 'for', 'while', or 'do' statements which can only exit by throwing an exception. While such statements may be correct, they usually happen by mistake. Example: 'while(true) {\n Thread.sleep(1000)\n}'", + "markdown": "Reports `for`, `while`, or `do` statements which can only exit by throwing an exception. While such statements may be correct, they usually happen by mistake.\n\n**Example:**\n\n\n while(true) {\n Thread.sleep(1000)\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyInfiniteLoopStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyTryBlock", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports empty 'try' blocks. Empty 'try' blocks usually indicate coding errors. Example: 'try {\n}\nfinally {\n close()\n}'", + "markdown": "Reports empty `try` blocks. Empty `try` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n }\n finally {\n close()\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyEmptyTryBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPermitsClause", + "shortDescription": { + "text": "Non-extending permitted subclasses" + }, + "fullDescription": { + "text": "Reports permitted classes that do not extend the sealed base class. Groovy does not require that all permitted classes should be available in compile-time and compiled along with base class. Compiler will not warn the user on dealing with non-extending permitted subclass, but it contradicts the nature of sealed classes. Example: 'class A permits B {} // reports B\n class B {}'", + "markdown": "Reports permitted classes that do not extend the sealed base class.\n\nGroovy does not require that all permitted classes should be available in compile-time and compiled along with base class. Compiler will not warn the user on dealing with non-extending permitted subclass, but it contradicts the nature of sealed classes.\n\n**Example:**\n\n\n class A permits B {} // reports B\n class B {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GrPermitsClause", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClashingTraitMethods", + "shortDescription": { + "text": "Clashing trait methods" + }, + "fullDescription": { + "text": "Reports classes which implement two or more traits that contain methods with same signatures. The result of calling such methods might be unexpected. The quick-fix adds an explicit overriding method. Example: 'trait T1 {\n def foo() {}\n }\n\n trait T2 {\n def foo() {}\n }\n\n class X implements T1, T2 {}\n\n // T2.foo() will be called\n new X().foo()' After the quick-fix is applied: 'class X implements T1, T2 {\n @Override\n Object foo() {\n return T2.super.foo()\n }\n }'", + "markdown": "Reports classes which implement two or more traits that contain methods with same signatures.\n\nThe result of calling such methods might be unexpected.\n\nThe quick-fix adds an explicit overriding method.\n\n**Example:**\n\n\n trait T1 {\n def foo() {}\n }\n\n trait T2 {\n def foo() {}\n }\n\n class X implements T1, T2 {}\n\n // T2.foo() will be called\n new X().foo()\n\nAfter the quick-fix is applied:\n\n\n class X implements T1, T2 {\n @Override\n Object foo() {\n return T2.super.foo()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ClashingTraitMethods", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexMethod", + "shortDescription": { + "text": "Overly complex method" + }, + "fullDescription": { + "text": "Reports methods that have too high a cyclomatic complexity. Cyclomatic complexity is basically a measurement of the number of branching points in a method. Methods with too high a cyclomatic complexity may be confusing and difficult to test. Use the Method complexity limit field to specify the maximum acceptable cyclomatic complexity a method might have.", + "markdown": "Reports methods that have too high a cyclomatic complexity.\n\n\nCyclomatic\ncomplexity is basically a measurement of the number of branching points in a method. Methods with too high\na cyclomatic complexity may be confusing and difficult to test.\n\n\nUse the **Method complexity limit** field to specify the maximum acceptable cyclomatic complexity a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyOverlyComplexMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 147, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeCustomizer", + "shortDescription": { + "text": "Type customizer inspection" + }, + "fullDescription": { + "text": "Reports files which can be custom type checkers and are not added to compiler resources yet.", + "markdown": "Reports files which can be custom type checkers and are not added to compiler resources yet." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeCustomizer", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Other", + "index": 194, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDoubleNegation", + "shortDescription": { + "text": "Double negation" + }, + "fullDescription": { + "text": "Reports double negation that can be simplified. Example: 'if (!!functionCall()) {} // double negation\nif (!(a != b)) {} // double negation'\n After the quick-fix is applied: 'if (functionCall()) {}\nif (a == b) {}'", + "markdown": "Reports double negation that can be simplified.\n\n**Example:**\n\n\n if (!!functionCall()) {} // double negation\n if (!(a != b)) {} // double negation\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n if (a == b) {}\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyDoubleNegation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 118, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyIfStatementWithTooManyBranches", + "shortDescription": { + "text": "If statement with too many branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with too many branches. Such statements may be confusing, and are often the sign of inadequate levels of design abstraction. Example: 'if (a) {\n print \"foo\"\n} else if (b) {\n print \"bar\"\n} else if (c) {\n print \"baz\"\n} else if (d) {\n print \"Too many branches\"\n}'\n Use the Maximum number of branches field to specify the maximum number of branches expected.", + "markdown": "Reports `if` statements with too many branches. Such statements may be confusing, and are often the sign of inadequate levels of design abstraction.\n\n**Example:**\n\n\n if (a) {\n print \"foo\"\n } else if (b) {\n print \"bar\"\n } else if (c) {\n print \"baz\"\n } else if (d) {\n print \"Too many branches\"\n }\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyIfStatementWithTooManyBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrEqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the target and argument are of incompatible types. While such a call might theoretically be useful, most likely it represents a bug. Example: 'new HashSet() == new TreeSet())'", + "markdown": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n\n new HashSet() == new TreeSet())\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GrEqualsBetweenInconvertibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptySyncBlock", + "shortDescription": { + "text": "Empty 'synchronized' block" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements with empty bodies. While theoretically this may be the semantics intended, this construction is confusing, and often the result of a typo. Example: 'synchronized(lock) {\n}'", + "markdown": "Reports `synchronized` statements with empty bodies. While theoretically this may be the semantics intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n synchronized(lock) {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyEmptySyncBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalCanBeConditionalCall", + "shortDescription": { + "text": "Ternary expression can be replaced with safe call" + }, + "fullDescription": { + "text": "Reports ternary expressions which can be replaced by a safe call. Example: 'def charArray(String s) {\n s == null ? null : s.toCharArray()\n }' After the quick-fix is applied: 'def charArray(String s) {\n s?.toCharArray()\n }'", + "markdown": "Reports ternary expressions which can be replaced by a safe call.\n\n**Example:**\n\n\n def charArray(String s) {\n s == null ? null : s.toCharArray()\n }\n\nAfter the quick-fix is applied:\n\n\n def charArray(String s) {\n s?.toCharArray()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GroovyConditionalCanBeConditionalCall", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInfiniteRecursion", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports methods which must either recurse infinitely or throw an exception. Methods reported by this inspection could not be finished correct. Example: '// this function always dive deeper\ndef fibonacci(int n) {\n return fibonacci(n-1) + fibonacci(n-2)\n}'", + "markdown": "Reports methods which must either recurse infinitely or throw an exception. Methods reported by this inspection could not be finished correct.\n\n**Example:**\n\n\n // this function always dive deeper\n def fibonacci(int n) {\n return fibonacci(n-1) + fibonacci(n-2)\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyInfiniteRecursion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 60, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnnecessaryContinue", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements if they are last reachable statements in the loop. These 'continue' statements are unnecessary and can be safely removed. Example: 'for(int i in array) {\n println(i)\n continue\n }' After the quick-fix is applied: 'for(int i in array) {\n println(i)\n }' For more information, see the same inspection in Java.", + "markdown": "Reports `continue` statements if they are last reachable statements in the loop.\nThese `continue` statements are unnecessary and can be safely removed.\n\n**Example:**\n\n\n for(int i in array) {\n println(i)\n continue\n }\n\nAfter the quick-fix is applied:\n\n\n for(int i in array) {\n println(i)\n }\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnnecessaryContinue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNotifyWhileNotSynchronized", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' while not synced" + }, + "fullDescription": { + "text": "Reports calls to 'notify()' and 'notifyAll()' not within a corresponding synchronized statement or synchronized method. Calling these methods on an object without holding a lock on that object will result in an 'IllegalMonitorStateException' being thrown. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but it's worth looking at.", + "markdown": "Reports calls to `notify()` and `notifyAll()` not within a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyNotifyWhileNotSynchronized", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 89, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyFinallyBlock", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports empty 'finally' blocks. Empty 'finally' blocks usually indicate coding errors. Example: 'try {\n throw new Exception()\n}\nfinally {\n}'", + "markdown": "Reports empty `finally` blocks. Empty `finally` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n finally {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyEmptyFinallyBlock", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 119, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused classes, methods and fields. Example: 'public class Department {\n private Organization myOrganization;\n }' Here 'Department' explicitly references 'Organization' but if 'Department' class itself is unused, then inspection would report both classes. The inspection also reports parameters, which are not used by their methods and all method implementations/overriders, as well as local variables, which are declared but not used. For more information, see the same inspection in Java.", + "markdown": "Reports unused classes, methods and fields.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nHere `Department` explicitly references `Organization` but if `Department` class itself is unused,\nthen inspection would report both classes.\n\n\nThe inspection also reports parameters, which are not used by their methods and all method implementations/overriders, as well as local\nvariables, which are declared but not used.\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyUnusedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Declaration redundancy", + "index": 205, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLoopStatementThatDoesntLoop", + "shortDescription": { + "text": "Loop statement that doesn't loop" + }, + "fullDescription": { + "text": "Reports 'for' or 'while' statements whose bodies are guaranteed to execute at most once. While such statements could be written intentionally, they are usually a symptom of error. Example: 'for (int i in 0..<10) {\n return\n }'", + "markdown": "Reports `for` or `while` statements whose bodies are guaranteed to execute at most once. While such statements could be written intentionally, they are usually a symptom of error.\n\n**Example:**\n\n\n for (int i in 0..<10) {\n return\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyLoopStatementThatDoesntLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyReturnFromClosureCanBeImplicit", + "shortDescription": { + "text": "'return' statement can be implicit" + }, + "fullDescription": { + "text": "Reports return statements at the end of closures which can be made implicit. Groovy closures implicitly return the value of the last statement in them. Example: 'def foo = {\n return 1\n }' After the quick-fix is applied: 'def foo = {\n 1\n }'", + "markdown": "Reports return statements at the end of closures which can be made implicit.\n\n\nGroovy closures implicitly return the value of the last statement in them.\n\n**Example:**\n\n\n def foo = {\n return 1\n }\n\nAfter the quick-fix is applied:\n\n\n def foo = {\n 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "GroovyReturnFromClosureCanBeImplicit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 90, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.persistence", + "version": "241.17569", + "rules": [ + { + "id": "MongoDBJsonDuplicatePropertyKeys", + "shortDescription": { + "text": "Duplicate keys in object literals" + }, + "fullDescription": { + "text": "Reports a duplicate key in an object literal.", + "markdown": "Reports a duplicate key in an object literal." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoDBJsonDuplicatePropertyKeys", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSourceToSinkFlow", + "shortDescription": { + "text": "Non-safe string is used as SQL" + }, + "fullDescription": { + "text": "Reports cases for Java and Kotlin languages when a non-safe string is passed to a method as a SQL query. It can be a cause of SQL injections. The list of methods is taken from Settings - Language Injections for 'SQL', 'JPA QL', 'Hibernate QL' and 'PostgreSQL' A safe object is: a string literal, interface instance, or enum object, int and its wrapper, boolean and its wrapper, class object a result of a call of a method, whose receiver and arguments are safe a private field in the same file, which is assigned only with a string literal and has a safe initializer a final field in the same file, which has a safe initializer a local variable which is assigned from safe-objects This field, local variable, or parameter must not be passed as arguments to methods or used as a qualifier or must be a primitive, its wrapper or immutable. Static final fields are considered as safe. The analysis is performed only inside one file. Example: 'public void save(String sql) {\n JdbcTemplate jdbcTemplate = new JdbcTemplate();\n jdbcTemplate.queryForList(sql);\n }'\n New in 2023.2", + "markdown": "Reports cases for Java and Kotlin languages when a non-safe string is passed to a method as a SQL query. It can be a cause of SQL injections. The list of methods is taken from **Settings** - **Language Injections** for `SQL`, `JPA QL`, `Hibernate QL` and `PostgreSQL`\n\n\nA safe object is:\n\n* a string literal, interface instance, or enum object, int and its wrapper, boolean and its wrapper, class object\n* a result of a call of a method, whose receiver and arguments are safe\n* a private field in the same file, which is assigned only with a string literal and has a safe initializer\n* a final field in the same file, which has a safe initializer\n* a local variable which is assigned from safe-objects\n\nThis field, local variable, or parameter must not be passed as arguments to methods or used as a qualifier or must be a primitive, its\nwrapper or immutable.\n\nStatic final fields are considered as safe.\n\n\nThe analysis is performed only inside one file.\nExample:\n\n\n public void save(String sql) {\n JdbcTemplate jdbcTemplate = new JdbcTemplate();\n jdbcTemplate.queryForList(sql);\n }\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSourceToSinkFlow", + "cweIds": [ + 89, + 564 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.idea.maven", + "version": "241.17569", + "rules": [ + { + "id": "MavenDuplicatePluginInspection", + "shortDescription": { + "text": "Duplicate plugin declaration" + }, + "fullDescription": { + "text": "Reports the duplication of the plugin declaration in pom.xml", + "markdown": "Reports the duplication of the plugin declaration in pom.xml" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MavenDuplicatePluginInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenPropertyInParent", + "shortDescription": { + "text": "Usage of properties in parent description" + }, + "fullDescription": { + "text": "Reports that the usage of properties in modules parent definition is prohibited", + "markdown": "Reports that the usage of properties in modules parent definition is prohibited" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MavenPropertyInParent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenDuplicateDependenciesInspection", + "shortDescription": { + "text": "Duplicate Dependencies" + }, + "fullDescription": { + "text": "Reports duplicate dependencies", + "markdown": "Reports duplicate dependencies" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MavenDuplicateDependenciesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenModelInspection", + "shortDescription": { + "text": "Maven Model Inspection" + }, + "fullDescription": { + "text": "Reports resolution problems in a Maven model", + "markdown": "Reports resolution problems in a Maven model" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MavenModelInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenParentMissedVersionInspection", + "shortDescription": { + "text": "Parent version missed" + }, + "fullDescription": { + "text": "Reports the absence of the parent version element for versions that do not support consumer POM feature", + "markdown": "Reports the absence of the parent version element for versions that do not support consumer POM feature" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MavenParentMissedVersionInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenRedundantGroupId", + "shortDescription": { + "text": "Redundant groupId" + }, + "fullDescription": { + "text": "Reports the unnecessary definition since it is already defined in the parent pom.xml", + "markdown": "Reports the unnecessary \\ definition since it is already defined in the parent pom.xml" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MavenRedundantGroupId", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 26, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.database", + "version": "241.17569", + "rules": [ + { + "id": "MysqlLoadDataPathInspection", + "shortDescription": { + "text": "LOAD statement path" + }, + "fullDescription": { + "text": "Reports paths that start with the tilde character in LOAD statements. Example (MySQL): 'CREATE TABLE table_name (id int);\nLOAD DATA LOCAL INFILE '~/Documents/some_file.txt'\nINTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n'\nIGNORE 1 LINES;' Instead of the tilde character, use a full path to the file.", + "markdown": "Reports paths that start with the tilde character in LOAD statements.\n\nExample (MySQL):\n\n CREATE TABLE table_name (id int);\n LOAD DATA LOCAL INFILE '~/Documents/some_file.txt'\n INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n'\n IGNORE 1 LINES;\n\nInstead of the tilde character, use a full path to the file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MysqlLoadDataPath", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 27, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMissingReturnInspection", + "shortDescription": { + "text": "Missing return statement" + }, + "fullDescription": { + "text": "Reports functions that have no RETURN statements. Example (Oracle): 'CREATE FUNCTION foo RETURN int AS\nBEGIN\nEND;' The 'foo' function must return the integer value but the function body returns nothing. To fix the error, add a RETURN statement (for example, 'return 1;'). 'CREATE FUNCTION foo RETURN int AS\nBEGIN\n RETURN 1;\nEND;'", + "markdown": "Reports functions that have no RETURN statements.\n\nExample (Oracle):\n\n CREATE FUNCTION foo RETURN int AS\n BEGIN\n END;\n\nThe `foo` function must return the integer value but the function body returns nothing. To fix the error,\nadd a RETURN statement (for example, `return 1;`).\n\n CREATE FUNCTION foo RETURN int AS\n BEGIN\n RETURN 1;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlMissingReturn", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCaseVsIfInspection", + "shortDescription": { + "text": "Using CASE instead of conditional function and vice versa" + }, + "fullDescription": { + "text": "Reports situations when CASE and IF are interchangeable. Example (MySQL): 'SELECT CASE\nWHEN C1 IS NULL THEN 1\nELSE 0\nEND\nFROM dual;' To keep your code short, you can replace the CASE structure with IF. You can do that by applying the Replace with 'IF' call intention action. The example code will look as follows: 'SELECT IF(C1 IS NULL, 1, 0)\nFROM dual;' To revert IF to CASE, click IF and apply the Replace with CASE expression intention action.", + "markdown": "Reports situations when CASE and IF are interchangeable.\n\nExample (MySQL):\n\n SELECT CASE\n WHEN C1 IS NULL THEN 1\n ELSE 0\n END\n FROM dual;\n\nTo keep your code short, you can replace the CASE structure with IF. You can do that by applying the **Replace with 'IF' call**\nintention action. The example code will look as follows:\n\n SELECT IF(C1 IS NULL, 1, 0)\n FROM dual;\n\nTo revert IF to CASE, click IF and apply the **Replace with CASE expression** intention action." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCaseVsIf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlShouldBeInGroupByInspection", + "shortDescription": { + "text": "Column should be in group by clause" + }, + "fullDescription": { + "text": "Reports columns that are not in the GROUP BY clause or inside an aggregate function call. Example (Microsoft SQL Server): 'CREATE TABLE t1 (a INT, b INT);\nSELECT a, b FROM t1 GROUP BY a;' If you run the SELECT query, you will receive an error because Microsoft SQL Server expects the 'b' column in GROUP BY or used inside an aggregate function. The following two examples will fix the error. 'SELECT a, b FROM t1 GROUP BY a, b;\nSELECT a, max(b) max_b FROM t1 GROUP BY a;'", + "markdown": "Reports columns that are not in the GROUP BY clause or inside an aggregate function call.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE t1 (a INT, b INT);\n SELECT a, b FROM t1 GROUP BY a;\n\nIf you run the SELECT query, you will receive an error because Microsoft SQL Server expects the `b` column in GROUP BY or used\ninside an aggregate function. The following two examples will fix the error.\n\n SELECT a, b FROM t1 GROUP BY a, b;\n SELECT a, max(b) max_b FROM t1 GROUP BY a;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlShouldBeInGroupBy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDtInspection", + "shortDescription": { + "text": "Ill-formed date/time literals" + }, + "fullDescription": { + "text": "Reports errors in date and time literals. This inspection is available in MySQL, Oracle, Db2, and H2. Example (MySQL): 'SELECT TIME '10 -12:13:14' FROM dual;\nSELECT TIME ' 12 : 13 : 14 ' FROM dual;\nSELECT TIME '12 13 14' FROM dual;\nSELECT TIME '12-13-14' FROM dual;\nSELECT TIME '12.13.14' FROM dual;\nSELECT TIME '12:13:' FROM dual;\nSELECT TIME '12:13' FROM dual;\nSELECT TIME '12:' FROM dual;' In this example, dates ignore the MySQL standard for date and time literals. Therefore, they will be highlighted. For more information about date and time literals in MySQL, see Date and Time Literals at dev.mysql.com. The following date and type literals are valid for MySQL. 'SELECT TIME '12:13:14' FROM dual;\nSELECT TIME '12:13:14.555' FROM dual;\nSELECT TIME '12:13:14.' FROM dual;\nSELECT TIME '-12:13:14' FROM dual;\nSELECT TIME '10 12:13:14' FROM dual;\nSELECT TIME '-10 12:13:14' FROM dual;'", + "markdown": "Reports errors in date and time literals. This inspection is available in MySQL, Oracle, Db2, and H2.\n\nExample (MySQL):\n\n SELECT TIME '10 -12:13:14' FROM dual;\n SELECT TIME ' 12 : 13 : 14 ' FROM dual;\n SELECT TIME '12 13 14' FROM dual;\n SELECT TIME '12-13-14' FROM dual;\n SELECT TIME '12.13.14' FROM dual;\n SELECT TIME '12:13:' FROM dual;\n SELECT TIME '12:13' FROM dual;\n SELECT TIME '12:' FROM dual;\n\nIn this example, dates ignore the MySQL standard for date and time literals. Therefore, they will be highlighted.\nFor more information about date and time literals in MySQL, see [Date and Time Literals at dev.mysql.com](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html).\n\nThe following date and type literals are valid for MySQL.\n\n SELECT TIME '12:13:14' FROM dual;\n SELECT TIME '12:13:14.555' FROM dual;\n SELECT TIME '12:13:14.' FROM dual;\n SELECT TIME '-12:13:14' FROM dual;\n SELECT TIME '10 12:13:14' FROM dual;\n SELECT TIME '-10 12:13:14' FROM dual;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDateTime", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlNoDataSourceInspection", + "shortDescription": { + "text": "No data sources configured" + }, + "fullDescription": { + "text": "Reports the absence of data sources in the Database tool window (View | Tool Windows | Database).", + "markdown": "Reports the absence of data sources in the **Database** tool window (**View \\| Tool Windows \\| Database**)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlNoDataSourceInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMisleadingReferenceInspection", + "shortDescription": { + "text": "Misleading references" + }, + "fullDescription": { + "text": "Reports ambiguous references in SQL code. For example, when a name refer to both a table column and a routine parameter. The execution of such code might lead to errors or unexpected results due to counter-intuitive resolution logic. Usually, names with a more local scope have higher priority. Example (PostgreSQL): 'CREATE TABLE foo\n(\n id INT,\n name VARCHAR(5)\n);\nCREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n$$\nDECLARE\n b INT;\nBEGIN\n -- `name` is ambiguous as it is used as a column name and a parameter\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\nEND;\n$$ LANGUAGE plpgsql;' In PostgreSQL, you can use the '#variable_conflict' directives to explicitly specify a correct reference. For example, use '#variable_conflict use_column' to refer to a column name, or '#variable_conflict use_variable' to refer to a parameter. 'CREATE TABLE foo\n(\n id INT,\n name VARCHAR(5)\n);\nCREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n$$\n #variable_conflict use_column\nDECLARE\n b INT;\nBEGIN\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\nEND;\n$$ LANGUAGE plpgsql;'", + "markdown": "Reports ambiguous references in SQL code.\n\nFor example, when a name refer to both a table column and a routine parameter. The execution of such code might lead to errors or unexpected\nresults due to counter-intuitive resolution logic. Usually, names with a more local scope have higher priority.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo\n (\n id INT,\n name VARCHAR(5)\n );\n CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n $$\n DECLARE\n b INT;\n BEGIN\n -- `name` is ambiguous as it is used as a column name and a parameter\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\n END;\n $$ LANGUAGE plpgsql;\n\nIn PostgreSQL, you can use the `#variable_conflict` directives to explicitly specify a correct reference. For example,\nuse `#variable_conflict use_column` to refer to a column name, or `#variable_conflict use_variable` to refer to a\nparameter.\n\n CREATE TABLE foo\n (\n id INT,\n name VARCHAR(5)\n );\n CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n $$\n #variable_conflict use_column\n DECLARE\n b INT;\n BEGIN\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\n END;\n $$ LANGUAGE plpgsql;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMisleadingReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantAliasInspection", + "shortDescription": { + "text": "Redundant alias expressions" + }, + "fullDescription": { + "text": "Reports alias expressions that duplicate names of columns in tables and might be redundant. Example (PostgreSQL): 'CREATE TABLE foo(a INT, b INT);\n\nSELECT * FROM foo foo(a, b);\nSELECT * FROM foo foo(a);\nSELECT * FROM foo foo(x);\nSELECT * FROM foo foo(x, y);' The first two aliases use the same column names as in the 'foo' table. They are considered redundant because they column names are identical.", + "markdown": "Reports alias expressions that duplicate names of columns in tables and might be redundant.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT, b INT);\n\n SELECT * FROM foo foo(a, b);\n SELECT * FROM foo foo(a);\n SELECT * FROM foo foo(x);\n SELECT * FROM foo foo(x, y);\n\nThe first two aliases use the same column names as in the `foo` table. They are considered redundant because they\ncolumn names are identical." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlConstantExpressionInspection", + "shortDescription": { + "text": "Constant expression" + }, + "fullDescription": { + "text": "Reports conditions and expressions that are always true, false or null. Example (MySQL): 'CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\nSELECT a FROM t1 WHERE 'Cat' = 'Cat';\nSELECT a FROM t1 WHERE 'Cat' = null;' The ''Cat' = 'Cat'' is always true and will be reported. The ''Cat' = null' is always null and will be reported.", + "markdown": "Reports conditions and expressions that are always true, false or null.\n\nExample (MySQL):\n\n CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\n SELECT a FROM t1 WHERE 'Cat' = 'Cat';\n SELECT a FROM t1 WHERE 'Cat' = null;\n\nThe `'Cat' = 'Cat'` is always true and will be reported.\n\nThe `'Cat' = null` is always null and will be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlConstantExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraUnmatchedForwardDeclarationInspection", + "shortDescription": { + "text": "Forward declaration without definition" + }, + "fullDescription": { + "text": "Reports declarations of procedures and functions that are missing their implementation in code. In Oracle, you can declare a procedure or a function without its body, and write the implementation later. The inspection will report names of such procedures or functions that are left without implementation. Example (Oracle): 'DECLARE PROCEDURE foo(a int, b varchar2);\nBEGIN\n NULL;\nEND;' The 'foo' procedure is declared but is missing implementation. We can add the implementation to get rid of the error. 'DECLARE PROCEDURE foo(a int, b varchar2);\n PROCEDURE foo(a int, b varchar2) IS\nBEGIN\n NULL;\nEND;\nBEGIN\n NULL;\nEND;'", + "markdown": "Reports declarations of procedures and functions that are missing their implementation in code.\n\nIn Oracle, you can declare a procedure or a function without its body, and write the implementation later. The inspection will report names\nof such procedures or functions that are left without implementation.\n\nExample (Oracle):\n\n DECLARE PROCEDURE foo(a int, b varchar2);\n BEGIN\n NULL;\n END;\n\nThe `foo` procedure is declared but is missing implementation. We can add the implementation to get rid of the error.\n\n DECLARE PROCEDURE foo(a int, b varchar2);\n PROCEDURE foo(a int, b varchar2) IS\n BEGIN\n NULL;\n END;\n BEGIN\n NULL;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlUnmatchedForwardDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 154, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlWithoutWhereInspection", + "shortDescription": { + "text": "Delete or update statement without where clauses" + }, + "fullDescription": { + "text": "Reports usages of DELETE or UPDATE statements without WHERE clauses. Without WHERE clauses, DELETE drops all the data from the table, and UPDATE overwrites values for all the table rows. Example (MySQL): 'CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\nupdate t1 set a = 'Smith';\ndelete from t1;'", + "markdown": "Reports usages of DELETE or UPDATE statements without WHERE clauses.\n\nWithout WHERE clauses, DELETE drops all the data from the table, and UPDATE overwrites values for all the table rows.\n\nExample (MySQL):\n\n CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\n update t1 set a = 'Smith';\n delete from t1;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlWithoutWhere", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedCteInspection", + "shortDescription": { + "text": "Unused common table expression" + }, + "fullDescription": { + "text": "Reports unused common table expressions (CTE) inside the query. Example (PostgreSQL): 'CREATE TABLE foo(a INT);\n\nWITH a AS (SELECT 1 AS x FROM foo)\nSELECT 1 + 2 FROM foo;' By using WITH, we create a temporary named result set with the name 'a', also known as a common table expression (CTE). But we do not use this CTE later in the code. The unused CTE is greyed out.", + "markdown": "Reports unused common table expressions (CTE) inside the query.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT);\n\n WITH a AS (SELECT 1 AS x FROM foo)\n SELECT 1 + 2 FROM foo;\n\nBy using WITH, we create a temporary named result set with the name `a`, also known as a common table expression (CTE). But\nwe do not use this CTE later in the code. The unused CTE is greyed out." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnusedCte", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSResolveInspection", + "shortDescription": { + "text": "Resolution problems" + }, + "fullDescription": { + "text": "Reports unresolved references in MongoDB and JavaScript code. Example: 'db\nuse foo\n -- a reference to a non-existing collection\ndb.non_existing_collection\ndb['non_existing_collection']\ndb['non_existing_collection'].find().hasNext()' The 'non_existing_collection' collection does not exist in the database and will be reported.", + "markdown": "Reports unresolved references in MongoDB and JavaScript code.\n\nExample:\n\n db\n use foo\n -- a reference to a non-existing collection\n db.non_existing_collection\n db['non_existing_collection']\n db['non_existing_collection'].find().hasNext()\n\nThe `non_existing_collection` collection does not exist in the database and will be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that can cause side effects while the data source is in read-only mode. For more information about enabling read-only mode, see Enable read-only mode for a connection in the IDE documentation. The Disable read-only mode quick-fix turns off the read-only mode for the respective data source. Example: 'db.my_collection.insertOne()'", + "markdown": "Reports statements that can cause side effects while the data source is in read-only mode.\n\nFor more information about enabling read-only mode, see\n[Enable\nread-only mode for a connection in the IDE documentation](https://www.jetbrains.com/help/datagrip/configuring-database-connections.html#enable-read-only-mode-for-a-connection).\n\nThe **Disable read-only mode** quick-fix turns off the read-only mode for the respective data source.\n\nExample:\n\n\n db.my_collection.insertOne()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that may cause side effects while the data source is in read-only mode. The quick-fix turns off the read-only mode for the respective data source. Example: 'db.my_collection.insertOne()'", + "markdown": "Reports statements that may cause side effects while the data source is in read-only mode.\n\nThe quick-fix turns off the read-only mode for the respective data source.\n\nExample:\n\n\n db.my_collection.insertOne()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedSubqueryItemInspection", + "shortDescription": { + "text": "Unused subquery item" + }, + "fullDescription": { + "text": "Reports columns, aliases, and other subquery items that are not referenced in the outer query expression. Example (PostgreSQL): 'CREATE TABLE for_subquery(id INT);\nSELECT a, q FROM (SELECT 1 AS a, 10 AS b, 2 + 3 AS q, id\n FROM for_subquery) x;' We reference 'a' and 'q' aliases from a subquery. But the 'b' alias and the 'id' column are not referenced in the outer SELECT statement. Therefore, 'b' and 'id' are grayed out.", + "markdown": "Reports columns, aliases, and other subquery items that are not referenced in the outer query expression.\n\nExample (PostgreSQL):\n\n CREATE TABLE for_subquery(id INT);\n SELECT a, q FROM (SELECT 1 AS a, 10 AS b, 2 + 3 AS q, id\n FROM for_subquery) x;\n\nWe reference `a` and `q` aliases from a subquery. But the `b` alias and the `id` column are\nnot referenced in the outer SELECT statement. Therefore, `b` and `id` are grayed out." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that might lead to modification of a database during a read-only connection. To enable read-only mode for a connection, right-click a data source in the Database tool window (View | Tool Windows | Database) and select Properties. In the Data Sources and Drivers dialog, click the Options tab and select the Read-only checkbox. Example (MySQL): 'CREATE TABLE foo(a INT);\nINSERT INTO foo VALUES (1);' As 'CREATE TABLE' and 'INSERT INTO' statements lead to a database modification, these statements will be highlighted in read-only connection mode.", + "markdown": "Reports statements that might lead to modification of a database during a read-only connection.\n\nTo enable read-only mode for a\nconnection,\nright-click a data source in the **Database** tool window (**View \\| Tool Windows \\| Database** ) and select **Properties** .\nIn the **Data Sources and Drivers** dialog, click the **Options** tab and select the **Read-only** checkbox.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT);\n INSERT INTO foo VALUES (1);\n\nAs `CREATE TABLE` and `INSERT INTO` statements lead to a database modification, these statements will be highlighted\nin read-only connection mode." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlJoinWithoutOnInspection", + "shortDescription": { + "text": "Unsafe 'join' clause in 'delete' statement" + }, + "fullDescription": { + "text": "Reports missing conditional checks for statements that might modify the whole database. For example, usages of JOIN clauses inside DELETE statements without ON or WHERE. Without conditional checks on JOIN, DELETE drops contents of the entire table. Example (MySQL): 'CREATE TABLE foo (a INT,b INT,c INT);\nCREATE TABLE bar (a INT,b INT,c INT);\n\nDELETE table1 FROM foo table1 INNER JOIN bar table2;'", + "markdown": "Reports missing conditional checks for statements that might modify the whole database.\n\nFor example, usages of JOIN clauses inside DELETE statements without ON or WHERE. Without conditional checks on JOIN, DELETE drops\ncontents of the entire table.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT,b INT,c INT);\n CREATE TABLE bar (a INT,b INT,c INT);\n\n DELETE table1 FROM foo table1 INNER JOIN bar table2;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlJoinWithoutOn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDropIndexedColumnInspection", + "shortDescription": { + "text": "Index is dependent on column" + }, + "fullDescription": { + "text": "Reports cases when you try to drop columns from indexed tables. This inspection is available in Microsoft SQL Server and Sybase ASE. Example (Microsoft SQL Server): 'CREATE TABLE test_index\n(\ncol INT NOT NULL,\ncol2 INT NOT NULL,\ncol3 INT NOT NULL UNIQUE,\ncol4 VARCHAR(200)\n);\n\nCREATE UNIQUE INDEX aaaa ON test_index (col, col2);\n\nALTER TABLE test_index\nDROP COLUMN col;' You cannot delete the 'col' column because it is in the indexed table. To delete the column, you need to delete the 'aaaa' index first (for example, DROP INDEX aaaa).", + "markdown": "Reports cases when you try to drop columns from indexed tables. This inspection is available in Microsoft SQL Server and Sybase ASE.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE test_index\n (\n col INT NOT NULL,\n col2 INT NOT NULL,\n col3 INT NOT NULL UNIQUE,\n col4 VARCHAR(200)\n );\n\n CREATE UNIQUE INDEX aaaa ON test_index (col, col2);\n\n ALTER TABLE test_index\n DROP COLUMN col;\n\nYou cannot delete the `col` column because it is in the indexed table. To delete the column, you need to delete the\n`aaaa` index first (for example, DROP INDEX aaaa)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDropIndexedColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDialectInspection", + "shortDescription": { + "text": "SQL dialect detection" + }, + "fullDescription": { + "text": "Reports situations when a dialect is not assigned to an SQL file. For example, when you open a new SQL file without assigning a dialect to it, you see a notification where the best matching dialect is advised. Click the Use link to use the advised dialect. Alternatively, click the Change dialect to link to select the other dialect.", + "markdown": "Reports situations when a dialect is not assigned to an SQL file.\n\nFor example, when you open a new SQL file without assigning a dialect\nto it, you see a notification where the best matching dialect is advised. Click the **Use \\** link to use the advised\ndialect. Alternatively, click the **Change dialect to** link to select the other dialect." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDialectInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtDeprecationInspection", + "shortDescription": { + "text": "Deprecated element" + }, + "fullDescription": { + "text": "Reports usages of deprecated methods in MongoDB and JavaScript code. The quick-fix replaces deprecated methods with recommended alternatives. Example: 'db.my_collection.insert()' After the quick-fix is applied: 'db.my_collection.insertOne()'", + "markdown": "Reports usages of deprecated methods in MongoDB and JavaScript code.\n\nThe quick-fix replaces deprecated methods with recommended alternatives.\n\nExample:\n\n\n db.my_collection.insert()\n\nAfter the quick-fix is applied:\n\n\n db.my_collection.insertOne()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSDeprecationInspection", + "shortDescription": { + "text": "Deprecated element" + }, + "fullDescription": { + "text": "Reports usages of deprecated methods in MongoDB and JavaScript code. The quick-fix replaces deprecated methods with recommended alternatives. Example: 'db.my_collection.insert()' After the quick-fix is applied: 'db.my_collection.insertOne()'", + "markdown": "Reports usages of deprecated methods in MongoDB and JavaScript code.\n\nThe quick-fix replaces deprecated methods with recommended alternatives.\n\nExample:\n\n db.my_collection.insert()\n\nAfter the quick-fix is applied:\n\n db.my_collection.insertOne()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTypeInspection", + "shortDescription": { + "text": "Types compatibility" + }, + "fullDescription": { + "text": "Reports type-related errors.", + "markdown": "Reports type-related errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnicodeStringLiteralInspection", + "shortDescription": { + "text": "Unicode usage in SQL" + }, + "fullDescription": { + "text": "Reports string literals that use national characters without the 'N' prefix. Without the N prefix, the string is converted to the default code page of the database. This default code page may not recognize certain characters. For more information, see nchar and nvarchar (Transact-SQL) at docs.microsoft.com. Example (Microsoft SQL Server): 'SELECT 'abcde' AS a;\nSELECT N'abcde' AS b;\nSELECT 'абвгд' AS c;\nSELECT N'абвгд' AS d;' The 'SELECT 'абвгд' AS c;' does not have the 'N' prefix, the ''абвгд'' part will be highlighted.", + "markdown": "Reports string literals that use national characters without the `N` prefix.\n\nWithout the N prefix, the string is converted to the default\ncode page of the database. This default code page may not recognize certain characters. For more information, see\n[nchar and nvarchar\n(Transact-SQL)\nat docs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql).\n\nExample (Microsoft SQL Server):\n\n SELECT 'abcde' AS a;\n SELECT N'abcde' AS b;\n SELECT 'абвгд' AS c;\n SELECT N'абвгд' AS d;\n\nThe `SELECT 'абвгд' AS c;` does not have the `N` prefix, the `'абвгд'` part will be highlighted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnicodeStringLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedVariableInspection", + "shortDescription": { + "text": "Unused variable" + }, + "fullDescription": { + "text": "Reports unused arguments, variables, or parameters. Example (PostgreSQL): 'CREATE FUNCTION foo(PARAMUSED INT, PARAMUNUSED INT) RETURNS INT AS\n$$\nBEGIN\n RETURN PARAMUSED;\nEND\n$$ LANGUAGE plpgsql;' The 'PARAMUNUSED' parameter is not used in the function and might be deleted.", + "markdown": "Reports unused arguments, variables, or parameters.\n\nExample (PostgreSQL):\n\n CREATE FUNCTION foo(PARAMUSED INT, PARAMUNUSED INT) RETURNS INT AS\n $$\n BEGIN\n RETURN PARAMUSED;\n END\n $$ LANGUAGE plpgsql;\n\nThe `PARAMUNUSED` parameter is not used in the function and might be deleted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PgSelectFromProcedureInspection", + "shortDescription": { + "text": "Postgres: Select from procedure call" + }, + "fullDescription": { + "text": "Reports situations when you make SELECT from a function or a DBLINK without an alias with a type (for example, 'AS t1(s VARCHAR)'). This requirement does not apply to scalar functions. Example (PostgreSQL): 'CREATE FUNCTION produce_a_table() RETURNS RECORD AS $$\nSELECT 1;\n$$ LANGUAGE sql;\nSELECT * FROM produce_a_table() AS s (c1 INT);\nSELECT * FROM produce_a_table() AS s (c1);\nSELECT * FROM DBLINK('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc') AS t1;' The 'AS s (c1 INT)' has a typed alias, while 'AS s (c1)' and 'AS t1' do not. In this case, the second call of 'produce_a_table()' and 'DBLINK()' will be highlighted.", + "markdown": "Reports situations when you make SELECT from a function or a DBLINK without an alias with a type (for example, `AS t1(s VARCHAR)`).\n\nThis requirement does not apply to scalar functions.\n\nExample (PostgreSQL):\n\n CREATE FUNCTION produce_a_table() RETURNS RECORD AS $$\n SELECT 1;\n $$ LANGUAGE sql;\n SELECT * FROM produce_a_table() AS s (c1 INT);\n SELECT * FROM produce_a_table() AS s (c1);\n SELECT * FROM DBLINK('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc') AS t1;\n\nThe `AS s (c1 INT)` has a typed alias, while `AS s (c1)` and `AS t1` do not.\nIn this case, the second call of `produce_a_table()` and `DBLINK()` will be highlighted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PgSelectFromProcedure", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "PostgreSQL", + "index": 177, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MsBuiltinInspection", + "shortDescription": { + "text": "Builtin functions" + }, + "fullDescription": { + "text": "Reports truncations of string arguments in ISNULL functions. The ISNULL syntax is 'ISNULL(check_expression, replacement_value)'. According to ISNULL at docs.microsoft.com, 'replacement_value' will be truncated if 'replacement_value' is longer than 'check_expression'. Example (Microsoft SQL Server): 'DECLARE @name1 VARCHAR(2) = NULL;\nDECLARE @name2 VARCHAR(10) = 'Example';\nDECLARE @name3 VARCHAR(2) = 'Hi';\n\n -- `@name2` is VARCHAR(10) and will be truncated\nSELECT ISNULL(@name1, @name2);\n\n -- `@name3` is VARCHAR(2) as `@name1` and will not be truncated\nSELECT ISNULL(@name1, @name3);'", + "markdown": "Reports truncations of string arguments in ISNULL functions.\n\nThe ISNULL syntax is `ISNULL(check_expression, replacement_value)`.\n\nAccording to [ISNULL at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql), `replacement_value` will be truncated if `replacement_value` is longer than\n`check_expression`.\n\nExample (Microsoft SQL Server):\n\n DECLARE @name1 VARCHAR(2) = NULL;\n DECLARE @name2 VARCHAR(10) = 'Example';\n DECLARE @name3 VARCHAR(2) = 'Hi';\n\n -- `@name2` is VARCHAR(10) and will be truncated\n SELECT ISNULL(@name1, @name2);\n\n -- `@name3` is VARCHAR(2) as `@name1` and will not be truncated\n SELECT ISNULL(@name1, @name3);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MssqlBuiltin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL server", + "index": 178, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMultipleLimitClausesInspection", + "shortDescription": { + "text": "Multiple row limiting/offset clauses in queries" + }, + "fullDescription": { + "text": "Reports usages of multiple row limiting clauses in a single query. Example (Microsoft SQL Server): 'create table foo(a int);\nselect top 1 * from foo order by a offset 10 rows fetch next 20 rows only;' The SELECT TOP clause is used to specify that only 1 record must be returned. The FETCH clause specifies the number of rows to return after the OFFSET clause has been processed. But as we already have the SELECT TOP limiting clause, the FETCH clause might be redundant.", + "markdown": "Reports usages of multiple row limiting clauses in a single query.\n\nExample (Microsoft SQL Server):\n\n create table foo(a int);\n select top 1 * from foo order by a offset 10 rows fetch next 20 rows only;\n\nThe SELECT TOP clause is used to specify that only 1 record must be\nreturned. The FETCH clause specifies the number of rows to return after the OFFSET\nclause has been processed. But as we already have the SELECT TOP limiting clause, the FETCH clause might be redundant." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMultipleLimitClauses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlStorageInspection", + "shortDescription": { + "text": "SQL source modification detection" + }, + "fullDescription": { + "text": "Reports situations when source code of a database object has been changed. The inspection is triggered when you perform database or object introspection. The introspection is run when you open source code of an object, run statements, and perform code refactoring. Also, you can run introspection by right-clicking an object and selecting Refresh. The inspection covers the following situations: Object source code was changed in the database but code in the editor was not updated. Works in PostgreSQL, Microsoft SQL Server, Oracle, and Sybase ASE. You changed the object source code, introspected the database, but source code has been already changed by someone else. The database introspector was updated in the IDE and you need to download new object properties that were missing in the previous introspector version.", + "markdown": "Reports situations when source code of a database object has been changed.\n\nThe inspection is triggered when you perform database or object introspection. The introspection is run when you open source code of an\nobject, run statements, and perform code refactoring.\nAlso, you can run introspection by right-clicking an object and selecting **Refresh**.\n\nThe inspection covers the following situations:\n\n* Object source code was changed in the database but code in the editor was not updated. Works in PostgreSQL, Microsoft SQL Server, Oracle, and Sybase ASE.\n* You changed the object source code, introspected the database, but source code has been already changed by someone else.\n* The database introspector was updated in the IDE and you need to download new object properties that were missing in the previous introspector version." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlStorageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSignatureInspection", + "shortDescription": { + "text": "Function signature" + }, + "fullDescription": { + "text": "Reports signature issues for built-in functions. The inspection will report a wrong number of arguments, invalid keywords, wrong data types, and other issues. Example (MySQL): 'CREATE TABLE foo (a INT, b INT, c INT)\n\nSELECT IFNULL() FROM foo; -- error\nSELECT IFNULL(a) FROM foo; -- error\nSELECT IFNULL(a, b) FROM foo; -- OK\nSELECT IFNULL(a, b, c) FROM foo; -- error' In MySQL, the 'IFNULL()' function accepts strictly two arguments. So, only the 'SELECT IFNULL(a, b) FROM foo;' query is correct.", + "markdown": "Reports signature issues for built-in functions.\n\nThe inspection will report a wrong number of arguments, invalid keywords, wrong data types, and other issues.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT, b INT, c INT)\n\n SELECT IFNULL() FROM foo; -- error\n SELECT IFNULL(a) FROM foo; -- error\n SELECT IFNULL(a, b) FROM foo; -- OK\n SELECT IFNULL(a, b, c) FROM foo; -- error\n\nIn MySQL, the `IFNULL()` function accepts strictly two arguments. So, only the `SELECT IFNULL(a, b) FROM foo;`\nquery is correct." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantOrderingDirectionInspection", + "shortDescription": { + "text": "Redundant ordering direction" + }, + "fullDescription": { + "text": "Reports redundant ordering directions like ASC and DESC in ORDER BY clauses. Example (MySQL): 'CREATE TABLE foo(a INT, b INT, c INT);\nSELECT * FROM foo ORDER BY a ASC, b DESC, c ASC;' The ORDER BY keyword sorts the records in the ascending order by default. So, the 'ASC' keyword for 'a' and 'c' columns is redundant.", + "markdown": "Reports redundant ordering directions like ASC and DESC in ORDER BY clauses.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT, b INT, c INT);\n SELECT * FROM foo ORDER BY a ASC, b DESC, c ASC;\n\nThe ORDER BY keyword sorts the records in the ascending order by default. So, the `ASC` keyword for `a` and\n`c` columns is redundant." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantOrderingDirection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraOverloadInspection", + "shortDescription": { + "text": "Overloading errors" + }, + "fullDescription": { + "text": "Reports invalid cases of subprogram overloading in Oracle. Example (Oracle): 'DECLARE\n SUBTYPE fff IS BINARY_INTEGER;\n SUBTYPE ggg IS NATURAL;\n PROCEDURE foo (a IN ggg) IS BEGIN NULL; END;\n PROCEDURE foo (a IN fff) IS BEGIN NULL; END;\nBEGIN\n NULL;\nEND;' You cannot overload subprograms which parameters differ only in subtypes. For example, you cannot overload procedures where one accepts a BINARY INTEGER parameter and the other accepts a NATURAL parameter. For more information about restrictions on procedure overloading, see Restrictions on Overloading at docs.oracle.com.", + "markdown": "Reports invalid cases of subprogram overloading in Oracle.\n\nExample (Oracle):\n\n DECLARE\n SUBTYPE fff IS BINARY_INTEGER;\n SUBTYPE ggg IS NATURAL;\n PROCEDURE foo (a IN ggg) IS BEGIN NULL; END;\n PROCEDURE foo (a IN fff) IS BEGIN NULL; END;\n BEGIN\n NULL;\n END;\n\nYou cannot overload subprograms which parameters differ only in subtypes. For example, you cannot overload procedures where one accepts a\nBINARY INTEGER parameter and the other accepts a NATURAL parameter. For more information about restrictions on procedure overloading,\nsee [Restrictions on Overloading at docs.oracle.com](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlOverload", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 154, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAmbiguousColumnInspection", + "shortDescription": { + "text": "Ambiguous reference" + }, + "fullDescription": { + "text": "Reports columns that have identical names but belong to different tables. Example (MySQL): 'CREATE TABLE foo(id INT PRIMARY KEY);\nCREATE TABLE bar(id INT PRIMARY KEY);\n\nSELECT foo.id, bar.id FROM foo, bar WHERE id > 0;' The 'id' column appears in 'foo' and 'bar' tables. You need to qualify the column name to make the query correct. 'SELECT foo.id, bar.id FROM foo, bar WHERE foo.id > 0;'", + "markdown": "Reports columns that have identical names but belong to different tables.\n\nExample (MySQL):\n\n CREATE TABLE foo(id INT PRIMARY KEY);\n CREATE TABLE bar(id INT PRIMARY KEY);\n\n SELECT foo.id, bar.id FROM foo, bar WHERE id > 0;\n\nThe `id` column appears in `foo` and `bar` tables. You need to qualify the column name to\nmake the query correct.\n\n SELECT foo.id, bar.id FROM foo, bar WHERE foo.id > 0;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAmbiguousColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlNullComparisonInspection", + "shortDescription": { + "text": "Null comparison" + }, + "fullDescription": { + "text": "Reports comparisons with NULL that can be replaced with IS NULL or IS NOT NULL operators. Example (Microsoft SQL Server): 'CREATE TABLE foo ( id int );\n\nSELECT * FROM foo WHERE NULL = NULL;\nSELECT * FROM foo WHERE NULL != NULL;' The 'NULL = NULL' can be replaced with 'IS NULL', the 'NULL != NULL' comparison with 'IS NOT NULL'. To do this replacement, you can use Use IS NULL operator or Use IS NOT NULL operator quick-fixes. 'SELECT * FROM foo WHERE NULL IS NULL;\nSELECT * FROM foo WHERE NULL IS NOT NULL;'", + "markdown": "Reports comparisons with NULL that can be replaced with IS NULL or IS NOT NULL operators.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE foo ( id int );\n\n SELECT * FROM foo WHERE NULL = NULL;\n SELECT * FROM foo WHERE NULL != NULL;\n\nThe `NULL = NULL` can be replaced with `IS NULL`, the `NULL != NULL` comparison\nwith `IS NOT NULL`. To do this replacement, you can use **Use IS NULL operator** or **Use IS NOT NULL operator**\nquick-fixes.\n\n SELECT * FROM foo WHERE NULL IS NULL;\n SELECT * FROM foo WHERE NULL IS NOT NULL;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlNullComparison", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MysqlSpaceAfterFunctionNameInspection", + "shortDescription": { + "text": "Whitespace between the function name and the open parenthesis" + }, + "fullDescription": { + "text": "Reports any whitespace in a function call between the function name and the open parenthesis, which is not supported by default. Example (MySQL): 'SELECT MAX (qty) FROM orders;'", + "markdown": "Reports any whitespace in a function call between the function name and the open parenthesis, which is not supported by default.\n\nExample (MySQL):\n\n SELECT MAX (qty) FROM orders;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MysqlSpaceAfterFunctionName", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 27, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAutoIncrementDuplicateInspection", + "shortDescription": { + "text": "Auto-increment duplicate" + }, + "fullDescription": { + "text": "Reports tables that contain two columns with an automatic increment. In MySQL, Microsoft SQL Server, and Db2 dialects, a table can have only one field with a auto-increment option, and this field must be a key. Example (MySQL): 'CREATE TABLE my_table\n(\n id INT AUTO_INCREMENT,\n c2 INT AUTO_INCREMENT,\n);' The AUTO_INCREMENT constraint for 'c2' will be highlighted as 'c1' already has this constraint. To fix the warning, you can make 'id' a primary key and delete AUTO_INCREMENT for 'c2'. 'CREATE TABLE my_table\n(\n id INT AUTO_INCREMENT PRIMARY KEY,\n c2 INT,\n);'", + "markdown": "Reports tables that contain two columns with an automatic increment. In MySQL, Microsoft SQL Server, and Db2 dialects, a table can have only one field with a auto-increment option, and this field must be a key.\n\nExample (MySQL):\n\n CREATE TABLE my_table\n (\n id INT AUTO_INCREMENT,\n c2 INT AUTO_INCREMENT,\n );\n\nThe AUTO_INCREMENT constraint for `c2` will be highlighted as `c1` already has this constraint. To fix the warning,\nyou can make `id` a primary key and delete AUTO_INCREMENT for `c2`.\n\n CREATE TABLE my_table\n (\n id INT AUTO_INCREMENT PRIMARY KEY,\n c2 INT,\n );\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAutoIncrementDuplicate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlStringLengthExceededInspection", + "shortDescription": { + "text": "Implicit string truncation" + }, + "fullDescription": { + "text": "Reports variables that exceed the defined length in characters. Example (Microsoft SQL Server): 'CREATE PROCEDURE test() AS\nBEGIN\nDECLARE myVarOk VARCHAR(5) = 'abcde';\nDECLARE myVarExceeded VARCHAR(5) = 'abcde12345';\n\nSET myVarOk = 'xyz';\nSET myVarExceeded = '123456789';\nEND;' The 'myVarExceeded' variable is defined as 'VARCHAR(5)' but both assigned values (''abcde12345'' and ''123456789'') exceed this limitation. You can truncate assigned values or increase the defined length. To increase the length, use the Increase type length quick-fix. After the quick-fix is applied: 'CREATE PROCEDURE test() AS\nBEGIN\nDECLARE myVarOk VARCHAR(5) = 'abcde';\nDECLARE myVarExceeded VARCHAR(10) = 'abcde12345';\n\nSET myVarOk = 'xyz';\nSET myVarExceeded = '123456789';\nEND;'", + "markdown": "Reports variables that exceed the defined length in characters.\n\nExample (Microsoft SQL Server):\n\n CREATE PROCEDURE test() AS\n BEGIN\n DECLARE myVarOk VARCHAR(5) = 'abcde';\n DECLARE myVarExceeded VARCHAR(5) = 'abcde12345';\n\n SET myVarOk = 'xyz';\n SET myVarExceeded = '123456789';\n END;\n\nThe `myVarExceeded` variable is defined as `VARCHAR(5)` but both assigned values (`'abcde12345'` and\n`'123456789'`) exceed this limitation. You can truncate assigned values or increase the defined length.\nTo increase the length, use the **Increase type length** quick-fix.\n\nAfter the quick-fix is applied:\n\n CREATE PROCEDURE test() AS\n BEGIN\n DECLARE myVarOk VARCHAR(5) = 'abcde';\n DECLARE myVarExceeded VARCHAR(10) = 'abcde12345';\n\n SET myVarOk = 'xyz';\n SET myVarExceeded = '123456789';\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlStringLengthExceeded", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertValuesInspection", + "shortDescription": { + "text": "VALUES clause cardinality" + }, + "fullDescription": { + "text": "Reports situations when a number of parameters in VALUES does not match a number of columns in a target table. Example (MySQL): 'CREATE TABLE foo(a INT, b INT, c INT);\n\nINSERT INTO foo VALUES (1,2,3,4)' The 'foo' table has three columns but in the INSERT INTO statement we pass four.", + "markdown": "Reports situations when a number of parameters in VALUES does not match a number of columns in a target table.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT, b INT, c INT);\n\n INSERT INTO foo VALUES (1,2,3,4)\n\nThe `foo` table has three columns but in the INSERT INTO statement we pass four." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertValues", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantElseNullInspection", + "shortDescription": { + "text": "Redundant ELSE NULL clause" + }, + "fullDescription": { + "text": "Reports redundant ELSE NULL clauses. Example (MySQL): 'SELECT CASE WHEN 2 > 1 THEN 'OK' ELSE NULL END AS alias FROM foo;' The 'ELSE NULL' part will never be executed and may be omitted.", + "markdown": "Reports redundant ELSE NULL clauses.\n\nExample (MySQL):\n\n SELECT CASE WHEN 2 > 1 THEN 'OK' ELSE NULL END AS alias FROM foo;\n\nThe `ELSE NULL` part will never be executed and may be omitted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantElseNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCallNotationInspection", + "shortDescription": { + "text": "Using of named and positional arguments" + }, + "fullDescription": { + "text": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2. Example (In PostgreSQL): 'CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n$$\nBEGIN\n RETURN a + b + c;\nEND\n$$;\nSELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\nSELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\nSELECT foo(b => 2, 1, 3);'", + "markdown": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2.\n\nExample (In PostgreSQL):\n\n CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n $$\n BEGIN\n RETURN a + b + c;\n END\n $$;\n SELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\n SELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\n SELECT foo(b => 2, 1, 3);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlCallNotation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MysqlParsingInspection", + "shortDescription": { + "text": "Unsupported syntax in pre-8.0 versions" + }, + "fullDescription": { + "text": "Reports invalid usages of UNION in queries. The inspection works in MySQL versions that are earlier than 8.0. Example (MySQL): 'SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;'", + "markdown": "Reports invalid usages of UNION in queries.\n\nThe inspection works in MySQL versions that are earlier than 8.0.\n\nExample (MySQL):\n\n\n SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MysqlParsing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 27, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlShadowingAliasInspection", + "shortDescription": { + "text": "Column is shadowed by alias" + }, + "fullDescription": { + "text": "Reports SELECT aliases with names that match column names in the FROM clause. Example (MySQL): 'CREATE TABLE foo (a INT, b INT, c INT);\nSELECT a b, c FROM foo;' The 'a' column uses the 'b' alias but the 'b' name is also used by the column from the 'foo' table.", + "markdown": "Reports SELECT aliases with names that match column names in the FROM clause.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT, b INT, c INT);\n SELECT a b, c FROM foo;\n\nThe `a` column uses the `b` alias but the `b` name is also used by the column from the `foo`\ntable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlShadowingAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnreachableCodeInspection", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports unreachable statements inside SQL routines. Example (Microsoft SQL Server): 'CREATE FUNCTION foo() RETURNS INT AS\nBEGIN\n THROW;\n RETURN 1;\nEND;' In Microsoft SQL Server, the 'THROW' statement raises an exception and transfers execution to the CATCH block of the TRY...CATCH construct. Therefore, the 'RETURN 1;' part will never be executed.", + "markdown": "Reports unreachable statements inside SQL routines.\n\nExample (Microsoft SQL Server):\n\n CREATE FUNCTION foo() RETURNS INT AS\n BEGIN\n THROW;\n RETURN 1;\n END;\n\nIn Microsoft SQL Server, the `THROW` statement raises an exception and transfers execution to the CATCH block of the TRY...CATCH\nconstruct. Therefore, the `RETURN 1;` part will never be executed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnreachable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlResolveInspection", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports unresolved SQL references. Example (MySQL): 'CREATE TABLE users(id INT, name VARCHAR(40));\nCREATE TABLE admins(id INT, col1 INT);\n\nSELECT users.id, admins.id FROM admins WHERE admins.id > 1;' The 'users.id' column is unresolved because the 'users' table is missing in the FROM clause.", + "markdown": "Reports unresolved SQL references.\n\nExample (MySQL):\n\n CREATE TABLE users(id INT, name VARCHAR(40));\n CREATE TABLE admins(id INT, col1 INT);\n\n SELECT users.id, admins.id FROM admins WHERE admins.id > 1;\n\nThe `users.id` column is unresolved because the `users` table is missing in the FROM clause." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlResolve", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCurrentSchemaInspection", + "shortDescription": { + "text": "Current console schema introspected" + }, + "fullDescription": { + "text": "Reports schemas and databases in the current session that are not introspected. For example, this warning might occur when you try to create a table in the schema that is not introspected. Introspection is a method of inspecting a data source. When you perform introspection, structural information in the data source is inspected to detect tables, columns, functions, and other elements with their attributes.", + "markdown": "Reports schemas and databases in the current session that are not introspected.\n\nFor example, this warning might occur when you try to create a table in the schema that is not introspected.\n\nIntrospection is a method of inspecting a data source. When you perform introspection, structural information in the data source is\ninspected to detect tables, columns, functions, and other elements with their attributes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCurrentSchemaInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantLimitInspection", + "shortDescription": { + "text": "Redundant row limiting in queries" + }, + "fullDescription": { + "text": "Reports redundant row limiting clauses like FETCH and LIMIT in queries. Example (PostgreSQL): 'CREATE TABLE foo(a INT);\n\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo LIMIT 2);\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo FETCH FIRST 2 ROWS ONLY);' To fix the warning, you can add OFFSET to limiting clauses. If OFFSET is missing, then LIMIT is redundant because the usage of LIMIT does not influence the operation result of EXISTS. In case with OFFSET, we skip first 'N' rows and this will influence the output. 'SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW LIMIT 2);\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW FETCH FIRST 2 ROWS ONLY);'", + "markdown": "Reports redundant row limiting clauses like FETCH and LIMIT in queries.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT);\n\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo LIMIT 2);\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo FETCH FIRST 2 ROWS ONLY);\n\nTo fix the warning, you can add OFFSET to limiting clauses. If OFFSET is missing, then LIMIT is redundant because\nthe usage of LIMIT does not influence the operation result of EXISTS. In case with OFFSET, we skip first `N` rows and this will\ninfluence the output.\n\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW LIMIT 2);\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW FETCH FIRST 2 ROWS ONLY);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantLimit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertNullIntoNotNullInspection", + "shortDescription": { + "text": "Insert NULL into NOT NULL column" + }, + "fullDescription": { + "text": "Reports cases when you insert NULL values into columns that accept only NOT NULL values. Example (Microsoft SQL Server): 'CREATE TABLE br2 (\nid INT NOT NULL,\ncol1 NVARCHAR (20) NOT NULL,\ncol2 NVARCHAR (20) NOT NULL,\n);\n--\nINSERT INTO br2 (id, col1, col2)\nVALUES (1, NULL, NULL);' You cannot insert NULL values in 'col1' and 'col2' because they are defined as NOT NULL. If you run the script as is, you will receive an error. To fix this code, replace NULL in the VALUES part with some values (for example, '42' and ''bird''). INSERT INTO br2 (id, col1, col2)\nVALUES (1, 42, 'bird');", + "markdown": "Reports cases when you insert NULL values into columns that accept only NOT NULL values.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE br2 (\n id INT NOT NULL,\n col1 NVARCHAR (20) NOT NULL,\n col2 NVARCHAR (20) NOT NULL,\n );\n --\n INSERT INTO br2 (id, col1, col2)\n VALUES (1, NULL, NULL);\n\nYou cannot insert NULL values in `col1` and `col2` because they are defined as NOT NULL. If you run the script as\nis,\nyou will receive an error. To fix this code, replace NULL in the VALUES part with some values (for example, `42` and\n`'bird'`).\n\n```\nINSERT INTO br2 (id, col1, col2)\nVALUES (1, 42, 'bird');\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertNullIntoNotNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDerivedTableAliasInspection", + "shortDescription": { + "text": "Each derived table should have alias" + }, + "fullDescription": { + "text": "Reports derived tables without aliases. Example (MySQL): 'CREATE TABLE table1 (id INT, name VARCHAR(20), cats FLOAT);\nCREATE TABLE table2 (id INT, age INTEGER);\n\nSELECT id AS ID, name, cats, age\nFROM (SELECT table1.id, name, cats, age\nFROM table1\nJOIN table2 ON table1.id = table2.id);' According to Derived Tables at dev.mysql.com, an alias is mandatory. You can add the alias by using the Introduce alias quick-fix. After the quick-fix is applied: 'SELECT id AS ID, name, cats, age\nFROM (SELECT table1.id, name, cats, age\nFROM table1\nJOIN table2 ON table1.id = table2.id);'", + "markdown": "Reports derived tables without aliases.\n\nExample (MySQL):\n\n CREATE TABLE table1 (id INT, name VARCHAR(20), cats FLOAT);\n CREATE TABLE table2 (id INT, age INTEGER);\n\n SELECT id AS ID, name, cats, age\n FROM (SELECT table1.id, name, cats, age\n FROM table1\n JOIN table2 ON table1.id = table2.id);\n\nAccording to [Derived Tables at dev.mysql.com](https://dev.mysql.com/doc/refman/8.0/en/derived-tables.html), an alias is\nmandatory. You can add the alias by using the **Introduce alias** quick-fix.\n\nAfter the quick-fix is applied:\n\n SELECT id AS ID, name, cats, age\n FROM (SELECT table1.id, name, cats, age\n FROM table1\n JOIN table2 ON table1.id = table2.id);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDerivedTableAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTriggerTransitionInspection", + "shortDescription": { + "text": "Suspicious code in triggers" + }, + "fullDescription": { + "text": "Reports incorrect usages of transition table variables in triggers. Example (HSQLDB): 'CREATE TABLE foo(a INT);\n\nCREATE TRIGGER trg\n AFTER DELETE ON foo\nBEGIN\n SELECT * FROM NEW;\nEND;\n\nCREATE TRIGGER trig AFTER INSERT ON foo\n REFERENCING OLD ROW AS newrow\n FOR EACH ROW WHEN (a > 1)\n INSERT INTO foo VALUES (1)' In HSQLDB, DELETE triggers may be used only with the OLD state while INSERT triggers may have only the NEW state. So, in the previous example, NEW in 'SELECT * FROM NEW;' will be highlighted as well as OLD in 'REFERENCING OLD ROW AS newrow'.", + "markdown": "Reports incorrect usages of transition table variables in triggers.\n\nExample (HSQLDB):\n\n CREATE TABLE foo(a INT);\n\n CREATE TRIGGER trg\n AFTER DELETE ON foo\n BEGIN\n SELECT * FROM NEW;\n END;\n\n CREATE TRIGGER trig AFTER INSERT ON foo\n REFERENCING OLD ROW AS newrow\n FOR EACH ROW WHEN (a > 1)\n INSERT INTO foo VALUES (1)\n\nIn HSQLDB, DELETE triggers may be used only with the OLD state while INSERT triggers may have only the NEW state. So, in the previous\nexample, NEW in `SELECT * FROM NEW;` will be highlighted as well as OLD in `REFERENCING OLD ROW AS newrow`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlTriggerTransition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlNamedArgumentsInspection", + "shortDescription": { + "text": "Named arguments should be used" + }, + "fullDescription": { + "text": "Reports arguments that are used without names in routine calls. By default, this inspection is disabled. For more information about the difference between named and unnamed parameters, see Binding Parameters by Name (Named Parameters) at docs.microsoft.com . Example (Microsoft SQL Server): 'CREATE FUNCTION foo(n INT, m INT) RETURNS INT AS\nBEGIN\n RETURN n + m;\nEND;\n\nCREATE PROCEDURE test AS\nBEGIN\n foo n = 1, m = 2;\n\n--- The following call misses parameter names and will be highlighted\n foo 1, 2;\nEND;' Parameters '1, 2' in the 'foo 1, 2;' call are highlighted because they miss names.", + "markdown": "Reports arguments that are used without names in routine calls. By default, this inspection is disabled.\n\nFor more information about the difference between named and unnamed parameters, see [Binding Parameters by Name (Named Parameters) at docs.microsoft.com](https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters).\n\nExample (Microsoft SQL Server):\n\n CREATE FUNCTION foo(n INT, m INT) RETURNS INT AS\n BEGIN\n RETURN n + m;\n END;\n\n CREATE PROCEDURE test AS\n BEGIN\n foo n = 1, m = 2;\n\n --- The following call misses parameter names and will be highlighted\n foo 1, 2;\n END;\n\nParameters `1, 2` in the `foo 1, 2;` call are highlighted because they miss names." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlNamedArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCaseVsCoalesceInspection", + "shortDescription": { + "text": "Using CASE instead of COALESCE function and vice versa" + }, + "fullDescription": { + "text": "Reports situations when CASE and COALESCE calls are interchangeable. This inspection has the following intention actions: Replace with 'COALESCE' call and the opposite one Replace with CASE expression. Example (MySQL): 'SELECT\n -- this CASE may be replaced by COALESCE\n\tCASE\n\t\tWHEN C1 IS NOT NULL THEN C1\n\t\tELSE 0\n\t\tEND\nFROM dual;' In the example, the CASE statement can be replaced with 'SELECT COALESCE(C1, 0)' that produces the same output. If you prefer using CASE expressions, select the Prefer CASE expressions over COALESCE function option on the inspection page.", + "markdown": "Reports situations when CASE and COALESCE calls are interchangeable. This inspection has the following intention actions: **Replace\nwith 'COALESCE' call** and the opposite one **Replace with CASE expression** .\n\nExample (MySQL):\n\n SELECT\n -- this CASE may be replaced by COALESCE\n \tCASE\n \t\tWHEN C1 IS NOT NULL THEN C1\n \t\tELSE 0\n \t\tEND\n FROM dual;\n\nIn the example, the CASE statement can be replaced with `SELECT COALESCE(C1, 0)` that produces the same output.\n\nIf you prefer using CASE expressions, select the **Prefer CASE expressions over COALESCE function** option on\nthe inspection page." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCaseVsCoalesce", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTransactionStatementInTriggerInspection", + "shortDescription": { + "text": "Use of transaction management statements in triggers" + }, + "fullDescription": { + "text": "Reports usages of transaction management statements like COMMIT or ROLLBACK in trigger bodies. With COMMIT or ROLLBACK statements in a trigger body, the trigger will not compile. The fail happens because triggers start during transactions. When the trigger starts the current transaction is still not complete. As COMMIT terminates a transaction, both statements (COMMIT and ROLLBACK) would lead to an exception. Changes that are executed in a trigger should be committed (or rolled back) by the owning transaction that started the trigger. Example (Oracle): 'CREATE TABLE employee_audit\n(\n id INT NOT NULL,\n update_date DATE NOT NULL,\n old_name VARCHAR2(100),\n new_name VARCHAR2(100)\n);\n\nCREATE TABLE employees\n(\n id INT NOT NULL,\n name VARCHAR2(100) NOT NULL\n);\n\nCREATE OR REPLACE TRIGGER trig_commit\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\nBEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n COMMIT;\nEND;\n\nCREATE OR REPLACE TRIGGER trig_rollback\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\nBEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n ROLLBACK;\nEND;'", + "markdown": "Reports usages of transaction management statements like COMMIT or ROLLBACK in trigger bodies.\n\nWith COMMIT or ROLLBACK statements in a trigger body, the trigger will not compile.\nThe fail happens because triggers start during transactions. When the trigger starts the current transaction is still not complete. As\nCOMMIT\nterminates a transaction, both statements (COMMIT and ROLLBACK) would lead to an exception.\nChanges that are executed in a trigger should be committed (or rolled back) by the owning transaction that started the trigger.\n\nExample (Oracle):\n\n CREATE TABLE employee_audit\n (\n id INT NOT NULL,\n update_date DATE NOT NULL,\n old_name VARCHAR2(100),\n new_name VARCHAR2(100)\n );\n\n CREATE TABLE employees\n (\n id INT NOT NULL,\n name VARCHAR2(100) NOT NULL\n );\n\n CREATE OR REPLACE TRIGGER trig_commit\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\n BEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n COMMIT;\n END;\n\n CREATE OR REPLACE TRIGGER trig_rollback\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\n BEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n ROLLBACK;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlTransactionStatementInTrigger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantCodeInCoalesceInspection", + "shortDescription": { + "text": "Redundant code in COALESCE call" + }, + "fullDescription": { + "text": "Reports all the arguments except for the first expression that does not evaluate to NULL in COALESCE functions. Example (MySQL): 'SELECT COALESCE(NULL, NULL, NULL, 42, NULL, 'string') as a;' The first NOT NULL argument is '42', all other arguments will be grayed out.", + "markdown": "Reports all the arguments except for the first expression that does not evaluate to NULL in COALESCE functions.\n\nExample (MySQL):\n\n SELECT COALESCE(NULL, NULL, NULL, 42, NULL, 'string') as a;\n\nThe first NOT NULL argument is `42`, all other arguments will be grayed out." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantCodeInCoalesce", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAggregatesInspection", + "shortDescription": { + "text": "Aggregate-related problems" + }, + "fullDescription": { + "text": "Reports invalid usages of SQL aggregate functions. The following situations are considered: Columns that are used in HAVING and ORDER BY clauses but are missed in GROUP BY clauses. 'CREATE TABLE foo(id INT PRIMARY KEY, a INT, b INT);\nSELECT a, MAX(b) FROM foo GROUP BY a HAVING b > 0;\nSELECT * FROM foo GROUP BY a ORDER BY b;' This rule does not apply when grouping is made by the primary key. 'SELECT * FROM foo GROUP BY id ORDER BY b;' Aggregate functions in a wrong context. Usually, you can use aggregate functions in the following contexts: a list of expressions in SELECT; in HAVING and ORDER BY sections; and other dialect-specific cases. The following queries will display an error. 'SELECT a FROM foo WHERE MAX(b) > 0;\nSELECT a FROM foo GROUP BY MAX(a);' Nested calls of aggregate functions. 'SELECT MAX(SUM(a)) FROM foo GROUP BY a;' This rule does not apply to analytic functions. The following query is valid and correct. 'SELECT MAX(SUM(a) OVER ()) FROM foo;' Usages of HAVING without aggregate functions. In this case, consider rewriting your code using the WHERE section. 'SELECT a, MAX(b) FROM foo GROUP BY a HAVING a > 0;'", + "markdown": "Reports invalid usages of SQL aggregate functions.\n\nThe following situations are considered:\n\n* Columns that are used in HAVING and ORDER BY clauses but are missed in GROUP BY clauses.\n\n CREATE TABLE foo(id INT PRIMARY KEY, a INT, b INT);\n SELECT a, MAX(b) FROM foo GROUP BY a HAVING b > 0;\n SELECT * FROM foo GROUP BY a ORDER BY b;\n\n This rule does not apply when grouping is made by the primary key.\n\n SELECT * FROM foo GROUP BY id ORDER BY b;\n\n* Aggregate functions in a wrong context. Usually, you can use aggregate functions in the following contexts: a list of expressions in\n SELECT; in HAVING and ORDER BY sections; and other dialect-specific cases. The following queries will display an error.\n\n SELECT a FROM foo WHERE MAX(b) > 0;\n SELECT a FROM foo GROUP BY MAX(a);\n\n* Nested calls of aggregate functions.\n\n SELECT MAX(SUM(a)) FROM foo GROUP BY a;\n\n This rule does not apply to analytic functions. The following query is valid and correct.\n\n SELECT MAX(SUM(a) OVER ()) FROM foo;\n\n* Usages of HAVING without aggregate functions. In this case, consider rewriting your code using the WHERE section.\n\n SELECT a, MAX(b) FROM foo GROUP BY a HAVING a > 0;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAggregates", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMissingColumnAliasesInspection", + "shortDescription": { + "text": "Missing column aliases" + }, + "fullDescription": { + "text": "Reports queries without explicit aliases in output expressions (for example, in the SELECT statement). Example (PostgreSQL): 'CREATE TABLE foo(a INT, b INT);\n\nSELECT 1, a + 1 AS A2, MAX(b) AS M\nFROM foo;'", + "markdown": "Reports queries without explicit aliases in output expressions (for example, in the SELECT statement).\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT, b INT);\n\n SELECT 1, a + 1 AS A2, MAX(b) AS M\n FROM foo;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMissingColumnAliases", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAddNotNullColumnInspection", + "shortDescription": { + "text": "Adding not null column without default value" + }, + "fullDescription": { + "text": "Reports attempts to create NOT NULL columns without DEFAULT values. Example (Microsoft SQL Server): 'CREATE TABLE foo (a INT, b INT)\n\nALTER TABLE foo ADD c INT NOT NULL;' By default, a column holds NULL values. In the example, we use the NOT NULL constraint that enforces a column not to accept NULL values. If we prohibit to use NULL values, we must set the DEFAULT value that SQL can use when we create a new record. 'ALTER TABLE foo ADD c INT NOT NULL DEFAULT 42;' You can quickly add the DEFAULT value by using the Add DEFAULT value quick-fix.", + "markdown": "Reports attempts to create NOT NULL columns without DEFAULT values.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE foo (a INT, b INT)\n\n ALTER TABLE foo ADD c INT NOT NULL;\n\nBy default, a column holds NULL values. In the example, we use the NOT NULL constraint that enforces a column not to accept NULL values.\nIf we prohibit to use NULL values, we must set the DEFAULT value that SQL can use when we create a new record.\n\n ALTER TABLE foo ADD c INT NOT NULL DEFAULT 42;\n\nYou can quickly add the DEFAULT value by using the **Add DEFAULT value** quick-fix." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAddNotNullColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraMissingBodyInspection", + "shortDescription": { + "text": "Missing body for package/object type specification" + }, + "fullDescription": { + "text": "Reports package and object type specifications that are missing body declarations. Package specifications and object types that declare routines as well as package specifications with cursors must have body declarations where those routines and cursors are implemented. Absence of a body leads to a runtime error when routines or cursors are invoked in program code. Example (Oracle): 'CREATE OR REPLACE PACKAGE ppp IS\n FUNCTION foo(a INT) RETURN INT;\nEND;'", + "markdown": "Reports package and object type specifications that are missing body declarations.\n\nPackage specifications and object types that declare routines as well as package specifications with cursors must have body\ndeclarations where those routines and cursors are implemented. Absence of a body leads to a runtime error when routines or cursors are\ninvoked in program code.\n\nExample (Oracle):\n\n CREATE OR REPLACE PACKAGE ppp IS\n FUNCTION foo(a INT) RETURN INT;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMissingBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 154, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtResolveInspection", + "shortDescription": { + "text": "Resolution problems" + }, + "fullDescription": { + "text": "Reports unresolved references in MongoDB and JavaScript code.", + "markdown": "Reports unresolved references in MongoDB and JavaScript code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 162, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlIllegalCursorStateInspection", + "shortDescription": { + "text": "Illegal cursor state" + }, + "fullDescription": { + "text": "Reports illegal cursor states inside SQL routines. A routine has CLOSE or FETCH statements but a cursor might be closed. A routine has the OPEN statement but a cursor might be opened. Example (Microsoft SQL Server): 'CREATE TABLE t(col INT);\n\nCREATE PROCEDURE foo() AS\nBEGIN\nDECLARE my_cursor CURSOR FOR SELECT * FROM t;\nDECLARE a INT;\nFETCH my_cursor INTO a;\nCLOSE my_cursor;\nEND;' According to CLOSE (Transact-SQL) at docs.microsoft.com, CLOSE must be issued on an open cursor, and CLOSE is not allowed on cursors that have only been declared or are already closed. So, we need to open the cursor to fix the warning. 'CREATE PROCEDURE foo() AS\nBEGIN\nDECLARE my_cursor CURSOR FOR SELECT * FROM t;\nDECLARE a INT;\nOPEN my_cursor;\nFETCH my_cursor INTO a;\nCLOSE my_cursor;\nEND;'", + "markdown": "Reports illegal cursor states inside SQL routines.\n\n* A routine has CLOSE or FETCH statements but a cursor might be closed.\n* A routine has the OPEN statement but a cursor might be opened.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE t(col INT);\n\n CREATE PROCEDURE foo() AS\n BEGIN\n DECLARE my_cursor CURSOR FOR SELECT * FROM t;\n DECLARE a INT;\n FETCH my_cursor INTO a;\n CLOSE my_cursor;\n END;\n\nAccording to [CLOSE (Transact-SQL) at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/close-transact-sql), CLOSE must be issued on an open cursor, and CLOSE is not allowed on cursors that have only been declared or are\nalready closed. So, we need to open the cursor to fix the warning.\n\n CREATE PROCEDURE foo() AS\n BEGIN\n DECLARE my_cursor CURSOR FOR SELECT * FROM t;\n DECLARE a INT;\n OPEN my_cursor;\n FETCH my_cursor INTO a;\n CLOSE my_cursor;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlIllegalCursorState", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCheckUsingColumnsInspection", + "shortDescription": { + "text": "Check using clause columns" + }, + "fullDescription": { + "text": "Reports columns in the USING clause that does not exist in both tables. Example (MySQL): 'CREATE TABLE t1 (i INT, j INT);\nCREATE TABLE t2 (k INT, l INT);\nSELECT * FROM t1 JOIN t2 USING (j);' In USING clauses, a column name must be present in both tables, and the SELECT query will automatically join those tables by using the given column name. As we do not have the 'j' column in 't2', we can rewrite the query using ON. The ON clause can join tables where the column names do not match in both tables. 'SELECT * FROM t1 JOIN t2 ON t1.j = t2.l;'", + "markdown": "Reports columns in the USING clause that does not exist in both tables.\n\nExample (MySQL):\n\n CREATE TABLE t1 (i INT, j INT);\n CREATE TABLE t2 (k INT, l INT);\n SELECT * FROM t1 JOIN t2 USING (j);\n\nIn USING clauses, a column name must be present in both tables, and the SELECT query will automatically join\nthose tables by using the given column name. As we do not have the `j` column in `t2`, we can\nrewrite the query using ON. The ON clause can join tables where the column names do not match in both tables.\n\n SELECT * FROM t1 JOIN t2 ON t1.j = t2.l;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCheckUsingColumns", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlConstantConditionInspection", + "shortDescription": { + "text": "Constant condition" + }, + "fullDescription": { + "text": "Reports conditions in WHERE or JOIN clauses that are always TRUE or always FALSE. Example (MySQL): 'CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\nSELECT a FROM t1 WHERE 'Cat' = 'Cat';' The ''Cat' = 'Cat'' is always true and will be reported.", + "markdown": "Reports conditions in WHERE or JOIN clauses that are always TRUE or always FALSE.\n\nExample (MySQL):\n\n CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\n SELECT a FROM t1 WHERE 'Cat' = 'Cat';\n\nThe `'Cat' = 'Cat'` is always true and will be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlConstantCondition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDuplicateColumnInspection", + "shortDescription": { + "text": "Duplicating column name in SELECT" + }, + "fullDescription": { + "text": "Reports duplicated names of column aliases in SELECT lists. Example (Sybase ASE): 'CREATE TABLE t1 (a TEXT, b INT, c INT);\n\nSELECT a AS x, b AS x FROM t1;' The 'x' alias name is used for 'a' and 'b' columns. These assignments are highlighted as errors because you cannot use identical alias names for columns in Sybase ASE.", + "markdown": "Reports duplicated names of column aliases in SELECT lists.\n\nExample (Sybase ASE):\n\n CREATE TABLE t1 (a TEXT, b INT, c INT);\n\n SELECT a AS x, b AS x FROM t1;\n\nThe `x` alias name is used for `a` and `b` columns. These assignments are highlighted as errors because\nyou cannot use identical alias names for columns in Sybase ASE." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDuplicateColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertIntoGeneratedColumnInspection", + "shortDescription": { + "text": "Insertion into generated columns" + }, + "fullDescription": { + "text": "Reports INSERT statements that assign values to generated columns. Generated columns can be read, but their values can not be directly written. Example (PostgreSQL): 'CREATE TABLE foo\n(\n col1 INT,\n col2 INT GENERATED ALWAYS AS (col1 + 1) STORED\n);\nINSERT INTO foo(col1, col2) VALUES (1, 2);'\n You cannot insert '2' into the 'col2' column because this column is generated. For this script to work, you can change '2' to DEFAULT. 'INSERT INTO foo(col1, col2) VALUES (1, DEFAULT);'", + "markdown": "Reports INSERT statements that assign values to generated columns. Generated columns can be read, but their values can not be directly written.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo\n (\n col1 INT,\n col2 INT GENERATED ALWAYS AS (col1 + 1) STORED\n );\n INSERT INTO foo(col1, col2) VALUES (1, 2);\n\nYou cannot insert `2` into the `col2` column because this column is generated.\nFor this script to work, you can change `2` to DEFAULT.\n`INSERT INTO foo(col1, col2) VALUES (1, DEFAULT);`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertIntoGeneratedColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlIdentifierInspection", + "shortDescription": { + "text": "Identifier should be quoted" + }, + "fullDescription": { + "text": "Reports situations when you use SQL reserved keywords as identifier names in your query. Example (Microsoft SQL Server): 'CREATE TABLE select (identity INT IDENTITY NOT NULL, order INT NOT NULL);' We use 'select', 'identity', and 'order' as table and column names. But they are also reserved keywords in Microsoft SQL Server. Therefore, in order to use them as object names in the query, you must quote these identifiers. To quote them, you can use the Quote identifier quick-fix. After the quick-fix is applied: 'CREATE TABLE [select] ([identity] INT IDENTITY NOT NULL, [order] INT NOT NULL);'", + "markdown": "Reports situations when you use SQL reserved keywords as identifier names in your query.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE select (identity INT IDENTITY NOT NULL, order INT NOT NULL);\n\nWe use `select`, `identity`, and `order` as table and column names.\nBut they are also reserved keywords in Microsoft SQL Server.\nTherefore, in order to use them as object names in the query, you must quote these identifiers. To quote them, you can use the\n**Quote identifier** quick-fix.\n\nAfter the quick-fix is applied:\n\n CREATE TABLE [select] ([identity] INT IDENTITY NOT NULL, [order] INT NOT NULL);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlIdentifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MsOrderByInspection", + "shortDescription": { + "text": "ORDER BY in queries" + }, + "fullDescription": { + "text": "Reports usages when the 'ORDER BY' clause is used without 'TOP', 'OFFSET', or 'FOR XML' in views, inline functions, derived tables, subqueries, and common table expressions. For more information about usages of 'ORDER BY', see SELECT - ORDER BY Clause (Transact-SQL) at docs.microsoft.com. Example (Microsoft SQL server): 'CREATE TABLE foo (a INT NOT NULL, b INT NOT NULL);\n\nSELECT *\nFROM (SELECT a, b\nFROM foo A\nWHERE a < 89\nORDER BY b) ALIAS;' In a subquery, ORDER BY will be highlighted as an error. You can add TOP, OFFSET, or FOR XML to a subquery. Alternatively, use the Delete element quick-fix to delete the ORDER BY section. After the quick-fix is applied: 'SELECT *\nFROM (SELECT a, b\nFROM foo A\nWHERE a < 89) ALIAS;'", + "markdown": "Reports usages when the `ORDER BY` clause is used without `TOP`, `OFFSET`, or `FOR XML` in views, inline functions, derived tables, subqueries, and common table expressions.\n\nFor more information about usages of `ORDER BY`, see [SELECT - ORDER BY Clause (Transact-SQL) at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql).\n\nExample (Microsoft SQL server):\n\n CREATE TABLE foo (a INT NOT NULL, b INT NOT NULL);\n\n SELECT *\n FROM (SELECT a, b\n FROM foo A\n WHERE a < 89\n ORDER BY b) ALIAS;\n\nIn a subquery, ORDER BY will be highlighted as an error. You can add TOP, OFFSET, or FOR XML to a subquery.\nAlternatively, use the **Delete element** quick-fix to delete the ORDER BY section.\n\nAfter the quick-fix is applied:\n\n SELECT *\n FROM (SELECT a, b\n FROM foo A\n WHERE a < 89) ALIAS;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MsOrderBy", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "SQL server", + "index": 178, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDeprecateTypeInspection", + "shortDescription": { + "text": "Deprecated type" + }, + "fullDescription": { + "text": "Reports usages of types that are deprecated and might disappear in future versions of DBMS. Reported types: LONG in Oracle (see Deprecated and Desupported Features at docs.oracle.com). TEXT, NTEXT, and IMAGE in Microsoft SQL Server (see Deprecated Database Engine Features in SQL Server 2016 at docs.microsoft.com). Example (Oracle): 'CREATE TABLE ot.foo(\na NUMBER GENERATED BY DEFAULT AS IDENTITY,\nb LONG NOT NULL\n);'", + "markdown": "Reports usages of types that are deprecated and might disappear in future versions of DBMS.\n\nReported types:\n\n* LONG in Oracle (see [Deprecated\n and Desupported Features at docs.oracle.com](https://docs.oracle.com/cd/A91202_01/901_doc/server.901/a90120/ch4_dep.htm#6690)).\n* TEXT, NTEXT, and IMAGE in Microsoft SQL Server (see [Deprecated Database Engine Features in SQL Server 2016 at docs.microsoft.com](https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016?view=sql-server-ver15)).\n\nExample (Oracle):\n\n CREATE TABLE ot.foo(\n a NUMBER GENERATED BY DEFAULT AS IDENTITY,\n b LONG NOT NULL\n );\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDeprecateType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlGotoInspection", + "shortDescription": { + "text": "Usages of GOTO statements" + }, + "fullDescription": { + "text": "Reports usages of backward GOTO statements and GOTO statements used to exit a loop. The extensive use of GOTO statements is generally not recommended. For details, see GOTO statement in SQL procedures at ibm.com. Instead of jumping back to a previous statement using GOTO, consider using a loop. Instead of exiting the WHILE loop with GOTO, consider using other control-of-flow statements (for example, RETURN or BREAK). Example (Oracle): 'CREATE PROCEDURE test(n INT) AS\nDECLARE\n x INT;\nBEGIN\n x := 0;\n GOTO a;\n <> x := 1;\n IF (n = 0) THEN\n GOTO a;\n END IF;\n WHILE TRUE\n LOOP\n GOTO b;\n END LOOP;\n <> x := 3;\nEND;'", + "markdown": "Reports usages of backward GOTO statements and GOTO statements used to exit a loop.\n\nThe extensive use of GOTO statements is generally\nnot recommended. For details, see [GOTO statement in\nSQL\nprocedures at ibm.com](https://www.ibm.com/docs/no/db2/11.5?topic=procedures-goto-statement-in-sql).\n\nInstead of jumping back to a previous statement using GOTO, consider using a loop.\n\nInstead of exiting the WHILE loop with GOTO, consider using other control-of-flow statements (for example, RETURN or BREAK).\n\nExample (Oracle):\n\n CREATE PROCEDURE test(n INT) AS\n DECLARE\n x INT;\n BEGIN\n x := 0;\n GOTO a;\n <> x := 1;\n IF (n = 0) THEN\n GOTO a;\n END IF;\n WHILE TRUE\n LOOP\n GOTO b;\n END LOOP;\n <> x := 3;\n END;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlGoto", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 58, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.javaee.jpa", + "version": "241.17569", + "rules": [ + { + "id": "JpaObjectClassSignatureInspection", + "shortDescription": { + "text": "Persistent object class signature checks" + }, + "fullDescription": { + "text": "Reports incorrectly defined persistent object classes in the following cases: Class is not top-level Class is final Class is annotated several times Class is defined as both a persistent entity and an entity listener Example: '@Entity\n @EntityListeners(value = JavaEntity.class) // Error: both @Entity and @EntityListener annotations are pointing to the same class\n public final class JavaEntity { // Error: persistent entity should not be final\n ...\n }'", + "markdown": "Reports incorrectly defined persistent object classes in the following cases:\n\n* Class is not top-level\n* Class is final\n* Class is annotated several times\n* Class is defined as both a persistent entity and an entity listener\n\n**Example:**\n\n\n @Entity\n @EntityListeners(value = JavaEntity.class) // Error: both @Entity and @EntityListener annotations are pointing to the same class\n public final class JavaEntity { // Error: persistent entity should not be final\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaObjectClassSignatureInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaQlInspection", + "shortDescription": { + "text": "Query language checks" + }, + "fullDescription": { + "text": "Reports the following errors inside Persistence QL queries: Mismatching expression types Incorrect parameters Empty or constant conditions Unresolved symbols Example queries: 'SELECT OBJECT(e) FROM JavaEntity e WHERE TRUE // Warning: constant condition\n\nSELECT OBJECT(e) FROM JavaEntity e WHERE e.id BETWEEN 0 AND '2' // Error: expected a numeric value but got a string\n\nSELECT e from JavaEntity e where e.id=?1 and e.name=?3 // Error: there are only 2 actual query parameters'", + "markdown": "Reports the following errors inside Persistence QL queries:\n\n* Mismatching expression types\n* Incorrect parameters\n* Empty or constant conditions\n* Unresolved symbols\n\n**Example queries:**\n\n\n SELECT OBJECT(e) FROM JavaEntity e WHERE TRUE // Warning: constant condition\n\n SELECT OBJECT(e) FROM JavaEntity e WHERE e.id BETWEEN 0 AND '2' // Error: expected a numeric value but got a string\n\n SELECT e from JavaEntity e where e.id=?1 and e.name=?3 // Error: there are only 2 actual query parameters\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaQlInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaQueryApiInspection", + "shortDescription": { + "text": "Unresolved queries and query parameters" + }, + "fullDescription": { + "text": "Reports unresolved symbols in named and native queries and related API methods: Unknown named query Unknown query parameter Example: '@Entity\n @NamedQuery(name = \"SelectByConditionQuery\", query = \"...\")\n public class JavaEntity { ... }\n\n class Main {\n public static void executeQuery() {\n Persistence.createEntityManagerFactory(\"\")\n .createEntityManager()\n .createNamedQuery(\"SelectAllQuery\") // Error: unknown query name\n ...\n }\n }'", + "markdown": "Reports unresolved symbols in named and native queries and related API methods:\n\n* Unknown named query\n* Unknown query parameter\n\n**Example:**\n\n\n @Entity\n @NamedQuery(name = \"SelectByConditionQuery\", query = \"...\")\n public class JavaEntity { ... }\n\n class Main {\n public static void executeQuery() {\n Persistence.createEntityManagerFactory(\"\")\n .createEntityManager()\n .createNamedQuery(\"SelectAllQuery\") // Error: unknown query name\n ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaQueryApiInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaDataSourceORMDomInspection", + "shortDescription": { + "text": "Unresolved database references in XML" + }, + "fullDescription": { + "text": "Reports Persistence ORM XML descriptors that cannot be resolved within the configured datasource and suggests refreshing the datasource or assigning a different one. Example database table: 'CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n );' Example JSP file: '\n \n \n // Error: unresolved table\n \n \n \n \n // Error: unresolved column\n \n \n \n \n ' NOTE: Datasource can be configured via `Assign datasource` action", + "markdown": "Reports Persistence ORM XML descriptors that cannot be resolved within the configured datasource and suggests refreshing the datasource or assigning a different one.\n\n**Example database table:**\n\n\n CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n );\n\n**Example JSP file:**\n\n\n \n \n \n
    // Error: unresolved table\n \n \n \n \n // Error: unresolved column\n \n \n \n \n \n\n\n**NOTE:** Datasource can be configured via \\`Assign datasource\\` action" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaDataSourceORMDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaDomInspection", + "shortDescription": { + "text": "persistence.xml problems" + }, + "fullDescription": { + "text": "Reports the following problems inside XML configuration files: References to non-instantiable classes References to classes that do not extend required class References to classes with inappropriate scope Tag and attribute values that do not match required pattern (for example, Java Identifiers) Tags that do not include required children tags or attributes Tags that define objects with duplicate names Example: '\n \n org.example.SomeRandomClass // Error: provider class should implement PersistenceProvider interface\n \n'", + "markdown": "Reports the following problems inside XML configuration files:\n\n* References to non-instantiable classes\n* References to classes that do not extend required class\n* References to classes with inappropriate scope\n* Tag and attribute values that do not match required pattern (for example, Java Identifiers)\n* Tags that do not include required children tags or attributes\n* Tags that define objects with duplicate names\n\n**Example:**\n\n\n \n \n org.example.SomeRandomClass // Error: provider class should implement PersistenceProvider interface\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaDataSourceORMInspection", + "shortDescription": { + "text": "Unresolved database references in annotations" + }, + "fullDescription": { + "text": "Reports references inside the following Persistence ORM annotations if they cannot be resolved within the configured datasource: Table Column [Any]To[Any] JoinColumn / JoinTable NamedQuery / NativeQuery Embeddable Suggests refreshing the datasource or assigning a different one. Example database table: 'CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n);' Example JPA entity class: '@Entity\n @Table(name = \"UNKNOWN_TABLE\") // unresolved reference\n public class JavaEntity {\n @Column(name = \"ID\") // cannot resolve columns in a table that's not defined\n Integer id;\n }' NOTE: Datasource can be configured via `Assign datasource` action or the corresponding gutter icon for entity class", + "markdown": "Reports references inside the following Persistence ORM annotations if they cannot be resolved within the configured datasource: \n\n* Table\n* Column\n* \\[Any\\]To\\[Any\\]\n* JoinColumn / JoinTable\n* NamedQuery / NativeQuery\n* Embeddable\n\nSuggests refreshing the datasource or assigning a different one. \n\n**Example database table:**\n\n\n CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n );\n\n**Example JPA entity class:**\n\n\n @Entity\n @Table(name = \"UNKNOWN_TABLE\") // unresolved reference\n public class JavaEntity {\n @Column(name = \"ID\") // cannot resolve columns in a table that's not defined\n Integer id;\n }\n\n\n**NOTE:** Datasource can be configured via \\`Assign datasource\\` action or the corresponding gutter icon for entity class" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaDataSourceORMInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaAttributeTypeInspection", + "shortDescription": { + "text": "Persistent attribute type checks" + }, + "fullDescription": { + "text": "Reports property type mismatch for JPA attributes. Example: '@Entity\n public class JavaEntity {\n\n @OneToOne\n Map incorrectRelationship; // Error: 'One To One' attribute type should be an entity, not a map\n\n @ManyToMany\n Map correctRelationship;\n }'", + "markdown": "Reports property type mismatch for JPA attributes.\n\n**Example:**\n\n\n @Entity\n public class JavaEntity {\n\n @OneToOne\n Map incorrectRelationship; // Error: 'One To One' attribute type should be an entity, not a map\n\n @ManyToMany\n Map correctRelationship;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaAttributeTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaMissingIdInspection", + "shortDescription": { + "text": "Persistent entity misses primary key" + }, + "fullDescription": { + "text": "Reports missing identification property persistence objects. Example: '@Entity\n public class JavaEntity { // Error: entity class should have an @Id annotated property\n\n }'", + "markdown": "Reports missing identification property persistence objects. \n\n**Example:**\n\n\n @Entity\n public class JavaEntity { // Error: entity class should have an @Id annotated property\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaMissingIdInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaORMDomInspection", + "shortDescription": { + "text": "Orm.xml problems" + }, + "fullDescription": { + "text": "Reports unresolved references to any database objects inside `orm.xml` configuration files: Tables Columns Schemas Catalogs Sequences Example database table: 'CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n);' Example orm.xml file: '\n example\n \n
    \n \n \n // Error: unresolved column name\n \n \n // Good\n \n \n \n'", + "markdown": "Reports unresolved references to any database objects inside \\`orm.xml\\` configuration files:\n\n* Tables\n* Columns\n* Schemas\n* Catalogs\n* Sequences\n\n**Example database table:**\n\n\n CREATE TABLE DATA_TABLE (\n ID INTEGER,\n DATA VARCHAR(100)\n );\n\n**Example orm.xml file:**\n\n\n \n example\n \n
    \n \n \n // Error: unresolved column name\n \n \n // Good\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaORMDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaEntityListenerInspection", + "shortDescription": { + "text": "Entity listener problems" + }, + "fullDescription": { + "text": "Reports the following JPA specification errors: Entity listener classes without public no-argument constructors Entity listener methods with incorrect signatures Example: '@Entity\n @EntityListeners(value = JavaEntityListener.class)\n class JavaEntity { ... }\n\n class JavaEntityListener {\n\n @PostLoad\n void postLoad(String parameter) { ... } // Error: method 'postLoad' should take parameter of type 'Object' here\n }'", + "markdown": "Reports the following JPA specification errors: \n\n* Entity listener classes without public no-argument constructors\n* Entity listener methods with incorrect signatures\n\n**Example:**\n\n\n @Entity\n @EntityListeners(value = JavaEntityListener.class)\n class JavaEntity { ... }\n\n class JavaEntityListener {\n\n @PostLoad\n void postLoad(String parameter) { ... } // Error: method 'postLoad' should take parameter of type 'Object' here\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaEntityListenerInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaAttributeMemberSignatureInspection", + "shortDescription": { + "text": "Persistent attribute signature checks" + }, + "fullDescription": { + "text": "Reports the following JPA specification errors: Several attributes are configured for a method or field Illegal attribute is used in Embeddable object (JPA 1.0) Persistent attribute metadata is specified not on a field or property getter No setter or getter with property-based access Example: '@Entity\n @Table(name = \"TABLE\")\n public class JavaEntity {\n\n private Integer id; // Error: both getter and setter should be present\n\n public Integer getId() { ... }\n\n\n\n private String data;\n\n public String getData() { ... }\n\n @Basic // Error: persistence annotation should be placed on field or getter method\n public void setData(String data) { ... }\n }'", + "markdown": "Reports the following JPA specification errors:\n\n* Several attributes are configured for a method or field\n* Illegal attribute is used in Embeddable object (JPA 1.0)\n* Persistent attribute metadata is specified not on a field or property getter\n* No setter or getter with property-based access\n\n**Example:**\n\n\n @Entity\n @Table(name = \"TABLE\")\n public class JavaEntity {\n\n private Integer id; // Error: both getter and setter should be present\n\n public Integer getId() { ... }\n\n\n\n private String data;\n\n public String getData() { ... }\n\n @Basic // Error: persistence annotation should be placed on field or getter method\n public void setData(String data) { ... }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaAttributeMemberSignatureInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaEntityListenerWarningsInspection", + "shortDescription": { + "text": "Entity listener warnings" + }, + "fullDescription": { + "text": "Reports entity listener classes without any entity listener methods. Example: '@Entity\n @EntityListeners(value = JavaEntityListener.class)\n public class JavaEntity { ... }\n\n class JavaEntityListener { // Error: no entity listener-specific methods found\n\n }'", + "markdown": "Reports entity listener classes without any entity listener methods.\n\n**Example:**\n\n\n @Entity\n @EntityListeners(value = JavaEntityListener.class)\n public class JavaEntity { ... }\n\n class JavaEntityListener { // Error: no entity listener-specific methods found\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JpaEntityListenerWarningsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaEntityGraphsInspection", + "shortDescription": { + "text": "Unresolved entity graph names" + }, + "fullDescription": { + "text": "Reports the following unresolved attributes inside EntityGraph-related annotations: Value in '@NamedAttributeNode' Named subgraph in '@NamedAttributeNode' Name in '@NamedEntityGraph' Example: '@Entity\n @NamedEntityGraph(name = \"entity-graph\", ...)\n public class JavaEntity {\n public void foo() {\n Persistence.createEntityManagerFactory(\"\")\n .createEntityManager()\n .getEntityGraph(\"unknown-entity-graph\"); // unresolved reference\n }\n }'", + "markdown": "Reports the following unresolved attributes inside EntityGraph-related annotations: \n\n* Value in `@NamedAttributeNode`\n* Named subgraph in `@NamedAttributeNode`\n* Name in `@NamedEntityGraph`\n\n**Example:**\n\n\n @Entity\n @NamedEntityGraph(name = \"entity-graph\", ...)\n public class JavaEntity {\n public void foo() {\n Persistence.createEntityManagerFactory(\"\")\n .createEntityManager()\n .getEntityGraph(\"unknown-entity-graph\"); // unresolved reference\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaEntityGraphsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaConfigDomFacetInspection", + "shortDescription": { + "text": "Persistence.xml is not added to facet" + }, + "fullDescription": { + "text": "Reports missing persistence.xml configuration files and suggests adding the file to the persistence facet.", + "markdown": "Reports missing persistence.xml configuration files and suggests adding the file to the persistence facet." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JpaConfigDomFacetInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JpaModelReferenceInspection", + "shortDescription": { + "text": "Unresolved references in queries" + }, + "fullDescription": { + "text": "Reports unresolved symbols in the following JPA annotations and API methods: 'AttributeOverride' 'AssociationOverride' 'MapsId' 'MapKey' 'Criteria API methods' Example: '@Entity\n @AssociationOverrides({\n @AssociationOverride(name = \"missingAttribute\", joinColumns = { ... }), // Error: unresolved attribute\n @AssociationOverride(name = \"existingAttribute\", joinColumns = { ... })\n })\n public class JavaEntity {\n @OneToOne\n AnotherEntity existingAttribute;\n }'", + "markdown": "Reports unresolved symbols in the following JPA annotations and API methods:\n\n* `AttributeOverride`\n* `AssociationOverride`\n* `MapsId`\n* `MapKey`\n* `Criteria API methods`\n\n**Example:**\n\n\n @Entity\n @AssociationOverrides({\n @AssociationOverride(name = \"missingAttribute\", joinColumns = { ... }), // Error: unresolved attribute\n @AssociationOverride(name = \"existingAttribute\", joinColumns = { ... })\n })\n public class JavaEntity {\n @OneToOne\n AnotherEntity existingAttribute;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JpaModelReferenceInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JPA", + "index": 32, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.sass", + "version": "241.17569", + "rules": [ + { + "id": "SassScssResolvedByNameOnly", + "shortDescription": { + "text": "Missing import" + }, + "fullDescription": { + "text": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly imported in the current file. Example: '* {\n margin: $var-in-other-file;\n}'", + "markdown": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly [imported](https://sass-lang.com/documentation/at-rules/import) in the current file.\n\n**Example:**\n\n\n * {\n margin: $var-in-other-file;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SassScssResolvedByNameOnly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 34, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssUnresolvedVariable", + "shortDescription": { + "text": "Unresolved variable" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS variable reference. Example: '* {\n margin: $unknown-var;\n}'", + "markdown": "Reports an unresolved [Sass/SCSS variable](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n margin: $unknown-var;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 34, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssUnresolvedMixin", + "shortDescription": { + "text": "Unresolved mixin" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS mixin reference. Example: '* {\n @include unknown-mixin;\n}'", + "markdown": "Reports an unresolved [Sass/SCSS mixin](https://sass-lang.com/documentation/at-rules/mixin) reference.\n\n**Example:**\n\n\n * {\n @include unknown-mixin;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedMixin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 34, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssUnresolvedPlaceholderSelector", + "shortDescription": { + "text": "Unresolved placeholder selector" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS placeholder selector reference. Example: '* {\n @extend %unknown-placeholder-selector;\n}'", + "markdown": "Reports an unresolved [Sass/SCSS placeholder selector](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n @extend %unknown-placeholder-selector;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedPlaceholderSelector", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 34, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij", + "version": "241.17569.155", + "rules": [ + { + "id": "HtmlUnknownBooleanAttribute", + "shortDescription": { + "text": "Incorrect boolean attribute" + }, + "fullDescription": { + "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.", + "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownBooleanAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatedCode", + "shortDescription": { + "text": "Duplicated code fragment" + }, + "fullDescription": { + "text": "Reports duplicated blocks of code from the selected scope: the same file or the entire project. The inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window. The inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs.", + "markdown": "Reports duplicated blocks of code from the selected scope: the same file or the entire project.\n\nThe inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window.\n\nThe inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "DuplicatedCode", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSuppression", + "shortDescription": { + "text": "Redundant suppression" + }, + "fullDescription": { + "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}'", + "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSuppression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomRegExpInspection", + "shortDescription": { + "text": "Custom RegExp inspection" + }, + "fullDescription": { + "text": "Custom Regex Inspection", + "markdown": "Custom Regex Inspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CustomRegExpInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectFormatting", + "shortDescription": { + "text": "Incorrect formatting" + }, + "fullDescription": { + "text": "Reports formatting issues that appear if your code doesn't follow your project's code style settings. This inspection is not compatible with languages that require third-party formatters for code formatting, for example, Go or C with CLangFormat enabled.", + "markdown": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IncorrectFormatting", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnexpectedAnchor", + "shortDescription": { + "text": "Begin or end anchor in unexpected position" + }, + "fullDescription": { + "text": "Reports '^' or '\\A' anchors not at the beginning of the pattern and '$', '\\Z' or '\\z' anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the '^' and '$' anchors, most likely the literal character was meant and the escape forgotten. Example: '(Price $10)' New in 2018.1", + "markdown": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnexpectedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpellCheckingInspection", + "shortDescription": { + "text": "Typo" + }, + "fullDescription": { + "text": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click.", + "markdown": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SpellCheckingInspection", + "ideaSeverity": "TYPO", + "qodanaSeverity": "Low" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 114, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckXmlFileWithXercesValidator", + "shortDescription": { + "text": "Failed external validation" + }, + "fullDescription": { + "text": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator.", + "markdown": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckXmlFileWithXercesValidator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEscapedMetaCharacter", + "shortDescription": { + "text": "Escaped meta character" + }, + "fullDescription": { + "text": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character '[', ']' and '^', because those would need additional escaping inside a character class. Example: '\\d+\\.\\d+' After the quick-fix is applied: '\\d+[.]\\d+' New in 2017.1", + "markdown": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpEscapedMetaCharacter", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnusedNamespaceDeclaration", + "shortDescription": { + "text": "Unused schema declaration" + }, + "fullDescription": { + "text": "Reports an unused namespace declaration or location hint in XML.", + "markdown": "Reports an unused namespace declaration or location hint in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnusedNamespaceDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSimplifiable", + "shortDescription": { + "text": "Regular expression can be simplified" + }, + "fullDescription": { + "text": "Reports regular expressions that can be simplified. Example: '[a] xx* [ah-hz]' After the quick-fix is applied: 'a x+ [ahz]' New in 2022.1", + "markdown": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpSimplifiable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEmptyAlternationBranch", + "shortDescription": { + "text": "Empty branch in alternation" + }, + "fullDescription": { + "text": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation. Example: '(alpha||bravo)' After the quick-fix is applied: '(alpha|bravo)' New in 2017.2", + "markdown": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpEmptyAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnnecessaryNonCapturingGroup", + "shortDescription": { + "text": "Unnecessary non-capturing group" + }, + "fullDescription": { + "text": "Reports unnecessary non-capturing groups, which have no influence on the match result. Example: 'Everybody be cool, (?:this) is a robbery!' After the quick-fix is applied: 'Everybody be cool, this is a robbery!' New in 2021.1", + "markdown": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnnecessaryNonCapturingGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TodoComment", + "shortDescription": { + "text": "TODO comment" + }, + "fullDescription": { + "text": "Reports TODO comments in your code. You can configure the format for TODO comments in Settings | Editor | TODO. Enable the Only warn on TODO comments without any details option to only warn on empty TODO comments, that don't provide any description on the task that should be done. Disable to report all TODO comments.", + "markdown": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TodoComment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDefaultAttributeValue", + "shortDescription": { + "text": "Redundant attribute with default value" + }, + "fullDescription": { + "text": "Reports a redundant assignment of the default value to an XML attribute.", + "markdown": "Reports a redundant assignment of the default value to an XML attribute." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDefaultAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaCompliance", + "shortDescription": { + "text": "Compliance with JSON schema" + }, + "fullDescription": { + "text": "Reports inconsistence between a JSON file and the JSON schema that is assigned to it.", + "markdown": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaCompliance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyDirectory", + "shortDescription": { + "text": "Empty directory" + }, + "fullDescription": { + "text": "Reports empty directories. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Only report empty directories located under a source folder option to have only directories under source roots reported.", + "markdown": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyDirectory", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckDtdRefs", + "shortDescription": { + "text": "Unresolved DTD reference" + }, + "fullDescription": { + "text": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files.", + "markdown": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckDtdRefs", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonAsciiCharacters", + "shortDescription": { + "text": "Non-ASCII characters" + }, + "fullDescription": { + "text": "Reports code elements that use non-ASCII symbols in an unusual context. Example: Non-ASCII characters used in identifiers, strings, or comments. Identifiers written in different languages, such as 'myСollection' with the letter 'C' written in Cyrillic. Comments or strings containing Unicode symbols, such as long dashes and arrows.", + "markdown": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonAsciiCharacters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 156, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoreFileDuplicateEntry", + "shortDescription": { + "text": "Ignore file duplicates" + }, + "fullDescription": { + "text": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed. Example: '# Output directories\n /out/\n /target/\n /out/'", + "markdown": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n\n # Output directories\n /out/\n /target/\n /out/\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IgnoreFileDuplicateEntry", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Version control", + "index": 161, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonStandardCompliance", + "shortDescription": { + "text": "Compliance with JSON standard" + }, + "fullDescription": { + "text": "Reports the following discrepancies of a JSON file with the language specification: A line or block comment (configurable). Multiple top-level values (expect for JSON Lines files, configurable for others). A trailing comma in an object or array (configurable). A single quoted string. A property key is a not a double quoted strings. A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable).", + "markdown": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JsonStandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaRefReference", + "shortDescription": { + "text": "Unresolved '$ref' and '$schema' references" + }, + "fullDescription": { + "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema.", + "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaRefReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SSBasedInspection", + "shortDescription": { + "text": "Structural search inspection" + }, + "fullDescription": { + "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix.", + "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SSBasedInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Structural search", + "index": 165, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSuspiciousBackref", + "shortDescription": { + "text": "Suspicious back reference" + }, + "fullDescription": { + "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1", + "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSuspiciousBackref", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSingleCharAlternation", + "shortDescription": { + "text": "Single character alternation" + }, + "fullDescription": { + "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1", + "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSingleCharAlternation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckTagEmptyBody", + "shortDescription": { + "text": "Empty element content" + }, + "fullDescription": { + "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n '", + "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckTagEmptyBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element.", + "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 173, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlMissingClosingTag", + "shortDescription": { + "text": "Missing closing tag" + }, + "fullDescription": { + "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n

    Behold!\n \n ' After the quick-fix is applied: '\n \n

    Behold!

    \n \n '", + "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

    Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

    Behold!

    \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlMissingClosingTag", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlInvalidId", + "shortDescription": { + "text": "Unresolved 'id' reference" + }, + "fullDescription": { + "text": "Reports an unresolved 'id' reference in XML.", + "markdown": "Reports an unresolved `id` reference in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlInvalidId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReassignedToPlainText", + "shortDescription": { + "text": "Reassigned to plain text" + }, + "fullDescription": { + "text": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically. You can dismiss this warning by removing the file type association in Settings | Editor | File Types | Text.", + "markdown": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReassignedToPlainText", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDeprecatedElement", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'.", + "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDeprecatedElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpAnonymousGroup", + "shortDescription": { + "text": "Anonymous capturing group or numeric back reference" + }, + "fullDescription": { + "text": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. '(?:xxx)' instead of '(xxx)'. Example: '(\\d\\d\\d\\d)\\1' A better regex pattern could look like this: '(?\\d\\d\\d\\d)\\k' New in 2017.2", + "markdown": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpAnonymousGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnresolvedReference", + "shortDescription": { + "text": "Unresolved references" + }, + "fullDescription": { + "text": "Reports an unresolved references in XML.", + "markdown": "Reports an unresolved references in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlUnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRepeatedSpace", + "shortDescription": { + "text": "Consecutive spaces" + }, + "fullDescription": { + "text": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier. Example: '( )' After the quick-fix is applied: '( {5})' New in 2017.1", + "markdown": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRepeatedSpace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckEmptyScriptTag", + "shortDescription": { + "text": "Empty tag" + }, + "fullDescription": { + "text": "Reports empty tags that do not work in some browsers. Example: '\n \n '", + "markdown": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckEmptyScriptTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentLineSeparators", + "shortDescription": { + "text": "Inconsistent line separators" + }, + "fullDescription": { + "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file.", + "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentLineSeparators", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProblematicWhitespace", + "shortDescription": { + "text": "Problematic whitespace" + }, + "fullDescription": { + "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.", + "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProblematicWhitespace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTarget", + "shortDescription": { + "text": "Unresolved file in a link" + }, + "fullDescription": { + "text": "Reports an unresolved file in a link.", + "markdown": "Reports an unresolved file in a link." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LongLine", + "shortDescription": { + "text": "Line is longer than allowed by code style" + }, + "fullDescription": { + "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General.", + "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LongLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlWrongRootElement", + "shortDescription": { + "text": "Wrong root element" + }, + "fullDescription": { + "text": "Reports a root tag name different from the name specified in the '' tag.", + "markdown": "Reports a root tag name different from the name specified in the `` tag." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlWrongRootElement", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAttribute", + "shortDescription": { + "text": "Unknown attribute" + }, + "fullDescription": { + "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.", + "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantEscape", + "shortDescription": { + "text": "Redundant character escape" + }, + "fullDescription": { + "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. New in 2017.3", + "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantEscape", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlExtraClosingTag", + "shortDescription": { + "text": "Redundant closing tag" + }, + "fullDescription": { + "text": "Reports redundant closing tags on empty elements, for example, 'img' or 'br'. Example: '\n \n

    \n \n ' After the quick-fix is applied: '\n \n
    \n \n '", + "markdown": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

    \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
    \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlExtraClosingTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTag", + "shortDescription": { + "text": "Unknown tag" + }, + "fullDescription": { + "text": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported.", + "markdown": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlHighlighting", + "shortDescription": { + "text": "XML highlighting" + }, + "fullDescription": { + "text": "Reports XML validation problems in the results of a batch code inspection.", + "markdown": "Reports XML validation problems in the results of a batch code inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlHighlighting", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDuplicatedId", + "shortDescription": { + "text": "Duplicate 'id' attribute" + }, + "fullDescription": { + "text": "Reports a duplicate 'id' attribute in XML.", + "markdown": "Reports a duplicate `id` attribute in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlDuplicatedId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateCharacterInClass", + "shortDescription": { + "text": "Duplicate character in character class" + }, + "fullDescription": { + "text": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex. Example: '[aabc]' After the quick-fix is applied: '[abc]'", + "markdown": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateCharacterInClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnboundNsPrefix", + "shortDescription": { + "text": "Unbound namespace prefix" + }, + "fullDescription": { + "text": "Reports an unbound namespace prefix in XML.", + "markdown": "Reports an unbound namespace prefix in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnboundNsPrefix", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RequiredAttributes", + "shortDescription": { + "text": "Missing required attribute" + }, + "fullDescription": { + "text": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported.", + "markdown": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RequiredAttributes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantClassElement", + "shortDescription": { + "text": "Redundant '\\d', '[:digit:]', or '\\D' class elements" + }, + "fullDescription": { + "text": "Reports redundant '\\d' or '[:digit:]' that are used in one class with '\\w' or '[:word:]' ('\\D' with '\\W') and can be removed. Example: '[\\w\\d]' After the quick-fix is applied: '[\\w]' New in 2022.2", + "markdown": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RegExpRedundantClassElement", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlPathReference", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in XML.", + "markdown": "Reports an unresolved file reference in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlPathReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 115, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Json5StandardCompliance", + "shortDescription": { + "text": "Compliance with JSON5 standard" + }, + "fullDescription": { + "text": "Reports inconsistency with the language specification in a JSON5 file.", + "markdown": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Json5StandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlWrongAttributeValue", + "shortDescription": { + "text": "Wrong attribute value" + }, + "fullDescription": { + "text": "Reports an incorrect HTML attribute value.", + "markdown": "Reports an incorrect HTML attribute value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlWrongAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LossyEncoding", + "shortDescription": { + "text": "Lossy encoding" + }, + "fullDescription": { + "text": "Reports characters that cannot be displayed because of the current document encoding. Examples: If you type international characters in a document with the US-ASCII charset, some characters will be lost on save. If you load a UTF-8-encoded file using the ISO-8859-1 one-byte charset, some characters will be displayed incorrectly. You can fix this by changing the file encoding either by specifying the encoding directly in the file, e.g. by editing 'encoding=' attribute in the XML prolog of XML file, or by changing the corresponding options in Settings | Editor | File Encodings.", + "markdown": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LossyEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 156, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaDeprecation", + "shortDescription": { + "text": "Deprecated JSON property" + }, + "fullDescription": { + "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.", + "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JsonSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckValidXmlInScriptTagBody", + "shortDescription": { + "text": "Malformed content of 'script' tag" + }, + "fullDescription": { + "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: ''", + "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckValidXmlInScriptTagBody", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAnchorTarget", + "shortDescription": { + "text": "Unresolved fragment in a link" + }, + "fullDescription": { + "text": "Reports an unresolved last part of an URL after the '#' sign.", + "markdown": "Reports an unresolved last part of an URL after the `#` sign." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAnchorTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Annotator", + "shortDescription": { + "text": "Annotator" + }, + "fullDescription": { + "text": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection: Option \"Report syntax errors\": report parser-related issues. Option \"Report issues from language-specific annotators\": report issues found by annotators configured for the relevant language. See Custom Language Support: Annotators for details. Option \"Report other highlighting problems\": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See Custom Language Support: Highlighting for details.", + "markdown": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection:\n\n* Option \"**Report syntax errors**\": report parser-related issues.\n* Option \"**Report issues from language-specific annotators** \": report issues found by annotators configured for the relevant language. See [Custom Language Support: Annotators](https://plugins.jetbrains.com/docs/intellij/annotator.html) for details.\n* Option \"**Report other highlighting problems** \": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See [Custom Language Support: Highlighting](https://plugins.jetbrains.com/docs/intellij/syntax-highlighting-and-error-highlighting.html#semantic-highlighting) for details." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Annotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonDuplicatePropertyKeys", + "shortDescription": { + "text": "Duplicate keys in object literals" + }, + "fullDescription": { + "text": "Reports a duplicate key in an object literal.", + "markdown": "Reports a duplicate key in an object literal." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonDuplicatePropertyKeys", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 25, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantNestedCharacterClass", + "shortDescription": { + "text": "Redundant nested character class" + }, + "fullDescription": { + "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2", + "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantNestedCharacterClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpOctalEscape", + "shortDescription": { + "text": "Octal escape" + }, + "fullDescription": { + "text": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion. Example: '\\07' After the quick-fix is applied: '\\x07' New in 2017.1", + "markdown": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpOctalEscape", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedDefine", + "shortDescription": { + "text": "Unused define" + }, + "fullDescription": { + "text": "Reports an unused named pattern ('define') in a RELAX-NG file (XML or Compact Syntax). 'define' elements that are used through an include in another file are ignored.", + "markdown": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedDefine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 173, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateAlternationBranch", + "shortDescription": { + "text": "Duplicate branch in alternation" + }, + "fullDescription": { + "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1", + "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 100, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "JavaScript", + "version": "241.17569", + "rules": [ + { + "id": "JSUnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports a variable whose value is never used after assignment. Suggests removing the unused variable to shorten the code and to avoid redundant allocations. The following cases are reported: A variable is never read after assignment. The value of a variable is always overwritten with another assignment before the variable is read next time. The initializer of a variable is redundant (for one of the above-mentioned reasons).", + "markdown": "Reports a variable whose value is never used after assignment. \nSuggests removing the unused variable to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* A variable is never read after assignment.\n* The value of a variable is always overwritten with another assignment before the variable is read next time.\n* The initializer of a variable is redundant (for one of the above-mentioned reasons)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnusedAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unused symbols", + "index": 36, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FlowJSError", + "shortDescription": { + "text": "Flow type checker" + }, + "fullDescription": { + "text": "Reports errors from Flow.", + "markdown": "Reports errors from [Flow](https://flowtype.org/)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FlowJSError", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Flow type checker", + "index": 37, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ShiftOutOfRangeJS", + "shortDescription": { + "text": "Shift operation by possibly wrong constant" + }, + "fullDescription": { + "text": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range '0..31', shifting by negative or overly large values.", + "markdown": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range `0..31`, shifting by negative or overly large values." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ShiftOutOfRangeJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 41, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSClosureCompilerSyntax", + "shortDescription": { + "text": "Incorrect usage of JSDoc tags" + }, + "fullDescription": { + "text": "Reports warnings implied by Google Closure Compiler annotations including correct use of '@abstract', '@interface', and '@implements' tags.", + "markdown": "Reports warnings implied by *Google Closure Compiler* annotations including correct use of `@abstract`, `@interface`, and `@implements` tags." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSClosureCompilerSyntax", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExpressionStatementJS", + "shortDescription": { + "text": "Expression statement which is not assignment or call" + }, + "fullDescription": { + "text": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error.", + "markdown": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "BadExpressionStatementJS", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingFloatingPointLiteralJS", + "shortDescription": { + "text": "Confusing floating point literal" + }, + "fullDescription": { + "text": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards.", + "markdown": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingFloatingPointLiteralJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueOrBreakFromFinallyBlockJS", + "shortDescription": { + "text": "'continue' or 'break' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports a 'break' or 'continue' statement inside a 'finally' block. Such statements are very confusing, may hide exceptions, and complicate debugging.", + "markdown": "Reports a `break` or `continue` statement inside a `finally` block. Such statements are very confusing, may hide exceptions, and complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueOrBreakFromFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMethodCanBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports a class method that can be safely made 'static'. A method can be 'static' if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass. Use the first checkbox below to inspect only 'private' methods.", + "markdown": "Reports a class method that can be safely made `static`. A method can be `static` if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass.\n\n\nUse the first checkbox below to inspect only `private` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSMethodCanBeStatic", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatementJS", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports a 'continue' statement.", + "markdown": "Reports a `continue` statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUndeclaredVariable", + "shortDescription": { + "text": "Implicitly declared global JavaScript variable" + }, + "fullDescription": { + "text": "Reports an implicit declaration of a global variable. Example: 'var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere'", + "markdown": "Reports an implicit declaration of a global variable.\n\nExample:\n\n\n var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUndeclaredVariable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SillyAssignmentJS", + "shortDescription": { + "text": "Variable is assigned to itself" + }, + "fullDescription": { + "text": "Reports an assignment in the form 'x = x'.", + "markdown": "Reports an assignment in the form `x = x`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SillyAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptCheckImport", + "shortDescription": { + "text": "Unresolved imported name" + }, + "fullDescription": { + "text": "Reports an unresolved name or binding in an 'import' declaration in TypeScript code.", + "markdown": "Reports an unresolved name or binding in an `import` declaration in TypeScript code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptCheckImport", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXSyntaxUsed", + "shortDescription": { + "text": "JSX syntax used" + }, + "fullDescription": { + "text": "Reports a usage of a JSX tag in JavaScript code.", + "markdown": "Reports a usage of a JSX tag in JavaScript code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSXSyntaxUsed", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSJoinVariableDeclarationAndAssignment", + "shortDescription": { + "text": "Variable declaration can be merged with the first assignment to the variable" + }, + "fullDescription": { + "text": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression.", + "markdown": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSJoinVariableDeclarationAndAssignment", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertModuleExportToExport", + "shortDescription": { + "text": "'module.exports' is used instead of 'export'" + }, + "fullDescription": { + "text": "Reports a 'module.export' statement. Suggests replacing it with an 'export' or 'export default' statement. Please note that the quick-fix for converting 'module.export' into 'export' is not available for 'module.export' inside functions or statements because 'export' statements can only be at the top level of a module.", + "markdown": "Reports a `module.export` statement. Suggests replacing it with an `export` or `export default` statement. \n\nPlease note that the quick-fix for converting `module.export` into `export` is not available for `module.export` inside functions or statements because `export` statements can only be at the top level of a module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertModuleExportToExport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DocumentWriteJS", + "shortDescription": { + "text": "Call to 'document.write()'" + }, + "fullDescription": { + "text": "Reports a method call to 'document.write()' or 'document.writeln()'. Most usages of such calls are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, the 'write()' and 'writeln()' calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs.", + "markdown": "Reports a method call to `document.write()` or `document.writeln()`. Most usages of such calls are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, the `write()` and `writeln()` calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DocumentWriteJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/DOM issues", + "index": 110, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteRecursionJS", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally.", + "markdown": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteRecursionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompatibleMaskJS", + "shortDescription": { + "text": "Incompatible bitwise mask operation" + }, + "fullDescription": { + "text": "Reports a bitwise mask expression which for sure evaluates to 'true' or 'false'. Expressions are of the form '(var & constant1) == constant2' or '(var | constant1) == constant2', where 'constant1' and 'constant2' are incompatible bitmask constants. Example: '// Incompatible mask: as the last byte in mask is zero,\n// something like 0x1200 would be possible, but not 0x1234\nif ((mask & 0xFF00) == 0x1234) {...}'", + "markdown": "Reports a bitwise mask expression which for sure evaluates to `true` or `false`. Expressions are of the form `(var & constant1) == constant2` or `(var | constant1) == constant2`, where `constant1` and `constant2` are incompatible bitmask constants.\n\nExample:\n\n\n // Incompatible mask: as the last byte in mask is zero,\n // something like 0x1200 would be possible, but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncompatibleBitwiseMaskOperation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 41, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDuplicatedDeclaration", + "shortDescription": { + "text": "Duplicate declaration" + }, + "fullDescription": { + "text": "Reports multiple declarations in a scope.", + "markdown": "Reports multiple declarations in a scope." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSDuplicatedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptValidateGenericTypes", + "shortDescription": { + "text": "Incorrect generic type argument" + }, + "fullDescription": { + "text": "Reports an invalid type argument in a function, interface, or class declaration.", + "markdown": "Reports an invalid type argument in a function, interface, or class declaration." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptValidateGenericTypes", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMismatchedCollectionQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of collection" + }, + "fullDescription": { + "text": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error. Query methods are automatically detected, based on whether they return something, or a callback is passed to them. Use the table below to specify which methods are update methods.", + "markdown": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error.\n\n\nQuery methods are automatically detected, based on whether they return something, or a callback is passed to them.\nUse the table below to specify which methods are update methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSMismatchedCollectionQueryUpdate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6PreferShortImport", + "shortDescription": { + "text": "Import can be shortened" + }, + "fullDescription": { + "text": "Reports an ES6 import whose 'from' part can be shortened. Suggests importing the parent directory.", + "markdown": "Reports an ES6 import whose `from` part can be shortened. Suggests importing the parent directory." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ES6PreferShortImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBitwiseExpressionJS", + "shortDescription": { + "text": "Bitwise expression can be simplified" + }, + "fullDescription": { + "text": "Reports an expression that includes 'and' with zero, 'or' by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings.", + "markdown": "Reports an expression that includes `and` with zero, `or` by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBitwiseExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 41, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSStringConcatenationToES6Template", + "shortDescription": { + "text": "String concatenation is used instead of template literal" + }, + "fullDescription": { + "text": "Reports a string concatenation. Suggests replacing it with a template literal Example '\"result: \" + a + \".\"' After applying the quick-fix the code looks as follows: '`result: ${a}.`'", + "markdown": "Reports a string concatenation. Suggests replacing it with a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)\n\nExample\n\n \"result: \" + a + \".\" \n\nAfter applying the quick-fix the code looks as follows:\n\n `result: ${a}.` \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSStringConcatenationToES6Template", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssignmentWithOperatorAssignmentJS", + "shortDescription": { + "text": "Assignment could be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer. Example: 'x = x + 3;'\n 'x = x / 3;'\n After the quick fix is applied the result looks like: 'x += 3;'\n 'x /= 3;'", + "markdown": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer.\n\n\nExample:\n\n x = x + 3;\n x = x / 3;\n\nAfter the quick fix is applied the result looks like:\n\n x += 3;\n x /= 3;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentReplaceableWithOperatorAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSFileReferences", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references.", + "markdown": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSFileReferences", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithInconsistentReturnsJS", + "shortDescription": { + "text": "Function with inconsistent returns" + }, + "fullDescription": { + "text": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error. Example: 'function foo() {\n if (true)\n return 3;\n return;\n}'", + "markdown": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error.\n\nExample:\n\n\n function foo() {\n if (true)\n return 3;\n return;\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithInconsistentReturnsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ClassMemberInitializationOrder", + "shortDescription": { + "text": "Use of possibly unassigned property in a static initializer" + }, + "fullDescription": { + "text": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. Initialization of class members happens consequently for fields, so a field cannot reference another field that is declared later.", + "markdown": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. \n\nInitialization of class members happens consequently for fields, so a field cannot reference another field that is declared later." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ES6ClassMemberInitializationOrder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedFunctionJS", + "shortDescription": { + "text": "Nested function" + }, + "fullDescription": { + "text": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing. Use the checkbox below to ignore anonymous nested functions.", + "markdown": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing.\n\n\nUse the checkbox below to ignore anonymous nested functions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6DestructuringVariablesMerge", + "shortDescription": { + "text": "Destructuring properties with the same key" + }, + "fullDescription": { + "text": "Reports multiple destructuring properties with identical keys. Suggests merging the properties.", + "markdown": "Reports multiple destructuring properties with identical keys. Suggests merging the properties." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6DestructuringVariablesMerge", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptRedundantGenericType", + "shortDescription": { + "text": "Redundant type arguments" + }, + "fullDescription": { + "text": "Reports a type argument that is equal to the default one and can be removed. Example: 'type Foo = T;\nlet z: Foo;'", + "markdown": "Reports a type argument that is equal to the default one and can be removed.\n\n\nExample:\n\n\n type Foo = T;\n let z: Foo;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptRedundantGenericType", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptUMDGlobal", + "shortDescription": { + "text": "Referenced UMD global variable" + }, + "fullDescription": { + "text": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly.", + "markdown": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptUMDGlobal", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryReturnJS", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports an unnecessary 'return' statement, that is, a 'return' statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed.", + "markdown": "Reports an unnecessary `return` statement, that is, a `return` statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryReturnStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSLastCommaInObjectLiteral", + "shortDescription": { + "text": "Unneeded last comma in object literal" + }, + "fullDescription": { + "text": "Reports usages of a trailing comma in object literals. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Trailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation.", + "markdown": "Reports usages of a trailing comma in object literals.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nTrailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSLastCommaInObjectLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StandardJS", + "shortDescription": { + "text": "Standard code style" + }, + "fullDescription": { + "text": "Reports a discrepancy detected by the JavaScript Standard Style linter. The highlighting severity in the editor is based on the severity level the linter reports.", + "markdown": "Reports a discrepancy detected by the [JavaScript Standard Style](https://standardjs.com/) linter. \n\nThe highlighting severity in the editor is based on the severity level the linter reports." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "StandardJS", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 131, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedAssignmentJS", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports an assignment expression nested inside another expression, for example, 'a = b = 1'. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing.", + "markdown": "Reports an assignment expression nested inside another expression, for example, `a = b = 1`. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultNotLastCaseInSwitchJS", + "shortDescription": { + "text": "'default' not last case in 'switch'" + }, + "fullDescription": { + "text": "Reports a 'switch' statement where the 'default' case comes before another case instead of being the very last case, which may cause confusion.", + "markdown": "Reports a `switch` statement where the `default` case comes before another case instead of being the very last case, which may cause confusion." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DefaultNotLastCaseInSwitchJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyFinallyBlockJS", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports an empty 'finally' block, which usually indicates an error.", + "markdown": "Reports an empty `finally` block, which usually indicates an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSCommentMatchesSignature", + "shortDescription": { + "text": "Mismatched JSDoc and function signature" + }, + "fullDescription": { + "text": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment. Example: '/**\n * @param height Height in pixels\n */\nfunction sq(height, width) {} // width is not documented' After the quick-fix is applied: '/**\n * @param height Height in pixels\n * @param width\n */\nfunction sq(height, width) {}'", + "markdown": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment.\n\n**Example:**\n\n\n /**\n * @param height Height in pixels\n */\n function sq(height, width) {} // width is not documented\n\nAfter the quick-fix is applied:\n\n\n /**\n * @param height Height in pixels\n * @param width\n */\n function sq(height, width) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSCommentMatchesSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopThatDoesntUseLoopVariableJS", + "shortDescription": { + "text": "'for' loop where update or condition does not use loop variable" + }, + "fullDescription": { + "text": "Reports a 'for' loop where the condition or update does not use the 'for' loop variable.", + "markdown": "Reports a `for` loop where the condition or update does not use the `for` loop variable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForLoopThatDoesntUseLoopVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptAbstractClassConstructorCanBeMadeProtected", + "shortDescription": { + "text": "Abstract class constructor can be made protected" + }, + "fullDescription": { + "text": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public).", + "markdown": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptAbstractClassConstructorCanBeMadeProtected", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithMultipleReturnPointsJS", + "shortDescription": { + "text": "Function with multiple return points" + }, + "fullDescription": { + "text": "Reports a function with multiple return points. Such functions are hard to understand and maintain.", + "markdown": "Reports a function with multiple return points. Such functions are hard to understand and maintain." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMultipleReturnPointsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreeNegationsPerFunctionJS", + "shortDescription": { + "text": "Function with more than three negations" + }, + "fullDescription": { + "text": "Reports a function with three or more negation operations ('!' or '!='). Such functions may be unnecessarily confusing.", + "markdown": "Reports a function with three or more negation operations (`!` or `!=`). Such functions may be unnecessarily confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMoreThanThreeNegationsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSRemoveUnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports redundant parentheses. In expressions: 'var x = ((1) + 2) + 3' In arrow function argument lists: 'var incrementer = (x) => x + 1' In TypeScript and Flow type declarations: 'type Card = (Suit & Rank) | (Suit & Number)'", + "markdown": "Reports redundant parentheses.\n\nIn expressions:\n\n var x = ((1) + 2) + 3\n\nIn arrow function argument lists:\n\n var incrementer = (x) => x + 1\n\nIn TypeScript and Flow type declarations:\n\n type Card = (Suit & Rank) | (Suit & Number)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSRemoveUnnecessaryParentheses", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialIfJS", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports an 'if' statement that can be simplified to a single assignment or a 'return' statement. Example: 'if(foo())\n {\n return true;\n }\n else\n {\n return false;\n }' After applying the quick-fix the code looks as follows: 'return foo();'", + "markdown": "Reports an `if` statement that can be simplified to a single assignment or a `return` statement.\n\nExample:\n\n\n if(foo())\n {\n return true;\n }\n else\n {\n return false;\n }\n\nAfter applying the quick-fix the code looks as follows:\n\n return foo();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantIfStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CommaExpressionJS", + "shortDescription": { + "text": "Comma expression" + }, + "fullDescription": { + "text": "Reports a comma expression. Such expressions are often a sign of overly clever code, and may lead to subtle bugs. Comma expressions in the initializer or in the update section of 'for' loops are ignored.", + "markdown": "Reports a comma expression. Such expressions are often a sign of overly clever code, and may lead to subtle bugs. Comma expressions in the initializer or in the update section of `for` loops are ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CommaExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6BindWithArrowFunction", + "shortDescription": { + "text": "Suspicious usage of 'bind' with arrow function" + }, + "fullDescription": { + "text": "Reports 'bind' used together with an arrow function. Because arrow functions use lexical 'this', a 'bind' call will have no effect on them. See here for details.", + "markdown": "Reports `bind` used together with an arrow function. \nBecause arrow functions use lexical `this`, a `bind` call will have no effect on them. \nSee [here](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Lexical_this) for details." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ES6BindWithArrowFunction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSBitwiseOperatorUsage", + "shortDescription": { + "text": "Bitwise operator usage" + }, + "fullDescription": { + "text": "Reports a suspicious usage of a bitwise AND (\"'&'\") or OR (\"'|'\") operator. Usually it is a typo and the result of applying boolean operations AND (\"'&&'\") and OR (\"'||'\") is expected.", + "markdown": "Reports a suspicious usage of a bitwise AND (\"`&`\") or OR (\"`|`\") operator. Usually it is a typo and the result of applying boolean operations AND (\"`&&`\") and OR (\"`||`\") is expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSBitwiseOperatorUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 41, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnterminatedStatementJS", + "shortDescription": { + "text": "Unterminated statement" + }, + "fullDescription": { + "text": "Reports a statement without a semicolon or a newline at the end. Select the 'Terminate statements with semicolons' option in Editor | Code Style | JavaScript or TypeScript - Punctuation to report any statement that doesn't end with a semicolon, even if a newline is used. According to some coding styles, semicolons are preferred to line-breaks for consistency with the other languages.", + "markdown": "Reports a statement without a semicolon or a newline at the end.\n\nSelect the 'Terminate statements with semicolons' option in *Editor \\| Code Style \\| JavaScript or TypeScript - Punctuation* to report any statement that doesn't end with a semicolon, even if a newline is used.\nAccording to some coding styles, semicolons are preferred to line-breaks for consistency with the other languages." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnterminatedStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithIdenticalBranchesJS", + "shortDescription": { + "text": "'if' statement with identical branches" + }, + "fullDescription": { + "text": "Reports an 'if' statement with identical 'then' and 'else' branches. Such statements are almost certainly an error.", + "markdown": "Reports an `if` statement with identical `then` and `else` branches. Such statements are almost certainly an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementWithIdenticalBranchesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSConsecutiveCommasInArrayLiteral", + "shortDescription": { + "text": "Consecutive commas in array literal" + }, + "fullDescription": { + "text": "Reports a consecutive comma in an array literal. The skipped element accepts the 'undefined' value, but it could be done unintentionally, for example, when commas are at the end of one line and at the beginning of the next one.", + "markdown": "Reports a consecutive comma in an array literal. The skipped element accepts the `undefined` value, but it could be done unintentionally, for example, when commas are at the end of one line and at the beginning of the next one." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSConsecutiveCommasInArrayLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnreachableSwitchBranches", + "shortDescription": { + "text": "Unreachable 'case' branch of a 'switch' statement" + }, + "fullDescription": { + "text": "Reports an unreachable 'case' branch of a 'switch' statement. Example: '/**\n * @param {('foo' | 'bar')} p\n */\nfunction foo(p) {\n switch (p) {\n case 'foo': break;\n case 'bar': break;\n case 'baz': break; // unreachable\n }\n}'", + "markdown": "Reports an unreachable `case` branch of a `switch` statement.\n\nExample:\n\n\n /**\n * @param {('foo' | 'bar')} p\n */\n function foo(p) {\n switch (p) {\n case 'foo': break;\n case 'bar': break;\n case 'baz': break; // unreachable\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnreachableSwitchBranches", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialConditionalJS", + "shortDescription": { + "text": "Redundant conditional expression" + }, + "fullDescription": { + "text": "Reports a conditional expression of the form 'condition ? true : false\ncondition ? false : true' These expressions may be safely converted to 'condition\n!condition'", + "markdown": "Reports a conditional expression of the form\n\n\n condition ? true : false\n condition ? false : true\n\n\nThese expressions may be safely converted to\n\n\n condition\n !condition\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSValidateTypes", + "shortDescription": { + "text": "Type mismatch" + }, + "fullDescription": { + "text": "Reports incorrect type of: a parameter in a function call a return value an assigned expression TypeScript code is ignored.", + "markdown": "Reports incorrect type of:\n\n* a parameter in a function call\n* a return value\n* an assigned expression\n\nTypeScript code is ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSValidateTypes", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSTestFailedLine", + "shortDescription": { + "text": "Highlight failure line in test code" + }, + "fullDescription": { + "text": "Reports a failed method call or an assertion in a test.", + "markdown": "Reports a failed method call or an assertion in a test." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSTestFailedLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unit testing", + "index": 19, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithTooManyBranchesJS", + "shortDescription": { + "text": "'if' statement with too many branches" + }, + "fullDescription": { + "text": "Reports an 'if' statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction. Use the field below to specify the maximum number of branches expected.", + "markdown": "Reports an `if` statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction.\n\n\nUse the field below to specify the maximum number of branches expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementWithTooManyBranchesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementJS", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports a 'break' statements. Ignores 'break' statements that end case blocks.", + "markdown": "Reports a `break` statements. Ignores `break` statements that end case blocks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidUsageOfClassThis", + "shortDescription": { + "text": "Potentially invalid reference to 'this' of a class from closure" + }, + "fullDescription": { + "text": "Reports an attempt to reference a member of an ECMAScript class via the 'this.' qualifier in a nested function that is not a lambda. 'this' in a nested function that is not a lambda is the function's own 'this' and doesn't relate to the outer class.", + "markdown": "Reports an attempt to reference a member of an ECMAScript class via the `this.` qualifier in a nested function that is not a lambda. \n`this` in a nested function that is not a lambda is the function's own `this` and doesn't relate to the outer class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidUsageOfClassThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DebuggerStatementJS", + "shortDescription": { + "text": "'debugger' statement" + }, + "fullDescription": { + "text": "Reports a 'debugger' statement used for interaction with the Javascript debuggers. Such statements should not appear in production code.", + "markdown": "Reports a `debugger` statement used for interaction with the Javascript debuggers. Such statements should not appear in production code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DebuggerStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryContinueJS", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports an unnecessary 'continue' statement at the end of a loop. Suggests removing such statements.", + "markdown": "Reports an unnecessary `continue` statement at the end of a loop. Suggests removing such statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryContinueJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementWithLabelJS", + "shortDescription": { + "text": "'break' statement with label" + }, + "fullDescription": { + "text": "Reports a labeled 'break' statement.", + "markdown": "Reports a labeled `break` statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatementWithLabelJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDeclarationsAtScopeStart", + "shortDescription": { + "text": "'var' declared not at the beginning of a function" + }, + "fullDescription": { + "text": "Checks that declarations of local variables declared with var are at the top of a function scope. By default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code.", + "markdown": "Checks that declarations of local variables declared with **var** are at the top of a function scope. \n\nBy default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSDeclarationsAtScopeStart", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToForLoopParameterJS", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports an assignment to a variable declared as a 'for' loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error.", + "markdown": "Reports an assignment to a variable declared as a `for` loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToForLoopParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertIndexedForToForOf", + "shortDescription": { + "text": "Indexed 'for' is used instead of 'for..of'" + }, + "fullDescription": { + "text": "Reports an indexed 'for' loop used on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops are introduced in ECMAScript 6 and iterate over 'iterable' objects.", + "markdown": "Reports an indexed [for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) loop used on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops are introduced in ECMAScript 6 and iterate over `iterable` objects." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertIndexedForToForOf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionJS", + "shortDescription": { + "text": "Conditional expression" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit 'if' statements.", + "markdown": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit `if` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertVarToLetConst", + "shortDescription": { + "text": "'var' is used instead of 'let' or 'const'" + }, + "fullDescription": { + "text": "Reports a 'var' declaration that is used instead of 'let' or 'const'. Both 'let' and 'const' are block-scoped and behave more strictly. Suggests replacing all 'var' declarations with 'let' or 'const' declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. Select the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action.", + "markdown": "Reports a `var` declaration that is used instead of `let` or `const`. \nBoth `let` and `const` are block-scoped and behave more strictly. \n\nSuggests replacing all `var` declarations with `let` or `const` declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. \nSelect the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertVarToLetConst", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBooleanExpressionJS", + "shortDescription": { + "text": "Pointless statement or boolean expression" + }, + "fullDescription": { + "text": "Reports a pointless or pointlessly complicated boolean expression or statement. Example: 'let a = !(false && x);\n let b = false || x;' After the quick fix is applied the result looks like: 'let a = true;\n let b = x;'", + "markdown": "Reports a pointless or pointlessly complicated boolean expression or statement.\n\nExample:\n\n\n let a = !(false && x);\n let b = false || x;\n\nAfter the quick fix is applied the result looks like:\n\n\n let a = true;\n let b = x;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBooleanExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DynamicallyGeneratedCodeJS", + "shortDescription": { + "text": "Execution of dynamically generated code" + }, + "fullDescription": { + "text": "Reports a call of the 'eval()', 'setTimeout()', or 'setInterval()' function or an allocation of a 'Function' object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. Ignores the cases when a callback function is provided to these methods statically, without code generation.", + "markdown": "Reports a call of the `eval()`, `setTimeout()`, or `setInterval()` function or an allocation of a `Function` object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. \n\nIgnores the cases when a callback function is provided to these methods statically, without code generation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DynamicallyGeneratedCodeJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUrlImportUsage", + "shortDescription": { + "text": "URL import is used" + }, + "fullDescription": { + "text": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. URLs in import specifiers are supported only for ECMAScript modules in the JavaScript language.", + "markdown": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. \n\nURLs in import specifiers are supported only for ECMAScript modules in the JavaScript language." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUrlImportUsage", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 171, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnContinueStatementJS", + "shortDescription": { + "text": "Unnecessary label on 'continue' statement" + }, + "fullDescription": { + "text": "Reports a labeled 'continue' statement whose labels may be removed without changing the flow of control.", + "markdown": "Reports a labeled `continue` statement whose labels may be removed without changing the flow of control." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnContinueStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess", + "shortDescription": { + "text": "Possibly incorrect target of indexed property access" + }, + "fullDescription": { + "text": "Reports a potentially invalid indexed property access, for example, 'Array[1]'.", + "markdown": "Reports a potentially invalid indexed property access, for example, `Array[1]`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedCatchParameterJS", + "shortDescription": { + "text": "Unused 'catch' parameter" + }, + "fullDescription": { + "text": "Reports a 'catch' parameter that is not used in the corresponding block. The 'catch' parameters named 'ignore' or 'ignored' are ignored. Use the checkbox below to disable this inspection for 'catch' blocks with comments.", + "markdown": "Reports a `catch` parameter that is not used in the corresponding block. The `catch` parameters named `ignore` or `ignored` are ignored.\n\n\nUse the checkbox below to disable this inspection for `catch`\nblocks with comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedCatchParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousFunctionJS", + "shortDescription": { + "text": "Anonymous function" + }, + "fullDescription": { + "text": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a 'name' property specified in the ECMAScript 6 standard. For example, 'var bar = function() {};' is not reported.", + "markdown": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a `name` property specified in the ECMAScript 6 standard. For example, `var bar = function() {};` is not reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSTypeOfValues", + "shortDescription": { + "text": "'typeof' comparison with non-standard value" + }, + "fullDescription": { + "text": "Reports a comparison of a 'typeof' expression with a literal string which is not one of the standard types: 'undefined', 'object', 'boolean', 'number', 'string', 'function', or 'symbol'. Such comparisons always return 'false'.", + "markdown": "Reports a comparison of a `typeof` expression with a literal string which is not one of the standard types: `undefined`, `object`, `boolean`, `number`, `string`, `function`, or `symbol`. Such comparisons always return `false`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSTypeOfValues", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyCatchBlockJS", + "shortDescription": { + "text": "Empty 'catch' block" + }, + "fullDescription": { + "text": "Reports an empty 'catch' block. This indicates that errors are simply ignored instead of handling them. Any comment in a 'catch' block mutes the inspection.", + "markdown": "Reports an empty `catch` block. This indicates that errors are simply ignored instead of handling them. \n\nAny comment in a `catch` block mutes the inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyCatchBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowFromFinallyBlockJS", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports s 'throw' statement inside a 'finally' block. Such 'throw' statements may mask exceptions thrown, and complicate debugging.", + "markdown": "Reports s `throw` statement inside a `finally` block. Such `throw` statements may mask exceptions thrown, and complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowInsideFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidUsageOfThis", + "shortDescription": { + "text": "Potentially invalid reference to 'this' from closure" + }, + "fullDescription": { + "text": "Reports a 'this' in closure that is used for referencing properties of outer context. Example: 'function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n}'", + "markdown": "Reports a `this` in closure that is used for referencing properties of outer context.\n\nExample:\n\n\n function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidUsageOfThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnresolvedLibraryURL", + "shortDescription": { + "text": "Missed locally stored library for HTTP link" + }, + "fullDescription": { + "text": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation.", + "markdown": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnresolvedLibraryURL", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XHTMLIncompatabilitiesJS", + "shortDescription": { + "text": "Incompatible XHTML usages" + }, + "fullDescription": { + "text": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include document.body, document.images, document.applets, document.links, document.forms, and document.anchors.", + "markdown": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include **document.body** , **document.images** , **document.applets** , **document.links** , **document.forms** , and **document.anchors**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XHTMLIncompatabilitiesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/DOM issues", + "index": 110, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptFieldCanBeMadeReadonly", + "shortDescription": { + "text": "Field can be readonly" + }, + "fullDescription": { + "text": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor).", + "markdown": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptFieldCanBeMadeReadonly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedIfStatementJS", + "shortDescription": { + "text": "Negated 'if' statement" + }, + "fullDescription": { + "text": "Reports if statements which have an else branch and a negated condition. Flipping the order of the if and else branches will usually increase the clarity of such statements.", + "markdown": "Reports **if** statements which have an **else** branch and a negated condition. Flipping the order of the **if** and **else** branches will usually increase the clarity of such statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedIfStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionWithIdenticalBranchesJS", + "shortDescription": { + "text": "Conditional expression with identical branches" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression with identical 'then' and 'else' branches.", + "markdown": "Reports a ternary conditional expression with identical `then` and `else` branches." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionWithIdenticalBranchesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSAnnotator", + "shortDescription": { + "text": "ECMAScript specification is not followed" + }, + "fullDescription": { + "text": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. Generally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors.", + "markdown": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. \nGenerally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSAnnotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSIncompatibleTypesComparison", + "shortDescription": { + "text": "Comparison of expressions having incompatible types" + }, + "fullDescription": { + "text": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values.", + "markdown": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSIncompatibleTypesComparison", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6TopLevelAwaitExpression", + "shortDescription": { + "text": "Top-level 'await' expression" + }, + "fullDescription": { + "text": "Reports a usage of a top-level 'await' expression. While the new 'top-level async' proposal is on its way, using 'await' outside async functions is not allowed.", + "markdown": "Reports a usage of a top-level `await` expression. While the new 'top-level async' proposal is on its way, using `await` outside async functions is not allowed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ES6TopLevelAwaitExpression", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 180, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertToForOf", + "shortDescription": { + "text": "'for..in' is used instead of 'for..of'" + }, + "fullDescription": { + "text": "Reports a usage of a 'for..in' loop on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops, which are introduced in ECMAScript 6, iterate over 'iterable' objects. For arrays, this structure is preferable to 'for..in', because it works only with array values but not with array object's properties.", + "markdown": "Reports a usage of a [for..in](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) loop on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops, which are introduced in ECMAScript 6, iterate over `iterable` objects. For arrays, this structure is preferable to `for..in`, because it works only with array values but not with array object's properties." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertToForOf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNamingConventionJS", + "shortDescription": { + "text": "Function parameter naming convention" + }, + "fullDescription": { + "text": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions.", + "markdown": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 181, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerFunctionJS", + "shortDescription": { + "text": "Function with too many parameters" + }, + "fullDescription": { + "text": "Reports a function with too many parameters. Such functions often indicate problems with design. Use the field below to specify the maximum acceptable number of parameters for a function.", + "markdown": "Reports a function with too many parameters. Such functions often indicate problems with design.\n\n\nUse the field below to specify the maximum acceptable number of parameters for a function." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThisExpressionReferencesGlobalObjectJS", + "shortDescription": { + "text": "'this' expression which references the global object" + }, + "fullDescription": { + "text": "Reports a 'this' expression outside an object literal or a constructor body. Such 'this' expressions reference the top-level \"global\" JavaScript object, but are mostly useless.", + "markdown": "Reports a `this` expression outside an object literal or a constructor body. Such `this` expressions reference the top-level \"global\" JavaScript object, but are mostly useless." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThisExpressionReferencesGlobalObjectJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSSuspiciousNameCombination", + "shortDescription": { + "text": "Suspicious variable/parameter name combination" + }, + "fullDescription": { + "text": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it. Example: 'var x = 0;\n var y = x;' or 'var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);' Here the inspection guesses that 'x' and 'y' are mixed up. Specify the names that should not be used together. An error is reported if a parameter name or an assignment target name contains words from one group while the name of the assigned or passed variable contains words from another group.", + "markdown": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample:\n\n\n var x = 0;\n var y = x;\n\nor\n\n\n var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);\n\nHere the inspection guesses that `x` and `y` are mixed up.\n\nSpecify the names that should not be used together. An error is reported\nif a parameter name or an assignment target name contains words from one group while the name of the assigned or passed\nvariable contains words from another group." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSSuspiciousNameCombination", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedFunctionCallJS", + "shortDescription": { + "text": "Chained function call" + }, + "fullDescription": { + "text": "Reports a function call whose target is another function call, for example, 'foo().bar()'", + "markdown": "Reports a function call whose target is another function call, for example, `foo().bar()`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainedFunctionCallJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedFunctionCallJS", + "shortDescription": { + "text": "Nested function call" + }, + "fullDescription": { + "text": "Reports a function call that is used as an argument in another function call, for example, 'foo(bar())'", + "markdown": "Reports a function call that is used as an argument in another function call, for example, `foo(bar())`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedFunctionCallJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSEqualityComparisonWithCoercion", + "shortDescription": { + "text": "Equality operator may cause type coercion" + }, + "fullDescription": { + "text": "Reports a usage of an equality operator that may cause unexpected type coercions. Suggests replacing '==' and '!=' with type-safe equality operators '===' and '!=='. Depending on the option selected, one of the following cases will be reported: All usages of '==' and '!=' operators. All usages except comparison with null. Some code styles allow using 'x == null' as a replacement for 'x === null || x === undefined'. Only suspicious expressions, such as: '==' or '!=' comparisons with '0', '''', 'null', 'true', 'false', or 'undefined'.", + "markdown": "Reports a usage of an equality operator that may cause unexpected type coercions. Suggests replacing `==` and `!=` with type-safe equality operators `===` and `!==`.\n\nDepending on the option selected, one of the following cases will be reported:\n\n* All usages of `==` and `!=` operators.\n* All usages except comparison with null. Some code styles allow using `x == null` as a replacement for `x === null || x === undefined`.\n* Only suspicious expressions, such as: `==` or `!=` comparisons with `0`, `''`, `null`, `true`, `false`, or `undefined`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EqualityComparisonWithCoercionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSCheckFunctionSignatures", + "shortDescription": { + "text": "Signature mismatch" + }, + "fullDescription": { + "text": "Reports a JavaScript call expression where the arguments do not match the signature of the referenced function, including the types of arguments and their number. Also, reports if the overloading function doesn't match the overloaded one in terms of parameters and return types. TypeScript code is ignored.", + "markdown": "Reports a JavaScript call expression where the arguments do not match the signature of the referenced function, including the types of arguments and their number. Also, reports if the overloading function doesn't match the overloaded one in terms of parameters and return types.\n\nTypeScript code is ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSCheckFunctionSignatures", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantOnLHSOfComparisonJS", + "shortDescription": { + "text": "Constant on left side of comparison" + }, + "fullDescription": { + "text": "Reports a comparison operation with a constant value in the left-hand side. According to coding conventions, constants should be in the right-hand side of comparisons.", + "markdown": "Reports a comparison operation with a constant value in the left-hand side. According to coding conventions, constants should be in the right-hand side of comparisons." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantOnLefSideOfComparisonJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptUnresolvedReference", + "shortDescription": { + "text": "Unresolved TypeScript reference" + }, + "fullDescription": { + "text": "Reports an unresolved reference in TypeScript code.", + "markdown": "Reports an unresolved reference in TypeScript code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptUnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSNonStrictModeUsed", + "shortDescription": { + "text": "Non-strict mode used" + }, + "fullDescription": { + "text": "Reports a JavaScript file that is not in the 'strict' mode.", + "markdown": "Reports a JavaScript file that is not in the `strict` mode." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSNonStrictModeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6RedundantAwait", + "shortDescription": { + "text": "Redundant 'await' expression" + }, + "fullDescription": { + "text": "Reports a redundant usage of 'await', such as 'await await', or awaiting a non-promise result. When the 'Report for promises' option is selected, suggests removing 'await' before promises when applicable (in 'return' statements, and with 'Promise.resolve/reject'). Removing 'await' in such contexts causes two problems. Surrounding your code with 'try-catch' and forgetting to add 'await' will change code semantics while you may fail to notice that. Having an explicit 'await' may prevent the V8 runtime from providing async stack traces.", + "markdown": "Reports a redundant usage of `await`, such as `await await`, or awaiting a non-promise result.\n\n\nWhen the 'Report for promises' option is selected, suggests removing `await` before promises when applicable\n(in `return` statements, and with `Promise.resolve/reject`).\n\nRemoving `await` in such contexts causes two problems.\n\n* Surrounding your code with `try-catch` and forgetting to add `await` will change code semantics while you may fail to notice that.\n* Having an explicit `await` may prevent the V8 runtime from providing [async stack traces](http://bit.ly/v8-zero-cost-async-stack-traces)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6RedundantAwait", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 180, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToFunctionParameterJS", + "shortDescription": { + "text": "Assignment to function parameter" + }, + "fullDescription": { + "text": "Reports an assignment to a function parameter, including increment and decrement operations. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error.", + "markdown": "Reports an assignment to a function parameter, including increment and decrement operations. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToFunctionParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FallThroughInSwitchStatementJS", + "shortDescription": { + "text": "Fallthrough in 'switch' statement" + }, + "fullDescription": { + "text": "Reports a 'switch' statement where control can proceed from a branch to the next one. Such \"fall-through\" often indicates an error, for example, a missing 'break' or 'return'.", + "markdown": "Reports a `switch` statement where control can proceed from a branch to the next one. Such \"fall-through\" often indicates an error, for example, a missing `break` or `return`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FallThroughInSwitchStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallerJS", + "shortDescription": { + "text": "Use of 'caller' property" + }, + "fullDescription": { + "text": "Reports a usage of the 'caller' property in a JavaScript function. Using this property to access the stack frame of the calling method can be extremely confusing and result in subtle bugs.", + "markdown": "Reports a usage of the `caller` property in a JavaScript function. Using this property to access the stack frame of the calling method can be extremely confusing and result in subtle bugs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CallerJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptExplicitMemberType", + "shortDescription": { + "text": "Explicit types" + }, + "fullDescription": { + "text": "Reports a type annotation that doesn't match the current code style for explicit types. Type declarations are not necessary when the type that is inferred from the context exactly matches the type annotation, for example: 'var pi: number = 3.14' In some cases it is preferable to always have explicit types - this prevents accidental type changes and makes code more explicit.", + "markdown": "Reports a type annotation that doesn't match the current code style for explicit types.\n\n\nType declarations are not necessary when the type that is inferred from the context exactly matches the type annotation, for example:\n\n\n var pi: number = 3.14\n\nIn some cases it is preferable to always have explicit types - this prevents accidental type changes and makes code more explicit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptExplicitMemberType", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDuplicateCaseLabel", + "shortDescription": { + "text": "Duplicate 'case' label" + }, + "fullDescription": { + "text": "Reports a duplicated 'case' label on a 'switch' statement, which normally indicates an error.", + "markdown": "Reports a duplicated `case` label on a `switch` statement, which normally indicates an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSDuplicateCaseLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSSwitchVariableDeclarationIssue", + "shortDescription": { + "text": "Variable is declared and being used in different 'case' clauses" + }, + "fullDescription": { + "text": "Reports a variable that is declared in one 'case' clause of a 'switch' statement but is used in another 'case' clause of the same statement. For block-scoped variables, this results in throwing a 'ReferenceError'. For 'var' variables, it indicates a potential error. Disable the inspection for 'var' variables if this pattern is used intentionally.", + "markdown": "Reports a variable that is declared in one `case` clause of a `switch` statement but is used in another `case` clause of the same statement. For block-scoped variables, this results in throwing a `ReferenceError`. For `var` variables, it indicates a potential error.\n\nDisable the inspection for `var` variables if this pattern is used intentionally." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSSwitchVariableDeclarationIssue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReuseOfLocalVariableJS", + "shortDescription": { + "text": "Reuse of local variable" + }, + "fullDescription": { + "text": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity.", + "markdown": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReuseOfLocalVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Data flow", + "index": 187, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertLetToConst", + "shortDescription": { + "text": "'let' is used instead of 'const'" + }, + "fullDescription": { + "text": "Reports a 'let' declaration that can be made 'const'.", + "markdown": "Reports a `let` declaration that can be made `const`. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertLetToConst", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXDomNesting", + "shortDescription": { + "text": "Invalid DOM element nesting" + }, + "fullDescription": { + "text": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements.", + "markdown": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSXDomNesting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/React", + "index": 188, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLocalVariableJS", + "shortDescription": { + "text": "Redundant local variable" + }, + "fullDescription": { + "text": "Reports an unnecessary local variable that does not make a function more comprehensible: a local variable that is immediately returned a local variable that is immediately assigned to another variable and is not used anymore a local variable that always has the same value as another local variable or parameter. Use the checkbox below to have this inspection ignore variables that are immediately returned or thrown. Some coding styles suggest using such variables for clarity and ease of debugging.", + "markdown": "Reports an unnecessary local variable that does not make a function more comprehensible:\n\n* a local variable that is immediately returned\n* a local variable that is immediately assigned to another variable and is not used anymore\n* a local variable that always has the same value as another local variable or parameter.\n\n\nUse the checkbox below to have this inspection ignore variables that are immediately\nreturned or thrown. Some coding styles suggest using such variables for clarity and\nease of debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLocalVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Data flow", + "index": 187, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXUnresolvedComponent", + "shortDescription": { + "text": "Unresolved JSX component" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name. The template for a new component can be modified in Editor | File and Code Templates.", + "markdown": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSXUnresolvedComponent", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnBreakStatementJS", + "shortDescription": { + "text": "Unnecessary label on 'break' statement" + }, + "fullDescription": { + "text": "Reports a labeled 'break' statement whose labels may be removed without changing the flow of control.", + "markdown": "Reports a labeled `break` statement whose labels may be removed without changing the flow of control." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnBreakStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DivideByZeroJS", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports division by zero or a remainder by zero.", + "markdown": "Reports division by zero or a remainder by zero." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DivideByZeroJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSReferencingMutableVariableFromClosure", + "shortDescription": { + "text": "Referencing mutable variable from closure" + }, + "fullDescription": { + "text": "Reports access to outer mutable variables from functions. Example: 'for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }'", + "markdown": "Reports access to outer mutable variables from functions.\n\nExample:\n\n\n for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSReferencingMutableVariableFromClosure", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedEqualityJS", + "shortDescription": { + "text": "Chained equality" + }, + "fullDescription": { + "text": "Reports a chained equality comparison (i.e. 'a==b==c'). Such comparisons are confusing.", + "markdown": "Reports a chained equality comparison (i.e. `a==b==c`). Such comparisons are confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainedEqualityComparisonsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertRequireIntoImport", + "shortDescription": { + "text": "'require()' is used instead of 'import'" + }, + "fullDescription": { + "text": "Reports a 'require()' statement. Suggests converting it to a 'require()' call with an 'import' statement. Enable 'Convert require() inside inner scopes with Fix all action' to convert all 'require()' calls inside the nested functions and statements when using the 'Fix all' action. Please note that converting 'require()' statements inside inner scopes to 'import' statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. 'require()' calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. Clear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action.", + "markdown": "Reports a `require()` statement. Suggests converting it to a `require()` call with an `import` statement. \n\nEnable 'Convert require() inside inner scopes with Fix all action' to convert all `require()` calls inside the nested functions and statements when using the 'Fix all' action. \n\nPlease note that converting `require()` statements inside inner scopes to `import` statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. `require()` calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. \nClear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertRequireIntoImport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSRedundantSwitchStatement", + "shortDescription": { + "text": "'switch' statement is redundant and can be replaced" + }, + "fullDescription": { + "text": "Reports a 'switch' statement with an empty body, or with only one 'case' branch, or with a 'default' branch only.", + "markdown": "Reports a `switch` statement with an empty body, or with only one `case` branch, or with a `default` branch only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSRedundantSwitchStatement", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnusedGlobalSymbols", + "shortDescription": { + "text": "Unused global symbol" + }, + "fullDescription": { + "text": "Reports an unused globally accessible public function, variable, class, or property.", + "markdown": "Reports an unused globally accessible public function, variable, class, or property." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnusedGlobalSymbols", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unused symbols", + "index": 36, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockStatementJS", + "shortDescription": { + "text": "Unnecessary block statement" + }, + "fullDescription": { + "text": "Reports a block statement that is not used as the body of 'if', 'for', 'while', 'do', 'with', or 'try' statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for 'let' and 'const' variables, but still free-standing block statements may be confusing and result in subtle bugs when used with 'var' variables.", + "markdown": "Reports a block statement that is not used as the body of `if`, `for`, `while`, `do`, `with`, or `try` statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for `let` and `const` variables, but still free-standing block statements may be confusing and result in subtle bugs when used with `var` variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BlockStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedConditionalExpressionJS", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic.", + "markdown": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextLabelInSwitchStatementJS", + "shortDescription": { + "text": "Text label in 'switch' statement" + }, + "fullDescription": { + "text": "Reports a labeled statement inside a 'switch' statement, which often results from a typo. Example: 'switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }'", + "markdown": "Reports a labeled statement inside a `switch` statement, which often results from a typo.\n\nExample:\n\n\n switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TextLabelInSwitchStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6PossiblyAsyncFunction", + "shortDescription": { + "text": "'await' in non-async function" + }, + "fullDescription": { + "text": "Reports a usage of 'await' in a function that was possibly intended to be async but is actually missing the 'async' modifier. Although 'await' can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made 'async'.", + "markdown": "Reports a usage of `await` in a function that was possibly intended to be async but is actually missing the `async` modifier. Although `await` can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made `async`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6PossiblyAsyncFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 180, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FlowJSFlagCommentPlacement", + "shortDescription": { + "text": "Misplaced @flow flag" + }, + "fullDescription": { + "text": "Reports a '@flow' flag comment that is not located at the top of a file.", + "markdown": "Reports a `@flow` flag comment that is not located at the top of a file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FlowJSFlagCommentPlacement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Flow type checker", + "index": 37, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSOctalInteger", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports a deprecated octal integer literal prefixed with '0' instead of '0o'. Such literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. To force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below.", + "markdown": "Reports a deprecated octal integer literal prefixed with `0` instead of `0o`. \nSuch literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. \nTo force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSOctalInteger", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMissingSwitchDefault", + "shortDescription": { + "text": "'switch' statement has no 'default' branch" + }, + "fullDescription": { + "text": "Reports a 'switch' statement without a 'default' clause when some possible values are not enumerated.", + "markdown": "Reports a `switch` statement without a `default` clause when some possible values are not enumerated." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSMissingSwitchDefault", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXNamespaceValidation", + "shortDescription": { + "text": "Missing JSX namespace" + }, + "fullDescription": { + "text": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation.", + "markdown": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSXNamespaceValidation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 171, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyTryBlockJS", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports an empty 'try' block, which usually indicates an error.", + "markdown": "Reports an empty `try` block, which usually indicates an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyTryBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReservedWordUsedAsNameJS", + "shortDescription": { + "text": "Reserved word used as name" + }, + "fullDescription": { + "text": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords.", + "markdown": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReservedWordAsName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncrementDecrementResultUsedJS", + "shortDescription": { + "text": "Result of increment or decrement used" + }, + "fullDescription": { + "text": "Reports an increment ('++') or decrement ('--') expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: 'var a = b++'", + "markdown": "Reports an increment (`++`) or decrement (`--`) expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: `var a = b++`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncrementDecrementResultUsedJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousTypeOfGuard", + "shortDescription": { + "text": "Unsound type guard check" + }, + "fullDescription": { + "text": "Reports a 'typeof' or 'instanceof' unsound type guard check. The 'typeof x' type guard can be unsound in one of the following two cases: 'typeof x' never corresponds to the specified value (for example, 'typeof x === 'number'' when 'x' is of the type 'string | boolean') 'typeof x' always corresponds to the specified value (for example, 'typeof x === 'string'' when 'x' is of the type 'string') The 'x instanceof A' type guard can be unsound in one of the following two cases: The type of 'x' is not related to 'A' The type of 'x' is 'A' or a subtype of 'A'", + "markdown": "Reports a `typeof` or `instanceof` unsound type guard check. The `typeof x` type guard can be unsound in one of the following two cases:\n\n* `typeof x` never corresponds to the specified value (for example, `typeof x === 'number'` when `x` is of the type 'string \\| boolean')\n* `typeof x` always corresponds to the specified value (for example, `typeof x === 'string'` when `x` is of the type 'string')\n\nThe `x instanceof A` type guard can be unsound in one of the following two cases:\n\n* The type of `x` is not related to `A`\n* The type of `x` is `A` or a subtype of `A`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousTypeOfGuard", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopStatementThatDoesntLoopJS", + "shortDescription": { + "text": "Loop statement that doesn't loop" + }, + "fullDescription": { + "text": "Reports a 'for', 'while', or 'do' statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error.", + "markdown": "Reports a `for`, `while`, or `do` statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoopStatementThatDoesntLoopJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSNonASCIINames", + "shortDescription": { + "text": "Identifiers with non-ASCII symbols" + }, + "fullDescription": { + "text": "Reports a non-ASCII symbol in a name. If the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. Otherwise reports all names that contain both ASCII and non-ASCII symbols.", + "markdown": "Reports a non-ASCII symbol in a name. \n\nIf the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. \nOtherwise reports all names that contain both ASCII and non-ASCII symbols." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSNonASCIINames", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 181, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6MissingAwait", + "shortDescription": { + "text": "Missing await for an async function call" + }, + "fullDescription": { + "text": "Reports an 'async' function call without an expected 'await' prefix inside an 'async' function. Such call returns a 'Promise' and control flow is continued immediately. Example: 'async function bar() { /* ... */ }\nasync function foo() {\n bar(); // bad\n}' After the quick-fix is applied, the 'await' prefix is added: 'async function bar() { /* ... */ }\nasync function foo() {\n await bar(); // good\n}' When the 'Report for promises in return statements' checkbox is selected, also suggests adding 'await' in return statements. While this is generally not necessary, it gives two main benefits. You won't forget to add 'await' when surrounding your code with 'try-catch'. An explicit 'await' helps V8 runtime to provide async stack traces.", + "markdown": "Reports an `async` function call without an expected `await` prefix inside an `async` function. Such call returns a `Promise` and control flow is continued immediately.\n\nExample:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n bar(); // bad\n }\n\n\nAfter the quick-fix is applied, the `await` prefix is added:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n await bar(); // good\n }\n\nWhen the 'Report for promises in return statements' checkbox is selected, also suggests adding `await` in return statements. \nWhile this is generally not necessary, it gives two main benefits. \n\n* You won't forget to add `await` when surrounding your code with `try-catch`.\n* An explicit `await` helps V8 runtime to provide [async stack traces](https://bit.ly/v8-zero-cost-async-stack-traces)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6MissingAwait", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 180, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TailRecursionJS", + "shortDescription": { + "text": "Tail recursion" + }, + "fullDescription": { + "text": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments.", + "markdown": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TailRecursionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FlowJSCoverage", + "shortDescription": { + "text": "Code is not covered by Flow" + }, + "fullDescription": { + "text": "Reports JavaScript code fragments that are not covered by the Flow type checker. To use this inspection, configure the Flow executable in Settings | Languages & Frameworks | JavaScript.", + "markdown": "Reports JavaScript code fragments that are not covered by the Flow type checker. To use this inspection, configure the Flow executable in [Settings \\| Languages \\& Frameworks \\| JavaScript](settings://Settings.JavaScript)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "FlowJSCoverage", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Flow type checker", + "index": 37, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingPlusesOrMinusesJS", + "shortDescription": { + "text": "Confusing sequence of '+' or '-'" + }, + "fullDescription": { + "text": "Reports a suspicious combination of '+' or '-' characters in JavaScript code (for example, 'a+++b'. Such sequences are confusing, and their semantics may change through changes in the whitespace.", + "markdown": "Reports a suspicious combination of `+` or `-` characters in JavaScript code (for example, `a+++b`. Such sequences are confusing, and their semantics may change through changes in the whitespace." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingPlusesOrMinusesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptConfig", + "shortDescription": { + "text": "Inconsistent tsconfig.json properties" + }, + "fullDescription": { + "text": "Reports inconsistency of a 'paths', 'checkJs', or 'extends' property in a tsconfig.json file. The 'checkJs' property requires 'allowJs'. The 'extends' property should be a valid file reference.", + "markdown": "Reports inconsistency of a `paths`, `checkJs`, or `extends` property in a tsconfig.json file. \nThe `checkJs` property requires `allowJs`. \nThe `extends` property should be a valid file reference." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptConfig", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSIgnoredPromiseFromCall", + "shortDescription": { + "text": "Result of method call returning a promise is ignored" + }, + "fullDescription": { + "text": "Reports a function call that returns a 'Promise' that is not used later. Such calls are usually unintended and indicate an error.", + "markdown": "Reports a function call that returns a `Promise` that is not used later. Such calls are usually unintended and indicate an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSIgnoredPromiseFromCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 180, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexBooleanExpressionJS", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression.", + "markdown": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexBooleanExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexArithmeticExpressionJS", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression.", + "markdown": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexArithmeticExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringLiteralBreaksHTMLJS", + "shortDescription": { + "text": "String literal which breaks HTML parsing" + }, + "fullDescription": { + "text": "Reports a string literal that contains a ' for the complete list." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NodeCoreCodingAssistance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Node.js", + "index": 200, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPrimitiveTypeWrapperUsage", + "shortDescription": { + "text": "Primitive type object wrapper used" + }, + "fullDescription": { + "text": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost.", + "markdown": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPrimitiveTypeWrapperUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptSmartCast", + "shortDescription": { + "text": "Narrowed type" + }, + "fullDescription": { + "text": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection.", + "markdown": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptSmartCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSLastCommaInArrayLiteral", + "shortDescription": { + "text": "Unneeded last comma in array literal" + }, + "fullDescription": { + "text": "Reports a usage of a trailing comma in an array literal. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Although trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation.", + "markdown": "Reports a usage of a trailing comma in an array literal.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nAlthough trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSLastCommaInArrayLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditionalExpressionJS", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: '!condition ? 2 : 1'", + "markdown": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: `!condition ? 2 : 1`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSAccessibilityCheck", + "shortDescription": { + "text": "Inaccessible @private and @protected members referenced" + }, + "fullDescription": { + "text": "Reports a reference to a JavaScript member that is marked with a '@private' or '@protected' tag but does not comply with visibility rules that these tags imply.", + "markdown": "Reports a reference to a JavaScript member that is marked with a `@private` or `@protected` tag but does not comply with visibility rules that these tags imply." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSAccessibilityCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithMultipleLoopsJS", + "shortDescription": { + "text": "Function with multiple loops" + }, + "fullDescription": { + "text": "Reports a function with multiple loop statements.", + "markdown": "Reports a function with multiple loop statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMultipleLoopsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LabeledStatementJS", + "shortDescription": { + "text": "Labeled statement" + }, + "fullDescription": { + "text": "Reports a labeled statement.", + "markdown": "Reports a labeled statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LabeledStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NpmUsedModulesInstalled", + "shortDescription": { + "text": "Missing module dependency" + }, + "fullDescription": { + "text": "Reports a module from a 'require()' call or an 'import' statement that is not installed or is not listed in package.json dependencies. Suggests installing the module and/or including it into package.json. For 'require()' calls, works only in the files from the scope of Node.js Core JavaScript library.", + "markdown": "Reports a module from a `require()` call or an `import` statement that is not installed or is not listed in package.json dependencies.\n\nSuggests installing the module and/or including it into package.json.\n\nFor `require()` calls, works only in the files from the scope of *Node.js Core* JavaScript library." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NpmUsedModulesInstalled", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 171, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WithStatementJS", + "shortDescription": { + "text": "'with' statement" + }, + "fullDescription": { + "text": "Reports a 'with' statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables.", + "markdown": "Reports a `with` statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WithStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 74, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSConstantReassignment", + "shortDescription": { + "text": "Attempt to assign to const or readonly variable" + }, + "fullDescription": { + "text": "Reports reassigning a value to a constant or a readonly variable.", + "markdown": "Reports reassigning a value to a constant or a readonly variable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSConstantReassignment", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 55, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicNumberJS", + "shortDescription": { + "text": "Magic number" + }, + "fullDescription": { + "text": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored.", + "markdown": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MagicNumberJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionNamingConventionJS", + "shortDescription": { + "text": "Function naming convention" + }, + "fullDescription": { + "text": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression for function names. Use the standard 'java.util.regex' format for regular expressions.", + "markdown": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nfor function names. Use the standard `java.util.regex` format for regular expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 181, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptLibrary", + "shortDescription": { + "text": "Missing global library" + }, + "fullDescription": { + "text": "Reports a TypeScript library file that is required for a symbol but is not listed under the 'lib' compiler option in 'tsconfig.json'.", + "markdown": "Reports a TypeScript library file that is required for a symbol but is not listed under the `lib` compiler option in `tsconfig.json`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptLibrary", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptMissingAugmentationImport", + "shortDescription": { + "text": "Missing augmentation import" + }, + "fullDescription": { + "text": "Reports a usage from augmentation module without an explicit import.", + "markdown": "Reports a usage from [augmentation module](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation) without an explicit import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptMissingAugmentationImport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectAllocationIgnoredJS", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocation where the result of the allocated object is ignored, for example, 'new Error();' as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy.", + "markdown": "Reports object allocation where the result of the allocated object is ignored, for example, `new Error();` as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObjectAllocationIgnored", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSHint", + "shortDescription": { + "text": "JSHint" + }, + "fullDescription": { + "text": "Reports a problem detected by the JSHint linter.", + "markdown": "Reports a problem detected by the [JSHint](https://jshint.com/) linter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSHint", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 131, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Eslint", + "shortDescription": { + "text": "ESLint" + }, + "fullDescription": { + "text": "Reports a discrepancy detected by the ESLint linter. The highlighting is based on the rule severity specified in the ESLint configuration file for each individual rule. Clear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules.", + "markdown": "Reports a discrepancy detected by the [ESLint](https://eslint.org) linter. \n\nThe highlighting is based on the rule severity specified in the [ESLint configuration file](https://eslint.org/docs/user-guide/configuring) for each individual rule. \n\nClear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Eslint", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 131, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSEqualityComparisonWithCoercion.TS", + "shortDescription": { + "text": "Equality operator may cause type coercion" + }, + "fullDescription": { + "text": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing '==' or '!=' equality operators with type-safe '===' or '!==' operators. Depending on the option selected, one of the following cases will be reported: All usages of '==' and '!=' operators. All usages except comparison with null. Some code styles allow using 'x == null' as a replacement for 'x === null || x === undefined'. Only suspicious expressions, such as: '==' or '!=' comparisons with '0', '''', 'null', 'true', 'false', or 'undefined'.", + "markdown": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing `==` or `!=` equality operators with type-safe `===` or `!==` operators.\n\nDepending on the option selected, one of the following cases will be reported:\n\n* All usages of `==` and `!=` operators.\n* All usages except comparison with null. Some code styles allow using `x == null` as a replacement for `x === null || x === undefined`.\n* Only suspicious expressions, such as: `==` or `!=` comparisons with `0`, `''`, `null`, `true`, `false`, or `undefined`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EqualityComparisonWithCoercionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionCaughtLocallyJS", + "shortDescription": { + "text": "Exception used for local control-flow" + }, + "fullDescription": { + "text": "Reports a 'throw' statement whose exceptions are always caught by the containing 'try' statement. Using 'throw' statements as a 'goto' to change the local flow of control is confusing.", + "markdown": "Reports a `throw` statement whose exceptions are always caught by the containing `try` statement. Using `throw` statements as a `goto` to change the local flow of control is confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExceptionCaughtLocallyJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 62, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclomaticComplexityJS", + "shortDescription": { + "text": "Overly complex function" + }, + "fullDescription": { + "text": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test. Use the field provided below to specify the maximum acceptable cyclomatic complexity for a function.", + "markdown": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test.\n\n\nUse the field provided below to specify the maximum acceptable cyclomatic complexity for a function." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageJsonMismatchedDependency", + "shortDescription": { + "text": "Mismatched dependencies in package.json" + }, + "fullDescription": { + "text": "Reports a dependency from package.json that is not installed or doesn't match the specified version range.", + "markdown": "Reports a dependency from package.json that is not installed or doesn't match the specified [version range](https://docs.npmjs.com/about-semantic-versioning)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageJsonMismatchedDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 171, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteLoopJS", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports a 'for', 'while', or 'do' statement which can only exit by throwing an exception. Such statements often indicate coding errors.", + "markdown": "Reports a `for`, `while`, or `do` statement which can only exit by throwing an exception. Such statements often indicate coding errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteLoopJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSArrowFunctionBracesCanBeRemoved", + "shortDescription": { + "text": "Redundant braces around arrow function body" + }, + "fullDescription": { + "text": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces. 'let incrementer = (x) => {return x + 1};' After the quick-fix is applied, the code fragment looks as follows: 'let incrementer = (x) => x + 1;'", + "markdown": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces.\n\n\n let incrementer = (x) => {return x + 1};\n\nAfter the quick-fix is applied, the code fragment looks as follows:\n\n\n let incrementer = (x) => x + 1;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSArrowFunctionBracesCanBeRemoved", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports a class or a function that is annotated with a JSDoc '@constructor' or '@class' tag whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for classes names. Use the standard 'java.util.regex' format for regular expressions.", + "markdown": "Reports a class or a function that is annotated with a JSDoc `@constructor` or `@class` tag whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for classes names. Use the standard `java.util.regex` format for regular expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSClassNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 181, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptJSXUnresolvedComponent", + "shortDescription": { + "text": "Unresolved JSX component" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name. The template for a new component can be modified in Editor | File and Code Templates.", + "markdown": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptJSXUnresolvedComponent", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnfilteredForInLoop", + "shortDescription": { + "text": "Unfiltered for..in loop" + }, + "fullDescription": { + "text": "Reports unfiltered 'for-in' loops. The use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when 'Object''s prototype may be incorrectly modified. For example, the following code will print 42 and myMethod: 'Object.prototype.myMethod = function myMethod() {};\nlet a = { foo: 42 };\nfor (let i in a) {\n console.log(a[i]);\n}' Suggests replacing the whole loop with a 'Object.keys()' method or adding a 'hasOwnProperty()' check. After applying the quick-fix the code looks as follows: 'for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n}'", + "markdown": "Reports unfiltered `for-in` loops. \n\nThe use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when `Object`'s prototype may be incorrectly modified. For example, the following code will print **42** and **myMethod** : \n\n\n Object.prototype.myMethod = function myMethod() {};\n let a = { foo: 42 };\n for (let i in a) {\n console.log(a[i]);\n }\n\nSuggests replacing the whole loop with a `Object.keys()` method or adding a `hasOwnProperty()` check. After applying the quick-fix the code looks as follows:\n\n\n for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnfilteredForInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSFunctionExpressionToArrowFunction", + "shortDescription": { + "text": "Function expression is used instead of arrow function" + }, + "fullDescription": { + "text": "Reports a function expression. Suggests converting it to an arrow function. Example: 'arr.map(function(el) {return el + 1})' After applying the quick-fix the code looks as follows: 'arr.map(el => el + 1)'", + "markdown": "Reports a [function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function) expression. Suggests converting it to an [arrow function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions).\n\nExample:\n\n arr.map(function(el) {return el + 1})\n\nAfter applying the quick-fix the code looks as follows:\n\n arr.map(el => el + 1)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSFunctionExpressionToArrowFunction", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 108, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUndefinedPropertyAssignment", + "shortDescription": { + "text": "Undefined property assignment" + }, + "fullDescription": { + "text": "Reports an assignment to a property that is not defined in the type of a variable. Example: '/**\n * @type {{ property1: string, property2: number }}\n */\nlet myVariable = create();\n\nmyVariable.newProperty = 3; // bad'", + "markdown": "Reports an assignment to a property that is not defined in the type of a variable.\n\nExample:\n\n\n /**\n * @type {{ property1: string, property2: number }}\n */\n let myVariable = create();\n\n myVariable.newProperty = 3; // bad\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUndefinedPropertyAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDeprecatedSymbols", + "shortDescription": { + "text": "Deprecated symbol used" + }, + "fullDescription": { + "text": "Reports a usage of a deprecated function variable.", + "markdown": "Reports a usage of a deprecated function variable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSDeprecatedSymbols", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableNamingConventionJS", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions.", + "markdown": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LocalVariableNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 181, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UpdateDependencyToLatestVersion", + "shortDescription": { + "text": "Update package.json dependencies to latest versions" + }, + "fullDescription": { + "text": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions.", + "markdown": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UpdateDependencyToLatestVersion", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 171, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnresolvedExtXType", + "shortDescription": { + "text": "Unresolved Ext JS xtype" + }, + "fullDescription": { + "text": "Reports an Ext JS 'xtype' reference that doesn't have a corresponding class.", + "markdown": "Reports an Ext JS `xtype` reference that doesn't have a corresponding class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnresolvedExtXType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6RedundantNestingInTemplateLiteral", + "shortDescription": { + "text": "Redundant nesting in template literal" + }, + "fullDescription": { + "text": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string. Example: 'let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`' After applying the quick-fix the code looks as follows: 'let a = `Hello, Brave New World!`'", + "markdown": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string.\n\nExample:\n\n\n let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`\n\nAfter applying the quick-fix the code looks as follows:\n\n\n let a = `Hello, Brave New World!`\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6RedundantNestingInTemplateLiteral", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestingDepthJS", + "shortDescription": { + "text": "Overly nested function" + }, + "fullDescription": { + "text": "Reports a function whose body contains statements that are too deeply nested within other statements. Such functions may be confusing and indicate that refactoring may be necessary. Use the field provided below to specify the maximum acceptable nesting depth allowed in a function.", + "markdown": "Reports a function whose body contains statements that are too deeply nested within other statements. Such functions may be confusing and indicate that refactoring may be necessary.\n\n\nUse the field provided below to specify the maximum acceptable nesting depth allowed in a function." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyNestedFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 141, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptSuspiciousConstructorParameterAssignment", + "shortDescription": { + "text": "Assigned constructor field parameter" + }, + "fullDescription": { + "text": "Reports a common mistake in TypeScript code, when a class field is declared as a constructor parameter, and then this parameter is assigned. In this case, the corresponding field won't be assigned, only the local parameter value is modified. 'class Foo {\n constructor(private p: number) {\n p = 1; //must be this.p = 1;\n }\n}'", + "markdown": "Reports a common mistake in TypeScript code, when a class field is declared as a constructor parameter, and then this parameter is assigned. \nIn this case, the corresponding field *won't* be assigned, only the local parameter value is modified.\n\n\n class Foo {\n constructor(private p: number) {\n p = 1; //must be this.p = 1;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptSuspiciousConstructorParameterAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 103, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentResultUsedJS", + "shortDescription": { + "text": "Result of assignment used" + }, + "fullDescription": { + "text": "Reports an assignment expression where the result of the assignment is used in the containing expression. Such assignments often indicate coding errors, for example, '=' instead of '=='. Moreover, they can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Expressions in parentheses are ignored.", + "markdown": "Reports an assignment expression where the result of the assignment is used in the containing expression. Such assignments often indicate coding errors, for example, `=` instead of `==`. Moreover, they can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways.\n\nExpressions in parentheses are ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentResultUsedJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 97, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantOnRHSOfComparisonJS", + "shortDescription": { + "text": "Constant on right side of comparison" + }, + "fullDescription": { + "text": "Reports a comparison operation with a constant in the right-hand side. According to coding conventions, constants should only be in the left-hand side of comparisons.", + "markdown": "Reports a comparison operation with a constant in the right-hand side. According to coding conventions, constants should only be in the left-hand side of comparisons." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantOnRightSideOfComparisonJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 143, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnnecessarySemicolon", + "shortDescription": { + "text": "Unnecessary semicolon" + }, + "fullDescription": { + "text": "Reports an unneeded semicolon.", + "markdown": "Reports an unneeded semicolon." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnnecessarySemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedSwitchStatementJS", + "shortDescription": { + "text": "Nested 'switch' statement" + }, + "fullDescription": { + "text": "Reports a 'switch' statement that is nested in another 'switch' statement. Nested 'switch' statements may be very confusing, particularly if indenting is inconsistent.", + "markdown": "Reports a `switch` statement that is nested in another `switch` statement. Nested `switch` statements may be very confusing, particularly if indenting is inconsistent." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedSwitchStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMissingSwitchBranches", + "shortDescription": { + "text": "'switch' statement has missing branches" + }, + "fullDescription": { + "text": "Reports a 'switch' statement on a variable of the type 'enum' or 'union' when the statement doesn't cover some value options from the type.", + "markdown": "Reports a `switch` statement on a variable of the type `enum` or `union` when the statement doesn't cover some value options from the type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSMissingSwitchBranches", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 135, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSJQueryEfficiency", + "shortDescription": { + "text": "JQuery selector can be optimized" + }, + "fullDescription": { + "text": "Reports a duplicated jQuery selector that can be cached or a usage of an attribute or a pseudo-selector (optional).", + "markdown": "Reports a duplicated jQuery selector that can be cached or a usage of an attribute or a pseudo-selector (optional)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSJQueryEfficiency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnreachableCodeJS", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports code that can never be executed, which almost certainly indicates an error", + "markdown": "Reports code that can never be executed, which almost certainly indicates an error" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnreachableCodeJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 127, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSSuspiciousEqPlus", + "shortDescription": { + "text": "Suspicious '=+' assignment" + }, + "fullDescription": { + "text": "Reports an assignment in the form 'a =+ b'. Suggests replacing with 'a += b'.", + "markdown": "Reports an assignment in the form `a =+ b`. Suggests replacing with `a += b`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSSuspiciousEqPlus", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 111, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyStatementBodyJS", + "shortDescription": { + "text": "Statement with empty body" + }, + "fullDescription": { + "text": "Reports an 'if', 'while', 'for', or 'with' statement with an empty body. Such statements often result from typos, and may cause confusion. Use the checkbox below to specify whether the statements with empty block statements as bodies should be reported.", + "markdown": "Reports an `if`, `while`, `for`, or `with` statement with an empty body. Such statements often result from typos, and may cause confusion.\n\n\nUse the checkbox below to specify whether the statements with empty block statements as bodies\nshould be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StatementWithEmptyBodyJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 57, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnusedLocalSymbols", + "shortDescription": { + "text": "Unused local symbol" + }, + "fullDescription": { + "text": "Reports an unused locally accessible parameter, local variable, function, class, or private member declaration.", + "markdown": "Reports an unused locally accessible parameter, local variable, function, class, or private member declaration." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnusedLocalSymbols", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unused symbols", + "index": 36, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.java-i18n", + "version": "241.17569", + "rules": [ + { + "id": "UnusedMessageFormatParameter", + "shortDescription": { + "text": "Missing message format parameter" + }, + "fullDescription": { + "text": "Reports properties values that look like 'java.text.MessageFormat' format strings but do not use some the parameters of the '{xx}' kind. Example: '# parameter {0} is not used\nerror.message=Something happened in line {1}'", + "markdown": "Reports properties values that look like `java.text.MessageFormat` format strings but do not use some the parameters of the `{xx}` kind.\n\nExample:\n\n\n # parameter {0} is not used\n error.message=Something happened in line {1}\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedMessageFormatParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentResourceBundle", + "shortDescription": { + "text": "Inconsistent resource bundle" + }, + "fullDescription": { + "text": "Reports problems in the properties files contained in the resource bundle. Report missing translations Use this option to report properties contained in the parent properties file that are missing in inherited ones (unless it's a language dialect). Example: '# messages.properties\n abc=xxx\n\n # messages_fr.properties\n # Empty file' Property 'abc' will be reported as untranslated. Report inconsistent properties Use this option to report properties contained in inherited properties file that are missing in the parent one (or in siblings if there is no parent). Example: '# messages.properties\n # Empty file\n\n # messages_fr.properties\n abc=xxx' Property 'abc' translation is not available here for any language except French, and, thus, will be reported as missing in the (default) properties file 'messages.properties'. Report properties overridden with the same value Use this option to report properties copy-pasted into several properties files verbatim. Example: '# messages.properties\n abc=xxx\n\n # messages_fr.properties\n abc=xxx' Property 'abc' will be reported as unnecessarily inherited in the file 'messages_fr.properties' . Report properties overridden with different placeholders Use this option to check for placeholder consistency in overridden properties. Example: '# messages.properties\n qwe={0}xxx{1}\n abc={0}yyy{1}\n\n # messages_fr.properties\n qwe={0}xxx{0}xxx{1}\n abc={0}yyy' Property 'abc' will be reported as a property containing message format placeholders not corresponding to 'messages.properties'. Report properties overridden with different values endings Use this option to check for ending consistency in overridden properties. Example: '# messages.properties\n abc=xxxzzz\n\n # messages_fr.properties\n abc=xxx;' Property 'abc' will be reported as ending with special signs ('!' / '?' / '.' / ':' / ';') whereas the parent value in 'messages.properties' doesn't.", + "markdown": "Reports problems in the properties files contained in the resource bundle.\n\n* **Report missing translations** \n\n Use this option to report properties contained in the parent properties file that are missing in inherited ones (unless it's a language dialect). \n\n Example:\n\n\n # messages.properties\n abc=xxx\n\n # messages_fr.properties\n # Empty file\n \n Property `abc` will be reported as untranslated. \n\n* **Report inconsistent properties** \n\n Use this option to report properties contained in inherited properties file that are missing in the parent one (or in siblings if there is no parent). \n\n Example:\n\n\n # messages.properties\n # Empty file\n\n # messages_fr.properties\n abc=xxx\n \n Property `abc` translation is not available here for any language except French, and, thus, will be reported as missing in the (default) properties file `messages.properties`. \n\n* **Report properties overridden with the same value** \n\n Use this option to report properties copy-pasted into several properties files verbatim. \n\n Example:\n\n\n # messages.properties\n abc=xxx\n\n # messages_fr.properties\n abc=xxx\n \n Property `abc` will be reported as unnecessarily inherited in the file `messages_fr.properties` . \n\n* **Report properties overridden with different placeholders** \n\n Use this option to check for placeholder consistency in overridden properties. \n\n Example:\n\n\n # messages.properties\n qwe={0}xxx{1}\n abc={0}yyy{1}\n\n # messages_fr.properties\n qwe={0}xxx{0}xxx{1}\n abc={0}yyy\n \n Property `abc` will be reported as a property containing message format placeholders not corresponding to `messages.properties`. \n\n* **Report properties overridden with different values endings** \n\n Use this option to check for ending consistency in overridden properties. \n\n Example:\n\n\n # messages.properties\n abc=xxxzzz\n\n # messages_fr.properties\n abc=xxx;\n \n Property `abc` will be reported as ending with special signs (`!` / `?` / `.` / `:` / `;`) whereas the parent value in `messages.properties` doesn't." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "InconsistentResourceBundle", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedPropertyKey", + "shortDescription": { + "text": "Invalid property key" + }, + "fullDescription": { + "text": "Reports invalid arguments that are passed to methods with parameters annotated as '@PropertyKey'. These arguments should be valid property keys in corresponding properties files. Also, the inspection verifies that the 'resourceBundle' argument of the '@PropertyKey' annotation is an existing resource bundle. Use the quick-fix to create a new property or to select an existing one. Example: '@PropertyKey(resourceBundle = \"myBundle\") String value = \"invalid.key\";'", + "markdown": "Reports invalid arguments that are passed to methods with parameters annotated as `@PropertyKey`.\n\nThese arguments should be valid property keys in corresponding properties files.\nAlso, the inspection verifies that the `resourceBundle`\nargument of the `@PropertyKey` annotation is an existing resource bundle.\n\n\nUse the quick-fix to create a new property or to select an existing one.\n\nExample:\n\n\n @PropertyKey(resourceBundle = \"myBundle\") String value = \"invalid.key\";\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedPropertyKey", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Properties files", + "index": 174, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertToBasicLatin", + "shortDescription": { + "text": "Non-Basic Latin character" + }, + "fullDescription": { + "text": "Reports non-Basic Latin characters in literals and suggests replacing them with unicode entities. Example: '// © 2021\n char c = '©';\n String s = \"Áî\";'\n After the quick-fix is applied: '// © 2021\n char c = '\\u00a9';\n String s = \"\\u00c1\\u00ee\";'", + "markdown": "Reports non-Basic Latin characters in literals and suggests replacing them with unicode entities.\n\nExample:\n\n\n // © 2021\n char c = '©';\n String s = \"Áî\";\n\nAfter the quick-fix is applied:\n\n\n // © 2021\n char c = '\\u00a9';\n String s = \"\\u00c1\\u00ee\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ConvertToBasicLatin", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardCodedStringLiteral", + "shortDescription": { + "text": "Hardcoded strings" + }, + "fullDescription": { + "text": "Reports any instances of hardcoded 'String' literals. Hardcoded 'String' literals are probably errors in an internationalized environment. This inspection won't report empty strings and strings consisting only of whitespaces. A quick-fix is available to transform a string literal into a 'java.util.ResourceBundle.getString()' method call.", + "markdown": "Reports any instances of hardcoded `String` literals.\n\nHardcoded `String` literals are probably errors in an\ninternationalized environment. This inspection won't report empty strings and strings consisting only of whitespaces. A quick-fix is available\nto transform a string literal into a `java.util.ResourceBundle.getString()` method call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HardCodedStringLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DialogTitleCapitalization", + "shortDescription": { + "text": "Incorrect string capitalization" + }, + "fullDescription": { + "text": "Reports strings in method parameters and return values annotated with '@Nls' and having the capitalization parameter to conform to capitalization rules existing in most platform UI guidelines. Example: 'void setTitle(@NlsContexts.DialogTitle String title) {}\n setTitle(\"This is sentence capitalization but should be title\");' After the quick-fix is applied: 'setTitle(\"This Is Sentence Capitalization but Should Be Title\");'", + "markdown": "Reports strings in method parameters and return values annotated with `@Nls` and having the capitalization parameter to conform to capitalization rules existing in most platform UI guidelines.\n\n**Example:**\n\n\n void setTitle(@NlsContexts.DialogTitle String title) {}\n setTitle(\"This is sentence capitalization but should be title\"); \n\nAfter the quick-fix is applied:\n\n\n setTitle(\"This Is Sentence Capitalization but Should Be Title\"); \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DialogTitleCapitalization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousLocalesLanguages", + "shortDescription": { + "text": "Suspicious resource bundle locale languages" + }, + "fullDescription": { + "text": "Reports locales with language codes that are not supported by Java.", + "markdown": "Reports locales with language codes that are not supported by Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousLocalesLanguages", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateStringLiteralInspection", + "shortDescription": { + "text": "Duplicate string literal" + }, + "fullDescription": { + "text": "Reports string literals that are replicated unchanged throughout the project. Two quick-fixes are provided. One to introduce a constant for a duplicated string and use it throughout the project, and one to show the location of all the duplicates of a particular string literal. Example: 'class C1 { String CONST1 = \"duplicate string\"; }\n class C2 { String CONST2 = \"duplicate string\"; }' Configure the inspection: Use the Min string length field to set the minimal string length required to detect duplicates. Use the Ignore @PropertyKey expressions option to ignore strings passed as arguments to methods annotated with 'org.jetbrains.annotations.PropertyKey'.", + "markdown": "Reports string literals that are replicated unchanged throughout the project. Two quick-fixes are provided. One to introduce a constant for a duplicated string and use it throughout the project, and one to show the location of all the duplicates of a particular string literal.\n\nExample:\n\n\n class C1 { String CONST1 = \"duplicate string\"; }\n class C2 { String CONST2 = \"duplicate string\"; }\n\nConfigure the inspection:\n\n* Use the **Min string length** field to set the minimal string length required to detect duplicates.\n* Use the **Ignore @PropertyKey expressions** option to ignore strings passed as arguments to methods annotated with `org.jetbrains.annotations.PropertyKey`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateStringLiteralInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 6, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.plugins.postcss", + "version": "241.17569", + "rules": [ + { + "id": "PostCssUnresolvedModuleValueReference", + "shortDescription": { + "text": "Unresolved CSS module value" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a CSS Module Value ('@value' declaration). Example: '@value foo from unknown;'", + "markdown": "Reports an unresolved reference to a [CSS Module Value](https://github.com/css-modules/postcss-modules-values) (`@value` declaration).\n\nExample:\n\n\n @value foo from unknown;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssUnresolvedModuleValueReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 40, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssNesting", + "shortDescription": { + "text": "Invalid nested rule" + }, + "fullDescription": { + "text": "Reports a nested style rule whose syntax doesn't comply with the PostCSS Nested or the PostCSS Nesting specification. Example: '.phone {\n &_title {}\n}'", + "markdown": "Reports a nested style rule whose syntax doesn't comply with the [PostCSS Nested](https://github.com/postcss/postcss-nested) or the [PostCSS Nesting](https://github.com/csstools/postcss-nesting) specification.\n\nExample:\n\n\n .phone {\n &_title {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PostCssNesting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 40, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssCustomMedia", + "shortDescription": { + "text": "Invalid custom media" + }, + "fullDescription": { + "text": "Reports a syntax error in a PostCSS Custom Media query. Example: '@custom-media --small-viewport (max-width: 30em);'", + "markdown": "Reports a syntax error in a [PostCSS Custom Media](https://github.com/postcss/postcss-custom-media) query.\n\nExample:\n\n\n @custom-media --small-viewport (max-width: 30em);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssCustomMedia", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 40, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssCustomSelector", + "shortDescription": { + "text": "Invalid custom selector" + }, + "fullDescription": { + "text": "Reports a syntax error in PostCSS Custom Selector. Example: '@custom-selector :--heading h1, h2, h3;'", + "markdown": "Reports a syntax error in [PostCSS Custom Selector](https://github.com/postcss/postcss-custom-selectors).\n\nExample:\n\n\n @custom-selector :--heading h1, h2, h3;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssCustomSelector", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 40, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssMediaRange", + "shortDescription": { + "text": "Invalid media query range" + }, + "fullDescription": { + "text": "Checks range context syntax, which may alternatively be used for media features with a 'range' type. Example: '@media screen and (500px <= width <= 1200px) {}'", + "markdown": "Checks [range context](https://github.com/postcss/postcss-media-minmax) syntax, which may alternatively be used for media features with a 'range' type.\n\nExample:\n\n\n @media screen and (500px <= width <= 1200px) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssMediaRange", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 40, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.reactivestreams", + "version": "241.17569", + "rules": [ + { + "id": "ReactiveStreamsUnusedPublisher", + "shortDescription": { + "text": "Unused publisher" + }, + "fullDescription": { + "text": "Reports unused 'Publisher' instances. To use an operator (a method of Mono/Flux/Flowable object that returns a Mono/Flux/Flowable) that produces a new 'Publisher' instance, you must subscribe to the created 'Publisher' via 'subscribe()'. Using a factory (for example, 'Mono.just()') without subscribing to the returned 'Publisher', creates an object that is never used and is treated as unnecessary memory allocation. For example, 'Mono.just(1, 2, 3).map(i -> i + 3)' won't be executed unless you subscribe to this 'Publisher', or unless you produce a new 'Publisher' by applying operators and subscribe to it. Example: Unused 'Flux' instance: 'Flux.just(1, 2, 3);' A 'Flux' instance used by consumer: 'Flux.just(1, 2, 3).subscribe(System.out::println);' Calls to methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation are not reported. New in 2019.3", + "markdown": "Reports unused `Publisher` instances.\n\n\nTo use an operator (a method of Mono/Flux/Flowable object that returns a Mono/Flux/Flowable) that produces a new `Publisher`\ninstance,\nyou must subscribe to the created `Publisher` via `subscribe()`.\n\n\nUsing a factory (for example, `Mono.just()`) without subscribing to the returned `Publisher`,\ncreates an object that is never used and is treated as unnecessary memory allocation.\n\n\nFor example, `Mono.just(1, 2, 3).map(i -> i + 3)` won't be executed unless you subscribe to this `Publisher`,\nor unless you produce a new `Publisher` by applying operators and subscribe to it.\n\n**Example:**\n\nUnused `Flux` instance:\n\n\n Flux.just(1, 2, 3);\n\nA `Flux` instance used by consumer:\n\n\n Flux.just(1, 2, 3).subscribe(System.out::println);\n\nCalls to methods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation are not reported.\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactiveStreamsUnusedPublisher", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactiveStreamsThrowInOperator", + "shortDescription": { + "text": "Throw statement in Reactive operator" + }, + "fullDescription": { + "text": "Reports 'throw' expressions in the Reactor/RxJava operator code. Throwing exceptions from a Reactor/RxJava operator indicates a possible problem, because you can return a \"Reactive-like\" error: 'Mono.error()' or 'Flowable.error()' from 'flatMap()', or call 'sink.error()' from the Reactor's 'handle()' operator. Also, Reactor factory methods allow returning checked exceptions without any errors, while throwing such exceptions without the 'Exceptions' class leads to a compilation error. Example: 'Flux.just(1, 2, 3).flatMap(i -> {\n throw new RuntimeException();\n })' After the quick-fix is applied: 'Flux.just(1, 2, 3).flatMap(i -> {\n return Flux.error(new RuntimeException());\n })' New in 2019.3", + "markdown": "Reports `throw` expressions in the Reactor/RxJava operator code.\n\nThrowing exceptions from a Reactor/RxJava operator indicates a possible problem, because you can return a \"Reactive-like\" error:\n`Mono.error()` or `Flowable.error()` from `flatMap()`,\nor call `sink.error()` from the Reactor's `handle()` operator.\n\n\nAlso, Reactor factory methods allow returning checked exceptions without any errors, while throwing such exceptions without\nthe `Exceptions` class leads to a compilation error.\n\n**Example:**\n\n\n Flux.just(1, 2, 3).flatMap(i -> {\n throw new RuntimeException();\n })\n\nAfter the quick-fix is applied:\n\n\n Flux.just(1, 2, 3).flatMap(i -> {\n return Flux.error(new RuntimeException());\n })\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ReactiveStreamsThrowInOperator", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactiveStreamsPublisherImplementation", + "shortDescription": { + "text": "Class implements Publisher" + }, + "fullDescription": { + "text": "Reports classes that directly implement the 'Publisher' interface. Consider using static generators from RxJava, Reactor or Mutiny, for example: 'Flux.just()', 'Flux.create()', 'Flux.generate()', 'Flux.from()' 'Mono.create()', 'Mono.from()', 'Mono.just()' 'Flowable.just()', 'Flowable.from()' 'Maybe.just()', 'Maybe.from()' 'Multi.createFrom()', 'Multi.createBy()' 'Uni.createFrom()'", + "markdown": "Reports classes that directly implement the `Publisher` interface.\n\nConsider using static generators from RxJava, Reactor or Mutiny, for example:\n\n* `Flux.just()`, `Flux.create()`, `Flux.generate()`, `Flux.from()`\n* `Mono.create()`, `Mono.from()`, `Mono.just()`\n* `Flowable.just()`, `Flowable.from()`\n* `Maybe.just()`, `Maybe.from()`\n* `Multi.createFrom()`, `Multi.createBy()`\n* `Uni.createFrom()`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactiveStreamsPublisherImplementation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactiveStreamsNullableInLambdaInTransform", + "shortDescription": { + "text": "Return null or something nullable from a lambda in transformation method" + }, + "fullDescription": { + "text": "Reports transform operations that may return 'null' inside a Reactive Stream chain. Reactive Streams don't support nullable values, which causes such code to fail. The quick-fix suggests replacing 'map()' with 'mapNotNull', which omits exceptions. Example: 'repository.findWithTailableCursorBy()\n .map(e -> (Person)null)\n .doOnNext(System.out::println)' After the quick-fix is applied: 'repository.findWithTailableCursorBy()\n .mapNotNull(e -> (Person)null)\n .doOnNext(System.out::println)' New in 2019.3", + "markdown": "Reports transform operations that may return `null` inside a Reactive Stream chain.\n\n\nReactive Streams don't support nullable values, which causes such code to fail.\nThe quick-fix suggests replacing `map()` with `mapNotNull`, which omits exceptions.\n\n**Example:**\n\n repository.findWithTailableCursorBy()\n .map(e -> (Person)null)\n .doOnNext(System.out::println)\n\nAfter the quick-fix is applied:\n\n repository.findWithTailableCursorBy()\n .mapNotNull(e -> (Person)null)\n .doOnNext(System.out::println)\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactiveStreamsNullableInLambdaInTransform", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactorZipWithMonoVoid", + "shortDescription": { + "text": "Zip contains parameter with Mono type" + }, + "fullDescription": { + "text": "Reports zip operations that contains arguments with 'Mono' return value inside a Reactor chain. 'Zip' completes empty as soon as incoming 'Mono' completes. The quick-fix suggests replacing 'zip()' and 'zipWhen()' and 'zipWith()' with 'when'. Example: 'Mono.zip(Mono.just(1), Mono.fromRunnable(() -> System.out.println(\"value\")))\n .map(v -> \"New value\")\n .doFinally(System.out::println);' After the quick-fix is applied: 'Mono.when(Mono.just(1), Mono.fromRunnable(() -> System.out.println(\"value\")))\n .then(Mono.fromCallable(() -> \"New value\"))\n .doFinally(System.out::println);' New in 2023.1", + "markdown": "Reports zip operations that contains arguments with `Mono` return value inside a Reactor chain.\n\n\n`Zip` completes empty as soon as incoming `Mono` completes.\nThe quick-fix suggests replacing `zip()` and `zipWhen()` and `zipWith()` with `when`.\n\n**Example:**\n\n Mono.zip(Mono.just(1), Mono.fromRunnable(() -> System.out.println(\"value\")))\n .map(v -> \"New value\")\n .doFinally(System.out::println);\n\nAfter the quick-fix is applied:\n\n Mono.when(Mono.just(1), Mono.fromRunnable(() -> System.out.println(\"value\")))\n .then(Mono.fromCallable(() -> \"New value\"))\n .doFinally(System.out::println);\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactorZipWithMonoVoid", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Reactor", + "index": 153, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactiveStreamsTooLongSameOperatorsChain", + "shortDescription": { + "text": "Too long same methods chain" + }, + "fullDescription": { + "text": "Reports long Reactive Streams transformation chains. Each operator method call, such as 'map()' or 'filter()', creates some objects for those operators. Calling a long chain of operators on each subscription, for each stream element, may cause performance overhead. To avoid it, combine a long chain of calls into one operator call wherever possible. Example: 'Flux.just(1, 2, 3)\n .map(it -> it + 1)\n .map(it -> it + 2)\n .map(it -> it + 3)' After the quick-fix is applied: 'Flux.just(1, 2, 3)\n .map(it -> it + 1 + 2 + 3)' New in 2019.3", + "markdown": "Reports long Reactive Streams transformation chains.\n\nEach operator method call, such as `map()` or `filter()`, creates some objects for those operators.\nCalling a long chain of operators on each subscription, for each stream element, may cause performance overhead.\nTo avoid it, combine a long chain of calls into one operator call wherever possible.\n\n**Example:**\n\n\n Flux.just(1, 2, 3)\n .map(it -> it + 1)\n .map(it -> it + 2)\n .map(it -> it + 3)\n\nAfter the quick-fix is applied:\n\n\n Flux.just(1, 2, 3)\n .map(it -> it + 1 + 2 + 3)\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactiveStreamsTooLongSameOperatorsChain", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallingSubscribeInNonBlockingScope", + "shortDescription": { + "text": "Calling 'subscribe' in \"reactive\" methods" + }, + "fullDescription": { + "text": "Reports 'subscribe()' calls in \"reactive\" methods. Methods returning a 'Publisher' type (including 'Flux' and 'Mono') should not call the 'subscribe()' method directly because it can break the reactive call chain. Instead of using 'subscribe()', consider using composition operators like 'flatMap()', 'zip()', 'then()', and so on. Example: 'Flux stringFlux(){\n Flux flux = Flux.just(\"abc\");\n flux.subscribe(); // <- blocking 'subscribe' call in non-blocking context\n return flux;\n }'", + "markdown": "Reports `subscribe()` calls in \"reactive\" methods.\n\nMethods returning a `Publisher` type (including `Flux` and `Mono`)\nshould not call the `subscribe()` method directly because it can break the reactive call chain.\n\nInstead of using `subscribe()`, consider using composition operators like `flatMap()`,\n`zip()`, `then()`, and so on.\n\n**Example:**\n\n\n Flux stringFlux(){\n Flux flux = Flux.just(\"abc\");\n flux.subscribe(); // <- blocking 'subscribe' call in non-blocking context\n return flux;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CallingSubscribeInNonBlockingScope", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Reactor", + "index": 153, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactorTransformationOnMonoVoid", + "shortDescription": { + "text": "Calling transformation function on receiver with Mono type" + }, + "fullDescription": { + "text": "Reports transform operations called on 'Mono' value inside a Reactor chain. 'Mono' completes without any value, that's why there is nothing to invoke the transformation function on. The quick-fix suggests replacing 'map()' and 'flatMap()' with 'then()'. Example: 'Mono.when(Mono.just(1), Mono.just(2))\n .map(v -> \"New value\")\n .doFinally(System.out::println);' After the quick-fix is applied: 'Mono.when(Mono.just(1), Mono.just(2))\n .then(Mono.fromCallable(() -> \"New value\"))\n .doFinally(System.out::println);' New in 2023.1", + "markdown": "Reports transform operations called on `Mono` value inside a Reactor chain.\n\n\n`Mono` completes without any value, that's why there is nothing to invoke the transformation function on.\nThe quick-fix suggests replacing `map()` and `flatMap()` with `then()`.\n\n**Example:**\n\n Mono.when(Mono.just(1), Mono.just(2))\n .map(v -> \"New value\")\n .doFinally(System.out::println);\n\nAfter the quick-fix is applied:\n\n Mono.when(Mono.just(1), Mono.just(2))\n .then(Mono.fromCallable(() -> \"New value\"))\n .doFinally(System.out::println);\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactorTransformationOnMonoVoid", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Reactor", + "index": 153, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MutinyCallingSubscribeInNonBlockingScope", + "shortDescription": { + "text": "Calling 'subscribe' in \"reactive\" methods" + }, + "fullDescription": { + "text": "Reports 'subscribe()' calls in \"reactive\" methods. Methods returning a publisher (including 'Uni' and 'Multi') should not call the 'subscribe()' method directly because it can break the reactive call chain. Instead of using 'subscribe()', consider using composition operators like 'flatMap()', 'merge()', and so on. Example: 'Multi stringMulti(){\n Multi multi = Multi.createFrom().item(\"abc\");\n multi.subscribe(); // <- blocking 'subscribe' call in non-blocking context\n return multi;\n }'", + "markdown": "Reports `subscribe()` calls in \"reactive\" methods.\n\nMethods returning a publisher (including `Uni` and `Multi`)\nshould not call the `subscribe()` method directly because it can break the reactive call chain.\n\nInstead of using `subscribe()`, consider using composition operators like `flatMap()`,\n`merge()`, and so on.\n\n**Example:**\n\n\n Multi stringMulti(){\n Multi multi = Multi.createFrom().item(\"abc\");\n multi.subscribe(); // <- blocking 'subscribe' call in non-blocking context\n return multi;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MutinyCallingSubscribeInNonBlockingScope", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Mutiny", + "index": 195, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactiveStreamsSubscriberImplementation", + "shortDescription": { + "text": "Class implements Subscriber" + }, + "fullDescription": { + "text": "Reports classes that directly implement the 'Subscriber' interface. Consider using static generators from RxJava, Reactor or Mutiny, for example: 'Flux.just()', 'Flux.create()', 'Flux.generate()', 'Flux.from()' 'Mono.create()', 'Mono.from()', 'Mono.just()' 'Flowable.just()', 'Flowable.from()' 'Maybe.just()', 'Maybe.from()' 'Multi.createFrom()', 'Multi.createBy()' 'Uni.createFrom()'", + "markdown": "Reports classes that directly implement the `Subscriber` interface.\n\nConsider using static generators from RxJava, Reactor or Mutiny, for example:\n\n* `Flux.just()`, `Flux.create()`, `Flux.generate()`, `Flux.from()`\n* `Mono.create()`, `Mono.from()`, `Mono.just()`\n* `Flowable.just()`, `Flowable.from()`\n* `Maybe.just()`, `Maybe.from()`\n* `Multi.createFrom()`, `Multi.createBy()`\n* `Uni.createFrom()`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ReactiveStreamsSubscriberImplementation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Common", + "index": 46, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnfinishedStepVerifier", + "shortDescription": { + "text": "Unfinished StepVerifier" + }, + "fullDescription": { + "text": "Reports missing 'StepVerifier' terminal calls. Initiating 'Publisher' subscriptions and assertions requires calling a terminal verification method, such as 'verify()', 'verifyComplete()', and so on. Example: 'StepVerifier.create(Flux.just(1,2,3)).expectNext(1);' After the quick-fix is applied: 'StepVerifier.create(Flux.just(1,2,3)).expectNext(1).verifyComplete();'", + "markdown": "Reports missing `StepVerifier` terminal calls.\n\n\nInitiating `Publisher` subscriptions and assertions requires calling a terminal verification method,\nsuch as `verify()`, `verifyComplete()`, and so on.\n\n**Example:**\n\n\n StepVerifier.create(Flux.just(1,2,3)).expectNext(1);\n\nAfter the quick-fix is applied:\n\n\n StepVerifier.create(Flux.just(1,2,3)).expectNext(1).verifyComplete();\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnfinishedStepVerifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Reactor", + "index": 153, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReactorAutomaticDebugger", + "shortDescription": { + "text": "Unnecessary debug initialization" + }, + "fullDescription": { + "text": "Reports redundant 'ReactorDebugAgent.init()' calls. IDE can automatically initialize the Reactor Debug mode, so users don't need to call 'ReactorDebugAgent.init()' or 'Hooks.onOperatorDebug()' explicitly. Also, calling both 'ReactorDebugAgent.init()' and 'Hooks.onOperatorDebug()' causes doubled debugging stack frames generated by Reactor.", + "markdown": "Reports redundant `ReactorDebugAgent.init()` calls.\n\n\nIDE can automatically initialize the Reactor Debug mode, so users don't need to call `ReactorDebugAgent.init()` or\n`Hooks.onOperatorDebug()` explicitly.\n\nAlso, calling both `ReactorDebugAgent.init()` and `Hooks.onOperatorDebug()` causes doubled debugging stack frames\ngenerated by Reactor." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "ReactorAutomaticDebugger", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Reactive Streams/Reactor", + "index": 153, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.gradle", + "version": "241.17569", + "rules": [ + { + "id": "ForeignDelegate", + "shortDescription": { + "text": "Possibly misplaced call to Gradle method" + }, + "fullDescription": { + "text": "Detects possibly misplaced calls to Gradle methods. Gradle buildscripts comprise a lot of nested closures, making the code structure similar to a markup language. Due to the behavior of DSL languages, the methods that you can write in the outer closures are also available in the inner ones. Such methods may have no meaning when written outside their scope. Sometimes it may be hard to detect this situation. This inspection aims to detect such methods. Example: 'repositories {\n // the delegate of 'repositories' has method 'exclusiveContent', which can be written here\n maven {\n // the delegate of 'maven' has method 'content', which can be written here\n // but 'exclusiveContent' is also available\n exclusiveContent {} // reports 'exclusiveContent'\n }\n}'", + "markdown": "Detects possibly misplaced calls to Gradle methods.\nGradle buildscripts comprise a lot of nested closures, making the code structure similar to a markup language. Due to the behavior of DSL languages, the methods that you can write in the outer closures are also available in the inner ones. Such methods may have no meaning when written outside their scope. \nSometimes it may be hard to detect this situation. This inspection aims to detect such methods.\n\n**Example:**\n\n\n repositories {\n // the delegate of 'repositories' has method 'exclusiveContent', which can be written here\n maven {\n // the delegate of 'maven' has method 'content', which can be written here\n // but 'exclusiveContent' is also available\n exclusiveContent {} // reports 'exclusiveContent'\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ForeignDelegate", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 49, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectPluginDslStructure", + "shortDescription": { + "text": "Plugin DSL structure" + }, + "fullDescription": { + "text": "Detects disallowed statements before 'plugins {}' block. Due to the limitations of Gradle Plugin DSL, only a restricted set of Groovy statements is available before ''plugins {}'' block. The only options are ''buildscript {}'', ''pluginManagement {}'' and other ''plugins {}''. See Gradle documentation Example: 'import foo.bar.Baz\nplugins {} // reports 'plugins'\nplugins {\n foo() // reports 'foo'\n id 'java'\n}'", + "markdown": "Detects disallowed statements before 'plugins {}' block.\nDue to the limitations of Gradle Plugin DSL, only a restricted set of Groovy statements is available before '`plugins {}`' block. The only options are '`buildscript {}`', '`pluginManagement {}`' and other '`plugins {}`'. \n[See Gradle documentation](https://docs.gradle.org/current/userguide/plugins.html#plugins_dsl_limitations)\n\n**Example:**\n\n\n import foo.bar.Baz\n plugins {} // reports 'plugins'\n plugins {\n foo() // reports 'foo'\n id 'java'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "IncorrectPluginDslStructure", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Validity issues", + "index": 54, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DependencyNotationArgument", + "shortDescription": { + "text": "Unrecognized dependency notation" + }, + "fullDescription": { + "text": "Detects incorrect dependency notations. The following types/formats are supported by Gradle: Instances of 'Dependency'; 'String' or 'CharSequence' values, for example ''org.gradle:gradle-core:1.0''; Maps, for example '[group: 'org.gradle', name: 'gradle-core', version: '1.0']'; FileCollections, for example 'files('some.jar', 'someOther.jar')'; Projects, for example 'project(':some:project:path')'; 'ClassPathNotation', for example 'gradleApi()'; Lists of dependency notations, for example '['org.gradle:gradle-core:1.0']'; (Gradle 7.0+) Version catalog accessors, for example 'libs.groovy.core'. See Gradle documentation Example: 'dependencies {\n implementation(1) // reports '1'\n}'", + "markdown": "Detects incorrect dependency notations.\nThe following types/formats are supported by Gradle:\n\n* Instances of `Dependency`;\n* `String` or `CharSequence` values, for example `'org.gradle:gradle-core:1.0'`;\n* Maps, for example `[group: 'org.gradle', name: 'gradle-core', version: '1.0']`;\n* FileCollections, for example `files('some.jar', 'someOther.jar')`;\n* Projects, for example `project(':some:project:path')`;\n* `ClassPathNotation`, for example `gradleApi()`;\n* Lists of dependency notations, for example `['org.gradle:gradle-core:1.0']`;\n* (Gradle 7.0+) [Version catalog accessors](https://docs.gradle.org/current/userguide/platforms.html), for example `libs.groovy.core`.\n\n[See Gradle documentation](https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:dependency-types)\n\n**Example:**\n\n\n dependencies {\n implementation(1) // reports '1'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DependencyNotationArgument", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 49, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedVersionCatalogEntry", + "shortDescription": { + "text": "Unused version catalog entry" + }, + "fullDescription": { + "text": "Detects unused keys in TOML descriptors of version catalogs. Example: '// build.gradle\ndependencies {\n implementation libs.foo.bar\n}' '# libs.versions.toml\n[libraries]\nfoo-bar = \"com.gradle:example:1.0.0\"\nbar-baz = \"com.gradle:example:2.0.0\" # highlights bar-baz'", + "markdown": "Detects unused keys in TOML descriptors of version catalogs.\n\n**Example:**\n\n\n // build.gradle\n dependencies {\n implementation libs.foo.bar\n }\n\n\n # libs.versions.toml\n [libraries]\n foo-bar = \"com.gradle:example:1.0.0\"\n bar-baz = \"com.gradle:example:2.0.0\" # highlights bar-baz\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedVersionCatalogEntry", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Style", + "index": 167, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleRepositoryUrls", + "shortDescription": { + "text": "Multiple repository urls" + }, + "fullDescription": { + "text": "Reports the usage of multiple URLs per repository (maven or ivy) block. The problem is that only one URL can be picked up for the repository, the other URLs will be ignored.", + "markdown": "Reports the usage of multiple URLs per repository (maven or ivy) block. The problem is that only one URL can be picked up for the repository, the other URLs will be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MultipleRepositoryUrls", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 49, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BintrayPublishingPlugin", + "shortDescription": { + "text": "Bintray publishing plugin may stop working on May 1st, 2021" + }, + "fullDescription": { + "text": "Detects usages of Gradle plugin 'com.jfrog.bintray'. The plugin is used for publishing build results to Bintray. Publishing to Bintray service is disabled.", + "markdown": "Detects usages of Gradle plugin `com.jfrog.bintray`.\nThe plugin is used for publishing build results to Bintray.\nPublishing to\n[Bintray](https://www.jfrog.com/confluence/display/BT/Welcome+to+JFrog+Bintray) service is disabled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BintrayPublishingPlugin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 49, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedConfigurations", + "shortDescription": { + "text": "Deprecated configurations" + }, + "fullDescription": { + "text": "Detects usage of configuration methods that were deprecated. Configuration methods may be deprecated because of two possible reasons: The Gradle API has evolved, so old method choices should be avoided; Some plugin provides a better version of the deprecated configuration method. Most likely there will be an alternative for the deprecated method. Example: 'plugins {\n id 'java'\n}\n\ndependencies {\n archive 'org.gradle.api:gradle:1.0' // reports 'archive'\n}'", + "markdown": "Detects usage of configuration methods that were deprecated.\nConfiguration methods may be deprecated because of two possible reasons:\n\n* The Gradle API has evolved, so old method choices should be avoided;\n* Some plugin provides a better version of the deprecated configuration method.\n\nMost likely there will be an alternative for the deprecated method.\n\n**Example:**\n\n\n plugins {\n id 'java'\n }\n\n dependencies {\n archive 'org.gradle.api:gradle:1.0' // reports 'archive'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedConfigurations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Validity issues", + "index": 54, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JCenterRepository", + "shortDescription": { + "text": "Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022" + }, + "fullDescription": { + "text": "Detects usages of the JCenter repository to resolve dependencies. Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022.", + "markdown": "Detects usages of the JCenter repository to resolve dependencies. Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JCenterRepository", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 49, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfigurationAvoidance", + "shortDescription": { + "text": "Configuration avoidance" + }, + "fullDescription": { + "text": "(Gradle 4.9+) Detects usage of API that interacts with tasks eagerly. Eager interaction with tasks implies some inconveniences: The user should manually set up all dependencies between tasks; In the configuration phase, all the tasks accessed via the eager API become configured, even if they are not executed afterwards. It results in performance degradation. Eventually, the eager API will be deprecated in favor of the lazy one. For a migration guide, see the Gradle documentation. Example: 'task foo { // reports 'task', suggests replacing it with 'task.register'\n // ...\n}'", + "markdown": "(Gradle 4.9+) Detects usage of API that interacts with tasks eagerly.\n\nEager interaction with tasks implies some inconveniences:\n\n* The user should manually set up all dependencies between tasks;\n* In the [configuration phase](https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:build_phases), all the tasks accessed via the eager API become configured, even if they are not executed afterwards. It results in performance degradation.\n\nEventually, the eager API will be deprecated in favor of the lazy one.\n\nFor a migration guide, see the\n[Gradle documentation](https://docs.gradle.org/current/userguide/task_configuration_avoidance.html).\n\n**Example:**\n\n task foo { // reports 'task', suggests replacing it with 'task.register'\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfigurationAvoidance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Best practises", + "index": 204, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.freemarker", + "version": "241.17569", + "rules": [ + { + "id": "FtlFileReferencesInspection", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports unresolved FreeMarker file references in '#include' and '#import' directives.", + "markdown": "Reports unresolved FreeMarker file references in `#include` and `#import` directives." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FtlFileReferencesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlImportCallInspection", + "shortDescription": { + "text": "Unresolved external call" + }, + "fullDescription": { + "text": "Reports unresolved '#macro' and '#function' directives located in other files. The quick-fix suggests using '#import' or '#include' for the required files.", + "markdown": "Reports unresolved `#macro` and `#function` directives located in other files.\n\nThe quick-fix suggests using `#import` or `#include` for the required files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FtlImportCallInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlCallsInspection", + "shortDescription": { + "text": "Invalid call directive" + }, + "fullDescription": { + "text": "Reports FreeMarker calls that do not match the macro declaration (for example, missing parameters, wrong type, and so on).", + "markdown": "Reports FreeMarker calls that do not match the macro declaration (for example, missing parameters, wrong type, and so on)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FtlCallsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlTypesInspection", + "shortDescription": { + "text": "Incorrect expression type" + }, + "fullDescription": { + "text": "Reports incorrect FreeMarker expression types.", + "markdown": "Reports incorrect FreeMarker expression types." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FtlTypesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlLanguageInspection", + "shortDescription": { + "text": "Built-in errors" + }, + "fullDescription": { + "text": "Reports FreeMarker language errors.", + "markdown": "Reports FreeMarker language errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FtlLanguageInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlReferencesInspection", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports unresolved FreeMarker references.", + "markdown": "Reports unresolved FreeMarker references." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FtlReferencesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlDeprecatedBuiltInsInspection", + "shortDescription": { + "text": "Built-in is deprecated" + }, + "fullDescription": { + "text": "Reports deprecated built-ins (for example, 'default', 'exists', 'if_exists', 'web_safe').", + "markdown": "Reports deprecated built-ins (for example, `default`, `exists`, `if_exists`, `web_safe`)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FtlDeprecatedBuiltInsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FtlWellformednessInspection", + "shortDescription": { + "text": "Directive is malformed" + }, + "fullDescription": { + "text": "Reports malformed FreeMarker directives (for example, wrong nesting, missing closing tags, and so on).", + "markdown": "Reports malformed FreeMarker directives (for example, wrong nesting, missing closing tags, and so on)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FtlWellformednessInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "FreeMarker", + "index": 51, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.editorconfig.editorconfigjetbrains", + "version": "241.17569", + "rules": [ + { + "id": "EditorConfigNumerousWildcards", + "shortDescription": { + "text": "Too many wildcards" + }, + "fullDescription": { + "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.", + "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigNumerousWildcards", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigKeyCorrectness", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins.", + "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigKeyCorrectness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEncoding", + "shortDescription": { + "text": "File encoding doesn't match EditorConfig charset" + }, + "fullDescription": { + "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.", + "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptyHeader", + "shortDescription": { + "text": "Empty header" + }, + "fullDescription": { + "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'.", + "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigEmptyHeader", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigMissingRequiredDeclaration", + "shortDescription": { + "text": "Required declarations are missing" + }, + "fullDescription": { + "text": "Reports properties that miss the required declarations. Refer to the documentation for more information.", + "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigMissingRequiredDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigSpaceInHeader", + "shortDescription": { + "text": "Space in file pattern" + }, + "fullDescription": { + "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.", + "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigSpaceInHeader", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigOptionRedundancy", + "shortDescription": { + "text": "Redundant property" + }, + "fullDescription": { + "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value.", + "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigOptionRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPartialOverride", + "shortDescription": { + "text": "Overlapping sections" + }, + "fullDescription": { + "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”.", + "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\"." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigPartialOverride", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigListAcceptability", + "shortDescription": { + "text": "Unexpected value list" + }, + "fullDescription": { + "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.", + "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigListAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternEnumerationRedundancy", + "shortDescription": { + "text": "Unnecessary braces" + }, + "fullDescription": { + "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}' in contrast to a list containing multiple patterns, for example '{foo,bar}'. In this case braces are handled as a part of the name. For example, the pattern '*.{a}' will match the file 'my.{a}' but not 'my.a'.", + "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}` in contrast to a list containing multiple patterns, for example `{foo,bar}`. In this case braces are handled as a part of the name. For example, the pattern `*.{a}` will match the file `my.{a}` but not `my.a`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPatternEnumerationRedundancy", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPairAcceptability", + "shortDescription": { + "text": "Unexpected key-value pair" + }, + "fullDescription": { + "text": "Reports key-value pairs that are not allowed in the current context.", + "markdown": "Reports key-value pairs that are not allowed in the current context." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPairAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigNoMatchingFiles", + "shortDescription": { + "text": "No matching files" + }, + "fullDescription": { + "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located.", + "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigNoMatchingFiles", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigWildcardRedundancy", + "shortDescription": { + "text": "Redundant wildcard" + }, + "fullDescription": { + "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed.", + "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigWildcardRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigHeaderUniqueness", + "shortDescription": { + "text": "EditorConfig section is not unique" + }, + "fullDescription": { + "text": "Reports sections that define the same file pattern as other sections.", + "markdown": "Reports sections that define the same file pattern as other sections." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigHeaderUniqueness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueCorrectness", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.", + "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused declarations. Such declarations can be removed.", + "markdown": "Reports unused declarations. Such declarations can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigUnusedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigRootDeclarationUniqueness", + "shortDescription": { + "text": "Extra top-level declaration" + }, + "fullDescription": { + "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.", + "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigRootDeclarationCorrectness", + "shortDescription": { + "text": "Unexpected top-level declaration" + }, + "fullDescription": { + "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file.", + "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternRedundancy", + "shortDescription": { + "text": "Duplicate or redundant pattern" + }, + "fullDescription": { + "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed.", + "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigPatternRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigDeprecatedDescriptor", + "shortDescription": { + "text": "Deprecated property" + }, + "fullDescription": { + "text": "Reports EditorConfig properties that are no longer supported.", + "markdown": "Reports EditorConfig properties that are no longer supported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigDeprecatedDescriptor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowedOption", + "shortDescription": { + "text": "Overridden property" + }, + "fullDescription": { + "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'.", + "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowedOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueUniqueness", + "shortDescription": { + "text": "Non-unique list value" + }, + "fullDescription": { + "text": "Reports duplicates in lists of values.", + "markdown": "Reports duplicates in lists of values." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnexpectedComma", + "shortDescription": { + "text": "Unexpected comma" + }, + "fullDescription": { + "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.", + "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigUnexpectedComma", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigCharClassRedundancy", + "shortDescription": { + "text": "Unnecessary character class" + }, + "fullDescription": { + "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'.", + "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptySection", + "shortDescription": { + "text": "Empty section" + }, + "fullDescription": { + "text": "Reports sections that do not contain any EditorConfig properties.", + "markdown": "Reports sections that do not contain any EditorConfig properties." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEmptySection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowingOption", + "shortDescription": { + "text": "Overriding property" + }, + "fullDescription": { + "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored.", + "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowingOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigReferenceCorrectness", + "shortDescription": { + "text": "Invalid reference" + }, + "fullDescription": { + "text": "Reports identifiers that are either unknown or have a wrong type.", + "markdown": "Reports identifiers that are either unknown or have a wrong type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigReferenceCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigVerifyByCore", + "shortDescription": { + "text": "Invalid .editorconfig file" + }, + "fullDescription": { + "text": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied.", + "markdown": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigVerifyByCore", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigCharClassLetterRedundancy", + "shortDescription": { + "text": "Duplicate character class letter" + }, + "fullDescription": { + "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'.", + "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassLetterRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 53, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.data", + "version": "241.17569", + "rules": [ + { + "id": "SpringDataMongoDBJsonFieldInspection", + "shortDescription": { + "text": "Spring Data MongoDB JSON unresolved fields" + }, + "fullDescription": { + "text": "Reports unresolved document fields specified inside of 'org.springframework.data.mongodb.repository.Query' annotation. Example: '@Document\nclass User {\n @Field\n String name;\n}\n\ninterface UserRepository extends Repository {\n @Query(\"{ age: { $gt: ?0 } }\") // 'age' is highlighted as unresolved\n List findUsersOlderThan(Integer age);\n}'", + "markdown": "Reports unresolved document fields specified inside of `org.springframework.data.mongodb.repository.Query` annotation.\n\n**Example:**\n\n\n @Document\n class User {\n @Field\n String name;\n }\n\n interface UserRepository extends Repository {\n @Query(\"{ age: { $gt: ?0 } }\") // 'age' is highlighted as unresolved\n List findUsersOlderThan(Integer age);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringDataMongoDBJsonFieldInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Data", + "index": 59, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringDataMethodInconsistencyInspection", + "shortDescription": { + "text": "Spring Data repository method errors" + }, + "fullDescription": { + "text": "Reports Spring Data CRUD repository methods for which the Spring Data Query builder cannot generate the corresponding query. Example: 'interface PersonRepository extends Repository {\n List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);\n List findByEmailUnknownAndLastname(EmailAddress emailAddress, String lastname); // Cannot resolve property 'Unknown'\n List findByAndLastname(EmailAddress emailAddress, String lastname); // Missing property name\n\n List findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);\n List findPeopleDistinctByUnknownOrFirstname(String lastname, String firstname); // Cannot resolve property 'Unknown'\n\n List findByLastnameOrderByFirstnameAsc(String lastname);\n List findByLastnameOrderByUnknownDesc(String lastname); // Cannot resolve property 'Unknown'\n}'", + "markdown": "Reports Spring Data CRUD repository methods for which the\n[Spring Data Query](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation)\nbuilder cannot generate the corresponding query.\n\n**Example:**\n\n\n interface PersonRepository extends Repository {\n List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);\n List findByEmailUnknownAndLastname(EmailAddress emailAddress, String lastname); // Cannot resolve property 'Unknown'\n List findByAndLastname(EmailAddress emailAddress, String lastname); // Missing property name\n\n List findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);\n List findPeopleDistinctByUnknownOrFirstname(String lastname, String firstname); // Cannot resolve property 'Unknown'\n\n List findByLastnameOrderByFirstnameAsc(String lastname);\n List findByLastnameOrderByUnknownDesc(String lastname); // Cannot resolve property 'Unknown'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringDataMethodInconsistencyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Data", + "index": 59, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringDataRepositoryMethodParametersInspection", + "shortDescription": { + "text": "Spring Data repository method parameters errors" + }, + "fullDescription": { + "text": "Reports Spring Data CRUD repository method parameters with incorrect types. Example: 'public class Person {\n private int id;\n private String lastname;\n private Address address;\n }\n\n public class Address {\n private int zipCode;\n }\n\n public interface CustomerRepository extends CrudRepository {\n List findByAddress(String lastname); // 'Address' type expected\n List findByAddressZipCode(String str); // 'int' type expected\n }'", + "markdown": "Reports Spring Data CRUD repository method parameters with incorrect types.\n\n**Example:**\n\n\n public class Person {\n private int id;\n private String lastname;\n private Address address;\n }\n\n public class Address {\n private int zipCode;\n }\n\n public interface CustomerRepository extends CrudRepository {\n List findByAddress(String lastname); // 'Address' type expected\n List findByAddressZipCode(String str); // 'int' type expected\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringDataRepositoryMethodParametersInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Data", + "index": 59, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringDataRepositoryMethodReturnTypeInspection", + "shortDescription": { + "text": "Spring Data repository method return type errors" + }, + "fullDescription": { + "text": "Reports Spring Data CRUD repository methods with incorrect return types. The following return types are supported: 'void' Primitive types Wrapper types 'T' when the query method is expected to return one result at most. Returns 'null' if there are no results and throws 'IncorrectResultSizeDataAccessException' if there is more than one result. 'java.util.List' or any common 'Iterable' type 'java.util.stream.Stream' 'java.util.Optional' or 'scala.Option' when the query method is expected to return one result at most. Returns 'Optional.empty()' or 'Optional.absent()' if there are no results and throws 'IncorrectResultSizeDataAccessException' if there is more than one result. 'io.micronaut.data.model.Page' 'io.micronaut.data.model.Slice' 'java.util.concurrent.Future', 'java.util.concurrent.CompletableFuture', or 'ListenableFuture' if the method is annotated with '@Async' and Spring asynchronous method execution is enabled 'GeoResults', 'GeoResult', or 'GeoPage'", + "markdown": "Reports Spring Data CRUD repository methods with incorrect return types.\n\nThe following return types are supported:\n* `void`\n* Primitive types\n* Wrapper types\n* `T` when the query method is expected to return one result at most. Returns `null` if there are no results and throws `IncorrectResultSizeDataAccessException` if there is more than one result.\n* `java.util.List` or any common `Iterable` type\n* `java.util.stream.Stream`\n* `java.util.Optional` or `scala.Option` when the query method is expected to return one result at most. Returns `Optional.empty()` or `Optional.absent()` if there are no results and throws `IncorrectResultSizeDataAccessException` if there is more than one result.\n* `io.micronaut.data.model.Page`\n* `io.micronaut.data.model.Slice`\n* `java.util.concurrent.Future`, `java.util.concurrent.CompletableFuture`, or `ListenableFuture` if the method is annotated with `@Async` and Spring asynchronous method execution is enabled\n* `GeoResults`, `GeoResult`, or `GeoPage`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringDataRepositoryMethodReturnTypeInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Data", + "index": 59, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "DevKit", + "version": "241.17569", + "rules": [ + { + "id": "WorkspaceEntityMutableField", + "shortDescription": { + "text": "Unsupported 'var' field in entity" + }, + "fullDescription": { + "text": "Detects unsupported 'var' fields in the inheritors of 'WorkspaceEntity' interface Interface implementing 'WorkspaceEntity' have to have only 'val' fields because it's immutable. Implementation of 'WorkspaceEntity.Builder' will be generated for the mutation", + "markdown": "Detects unsupported `var` fields in the inheritors of `WorkspaceEntity` interface\n\n\nInterface implementing `WorkspaceEntity` have to have only `val` fields because it's immutable.\nImplementation of `WorkspaceEntity.Builder` will be generated for the mutation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WorkspaceEntityMutableField", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Workspace model", + "index": 64, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MigrateToOptControl", + "shortDescription": { + "text": "Migrate to getOptionPane()" + }, + "fullDescription": { + "text": "Reports 'createOptionsPanel()' methods in inspection implementation, which can be automatically converted to 'getOptionsPane()'. Creating inspection options control via 'createOptionsPanel()' is deprecated, in favor of declarative control description 'getOptionsPane()'. The inspection checks 'createOptionsPanel()' implementations and if they use InspectionOptionsPanel or its descendants and are simple enough, then it suggests to convert to the new API automatically. This inspection currently supports Java and Kotlin only. It cannot convert the code that uses Kotlin methods like 'apply' or 'also'. Try to inline them. New in 2023.1", + "markdown": "Reports `createOptionsPanel()` methods in inspection implementation, which can be automatically converted to `getOptionsPane()`.\n\n\nCreating inspection options control via `createOptionsPanel()` is deprecated,\nin favor of declarative control description `getOptionsPane()`.\nThe inspection checks `createOptionsPanel()` implementations and if they use\nInspectionOptionsPanel or its descendants and are simple enough, then it suggests to convert to\nthe new API automatically.\n\n\nThis inspection currently supports Java and Kotlin only.\nIt cannot convert the code that uses Kotlin methods like `apply` or `also`. Try to inline them.\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MigrateToOptControl", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlCapitalization", + "shortDescription": { + "text": "Plugin.xml text capitalization" + }, + "fullDescription": { + "text": "Reports text capitalization problems in 'plugin.xml'. The following elements are checked: '' ', ' ', ' extension point properties annotated with 'org.jetbrains.annotations.Nls' specifying required 'capitalization' Please see Capitalization in IntelliJ Platform UI Guidelines for more information.", + "markdown": "Reports text capitalization problems in `plugin.xml`.\n\n\nThe following elements are checked:\n\n* ``\n* `, `\n* `, `\n* extension point properties annotated with `org.jetbrains.annotations.Nls` specifying required `capitalization`\n\n\nPlease see [Capitalization](https://jetbrains.design/intellij/text/capitalization/) in IntelliJ Platform UI Guidelines for more\ninformation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PluginXmlCapitalization", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseDPIAwareBorders", + "shortDescription": { + "text": "Use DPI-aware borders" + }, + "fullDescription": { + "text": "Reports usages of 'javax.swing.border.EmptyBorder' and 'JBUI.Borders.emptyXyz()' that can be simplified. The 'EmptyBorder' instances are not DPI-aware and can result in UI layout problems. Quick fix performs replacement with 'JBUI.Borders.empty()' or simplifies the expression. Example: '// bad:\nBorder border1 = new EmptyBorder(1, 2, 3, 4);\nBorder border2 = new EmptyBorder(1, 2, 1, 2);\nBorder border3 = new EmptyBorder(1, 0, 0, 0);\n\n// good:\nBorder border1 = JBUI.Borders.empty(1, 2, 3, 4);\nBorder border2 = JBUI.Borders.empty(1, 2);\nBorder border3 = JBUI.Borders.emptyTop(1);'", + "markdown": "Reports usages of `javax.swing.border.EmptyBorder` and `JBUI.Borders.emptyXyz()` that can be simplified.\n\n\nThe `EmptyBorder` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.Borders.empty()` or simplifies the expression.\n\nExample:\n\n\n // bad:\n Border border1 = new EmptyBorder(1, 2, 3, 4);\n Border border2 = new EmptyBorder(1, 2, 1, 2);\n Border border3 = new EmptyBorder(1, 0, 0, 0);\n\n // good:\n Border border1 = JBUI.Borders.empty(1, 2, 3, 4);\n Border border2 = JBUI.Borders.empty(1, 2);\n Border border3 = JBUI.Borders.emptyTop(1);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseDPIAwareBorders", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtensionRegisteredAsServiceOrComponent", + "shortDescription": { + "text": "Extension registered as service/component" + }, + "fullDescription": { + "text": "Reports extension implementation being additionally registered as a service/component. While there can be multiple extension instances, the IntelliJ Platform ensures that only one instance of a service/component is loaded, thus registering the same class as both an extension and a service/component may cause issues. New in 2023.2", + "markdown": "Reports extension implementation being additionally registered as a service/component.\n\n\nWhile there can be multiple extension instances, the IntelliJ Platform ensures that only one instance of a service/component is loaded,\nthus registering the same class as both an extension and a service/component may cause issues.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ExtensionRegisteredAsServiceOrComponent", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonDefaultConstructor", + "shortDescription": { + "text": "Non-default constructors for service and extension class" + }, + "fullDescription": { + "text": "Reports extension/service class having a non-default (empty) constructor. Other dependencies should be acquired when needed in corresponding methods only. Constructor having 'Project' for extension/service on the corresponding level is allowed.", + "markdown": "Reports extension/service class having a non-default (empty) constructor.\n\n\nOther dependencies should be acquired when needed in corresponding methods only.\nConstructor having `Project` for extension/service on the corresponding level is allowed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "NonDefaultConstructor", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PresentationAnnotation", + "shortDescription": { + "text": "Invalid icon path in @Presentation" + }, + "fullDescription": { + "text": "Reports invalid and deprecated value for 'icon' attribute in 'com.intellij.ide.presentation.Presentation' annotation.", + "markdown": "Reports invalid and deprecated value for `icon` attribute in `com.intellij.ide.presentation.Presentation` annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PresentationAnnotation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseVirtualFileEquals", + "shortDescription": { + "text": "Use 'VirtualFile#equals(Object)'" + }, + "fullDescription": { + "text": "Reports comparing 'VirtualFile' instances using '=='. Replace with 'equals()' call.", + "markdown": "Reports comparing `VirtualFile` instances using `==`.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseVirtualFileEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedLightServiceLevelAndCtor", + "shortDescription": { + "text": "Mismatch between light service level and its constructor" + }, + "fullDescription": { + "text": "Reports mismatches between light service levels and its constructors. The following problems are reported: A light service class has a constructor with two parameters of types 'com.intellij.openapi.project.Project' and 'kotlinx.coroutines.CoroutineScope', or one parameter of type 'Project' is not annotated as a project-level service. A light service class annotated as an application-level service does not have a no-arg constructor, nor a constructor with one parameter of type 'CoroutineScope'. Example (Kotlin): '@Service // Suggest specifying 'Service.Level.PROJECT' parameter in '@Service' annotation\nclass MyService(val project: Project) // Suggest removing the parameter from constructor 'MyService'' After applying the quick-fix that suggests specifying 'Service.Level.PROJECT' parameter in '@Service' annotation is applied: '@Service(Service.Level.PROJECT)\nclass MyService(val project: Project)' After applying the quick-fix that suggests removing the parameter from constructor 'MyService': '@Service\nclass MyService()' New in 2023.2", + "markdown": "Reports mismatches between light service levels and its constructors.\n\nThe following problems are reported:\n\n* A light service class has a constructor with two parameters of types `com.intellij.openapi.project.Project` and `kotlinx.coroutines.CoroutineScope`, or one parameter of type `Project` is not annotated as a project-level service.\n* A light service class annotated as an application-level service does not have a no-arg constructor, nor a constructor with one parameter of type `CoroutineScope`.\n\nExample (Kotlin):\n\n\n @Service // Suggest specifying 'Service.Level.PROJECT' parameter in '@Service' annotation\n class MyService(val project: Project) // Suggest removing the parameter from constructor 'MyService'\n\nAfter applying the quick-fix that suggests specifying 'Service.Level.PROJECT' parameter in '@Service' annotation is applied:\n\n\n @Service(Service.Level.PROJECT)\n class MyService(val project: Project)\n\nAfter applying the quick-fix that suggests removing the parameter from constructor 'MyService':\n\n\n @Service\n class MyService()\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MismatchedLightServiceLevelAndCtor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntentionDescriptionNotFoundInspection", + "shortDescription": { + "text": "Intention description checker" + }, + "fullDescription": { + "text": "Reports intentions that are missing an HTML description file, 'before.template' file or 'after.template' file. These are shown in Settings | Editor | Intentions. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports intentions that are missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| Intentions](settings://preferences.intentionPowerPack).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IntentionDescriptionNotFoundInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 138, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingRecentApi", + "shortDescription": { + "text": "Usage of IntelliJ API not available in older IDEs" + }, + "fullDescription": { + "text": "Reports usages of IntelliJ Platform API introduced in a version newer than the one specified in '' '@since-build' in 'plugin.xml'. Using such API may lead to incompatibilities of the plugin with older IDE versions. To avoid possible issues when running the plugin in older IDE versions, increase 'since-build' accordingly, or remove usages of this API. See Build Number Ranges in IntelliJ Platform Plugin SDK docs for more details. Configure the inspection: If '' '@since/until-build' attributes are not specified in 'plugin.xml', set Since/Until explicitly.", + "markdown": "Reports usages of IntelliJ Platform API introduced in a version *newer* than the one specified in `` `@since-build` in `plugin.xml`.\n\n\nUsing such API may lead to incompatibilities of the plugin with older IDE versions.\n\n\nTo avoid possible issues when running the plugin in older IDE versions, increase `since-build` accordingly,\nor remove usages of this API.\n\n\nSee [Build Number Ranges](https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html) in IntelliJ Platform Plugin SDK docs for more details.\n\nConfigure the inspection:\nIf `` `@since/until-build` attributes are not specified in `plugin.xml`, set **Since** /**Until** explicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MissingRecentApi", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinObjectExtensionRegistration", + "shortDescription": { + "text": "Extension class is a Kotlin object" + }, + "fullDescription": { + "text": "Reports extensions which are instantiated by the IntelliJ Platform, but are declared as Kotlin objects. Extensions lifecycle is managed by the IntelliJ Platform. Using Kotlin objects for extension registration may cause creation of unnecessary extension instances and make plugin unloading impossible. Example Extension registration: '' Extension implementation: '// bad:\nobject MyAnnotator : Annotator {\n ...\n}\n\n// good:\nclass MyAnnotator : Annotator {\n ...\n}' New in 2023.1", + "markdown": "Reports extensions which are instantiated by the IntelliJ Platform, but are declared as Kotlin objects.\n\n\nExtensions lifecycle is managed by the IntelliJ Platform.\nUsing Kotlin objects for extension registration may cause creation of unnecessary extension instances and make plugin unloading\nimpossible.\n\nExample\n-------\n\nExtension registration:\n\n\n \n\nExtension implementation:\n\n\n // bad:\n object MyAnnotator : Annotator {\n ...\n }\n\n // good:\n class MyAnnotator : Annotator {\n ...\n }\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "KotlinObjectExtensionRegistration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableServiceRetrieving", + "shortDescription": { + "text": "Simplifiable service retrieving" + }, + "fullDescription": { + "text": "Reports service getting calls that can be replaced with a calls to an existing static 'getInstance()' or 'getInstance(Project)' methods. Example (Java): '@Service\npublic class MyAppService {\n public static MyAppService getInstance() {\n return ApplicationManager.getApplication().getService(MyAppService.class);\n }\n}\n\n@Service(Service.Level.PROJECT)\npublic class MyProjectService {\n public static MyProjectService getInstance(Project project) {\n return project.getService(MyProjectService.class);\n }\n}' '// Bad:\nMyAppService applicationService = ApplicationManager.getApplication().getService(MyAppService.class);\nMyProjectService projectService = project.getService(MyProjectService.class);' '// Good:\nMyAppService applicationService = MyAppService.getInstance();\nMyProjectService projectService = MyProjectService.getInstance(project);' New in 2023.2", + "markdown": "Reports service getting calls that can be replaced with a calls to an existing static `getInstance()` or `getInstance(Project)` methods.\n\nExample (Java):\n\n\n @Service\n public class MyAppService {\n public static MyAppService getInstance() {\n return ApplicationManager.getApplication().getService(MyAppService.class);\n }\n }\n\n @Service(Service.Level.PROJECT)\n public class MyProjectService {\n public static MyProjectService getInstance(Project project) {\n return project.getService(MyProjectService.class);\n }\n }\n\n\n // Bad:\n MyAppService applicationService = ApplicationManager.getApplication().getService(MyAppService.class);\n MyProjectService projectService = project.getService(MyProjectService.class);\n\n\n // Good:\n MyAppService applicationService = MyAppService.getInstance();\n MyProjectService projectService = MyProjectService.getInstance(project);\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SimplifiableServiceRetrieving", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlExtensionRegistration", + "shortDescription": { + "text": "Plugin.xml extension registration" + }, + "fullDescription": { + "text": "Reports problems with extension registration in 'plugin.xml'. The following problems are reported: Missing 'language' declaration. If the extension does not target a specific language, use quick fix to create an explicit declaration for \"any language\". Inspections: missing attributes Services: redundant 'serviceInterface' declaration 'com.intellij.stubElementTypeHolder' without 'externalIdPrefix', see Stub Indexes 'com.intellij.statusBarWidgetFactory' without 'id' New in 2022.3", + "markdown": "Reports problems with extension registration in `plugin.xml`.\n\n\nThe following problems are reported:\n\n* Missing `language` declaration. If the extension does not target a specific language, use quick fix to create an explicit declaration for \"any language\".\n* Inspections: missing attributes\n* Services: redundant `serviceInterface` declaration\n* `com.intellij.stubElementTypeHolder` without `externalIdPrefix`, see [Stub Indexes](https://plugins.jetbrains.com/docs/intellij/stub-indexes.html?from=?from=DevkitPluginXmlInspectionDescription)\n* `com.intellij.statusBarWidgetFactory` without `id`\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PluginXmlExtensionRegistration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UElementAsPsi", + "shortDescription": { + "text": "UElement as PsiElement usage" + }, + "fullDescription": { + "text": "Reports usage of UAST 'UElement' as 'PsiElement'. The 'PsiElement' obtained this way is ambiguous. To obtain \"physical\" 'PsiElement' use 'UElementKt.getSourcePsiElement()', for 'PsiElement' that \"emulates\" behaviour of Java-elements ('PsiClass', 'PsiMethod', etc.) use 'UElementKt.getAsJavaPsiElement()'. See UAST - Unified Abstract Syntax Tree in SDK Docs.", + "markdown": "Reports usage of UAST `UElement` as `PsiElement`.\n\n\nThe `PsiElement` obtained this way is ambiguous.\n\n\nTo obtain \"physical\" `PsiElement` use `UElementKt.getSourcePsiElement()`,\nfor `PsiElement` that \"emulates\" behaviour of Java-elements (`PsiClass`, `PsiMethod`, etc.)\nuse `UElementKt.getAsJavaPsiElement()`.\n\n\nSee [UAST - Unified Abstract Syntax Tree](https://plugins.jetbrains.com/docs/intellij/uast.html) in SDK Docs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UElementAsPsi", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingActionUpdateThread", + "shortDescription": { + "text": "ActionUpdateThread is missing" + }, + "fullDescription": { + "text": "Reports actions, action groups and other 'ActionUpdateThreadAware' classes that implicitly state the deprecated and costly 'ActionUpdateThread.OLD_EDT' mode. When an action or an action group defines its own 'update()' method, IntelliJ Platform tries to mimic the old synchronous way of calling 'update()' and 'getChildren()' methods in the UI thread and supply it with all the data in 'AnActionEvent.dataContext()'. To do that, it caches all the possible data on a background thread beforehand, even if it is not needed. Provide one of the two new modes 'ActionUpdateThread.EDT' or 'ActionUpdateThread.BGT' by overriding the 'getActionUpdateThread()' method. See the documentation of 'ActionUpdateThread' for more information.", + "markdown": "Reports actions, action groups and other `ActionUpdateThreadAware` classes that implicitly state the deprecated and costly `ActionUpdateThread.OLD_EDT` mode.\n\n\nWhen an action or an action group defines its own `update()` method, IntelliJ Platform tries to mimic\nthe old synchronous way of calling `update()` and `getChildren()` methods in the UI thread and\nsupply it with all the data in `AnActionEvent.dataContext()`.\nTo do that, it caches all the possible data on a background thread beforehand, even if it is not needed.\n\n\nProvide one of the two new modes `ActionUpdateThread.EDT` or `ActionUpdateThread.BGT`\nby overriding the `getActionUpdateThread()` method.\n\n\nSee the documentation of `ActionUpdateThread` for more information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingActionUpdateThread", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlI18n", + "shortDescription": { + "text": "Plugin.xml i18n verification" + }, + "fullDescription": { + "text": "Reports hardcoded texts in 'plugin.xml'. Using texts defined in resource bundles allows supporting multiple languages in the IDE. The following elements are checked: ', ' '' known extension points having 'bundle/key' alternative", + "markdown": "Reports hardcoded texts in `plugin.xml`.\n\n\nUsing texts defined in resource bundles allows supporting multiple languages in the IDE.\n\n\nThe following elements are checked:\n\n* `, `\n* ``\n* known extension points having `bundle/key` alternative" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PluginXmlI18n", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePrimitiveTypes", + "shortDescription": { + "text": "Use 'PsiType#equals(Object)' with primitive types" + }, + "fullDescription": { + "text": "Reports comparing 'PsiPrimitiveType' instances using '=='. Primitive types should be compared with 'equals' as Java 8 type annotations are also applicable for them. Replace with 'equals()' call.", + "markdown": "Reports comparing `PsiPrimitiveType` instances using `==`.\n\n\nPrimitive types should be compared with `equals` as Java 8 type annotations are also applicable for them.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UsePrimitiveTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectProcessCanceledExceptionHandling", + "shortDescription": { + "text": "'ProcessCanceledException' handled incorrectly" + }, + "fullDescription": { + "text": "Reports 'ProcessCanceledException's handled in an incorrect way. 'ProcessCanceledException' and its inheritors must not be caught, swallowed, logged, or handled in any way. Instead, it must be rethrown so that the infrastructure can handle it correctly. Inspection reports both explicit 'ProcessCanceledException' or its inheritors catching, as well as catching 'RuntimeException', 'Exception' and 'Throwable' covering 'ProcessCanceledException'. Example: '// bad:\ntry {\n // ...\n} catch (ProcessCanceledException e) { // exception should not be swallowed\n}\n\n// bad:\ntry {\n // ...\n} catch (ProcessCanceledException e) {\n LOG.error(\"Error occurred\", e); // exception should not be logged\n throw e;\n}\n\n\n// good:\ntry {\n // ...\n} catch (ProcessCanceledException e) {\n // additional actions\n throw e;\n}' New in 2023.2", + "markdown": "Reports `ProcessCanceledException`s handled in an incorrect way.\n\n\n`ProcessCanceledException` and its inheritors must not be caught, swallowed, logged, or handled in any way.\nInstead, it must be rethrown so that the infrastructure can handle it correctly.\n\n\nInspection reports both explicit `ProcessCanceledException` or its inheritors catching,\nas well as catching `RuntimeException`, `Exception` and `Throwable` covering `ProcessCanceledException`.\n\nExample:\n\n\n // bad:\n try {\n // ...\n } catch (ProcessCanceledException e) { // exception should not be swallowed\n }\n\n // bad:\n try {\n // ...\n } catch (ProcessCanceledException e) {\n LOG.error(\"Error occurred\", e); // exception should not be logged\n throw e;\n }\n\n\n // good:\n try {\n // ...\n } catch (ProcessCanceledException e) {\n // additional actions\n throw e;\n }\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "IncorrectProcessCanceledExceptionHandling", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnknownIdInMetaInformation", + "shortDescription": { + "text": "Unknown inspection id in meta information" + }, + "fullDescription": { + "text": "Reports unknown inspection ids in 'metaInformation.json' files. It contains additional information about inspections declared in the current plugin. The presence of inspections in this file is optional. An example of such information is a list of corresponding CWE IDs. Entries in 'metaInformation.json' with unknown inspection ID will be ignored at runtime. The presence of such elements could be a bug or outdated information.", + "markdown": "Reports unknown inspection ids in `metaInformation.json` files. It contains additional information about inspections declared in the current plugin. The presence of inspections in this file is optional. An example of such information is a list of corresponding CWE IDs. Entries in `metaInformation.json` with unknown inspection ID will be ignored at runtime. The presence of such elements could be a bug or outdated information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnknownIdInMetaInformation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableCtor", + "shortDescription": { + "text": "Non-default constructor in serializable class" + }, + "fullDescription": { + "text": "Reports non-default constructor in serializable classes. The platform's 'IonObjectSerializer' requires specifying '@PropertyMapping' explicitly. Quick-fix generates necessary '@PropertyMapping' annotation for the constructor.", + "markdown": "Reports non-default constructor in serializable classes.\n\n\nThe platform's `IonObjectSerializer` requires specifying `@PropertyMapping` explicitly.\n\n\nQuick-fix generates necessary `@PropertyMapping` annotation for the constructor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SerializableCtor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComponentNotRegistered", + "shortDescription": { + "text": "Component/Action not registered" + }, + "fullDescription": { + "text": "Reports plugin components and actions that are not registered in a 'plugin.xml' descriptor. This eases developing new components when using the \"Create Class\" intention and helps keep track of potentially obsolete components. Provided quick-fix to register the component adds necessary registration in 'plugin.xml' descriptor. Configure the inspection: Use the Check Actions option to turn off the check for Actions, as they may be intentionally created and registered dynamically. Use the Ignore non-public classes option to ignore abstract and non-public classes.", + "markdown": "Reports plugin components and actions that are not registered in a `plugin.xml` descriptor.\n\n\nThis eases developing new components when using the \"Create Class\" intention and helps keep track of potentially obsolete components.\n\n\nProvided quick-fix to register the component adds necessary registration in `plugin.xml` descriptor.\n\nConfigure the inspection:\n\n* Use the **Check Actions** option to turn off the check for Actions, as they may be intentionally created and registered dynamically.\n* Use the **Ignore non-public classes** option to ignore abstract and non-public classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ComponentNotRegistered", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DevKitPropertiesMessageValidation", + "shortDescription": { + "text": "Message format validation in properties files" + }, + "fullDescription": { + "text": "Reports the following 'MessageFormat' problems in property values: Unknown format types 'MessageFormat' supports only these format types: number date time choice Other format types will be reported. Unpaired quotes 'property.key=Shouldn't happen: {0}' A single quote is interpreted as an escape until the end of the property, and will not be present in the result string. In most cases this is not what is intended. If a single quote should be present in the result string, it has to be duplicated in the property. Unmatched braces Every placeholder must have a closing brace. Too many quotes In some cases (e.g. 'it's'), it is expected that only one quote ends up in the result string. Cases where two or more quotes are placed together in the result string are reported. Incorrect lower bounds for nested 'ChoiceFormat' Lower bounds are expected to be numbers and to be sorted in ascending order. Wrong number of quotes around parameters In 'java.text.MessageFormat' patterns single quotes are used for escaping. To keep quotes visible, they must be duplicated. For example when passing '1': ''{0}'' → '{0}' '''{0}''' → ''1'' When using choice format, nested formats are evaluated as format strings themselves, and quotes will need to be duplicated twice. For example when passing '1': '{0, choice, 0#no|#1''{0}'' files}' → '{0} files' '{0, choice, 0#no|#1''''{0}'''' files}' → ''1' files' Note Property values are verified only if they contain the literal text '{0}', '{0,', '{1}' or '{1,'. This is to make sure that these property values are actually used as 'MessageFormat' patterns. New in 2023.2", + "markdown": "Reports the following `MessageFormat` problems in property values:\n\n**Unknown format types**\n\n\n`MessageFormat` supports only these format types:\n\n* number\n* date\n* time\n* choice\n\nOther format types will be reported.\n\n**Unpaired quotes**\n\n\n property.key=Shouldn't happen: {0}\n\n\nA single quote is interpreted as an escape until the end of the property, and will not be present in the result string.\nIn most cases this is not what is intended.\nIf a single quote should be present in the result string, it has to be duplicated in the property.\n\n**Unmatched braces**\n\n\nEvery placeholder must have a closing brace.\n\n**Too many quotes**\n\n\nIn some cases (e.g. `it's`), it is expected that only one quote ends up in the result string.\nCases where two or more quotes are placed together in the result string are reported.\n\n**Incorrect lower bounds for nested `ChoiceFormat`**\n\n\nLower bounds are expected to be numbers and to be sorted in ascending order.\n\n**Wrong number of quotes around parameters**\n\n\nIn `java.text.MessageFormat` patterns single quotes are used for escaping.\nTo keep quotes visible, they must be duplicated.\nFor example when passing `1`:\n\n* `'{0}'` → `{0}`\n* `''{0}''` → `'1'`\n\n\nWhen using choice format, nested formats are evaluated as format strings themselves, and quotes will need to be duplicated twice.\nFor example when passing `1`:\n\n* `{0, choice, 0#no|#1''{0}'' files}` → `{0} files`\n* `{0, choice, 0#no|#1''''{0}'''' files}` → `'1' files`\n\n**Note**\n\n\nProperty values are verified only if they contain the literal text `{0}`, `{0,`, `{1}` or `{1,`.\nThis is to make sure that these property values are actually used as `MessageFormat` patterns.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DevKitPropertiesMessageValidation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 63, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedPluginConfigReference", + "shortDescription": { + "text": "Unresolved plugin configuration reference" + }, + "fullDescription": { + "text": "Reports unresolved references to plugin configuration elements. Extensions Referencing extension with an unknown 'id' might result in errors at runtime. The following extension points are supported: 'com.intellij.advancedSetting' in resource bundle 'advanced.setting.*' key 'com.intellij.experimentalFeature' in 'Experiments.isFeatureEnabled()/setFeatureEnabled()' 'com.intellij.notificationGroup' in 'Notification' constructor and 'NotificationGroupManager.getNotificationGroup()' 'com.intellij.registryKey' in 'Registry' methods 'key' parameter 'com.intellij.toolWindow' in resource bundle 'toolwindow.stripe.*' key Extension Point Extension point name referencing its corresponding '' declaration in 'plugin.xml'. 'com.intellij.openapi.extensions.ExtensionPointName' constructor and 'create()' 'com.intellij.openapi.extensions.ProjectExtensionPointName' constructor 'com.intellij.openapi.util.KeyedExtensionCollector' and inheritors constructor", + "markdown": "Reports unresolved references to plugin configuration elements.\n\n#### Extensions\n\n\nReferencing extension with an unknown `id` might result in errors at runtime.\n\n\nThe following extension points are supported:\n\n* `com.intellij.advancedSetting` in resource bundle `advanced.setting.*` key\n* `com.intellij.experimentalFeature` in `Experiments.isFeatureEnabled()/setFeatureEnabled()`\n* `com.intellij.notificationGroup` in `Notification` constructor and `NotificationGroupManager.getNotificationGroup()`\n* `com.intellij.registryKey` in `Registry` methods `key` parameter\n* `com.intellij.toolWindow` in resource bundle `toolwindow.stripe.*` key\n\n#### Extension Point\n\n\nExtension point name referencing its corresponding `` declaration in `plugin.xml`.\n\n* `com.intellij.openapi.extensions.ExtensionPointName` constructor and `create()`\n* `com.intellij.openapi.extensions.ProjectExtensionPointName` constructor\n* `com.intellij.openapi.util.KeyedExtensionCollector` and inheritors constructor" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedPluginConfigReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseDPIAwareInsets", + "shortDescription": { + "text": "Use DPI-aware insets" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Insets' and 'JBUI.insetsXyz()' that can be simplified. The 'Insets' instances are not DPI-aware and can result in UI layout problems. Quick fix performs replacement with 'JBUI.insets()' or simplifies the expression. Example: '// bad:\nInsets insets1 = new Insets(1, 2, 3, 4);\nInsets insets2 = new Insets(1, 2, 1, 2);\nInsets insets3 = new Insets(1, 0, 0, 0);\n\n// good:\nInsets insets1 = JBUI.insets(1, 2, 3, 4);\nInsets insets2 = JBUI.insets(1, 2);\nInsets insets3 = JBUI.insetsTop(1);'", + "markdown": "Reports usages of `java.awt.Insets` and `JBUI.insetsXyz()` that can be simplified.\n\n\nThe `Insets` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.insets()` or simplifies the expression.\n\nExample:\n\n\n // bad:\n Insets insets1 = new Insets(1, 2, 3, 4);\n Insets insets2 = new Insets(1, 2, 1, 2);\n Insets insets3 = new Insets(1, 0, 0, 0);\n\n // good:\n Insets insets1 = JBUI.insets(1, 2, 3, 4);\n Insets insets2 = JBUI.insets(1, 2);\n Insets insets3 = JBUI.insetsTop(1);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseDPIAwareInsets", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadingConcurrency", + "shortDescription": { + "text": "Threading and concurrency problems" + }, + "fullDescription": { + "text": "Reports threading and concurrency issues in code using information from 'com.intellij.util.concurrency.annotations' annotations. Work in progress. Enable options below to check '@Requires(Read|Write)Lock' inside '@RequiresEdt' blocks. Additionally, non-overriding public methods having not all annotations present can be highlighted + quickfix to add missing annotations. New in 2023.2", + "markdown": "Reports threading and concurrency issues in code using information from `com.intellij.util.concurrency.annotations` annotations.\n\n\n**Work in progress**.\nEnable options below to check `@Requires(Read|Write)Lock` inside `@RequiresEdt` blocks. Additionally, non-overriding public methods having not all annotations present can be highlighted + quickfix to add missing annotations.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ThreadingConcurrency", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListenerImplementationMustNotBeDisposable", + "shortDescription": { + "text": "Listener implementation implements 'Disposable'" + }, + "fullDescription": { + "text": "Reports listener implementations that implement 'com.intellij.openapi.Disposable'. Listener implementations must be stateless and must not implement life-cycle, including 'com.intellij.openapi.Disposable'. See documentation for more information. New in 2023.3", + "markdown": "Reports listener implementations that implement `com.intellij.openapi.Disposable`.\n\n\nListener implementations must be stateless and must not implement life-cycle, including `com.intellij.openapi.Disposable`.\n\n\nSee [documentation](https://plugins.jetbrains.com/docs/intellij/plugin-listeners.html) for more information.\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ListenerImplementationMustNotBeDisposable", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinObjectRegisteredAsExtension", + "shortDescription": { + "text": "Kotlin object registered as extension" + }, + "fullDescription": { + "text": "Reports Kotlin objects that are registered as plugin extensions. Extensions lifecycle is managed by the IntelliJ Platform. Using Kotlin objects for extension registration may cause creation of unnecessary extension instances and make plugin unloading impossible. Example Extension registration: '' Extension implementation: '// bad:\nobject MyAnnotator : Annotator {\n ...\n}\n\n// good:\nclass MyAnnotator : Annotator {\n ...\n}' New in 2023.1", + "markdown": "Reports Kotlin objects that are registered as plugin extensions.\n\n\nExtensions lifecycle is managed by the IntelliJ Platform.\nUsing Kotlin objects for extension registration may cause creation of unnecessary extension instances and make plugin unloading\nimpossible.\n\nExample\n-------\n\nExtension registration:\n\n\n \n\nExtension implementation:\n\n\n // bad:\n object MyAnnotator : Annotator {\n ...\n }\n\n // good:\n class MyAnnotator : Annotator {\n ...\n }\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "KotlinObjectRegisteredAsExtension", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtensionClassShouldBeFinalAndNonPublic", + "shortDescription": { + "text": "Extension class should be final and non-public" + }, + "fullDescription": { + "text": "Reports extension classes that are non-final or public. New in 2023.2", + "markdown": "Reports extension classes that are non-final or public.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExtensionClassShouldBeFinalAndNonPublic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WorkspaceImplObsolete", + "shortDescription": { + "text": "Obsolete version of entity implementation" + }, + "fullDescription": { + "text": "Reports existence of the obsolete implementation for the entity. Verifies that existing implementation for entities has the same API version as described at 'com.intellij.platform.workspace.storage.CodeGeneratorVersions' from dependencies. Suggests regenerating implementation for the whole entities in the current module.", + "markdown": "Reports existence of the obsolete implementation for the entity.\n\n\nVerifies that existing implementation for entities has the same API version as described at `com.intellij.platform.workspace.storage.CodeGeneratorVersions` from dependencies.\n\n\nSuggests regenerating implementation for the whole entities in the current module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WorkspaceImplObsolete", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Workspace model", + "index": 64, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForbiddenInSuspectContextMethod", + "shortDescription": { + "text": "Forbidden in suspend context method usage" + }, + "fullDescription": { + "text": "Reports inappropriate usages of methods in Kotlin coroutines, which uses threading context (annotated with '@RequiresBlockingContext'). Many of these methods have corresponding coroutine-friendly analogues, that can be used in 'suspend' contexts. Examples: 'com.intellij.openapi.progress.ProgressManager.checkCanceled()' should be replaced with 'com.intellij.openapi.progress.checkCancelled()' 'com.intellij.openapi.application.Application.invokeAndWait()' should be replaced with 'withContext(Dispatchers.EDT)' etc.", + "markdown": "Reports inappropriate usages of methods in Kotlin coroutines, which uses threading context (annotated with `@RequiresBlockingContext`). Many of these methods have corresponding coroutine-friendly analogues, that can be used in `suspend` contexts. Examples:\n\n* `com.intellij.openapi.progress.ProgressManager.checkCanceled()` should be replaced with `com.intellij.openapi.progress.checkCancelled()`\n* `com.intellij.openapi.application.Application.invokeAndWait()` should be replaced with `withContext(Dispatchers.EDT)`\n* etc." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForbiddenInSuspectContextMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CancellationCheckInLoops", + "shortDescription": { + "text": "Cancellation check in loops" + }, + "fullDescription": { + "text": "Reports loops, 'forEach'-like methods, and 'ContainerUtil.process()' with missing cancellation checks. Runs only within the methods with 'com.intellij.util.concurrency.annotations.RequiresReadLock' annotation. Example: '@RequiresReadLock\nfun doSomething() {\n ...\n for (item in items) {\n ProgressManager.checkCanceled() // should be present in the first line\n ...\n }\n\n items.forEach {\n ProgressManager.checkCanceled() // should be present in the first line\n ...\n }\n ...\n}' In the case of nested loops with nothing in between: '@RequiresReadLock\nfun doSomething() {\n ...\n for (item in items) {\n // nothing in between\n for (inner in item.inners) {\n ProgressManager.checkCanceled() // should be present in the first line of the inner loop only\n ...\n }\n }\n ...\n}' In blocking context 'com.intellij.openapi.progress.ProgressManager#checkCanceled' should be used, while 'com.intellij.openapi.progress.CoroutinesKt#checkCancelled' should be used in suspending one. See Background Processes and ProcessCanceledException in IntelliJ Platform Plugin SDK docs for more details. New in 2023.1", + "markdown": "Reports loops, `forEach`-like methods, and `ContainerUtil.process()` with missing cancellation checks.\n\nRuns only within the methods with `com.intellij.util.concurrency.annotations.RequiresReadLock` annotation.\n\n**Example:**\n\n\n @RequiresReadLock\n fun doSomething() {\n ...\n for (item in items) {\n ProgressManager.checkCanceled() // should be present in the first line\n ...\n }\n\n items.forEach {\n ProgressManager.checkCanceled() // should be present in the first line\n ...\n }\n ...\n }\n\nIn the case of nested loops with nothing in between:\n\n\n @RequiresReadLock\n fun doSomething() {\n ...\n for (item in items) {\n // nothing in between\n for (inner in item.inners) {\n ProgressManager.checkCanceled() // should be present in the first line of the inner loop only\n ...\n }\n }\n ...\n }\n\n\nIn blocking context `com.intellij.openapi.progress.ProgressManager#checkCanceled` should be used,\nwhile `com.intellij.openapi.progress.CoroutinesKt#checkCancelled` should be used in suspending one.\n\n\nSee [Background Processes and ProcessCanceledException](https://plugins.jetbrains.com/docs/intellij/general-threading-rules.html#background-processes-and-processcanceledexception) in IntelliJ Platform Plugin SDK docs for more details.\n\nNew in 2023.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CancellationCheckInLoops", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ApplicationServiceAsStaticFinalFieldOrProperty", + "shortDescription": { + "text": "Application service assigned to a static final field or immutable property" + }, + "fullDescription": { + "text": "Reports assignments of application services to static final fields / immutable properties. Static final fields (Java) or static immutable properties with backing fields (Kotlin) Note: Hereinafter, static in Kotlin refers to members of non-anonymous objects or top-level declarations. Such services' assignments contribute to global state and make it impossible to tear down an application and set up another one in tests, therefore, repeated tests in the same process may fail. The only exception is an explicit constructor call to store dummy/default instances. The recommended way to avoid storing services is to retrieve a service locally. Alternatively, one can wrap it in 'java.util.function.Supplier' (Java, Kotlin) or convert the property to a function (Kotlin). Example (Java): '// Bad:\nprivate static final ManagingFS ourInstance = ApplicationManager.getApplication().getService(ManagingFS.class);' '// Good:\nprivate static final Supplier ourInstance = CachedSingletonsRegistry.lazy(() -> {\n return ApplicationManager.getApplication().getService(ManagingFS.class);\n});' '// Exception:\nprivate static final UniqueVFilePathBuilder DUMMY_BUILDER = new UniqueVFilePathBuilder()' Retrieving a service instance through static immutable properties (Kotlin) While services' assignments to properties without backing fields don't cause the aforementioned problem, using an explicit 'getInstance()' method to retrieve a service is preferred over using a property: It makes it clearer on the call site that it can involve loading the service, which might not be cheap. Loading the service can throw an exception, and having an exception thrown by a method call is less surprising than if it was caused by property access. (Over-)using properties may be error-prone in a way that it might be accidentally changed to a property with an initializer instead of the correct (but more verbose) property with a getter, and that change can easily be overlooked. Using the method instead of a property keeps 'MyApplicationService.getInstance()' calls consistent when used both in Kotlin, and Java. Using the method keeps 'MyApplicationService.getInstance()' consistent with 'MyProjectService.getInstance(project)', both on the declaration and call sites. For better tooling performance, it is always advised to keep an explicit method return type. Example: '@Service\nclass MyApplicationService {\n companion object {\n @JvmStatic\n val instance: MyApplicationService // bad\n get() = service()\n }\n}' '@Service\nclass MyApplicationService {\n companion object {\n @JvmStatic\n fun getInstance(): MyApplicationService = service() // good\n }\n}' New in 2023.3", + "markdown": "Reports assignments of application services to static final fields / immutable properties.\n\n#### Static final fields (Java) or static immutable properties with backing fields (Kotlin)\n\n\n**Note:** Hereinafter, static in Kotlin refers to members of non-anonymous objects or top-level declarations.\n\n\nSuch services' assignments contribute to global state and make it impossible to tear down an application and set up another one in tests,\ntherefore, repeated tests in the same process may fail.\nThe only exception is an explicit constructor call to store dummy/default instances.\n\n\nThe recommended way to avoid storing services is to retrieve a service locally.\nAlternatively, one can wrap it in `java.util.function.Supplier` (Java, Kotlin)\nor convert the property to a function (Kotlin).\n\nExample (Java):\n\n\n // Bad:\n private static final ManagingFS ourInstance = ApplicationManager.getApplication().getService(ManagingFS.class);\n\n\n // Good:\n private static final Supplier ourInstance = CachedSingletonsRegistry.lazy(() -> {\n return ApplicationManager.getApplication().getService(ManagingFS.class);\n });\n\n\n // Exception:\n private static final UniqueVFilePathBuilder DUMMY_BUILDER = new UniqueVFilePathBuilder()\n\n#### Retrieving a service instance through static immutable properties (Kotlin)\n\n\nWhile services' assignments to properties without backing fields don't cause the aforementioned problem,\nusing an explicit `getInstance()` method to retrieve a service is preferred over using a property:\n\n* It makes it clearer on the call site that it can involve loading the service, which might not be cheap.\n* Loading the service can throw an exception, and having an exception thrown by a method call is less surprising than if it was caused by property access.\n* (Over-)using properties may be error-prone in a way that it might be accidentally changed to a property with an initializer instead of the correct (but more verbose) property with a getter, and that change can easily be overlooked.\n* Using the method instead of a property keeps `MyApplicationService.getInstance()` calls consistent when used both in Kotlin, and Java.\n* Using the method keeps `MyApplicationService.getInstance()` consistent with `MyProjectService.getInstance(project)`, both on the declaration and call sites.\n\nFor better tooling performance, it is always advised to keep an explicit method return type.\n\nExample:\n\n\n @Service\n class MyApplicationService {\n companion object {\n @JvmStatic\n val instance: MyApplicationService // bad\n get() = service()\n }\n }\n\n\n @Service\n class MyApplicationService {\n companion object {\n @JvmStatic\n fun getInstance(): MyApplicationService = service() // good\n }\n }\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ApplicationServiceAsStaticFinalFieldOrProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticInitializationInExtensions", + "shortDescription": { + "text": "Static initialization in extension point implementations" + }, + "fullDescription": { + "text": "Reports static initialization in extension point implementations. Static initialization is performed once the class is loaded, which may cause excessive classloading or early initialization of heavy resources. Since extension point implementations are supposed to be cheap to create, they must not have static initializers. New in 2023.3", + "markdown": "Reports static initialization in [extension point implementations](https://plugins.jetbrains.com/docs/intellij/plugin-extensions.html).\n\n\nStatic initialization is performed once the class is loaded, which may cause excessive classloading or early initialization of heavy resources.\nSince extension point implementations are supposed to be cheap to create, they must not have static initializers.\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StaticInitializationInExtensions", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnspecifiedActionsPlace", + "shortDescription": { + "text": "Unspecified action place" + }, + "fullDescription": { + "text": "Reports passing unspecified 'place' parameter for 'ActionManager.createActionToolbar()' and 'ActionManager.createActionPopupMenu()'. Specifying proper 'place' is required to distinguish Action's usage in 'update()/actionPerformed()' via 'AnActionEvent.getPlace()'. Examples: '// bad:\nactionManager.createActionToolbar(\"\", group, false);\nactionManager.createActionToolbar(\"unknown\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.UNKNOWN, group);\n\n// good:\nactionManager.createActionToolbar(\"MyPlace\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.EDITOR_TOOLBAR, group);'", + "markdown": "Reports passing unspecified `place` parameter for `ActionManager.createActionToolbar()` and `ActionManager.createActionPopupMenu()`.\n\n\nSpecifying proper `place` is required to distinguish Action's usage in `update()/actionPerformed()` via `AnActionEvent.getPlace()`.\n\n\nExamples:\n\n\n // bad:\n actionManager.createActionToolbar(\"\", group, false);\n actionManager.createActionToolbar(\"unknown\", group, false);\n actionManager.createActionPopupMenu(ActionPlaces.UNKNOWN, group);\n\n // good:\n actionManager.createActionToolbar(\"MyPlace\", group, false);\n actionManager.createActionPopupMenu(ActionPlaces.EDITOR_TOOLBAR, group);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnspecifiedActionsPlace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ActionIsNotPreviewFriendly", + "shortDescription": { + "text": "Field blocks intention preview" + }, + "fullDescription": { + "text": "Reports fields in 'LocalQuickFix' and 'IntentionAction' implementations that prevent intention preview action from functioning properly. Additionally, excessive '@SafeFieldForPreview' annotations are reported on fields whose types are known to be safe. Intention preview is an IntelliJ platform feature that displays how quick-fix or intention action will change the current file when applied. To implement this in quick fixes, 'LocalQuickFix.generatePreview()' is called with a custom 'ProblemDescriptor' that points to the non-physical copy of current file. In intention actions, 'IntentionAction.generatePreview()' is called with the non-physical copy of current file and imaginary editor. Normally, these methods just delegate to 'LocalQuickFix.applyFix()' or 'IntentionAction.invoke()'. However, some quick-fixes may refer directly or indirectly to physical elements and use them for writing. As a result, preview won't work, as the quick-fix will attempt to update physical PSI instead of non-physical one. To avoid this, default implementation of 'generatePreview()' delegates only if all the instance fields of a quick fix or intention action class have safe types: primitives, Strings, etc. You may fix this problem in a number of ways: If the field does not actually store any PSI reference, or that PSI is used only for reading, you may annotate the field with '@SafeFieldForPreview'. You can also use '@SafeTypeForPreview' if the field type can never store any writable PSI reference. You may override 'getFileModifierForPreview()' method and create a copy of the quick-fix rebinding it to the non-physical file copy which is supplied as a parameter. Use 'PsiTreeUtil.findSameElementInCopy()' to find the corresponding PSI elements inside the supplied non-physical copy. Instead of storing PSI references in fields, try to extract all the necessary information from 'ProblemDescriptor.getPsiElement()' in quick fix or from the supplied file/editor in intention action. You may also inherit the abstract 'LocalQuickFixAndIntentionActionOnPsiElement' class and implement its 'invoke()' and 'isAvailable()' methods, which have 'startElement' and 'endElement' parameters. These parameters are automatically mapped to a non-physical file copy for you. You may override 'generatePreview()' method and provide completely custom preview behavior. For example, it's possible to display a custom HTML document instead of actual preview if your action does something besides modifying a current file. This inspection does not report if a custom implementation of 'getFileModifierForPreview()' or 'generatePreview()' exists. However, this doesn't mean that the implementation is correct and preview works. Please test. Also note that preview result is calculated in background thread, so you cannot start a write action during the preview or do any operation that requires a write action. Finally, no preview is generated automatically if 'startInWriteAction()' returns 'false'. In this case, having custom 'generatePreview()' implementation is desired. New in 2022.1", + "markdown": "Reports fields in `LocalQuickFix` and `IntentionAction` implementations that prevent intention preview action from functioning properly. Additionally, excessive `@SafeFieldForPreview` annotations are reported on fields whose types are known to be safe.\n\n\nIntention preview is an IntelliJ platform feature that displays how quick-fix or intention action\nwill change the current file when applied. To implement this in quick fixes,\n`LocalQuickFix.generatePreview()` is called with a custom `ProblemDescriptor`\nthat points to the non-physical copy of current file. In intention actions, `IntentionAction.generatePreview()`\nis called with the non-physical copy of current file and imaginary editor.\nNormally, these methods just delegate to `LocalQuickFix.applyFix()` or `IntentionAction.invoke()`.\nHowever, some quick-fixes may refer directly or indirectly to physical elements and use them for writing. As a result,\npreview won't work, as the quick-fix will attempt to update physical PSI instead of non-physical one.\nTo avoid this, default implementation of `generatePreview()` delegates only if all the\ninstance fields of a quick fix or intention action class have safe types: primitives, Strings, etc.\n\n\nYou may fix this problem in a number of ways:\n\n1. If the field does not actually store any PSI reference, or that PSI is used only for reading, you may annotate the field with `@SafeFieldForPreview`. You can also use `@SafeTypeForPreview` if the field type can never store any writable PSI reference.\n2. You may override `getFileModifierForPreview()` method and create a copy of the quick-fix rebinding it to the non-physical file copy which is supplied as a parameter. Use `PsiTreeUtil.findSameElementInCopy()` to find the corresponding PSI elements inside the supplied non-physical copy.\n3. Instead of storing PSI references in fields, try to extract all the necessary information from `ProblemDescriptor.getPsiElement()` in quick fix or from the supplied file/editor in intention action. You may also inherit the abstract `LocalQuickFixAndIntentionActionOnPsiElement` class and implement its `invoke()` and `isAvailable()` methods, which have `startElement` and `endElement` parameters. These parameters are automatically mapped to a non-physical file copy for you.\n4. You may override `generatePreview()` method and provide completely custom preview behavior. For example, it's possible to display a custom HTML document instead of actual preview if your action does something besides modifying a current file.\n\n\nThis inspection does not report if a custom implementation of `getFileModifierForPreview()`\nor `generatePreview()` exists. However, this doesn't mean that the implementation is correct and preview works.\nPlease test. Also note that preview result is calculated in background thread, so you cannot start a write action\nduring the preview or do any operation that requires a write action. Finally, no preview is generated automatically\nif `startInWriteAction()` returns `false`. In this case, having custom `generatePreview()`\nimplementation is desired.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ActionIsNotPreviewFriendly", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LightServiceMigrationCode", + "shortDescription": { + "text": "A service can be converted to a light one" + }, + "fullDescription": { + "text": "Reports classes that can be marked as light services using the '@com.intellij.openapi.components.Service' annotation instead of being registered as services in 'plugin.xml' A service that is not intended for overriding is not required to be registered in the 'plugin.xml' file. Instead, annotate the service class with the '@Service' annotation. For project-level services, specify '@Service(Service.Level.PROJECT)'. Requirements: IntelliJ Platform 2019.3 or newer. Service class must be 'final'. 'serviceInterface' is not specified. If the application-level service is a 'com.intellij.openapi.components.PersistentStateComponent', roaming must be disabled ('roamingType = RoamingType.DISABLED'). None of these attributes is specified: 'os', 'client', 'overrides', 'id', 'preload'. See Services in IntelliJ Platform Plugin SDK docs for more details. See also the 'Plugin DevKit | Plugin descriptor | A service can be converted to a light one' inspection. New in 2023.2", + "markdown": "Reports classes that can be marked as light services using the `@com.intellij.openapi.components.Service` annotation instead of being registered as services in `plugin.xml`\n\n\nA service that is not intended for overriding is not required to be registered in the `plugin.xml` file.\nInstead, annotate the service class with the `@Service` annotation. For project-level services, specify\n`@Service(Service.Level.PROJECT)`.\n\n\nRequirements:\n\n* IntelliJ Platform 2019.3 or newer.\n* Service class must be `final`.\n* `serviceInterface` is not specified.\n* If the application-level service is a `com.intellij.openapi.components.PersistentStateComponent`, roaming must be disabled (`roamingType = RoamingType.DISABLED`).\n* None of these attributes is specified: `os`, `client`, `overrides`, `id`, `preload`.\n\n\nSee [Services](https://plugins.jetbrains.com/docs/intellij/plugin-services.html) in IntelliJ Platform Plugin SDK docs for more details.\n\n\nSee also the `Plugin DevKit | Plugin descriptor | A service can be converted to a light one` inspection.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LightServiceMigrationCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InspectionUsingGrayColors", + "shortDescription": { + "text": "Using new Color(a,a,a)" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Color' to create gray colors. The Convert to 'Gray' quick fix replaces it using 'com.intellij.ui.Gray' constants instead. Examples: '// bad:\nColor gray = new Color(37, 37, 37);\n\n// good:\nColor gray = Gray._37;'", + "markdown": "Reports usages of `java.awt.Color` to create gray colors.\n\n\nThe **Convert to 'Gray'** quick fix replaces it using `com.intellij.ui.Gray` constants instead.\n\nExamples:\n\n\n // bad:\n Color gray = new Color(37, 37, 37);\n\n // good:\n Color gray = Gray._37;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InspectionUsingGrayColors", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectServiceRetrieving", + "shortDescription": { + "text": "Incorrect service retrieving" + }, + "fullDescription": { + "text": "Reports the following problems when retrieving services: Attempts to retrieve an unregistered service. Mismatch when retrieving a service: attempting to get a project-level service as an application-level service, or vice versa. Example (Kotlin): '@Service\nclass MyAppService\n\n@Service(Service.Level.PROJECT)\nclass MyProjectService(private val project: Project)' '// Bad:\nval projectService = service() // The project-level service is retrieved as an application-level service\nval applicationService = project.service() // The application-level service is retrieved as a project-level service' '// Good:\nval projectService = project.service()\nval applicationService = service();' New in 2023.2", + "markdown": "Reports the following problems when retrieving services:\n\n* Attempts to retrieve an unregistered service.\n* Mismatch when retrieving a service: attempting to get a project-level service as an application-level service, or vice versa.\n\nExample (Kotlin):\n\n\n @Service\n class MyAppService\n\n @Service(Service.Level.PROJECT)\n class MyProjectService(private val project: Project)\n\n\n // Bad:\n val projectService = service() // The project-level service is retrieved as an application-level service\n val applicationService = project.service() // The application-level service is retrieved as a project-level service\n\n\n // Good:\n val projectService = project.service()\n val applicationService = service();\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "IncorrectServiceRetrieving", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlDynamicPlugin", + "shortDescription": { + "text": "Plugin.xml dynamic plugin verification" + }, + "fullDescription": { + "text": "Reports dynamic plugin problems. Dynamic plugins can be installed, updated and uninstalled without restarting the IDE (supported in 2020.1 and later). Please see Dynamic Plugins for further reference. New in 2020.1", + "markdown": "Reports dynamic plugin problems.\n\n\nDynamic plugins can be installed, updated and uninstalled without restarting the IDE (supported in 2020.1 and later).\n\n\nPlease see [Dynamic Plugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html?from=PluginXmlDynamicPlugin) for further reference.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PluginXmlDynamicPlugin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComponentRegistrationProblems", + "shortDescription": { + "text": "Component type mismatch" + }, + "fullDescription": { + "text": "Reports incorrect registration of plugin components (Actions and Components). The following problems are reported: Action/Component implementation class is abstract. Class is registered in plugin.xml as action but does not extend 'AnAction' class. Action class does not have a public no-argument constructor.", + "markdown": "Reports incorrect registration of plugin components (Actions and Components).\n\n\nThe following problems are reported:\n\n* Action/Component implementation class is abstract.\n* Class is registered in plugin.xml as action but does not extend `AnAction` class.\n* Action class does not have a public no-argument constructor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ComponentRegistrationProblems", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LightServiceMustBeFinal", + "shortDescription": { + "text": "Light service must be final" + }, + "fullDescription": { + "text": "Reports classes annotated with the '@com.intellij.openapi.components.Service' annotation that are not final. Suggests making a class final if it is concrete. Example: '// MyService.kt\n @Service(Service.Level.APP)\n open class MyService' After the quick-fix is applied: '// MyService.kt\n @Service(Service.Level.APP)\n class MyService' Suggests removing the '@Service' annotation if it is an abstract class or interface. Example: '// MyService.java\n @Service(Service.Level.APP)\n abstract class MyService {}' After the quick-fix is applied: '// MyService.java\n abstract class MyService {}' New in 2023.2", + "markdown": "Reports classes annotated with the `@com.intellij.openapi.components.Service` annotation that are not final.\n\n\nSuggests making a class final if it is concrete.\n\n**Example:**\n\n\n // MyService.kt\n @Service(Service.Level.APP)\n open class MyService\n\nAfter the quick-fix is applied:\n\n\n // MyService.kt\n @Service(Service.Level.APP)\n class MyService\n\n\nSuggests removing the `@Service` annotation if it is an abstract class or interface.\n\n**Example:**\n\n\n // MyService.java\n @Service(Service.Level.APP)\n abstract class MyService {}\n\nAfter the quick-fix is applied:\n\n\n // MyService.java\n abstract class MyService {}\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "LightServiceMustBeFinal", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LightServiceMigrationXML", + "shortDescription": { + "text": "A service can be converted to a light one" + }, + "fullDescription": { + "text": "Reports services registered in 'plugin.xml' that can be converted to light ones. A service that is not intended for overriding is not required to be registered in the 'plugin.xml' file. Instead, annotate the service class with the '@com.intellij.openapi.components.Service' annotation. For project-level services, specify '@Service(Service.Level.PROJECT)'. Requirements: IntelliJ Platform 2019.3 or newer. Service class must be 'final'. 'serviceInterface' is not specified. If the application-level service is a 'com.intellij.openapi.components.PersistentStateComponent', roaming must be disabled ('roamingType = RoamingType.DISABLED'). None of these attributes is specified: 'os', 'client', 'overrides', 'id', 'preload'. Also reports services registered in 'plugin.xml' whose classes are already annotated with '@Service'. See Services in IntelliJ Platform Plugin SDK docs for more details. See also the 'Plugin DevKit | Code | A service can be converted to a light one' inspection. New in 2023.2", + "markdown": "Reports services registered in `plugin.xml` that can be converted to light ones.\n\n\nA service that is not intended for overriding is not required to be registered in the `plugin.xml` file.\nInstead, annotate the service class with the `@com.intellij.openapi.components.Service` annotation. For\nproject-level services, specify `@Service(Service.Level.PROJECT)`.\n\n\nRequirements:\n\n* IntelliJ Platform 2019.3 or newer.\n* Service class must be `final`.\n* `serviceInterface` is not specified.\n* If the application-level service is a `com.intellij.openapi.components.PersistentStateComponent`, roaming must be disabled (`roamingType = RoamingType.DISABLED`).\n* None of these attributes is specified: `os`, `client`, `overrides`, `id`, `preload`.\n\nAlso reports services registered in `plugin.xml` whose classes are already annotated with `@Service`.\n\n\nSee [Services](https://plugins.jetbrains.com/docs/intellij/plugin-services.html) in IntelliJ Platform Plugin SDK docs for more details.\n\n\nSee also the `Plugin DevKit | Code | A service can be converted to a light one` inspection.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LightServiceMigrationXML", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingAccessibleContext", + "shortDescription": { + "text": "Accessible context is missing" + }, + "fullDescription": { + "text": "Reports Swing components that do not provide accessibility context. This information is used by screen readers. Failing to provide it makes the component inaccessible for visually impaired users. Example: 'ListCellRenderer renderer = (list, val, index, sel, cell) -> {\n JPanel panel = new JPanel();\n return panel;\n };' To fix the problem, you should either call 'setAccessibleName()' on the returned 'JPanel' or override its 'getAccessibleContext()' method. The returned text should reflect the purpose of the component. For example, in the case of 'ListCellRenderer', this would be the text of the menu item.", + "markdown": "Reports Swing components that do not provide accessibility context.\n\n\nThis information is used by screen readers. Failing to provide it makes the component inaccessible for\nvisually impaired users.\n\n**Example:**\n\n\n ListCellRenderer renderer = (list, val, index, sel, cell) -> {\n JPanel panel = new JPanel();\n return panel;\n };\n\n\nTo fix the problem, you should either call `setAccessibleName()` on the returned `JPanel`\nor override its `getAccessibleContext()` method.\n\n\nThe returned text should reflect the purpose\nof the component. For example, in the case of `ListCellRenderer`, this would be the text of the menu\nitem." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingAccessibleContext", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseJBColor", + "shortDescription": { + "text": "Use Darcula aware JBColor" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Color'. These are not aware of \"dark\" themes (e.g., bundled \"Darcula\") and might result in bad looking UI. Quick-fix replaces usages with 'JBColor', which defines \"dark\" color variant. Examples: '// bad:\nColor darkGreen = new Color(12, 58, 27);\nColor blue = Color.BLUE;\n\n// good:\nColor darkGreen = new JBColor(12, 58, 27);\nColor blue = JBColor.BLUE;\nColor green = new JBColor(new Color(12, 58, 27), new Color(27, 112, 39));'", + "markdown": "Reports usages of `java.awt.Color`.\n\n\nThese are not aware of \"dark\" themes (e.g., bundled \"Darcula\") and might result in bad looking UI.\n\n\nQuick-fix replaces usages with `JBColor`, which defines \"dark\" color variant.\n\nExamples:\n\n\n // bad:\n Color darkGreen = new Color(12, 58, 27);\n Color blue = Color.BLUE;\n\n // good:\n Color darkGreen = new JBColor(12, 58, 27);\n Color blue = JBColor.BLUE;\n Color green = new JBColor(new Color(12, 58, 27), new Color(27, 112, 39));\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseJBColor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QuickFixGetFamilyNameViolation", + "shortDescription": { + "text": "QuickFix's getFamilyName() implementation must not depend on a specific context" + }, + "fullDescription": { + "text": "Reports 'QuickFix#getFamilyName()' using contextual information. This method must not use any non-static information.", + "markdown": "Reports `QuickFix#getFamilyName()` using contextual information.\n\n\nThis method must not use any non-static information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "QuickFixGetFamilyNameViolation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePluginIdEquals", + "shortDescription": { + "text": "Use 'PluginId#equals(Object)'" + }, + "fullDescription": { + "text": "Reports comparing 'PluginId' instances using '=='. Replace with 'equals()' call.", + "markdown": "Reports comparing `PluginId` instances using `==`.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UsePluginIdEquals", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StatefulEp", + "shortDescription": { + "text": "Stateful extension" + }, + "fullDescription": { + "text": "Reports extensions and quick-fixes holding potentially leaking state. Keeping references to 'PsiElement', 'PsiReference', or 'Project' instances can result in memory leaks. Ideally, these should be stateless. For quick-fix, see 'LocalQuickFixOnPsiElement' as a convenient base class.", + "markdown": "Reports extensions and quick-fixes holding potentially leaking state.\n\n\nKeeping references to `PsiElement`, `PsiReference`, or `Project` instances can result in memory leaks.\n\n\nIdeally, these should be stateless.\nFor quick-fix, see `LocalQuickFixOnPsiElement` as a convenient base class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "StatefulEp", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectParentDisposable", + "shortDescription": { + "text": "Incorrect parentDisposable parameter" + }, + "fullDescription": { + "text": "Reports using 'Application' or 'Project' as a parent 'Disposable' in plugin code. Such usages will lead to plugins not being unloaded correctly. Please see Choosing a Disposable Parent in SDK Docs.", + "markdown": "Reports using `Application` or `Project` as a parent `Disposable` in plugin code.\n\n\nSuch usages will lead to plugins not being unloaded correctly.\nPlease see [Choosing a\nDisposable Parent](https://plugins.jetbrains.com/docs/intellij/disposers.html?from=IncorrectParentDisposable#choosing-a-disposable-parent) in SDK Docs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncorrectParentDisposable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ActionPresentationInstantiatedInCtor", + "shortDescription": { + "text": "Eager creation of action presentation" + }, + "fullDescription": { + "text": "Reports any actions that are registered in the 'plugin.xml' file and instantiate the 'com.intellij.openapi.actionSystem.Presentation' object in their constructors. Any of the constructors of 'AnAction' with parameters instantiate the 'Presentation' object. However, instantiating the 'Presentation' object in constructor results in allocating resources, which may not be necessary. Instead of creating an instance of 'Presentation' that stores text, description, or icon, it is more efficient to utilize no-argument constructors of 'AnAction' and other base classes and follow the convention for setting the text, description, and icon in 'plugin.xml'. The IDE will load text, description, and icon only when the action is actually displayed in the UI. The convention for setting the text, description, and icon is as follows: Set the 'id' attribute for the action in the 'plugin.xml' file. Optionally, set the 'icon' attribute if an icon is needed. Set the text and description in the associated message bundle (it could be overridden in ''): 'action..text=Translated Action Text' 'action..description=Translated Action Description' Bad example: '// NewKotlinFileAction.kt\n internal class NewKotlinFileAction : AnAction(\n KotlinBundle.message(\"action.new.file.text\"),\n KotlinBundle.message(\"action.new.file.description\"),\n KotlinIcons.FILE\n )' '' Good example: '// NewKotlinFileAction.kt\n internal class NewKotlinFileAction : AnAction()' '\n ' '# KotlinBundle.properties\n action.Kotlin.NewFile.text=Kotlin Class/File\n action.Kotlin.NewFile.description=Creates a new Kotlin class or file' New in 2023.2", + "markdown": "Reports any actions that are registered in the `plugin.xml` file and instantiate\nthe `com.intellij.openapi.actionSystem.Presentation` object in their constructors.\n\n\nAny of the constructors of `AnAction` with parameters instantiate the `Presentation`\nobject. However, instantiating the `Presentation` object in constructor results in allocating\nresources, which may not be necessary. Instead of creating an instance of `Presentation` that\nstores text, description, or icon, it is more efficient to utilize no-argument constructors of\n`AnAction` and other base classes and follow the convention for setting the text, description,\nand icon in `plugin.xml`. The IDE will load text, description, and icon only when the action\nis actually displayed in the UI.\n\n\nThe convention for setting the text, description, and icon is as follows:\n\n* Set the `id` attribute for the action in the `plugin.xml` file.\n* Optionally, set the `icon` attribute if an icon is needed.\n* Set the text and description in the associated message bundle (it could be overridden in ``):\n * `action..text=Translated Action Text`\n * `action..description=Translated Action Description`\n\n**Bad example:**\n\n\n // NewKotlinFileAction.kt\n internal class NewKotlinFileAction : AnAction(\n KotlinBundle.message(\"action.new.file.text\"),\n KotlinBundle.message(\"action.new.file.description\"),\n KotlinIcons.FILE\n )\n\n\n \n \n\n**Good example:**\n\n\n // NewKotlinFileAction.kt\n internal class NewKotlinFileAction : AnAction()\n\n\n \n \n \n\n\n # KotlinBundle.properties\n action.Kotlin.NewFile.text=Kotlin Class/File\n action.Kotlin.NewFile.description=Creates a new Kotlin class or file\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ActionPresentationInstantiatedInCtor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TokenSetInParserDefinition", + "shortDescription": { + "text": "Non-platform TokenSet declared in ParserDefinition" + }, + "fullDescription": { + "text": "Reports 'TokenSet' field declarations referencing non-platform element types in 'ParserDefinition' classes. All languages 'ParserDefinition' are created on the application startup. Declaring a 'TokenSet' referencing non-platform language element types may cause creating and registering all the language element types in the holder class of the referenced type, even if a project doesn't contain any files in this language. Example: '// element types holder:\npublic interface MyLangTokenTypes {\n IElementType COMMENT = new MyLangTokenType(\"COMMENT\");\n IElementType TYPE1 = new MyLangTokenType(\"TYPE1\");\n IElementType TYPE2 = new MyLangTokenType(\"TYPE2\");\n // more types...\n}\n\n\n// bad:\n\npublic class MyLangParserDefinition implements ParserDefinition {\n // this field causes initializing and registering all the types from MyLangTokenTypes:\n private static final TokenSet COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n return COMMENTS;\n }\n ...\n}\n\n\n// good:\n\npublic final class MyLangTokenSets {\n public static final TokenSet COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n}\n\npublic class MyLangParserDefinition implements ParserDefinition {\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n // types are referenced and registered only when this method is called:\n return MyLangTokenSets.COMMENTS;\n }\n ...\n}\n\n// good (Kotlin):\n\n// top-level declaration is not loaded until getCommentTokens() method is called:\nprivate val COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n\nclass MyLangParserDefinition : ParserDefinition {\n override getCommentTokens(): TokenSet {\n return COMMENTS;\n }\n ...\n}\n\n// good:\n\npublic class MyLangParserDefinition implements ParserDefinition {\n // allowed platform TokenSet:\n private static final TokenSet COMMENTS1 = TokenSet.EMPTY;\n // allowed platform TokenType:\n private static final TokenSet COMMENTS2 = TokenSet.create(TokenType.WHITE_SPACE);\n\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n ...\n }\n ...\n}' New in 2023.2", + "markdown": "Reports `TokenSet` field declarations referencing non-platform element types in `ParserDefinition` classes.\n\n\nAll languages `ParserDefinition` are created on the application startup.\nDeclaring a `TokenSet` referencing non-platform language element types may cause creating and registering\nall the language element types in the holder class of the referenced type, even if a project doesn't contain any files in this language.\n\nExample:\n\n\n // element types holder:\n public interface MyLangTokenTypes {\n IElementType COMMENT = new MyLangTokenType(\"COMMENT\");\n IElementType TYPE1 = new MyLangTokenType(\"TYPE1\");\n IElementType TYPE2 = new MyLangTokenType(\"TYPE2\");\n // more types...\n }\n\n\n // bad:\n\n public class MyLangParserDefinition implements ParserDefinition {\n // this field causes initializing and registering all the types from MyLangTokenTypes:\n private static final TokenSet COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n return COMMENTS;\n }\n ...\n }\n\n\n // good:\n\n public final class MyLangTokenSets {\n public static final TokenSet COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n }\n\n public class MyLangParserDefinition implements ParserDefinition {\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n // types are referenced and registered only when this method is called:\n return MyLangTokenSets.COMMENTS;\n }\n ...\n }\n\n // good (Kotlin):\n\n // top-level declaration is not loaded until getCommentTokens() method is called:\n private val COMMENTS = TokenSet.create(MyLangTokenTypes.COMMENT);\n\n class MyLangParserDefinition : ParserDefinition {\n override getCommentTokens(): TokenSet {\n return COMMENTS;\n }\n ...\n }\n\n // good:\n\n public class MyLangParserDefinition implements ParserDefinition {\n // allowed platform TokenSet:\n private static final TokenSet COMMENTS1 = TokenSet.EMPTY;\n // allowed platform TokenType:\n private static final TokenSet COMMENTS2 = TokenSet.create(TokenType.WHITE_SPACE);\n\n @NotNull\n @Override\n public TokenSet getCommentTokens() {\n ...\n }\n ...\n }\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TokenSetInParserDefinition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CompanionObjectInExtension", + "shortDescription": { + "text": "Companion object in extensions" + }, + "fullDescription": { + "text": "Reports incorrect companion objects' usage in extensions. Kotlin companion object is always created once you try to load its containing class, and extension point implementations are supposed to be cheap to create. Excessive classloading in plugins is a huge problem for IDE startup. Bad pattern: 'class KotlinDocumentationProvider : AbstractDocumentationProvider(), ExternalDocumentationProvider {\n\n companion object {\n private val LOG = Logger.getInstance(KotlinDocumentationProvider::class.java)\n private val javaDocumentProvider = JavaDocumentationProvider()\n }\n }' Here 'KotlinDocumentationProvider' is an extension registered in 'plugin.xml': '' In this example 'JavaDocumentationProvider' will be loaded from disk once someone just calls 'new KotlinDocumentationProvider()'. Kotlin companion objects in extension point implementation can only contain a logger and simple constants. Other declarations may cause excessive classloading or early initialization of heavy resources (e.g. TokenSet, Regex, etc.) when the extension class is loaded. Note, that even declarations marked with '@JvmStatic' still produce an extra class for the companion object, potentially causing expensive computations. Instead of being stored in companion object, these declarations must be top-level or stored in an object. FAQ How to rewrite run ConfigurationType? Move the declaration to top-level: '// DO, use top level fun\n internal fun mnRunConfigurationType(): MnRunConfigurationType = runConfigurationType()\n\n internal class MnRunConfigurationType : ConfigurationType {\n companion object { // DON'T\n fun getInstance(): MnRunConfigurationType = runConfigurationType()\n }\n ...' How to rewrite FileType? Before: 'internal class SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {\n companion object {\n val FILE_TYPE = SpringBootImportsFileType()\n ...' After: 'internal object SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {\n ...' Use 'INSTANCE' fieldName in 'plugin.xml': '' How to rewrite CounterUsagesCollector? Internal API Before: 'class AntActionsUsagesCollector : CounterUsagesCollector() {\n override fun getGroup(): EventLogGroup = GROUP\n\n companion object {\n private val GROUP = EventLogGroup(\"build.ant.actions\", 1)\n\n @JvmField\n val runSelectedBuildAction = GROUP.registerEvent(\"RunSelectedBuild\")\n }\n}' After: 'object AntActionsUsagesCollector : CounterUsagesCollector() {\n override fun getGroup(): EventLogGroup = GROUP\n\n private val GROUP = EventLogGroup(\"build.ant.actions\", 1)\n\n @JvmField\n val runSelectedBuildAction = GROUP.registerEvent(\"RunSelectedBuild\")\n}' New in 2023.3", + "markdown": "Reports incorrect companion objects' usage in [extensions](https://plugins.jetbrains.com/docs/intellij/plugin-extensions.html).\n\n\nKotlin companion object is always created once you try to load its containing class, and extension point implementations are supposed to be cheap to create.\nExcessive classloading in plugins is a huge problem for IDE startup.\n\nBad pattern:\n\n\n class KotlinDocumentationProvider : AbstractDocumentationProvider(), ExternalDocumentationProvider {\n\n companion object {\n private val LOG = Logger.getInstance(KotlinDocumentationProvider::class.java)\n private val javaDocumentProvider = JavaDocumentationProvider()\n }\n }\n\n\nHere `KotlinDocumentationProvider` is an extension registered in `plugin.xml`:\n\n\n \n\n\nIn this example `JavaDocumentationProvider` will be loaded from disk once someone just calls `new KotlinDocumentationProvider()`.\n\n\nKotlin companion objects in extension point implementation can only contain a logger and simple constants.\nOther declarations may cause excessive classloading or early initialization of heavy resources (e.g. TokenSet, Regex, etc.)\nwhen the extension class is loaded.\nNote, that even declarations marked with `@JvmStatic` still produce an extra class for the companion object, potentially causing expensive computations.\n\n\nInstead of being stored in companion object, these declarations must be top-level or stored in an object.\n\n### FAQ\n\n#### How to rewrite run ConfigurationType?\n\nMove the declaration to top-level:\n\n\n // DO, use top level fun\n internal fun mnRunConfigurationType(): MnRunConfigurationType = runConfigurationType()\n\n internal class MnRunConfigurationType : ConfigurationType {\n companion object { // DON'T\n fun getInstance(): MnRunConfigurationType = runConfigurationType()\n }\n ...\n\n#### How to rewrite FileType?\n\nBefore:\n\n\n internal class SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {\n companion object {\n val FILE_TYPE = SpringBootImportsFileType()\n ...\n\nAfter:\n\n\n internal object SpringBootImportsFileType : LanguageFileType(SPILanguage.INSTANCE, true) {\n ...\n\nUse `INSTANCE` fieldName in `plugin.xml`:\n\n\n \n\n#### How to rewrite CounterUsagesCollector?\n\n##### Internal API\n\nBefore:\n\n\n class AntActionsUsagesCollector : CounterUsagesCollector() {\n override fun getGroup(): EventLogGroup = GROUP\n\n companion object {\n private val GROUP = EventLogGroup(\"build.ant.actions\", 1)\n\n @JvmField\n val runSelectedBuildAction = GROUP.registerEvent(\"RunSelectedBuild\")\n }\n }\n\nAfter:\n\n\n object AntActionsUsagesCollector : CounterUsagesCollector() {\n override fun getGroup(): EventLogGroup = GROUP\n\n private val GROUP = EventLogGroup(\"build.ant.actions\", 1)\n\n @JvmField\n val runSelectedBuildAction = GROUP.registerEvent(\"RunSelectedBuild\")\n }\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CompanionObjectInExtension", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePlatformProcessAwaitExit", + "shortDescription": { + "text": "Use 'com.intellij.util.io.ProcessKt.awaitExit()'" + }, + "fullDescription": { + "text": "Reports usages of 'Process.waitFor()' and 'Process.onExit()' in coroutine context. Using these methods in coroutine context is forbidden. Use 'com.intellij.util.io.awaitExit()' instead. Example: 'suspend fun doSomething(process: Process) {\n val exitCode = process.waitFor() // bad\n // ...\n}\n\nsuspend fun doSomething(process: Process) {\n val exitCode = process.awaitExit() // good\n // ...\n}' New in 2023.3", + "markdown": "Reports usages of `Process.waitFor()` and `Process.onExit()` in coroutine context. Using these methods in coroutine context is forbidden.\n\nUse `com.intellij.util.io.awaitExit()` instead.\n\nExample:\n\n\n suspend fun doSomething(process: Process) {\n val exitCode = process.waitFor() // bad\n // ...\n }\n\n suspend fun doSomething(process: Process) {\n val exitCode = process.awaitExit() // good\n // ...\n }\n\nNew in 2023.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UsePlatformProcessAwaitExit", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PsiElementConcatenation", + "shortDescription": { + "text": "Using PsiElement string representation to generate new expression is incorrect" + }, + "fullDescription": { + "text": "Reports direct usage of 'PsiElement' and 'PsiType' in strings. When building strings for 'PsiJavaParserFacade.createExpressionFromText()' (or similar methods), 'PsiElement.getText()' should be used instead.", + "markdown": "Reports direct usage of `PsiElement` and `PsiType` in strings.\n\n\nWhen building strings for `PsiJavaParserFacade.createExpressionFromText()` (or similar methods), `PsiElement.getText()` should be used\ninstead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PsiElementConcatenation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeReturnStatementVisitor", + "shortDescription": { + "text": "Unsafe return statements visitor" + }, + "fullDescription": { + "text": "Reports unsafe use of 'JavaRecursiveElementVisitor.visitReturnStatement()'. Processing 'PsiReturnStatement's even if they belong to another 'PsiClass' or 'PsiLambdaExpression' is a bug in most cases, and a visitor most probably should implement 'visitClass()' and 'visitLambdaExpression()' methods.", + "markdown": "Reports unsafe use of `JavaRecursiveElementVisitor.visitReturnStatement()`.\n\n\nProcessing `PsiReturnStatement`s\neven if they belong to another `PsiClass` or `PsiLambdaExpression` is a bug in most cases, and a visitor most\nprobably should implement `visitClass()` and `visitLambdaExpression()` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnsafeReturnStatementVisitor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UndesirableClassUsage", + "shortDescription": { + "text": "Undesirable class usage" + }, + "fullDescription": { + "text": "Reports usages of undesirable classes (mostly Swing components). Quick-fix offers replacement with recommended IntelliJ Platform replacement.", + "markdown": "Reports usages of undesirable classes (mostly Swing components).\n\n\nQuick-fix offers replacement with recommended IntelliJ Platform replacement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UndesirableClassUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallingMethodShouldBeRequiresBlockingContext", + "shortDescription": { + "text": "Calling method should be annotated with @RequiresBlockingContext" + }, + "fullDescription": { + "text": "Highlights calls of method annotated with '@RequiresBlockingMethod' inside non-annotated method. The calling method should be also annotated with '@RequiresBlockingMethod' to clearly state its contract.", + "markdown": "Highlights calls of method annotated with `@RequiresBlockingMethod` inside non-annotated method.\nThe calling method should be also annotated with `@RequiresBlockingMethod` to clearly state its contract." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CallingMethodShouldBeRequiresBlockingContext", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InspectionDescriptionNotFoundInspection", + "shortDescription": { + "text": "Inspection description checker" + }, + "fullDescription": { + "text": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this.\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InspectionDescriptionNotFoundInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 138, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlValidity", + "shortDescription": { + "text": "Plugin.xml validity" + }, + "fullDescription": { + "text": "Reports problems in 'plugin.xml'. Invalid configuration can lead to problems at runtime.", + "markdown": "Reports problems in `plugin.xml`.\n\n\nInvalid configuration can lead to problems at runtime." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PluginXmlValidity", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 85, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LeakableMapKey", + "shortDescription": { + "text": "Map key may leak" + }, + "fullDescription": { + "text": "Reports using 'Language' or 'FileType' as a map key in plugin code. Such usages might lead to inability to unload the plugin properly. Please consider using 'String' as keys instead. See Dynamic Plugins in SDK Docs for more information.", + "markdown": "Reports using `Language` or `FileType` as a map key in plugin code.\n\n\nSuch usages might lead to inability to unload the plugin properly.\n\n\nPlease consider using `String` as keys instead.\n\n\nSee [Dynamic\nPlugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html) in SDK Docs for more information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LeakableMapKey", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostfixTemplateDescriptionNotFound", + "shortDescription": { + "text": "Postfix template description checker" + }, + "fullDescription": { + "text": "Reports postfix templates missing an HTML description file, 'before.template' file or 'after.template' file. These are shown in Settings | Editor | General | Postfix Completion. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports postfix templates missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| General \\| Postfix Completion](settings://reference.settingsdialog.IDE.editor.postfix.templates).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PostfixTemplateDescriptionNotFound", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 138, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeVfsRecursion", + "shortDescription": { + "text": "Unsafe VFS recursion" + }, + "fullDescription": { + "text": "Reports usage of 'VirtualFile.getChildren()' inside recursive methods. This may cause endless loops when iterating over cyclic symlinks. Use 'VfsUtilCore.visitChildrenRecursively()' instead. 'void processDirectory(VirtualFile dir) {\n for (VirtualFile file : dir.getChildren()) { // bad\n if (!file.isDirectory()) {\n processFile(file);\n } else {\n processDirectory(file); // recursive call\n }\n }\n}'\n 'void processDirectory(VirtualFile dir) {\n VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor() { // good\n @Override\n public boolean visitFile(@NotNull VirtualFile file) {\n if (!file.isDirectory()) {\n processFile(file);\n }\n return true;\n }\n });\n}'", + "markdown": "Reports usage of `VirtualFile.getChildren()` inside recursive methods.\n\n\nThis may cause endless loops when iterating over cyclic symlinks.\nUse `VfsUtilCore.visitChildrenRecursively()` instead.\n\n\n void processDirectory(VirtualFile dir) {\n for (VirtualFile file : dir.getChildren()) { // bad\n if (!file.isDirectory()) {\n processFile(file);\n } else {\n processDirectory(file); // recursive call\n }\n }\n }\n\n\n void processDirectory(VirtualFile dir) {\n VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor() { // good\n @Override\n public boolean visitFile(@NotNull VirtualFile file) {\n if (!file.isDirectory()) {\n processFile(file);\n }\n return true;\n }\n });\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnsafeVfsRecursion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FileEqualsUsage", + "shortDescription": { + "text": "File.equals() usage" + }, + "fullDescription": { + "text": "Reports usages of 'java.io.File.equals()/hashCode()/compareTo()' methods. These do not honor case-insensitivity on macOS. Use 'com.intellij.openapi.util.io.FileUtil.filesEquals()/fileHashCode()/compareFiles()' methods instead.", + "markdown": "Reports usages of `java.io.File.equals()/hashCode()/compareTo()` methods.\n\n\nThese do not honor case-insensitivity on macOS.\n\n\nUse `com.intellij.openapi.util.io.FileUtil.filesEquals()/fileHashCode()/compareFiles()` methods instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FileEqualsUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 69, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WorkspaceImplAbsent", + "shortDescription": { + "text": "Generate implementation" + }, + "fullDescription": { + "text": "Reports absent of implementation for the entity. Verifies that each entity in the project has the implementation. Suggests generation implementation for the whole entities in the current module.", + "markdown": "Reports absent of implementation for the entity.\n\n\nVerifies that each entity in the project has the implementation.\n\n\nSuggests generation implementation for the whole entities in the current module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WorkspaceImplAbsent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Workspace model", + "index": 64, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "intellij.ktor", + "version": "241.17569", + "rules": [ + { + "id": "KtorOpenApi", + "shortDescription": { + "text": "OpenAPI documentation for current module is missing" + }, + "fullDescription": { + "text": "Reports that there is no OpenAPI documentation for the current Ktor module.", + "markdown": "Reports that there is no OpenAPI documentation for the current Ktor module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "KtorOpenApi", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Ktor", + "index": 66, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KtorYamlConfig", + "shortDescription": { + "text": "Ktor application.yaml" + }, + "fullDescription": { + "text": "Reports deprecated configuration keys and invalid values in Ktor application '.yaml' configuration files.", + "markdown": "Reports deprecated configuration keys and invalid values in Ktor application `.yaml` configuration files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KtorYamlConfig", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Ktor", + "index": 66, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KtorOpenApiUpdate", + "shortDescription": { + "text": "OpenAPI documentation for current module is outdated" + }, + "fullDescription": { + "text": "Reports that OpenAPI documentation for the current Ktor module is outdated.", + "markdown": "Reports that OpenAPI documentation for the current Ktor module is outdated." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KtorOpenApiUpdate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Ktor", + "index": 66, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.cdi", + "version": "241.17569", + "rules": [ + { + "id": "CdiUnknownProducersForDisposerMethodInspection", + "shortDescription": { + "text": "Disposer method parameter without producers" + }, + "fullDescription": { + "text": "Reports disposer methods without the corresponding producer method. Each disposer method must have exactly one disposed parameter of the same type as the corresponding producer method or the producer field return type. When searching the disposer methods for a producer method or producer field, the container considers the type and qualifiers of the disposed parameter. If the disposed parameter resolves to a producer method or producer field declared by the same bean class, the container must call this method when destroying any instance returned by that producer method or producer field.", + "markdown": "Reports disposer methods without the corresponding producer method.\n\nEach disposer method must have exactly one disposed parameter of the same type as the corresponding producer method or\nthe producer field return type. When searching the disposer methods for a producer method or producer field, the container\nconsiders the type and qualifiers of the disposed parameter. If the disposed parameter resolves to a producer method or\nproducer field declared by the same bean class, the container must call this method when destroying any instance returned by\nthat producer method or producer field." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CdiUnknownProducersForDisposerMethodInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiTypedAnnotationInspection", + "shortDescription": { + "text": "Incorrect @Typed annotation usage" + }, + "fullDescription": { + "text": "Reports '@Typed' annotation usages that violate the following rules: Only producer methods can have the '@Typed' annotation Bean type must correspond to the types mentioned in the '@Typed' annotation", + "markdown": "Reports `@Typed` annotation usages that violate the following rules:\n\n* Only producer methods can have the `@Typed` annotation\n* Bean type must correspond to the types mentioned in the `@Typed` annotation" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiTypedAnnotationInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiDomBeans", + "shortDescription": { + "text": "Incorrect bean definitions in beans.xml" + }, + "fullDescription": { + "text": "Reports incorrect bean definitions in 'beans.xml' configuration files.", + "markdown": "Reports incorrect bean definitions in `beans.xml` configuration files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CdiDomBeans", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiDisposerMethodInspection", + "shortDescription": { + "text": "Incorrect disposer method" + }, + "fullDescription": { + "text": "Reports incorrect disposer methods. Cannot be abstract. Must have exactly only one disposed parameter annotated with '@Disposes'.", + "markdown": "Reports incorrect disposer methods.\n\n* Cannot be abstract.\n* Must have exactly only one disposed parameter annotated with `@Disposes`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiDisposerMethodInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiManagedBeanInconsistencyInspection", + "shortDescription": { + "text": "Incorrect managed bean definition" + }, + "fullDescription": { + "text": "Reports incorrect bean definition rules. Top-level Java class can be a simple bean if: It is not a parameterized type. It is not a non-static inner class. It is a concrete class, or is annotated with '@Decorator'. It has an appropriate constructor: either the class has a constructor with no parameters, or the class declares a constructor annotated with '@Initializer'. It does not implement any of the following interfaces: 'javax.servlet.Servlet', 'javax.servlet.Filter', 'javax.servlet.ServletContextListener', 'javax.servlet.http.HttpSessionListener', 'javax.servlet.ServletRequestListener', 'javax.ejb.EnterpriseBean'. It does not extend 'javax.faces.component.UIComponent'.", + "markdown": "Reports incorrect bean definition rules.\n\nTop-level Java class can be a simple bean if:\n\n* It is not a parameterized type.\n* It is not a non-static inner class.\n* It is a concrete class, or is annotated with `@Decorator`.\n* It has an appropriate constructor: either the class has a constructor with no parameters, or the class declares a constructor annotated with `@Initializer`.\n* It does not implement any of the following interfaces: `javax.servlet.Servlet`, `javax.servlet.Filter`, `javax.servlet.ServletContextListener`, `javax.servlet.http.HttpSessionListener`, `javax.servlet.ServletRequestListener`, `javax.ejb.EnterpriseBean`.\n* It does not extend `javax.faces.component.UIComponent`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiManagedBeanInconsistencyInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiDecoratorInspection", + "shortDescription": { + "text": "Incorrect @Decorator class" + }, + "fullDescription": { + "text": "Reports incorrect '@Decorator' bean definitions. Cannot be final. Must have exactly one delegate attribute (field or parameter) annotated with '@Delegate'.", + "markdown": "Reports incorrect `@Decorator` bean definitions.\n\n* Cannot be final.\n* Must have exactly one delegate attribute (field or parameter) annotated with `@Delegate`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiDecoratorInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiScopeInspection", + "shortDescription": { + "text": "Incorrect bean scope" + }, + "fullDescription": { + "text": "Reports incorrect bean scopes: Singleton bean must be either '@ApplicationScoped' or '@Dependent' Session stateless bean must be '@Dependent'", + "markdown": "Reports incorrect bean scopes:\n\n* Singleton bean must be either `@ApplicationScoped` or `@Dependent`\n* Session stateless bean must be `@Dependent`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CdiScopeInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiSpecializesInspection", + "shortDescription": { + "text": "Incorrect @Specializes usage" + }, + "fullDescription": { + "text": "Reports incorrect usages of the '@Specializes' annotation. Specializing bean must extend another bean Specializing method must override a '@Produces' method of its direct superclass '@Named' annotation cannot be used on the specializing and specialized class Two or more classes cannot specialize the same superclass Specializing method cannot be static", + "markdown": "Reports incorrect usages of the `@Specializes` annotation.\n\n* Specializing bean must extend another bean\n* Specializing method must override a `@Produces` method of its direct superclass\n* `@Named` annotation cannot be used on the specializing and specialized class\n* Two or more classes cannot specialize the same superclass\n* Specializing method cannot be static" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiSpecializesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiAlternativeInspection", + "shortDescription": { + "text": "Vetoed @Alternative bean" + }, + "fullDescription": { + "text": "Reports vetoed '@Alternative' beans. A bean is considered vetoed when it is annotated with '@Vetoed' or it is declared in a vetoed package.", + "markdown": "Reports vetoed `@Alternative` beans.\nA bean is considered vetoed when it is annotated with `@Vetoed` or it is declared in a vetoed package." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiAlternativeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiObservesInspection", + "shortDescription": { + "text": "Incorrect observer method" + }, + "fullDescription": { + "text": "Reports incorrect observer method definitions. Must contain only one '@Observes' parameter Cannot have parameters annotated with '@Disposes' Cannot be annotated with '@Inject' and '@Produces'", + "markdown": "Reports incorrect observer method definitions.\n\n* Must contain only one `@Observes` parameter\n* Cannot have parameters annotated with `@Disposes`\n* Cannot be annotated with `@Inject` and `@Produces`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiObservesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiStereotypeRestrictionsInspection", + "shortDescription": { + "text": "Bean has collision of scope in stereotypes" + }, + "fullDescription": { + "text": "Reports classes with multiple stereotypes in different scopes or if a scope is not specified", + "markdown": "Reports classes with multiple stereotypes in different scopes or if a scope is not specified" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiStereotypeRestrictionsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiStereotypeInspection", + "shortDescription": { + "text": "Incorrect @Stereotype annotation class" + }, + "fullDescription": { + "text": "Reports incorrect '@Stereotype' annotation classes: Non-empty '@Named' annotation is not allowed for stereotypes Qualifier annotations are not allowed for stereotypes", + "markdown": "Reports incorrect `@Stereotype` annotation classes:\n\n* Non-empty `@Named` annotation is not allowed for stereotypes\n* Qualifier annotations are not allowed for stereotypes" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiStereotypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiInjectionPointsInspection", + "shortDescription": { + "text": "Injection point with ambiguous dependencies" + }, + "fullDescription": { + "text": "Reports injection points in bean classes that have ambiguous dependencies. Example: 'interface Engine {}\n\n @Singleton\n class GasEngine implements Engine {}\n\n @Singleton\n class ElectricEngine implements Engine {}\n\n @Singleton\n class Car {\n @Inject Engine engine; // Ambiguous dependency: there are multiple beans that match the injection point\n }'", + "markdown": "Reports injection points in bean classes that have ambiguous dependencies.\n\n**Example:**\n\n\n interface Engine {}\n\n @Singleton\n class GasEngine implements Engine {}\n\n @Singleton\n class ElectricEngine implements Engine {}\n\n @Singleton\n class Car {\n @Inject Engine engine; // Ambiguous dependency: there are multiple beans that match the injection point\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CdiInjectionPointsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiNormalScopeInspection", + "shortDescription": { + "text": "Bean with non-default scope declares public fields" + }, + "fullDescription": { + "text": "Reports managed beans with public instance fields that are not in the default '@Dependent' scope. According to the CDI specification, contextual scopes ('@RequestScoped', '@ApplicationScoped', '@SessionScoped', and 'ConversationScoped') are not allowed for managed beans with public instance fields. Example: '@ApplicationScoped // Warning: Bean with non-default scope must not have public fields\n class Car {\n public String engine;\n }'", + "markdown": "Reports managed beans with public instance fields that are not in the default `@Dependent` scope.\nAccording to the CDI specification, contextual scopes\n(`@RequestScoped`, `@ApplicationScoped`, `@SessionScoped`, and `ConversationScoped`)\nare not allowed for managed beans with public instance fields.\n\n**Example:**\n\n\n @ApplicationScoped // Warning: Bean with non-default scope must not have public fields\n class Car {\n public String engine;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CdiNormalScopeInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiInterceptorInspection", + "shortDescription": { + "text": "@Interceptor class without binding types" + }, + "fullDescription": { + "text": "Reports '@Interceptor' classes without binding types. An interceptor must specify at least one interceptor binding.", + "markdown": "Reports `@Interceptor` classes without binding types. An interceptor must specify at least one interceptor binding." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiInterceptorInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiInjectInspection", + "shortDescription": { + "text": "Incorrect dependency injection place" + }, + "fullDescription": { + "text": "Reports incorrect injection points: fields, methods, and parameters annotated with '@Inject' that violate the CDI specification. Requirements for fields: Cannot be static or final Cannot be annotated with '@Produces' Requirements for methods with injection: Cannot be static or abstract Cannot have parameters with '@Disposes' and '@Observes' annotations", + "markdown": "Reports incorrect injection points: fields, methods, and parameters annotated with `@Inject` that violate the CDI specification.\n\nRequirements for fields:\n\n* Cannot be static or final\n* Cannot be annotated with `@Produces`\n\nRequirements for methods with injection:\n\n* Cannot be static or abstract\n* Cannot have parameters with `@Disposes` and `@Observes` annotations" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiInjectInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CdiUnproxyableBeanTypesInspection", + "shortDescription": { + "text": "Incorrect usage of bean type that cannot be proxied" + }, + "fullDescription": { + "text": "Reports incorrect usages of bean types that cannot be proxied. The container can't proxy certain legal bean types: classes which don't have a non-private constructor with no parameters, classes which are declared final, or have final methods, primitive types, and array types. The inspection reports the following violations for such bean types: Managed bean declaring a passivating scope must be 'java.io.Serializable' Bean of non-serializable type cannot be injected into a bean of passivating scope The container must be able to proxy tha injected normal scoped bean", + "markdown": "Reports incorrect usages of bean types that cannot be proxied.\n\nThe container can't proxy certain legal bean types:\nclasses which don't have a non-private constructor with no parameters,\nclasses which are declared final,\nor have final methods, primitive types, and array types.\n\nThe inspection reports the following violations for such bean types:\n\n* Managed bean declaring a passivating scope must be `java.io.Serializable`\n* Bean of non-serializable type cannot be injected into a bean of passivating scope\n* The container must be able to proxy tha injected normal scoped bean" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CdiUnproxyableBeanTypesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CDI (Contexts and Dependency Injection)", + "index": 67, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.velocity", + "version": "241.17569", + "rules": [ + { + "id": "VtlInterpolationsInspection", + "shortDescription": { + "text": "Well-formedness inspection" + }, + "fullDescription": { + "text": "Reports illegal usages of formal notation within '#macro' and '#set' directives.", + "markdown": "Reports illegal usages of formal notation within `#macro` and `#set` directives." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "VtlInterpolationsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Velocity", + "index": 68, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VtlReferencesInspection", + "shortDescription": { + "text": "References inspection" + }, + "fullDescription": { + "text": "Reports if Velocity references are resolved incorrectly.", + "markdown": "Reports if Velocity references are resolved incorrectly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VtlReferencesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Velocity", + "index": 68, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VtlDirectiveArgsInspection", + "shortDescription": { + "text": "Directive arguments inspection" + }, + "fullDescription": { + "text": "Reports illegal values or argument types of Velocity directives.", + "markdown": "Reports illegal values or argument types of Velocity directives." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VtlDirectiveArgsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Velocity", + "index": 68, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VtlFileReferencesInspection", + "shortDescription": { + "text": "File references inspection" + }, + "fullDescription": { + "text": "Reports if Velocity file references in '#include' and '#parse' directives are resolved incorrectly.", + "markdown": "Reports if Velocity file references in `#include` and `#parse` directives are resolved incorrectly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VtlFileReferencesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Velocity", + "index": 68, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VtlTypesInspection", + "shortDescription": { + "text": "Types inspection" + }, + "fullDescription": { + "text": "Reports if binary and unary expressions have operands with incorrect types.", + "markdown": "Reports if binary and unary expressions have operands with incorrect types." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VtlTypesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Velocity", + "index": 68, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.css", + "version": "241.17569", + "rules": [ + { + "id": "CssInvalidFunction", + "shortDescription": { + "text": "Invalid function" + }, + "fullDescription": { + "text": "Reports an unknown CSS function or an incorrect function parameter.", + "markdown": "Reports an unknown [CSS function](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Functions) or an incorrect function parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidFunction", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssMissingComma", + "shortDescription": { + "text": "Missing comma in selector list" + }, + "fullDescription": { + "text": "Reports a multi-line selector. Most likely this means that several single-line selectors are actually intended but a comma is missing at the end of one or several lines. Example: 'input /* comma has probably been forgotten */\n.button {\n margin: 1px;\n}'", + "markdown": "Reports a multi-line selector. Most likely this means that several single-line selectors are actually intended but a comma is missing at the end of one or several lines.\n\n**Example:**\n\n\n input /* comma has probably been forgotten */\n .button {\n margin: 1px;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssMissingComma", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 104, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssConvertColorToRgbInspection", + "shortDescription": { + "text": "Color could be replaced with rgb()" + }, + "fullDescription": { + "text": "Reports an 'hsl()' or 'hwb()' color function or a hexadecimal color notation. Suggests replacing such color value with an equivalent 'rgb()' or 'rgba()' color function. Example: '#0c0fff' After the quick-fix is applied: 'rgb(12, 15, 255)'.", + "markdown": "Reports an `hsl()` or `hwb()` color function or a hexadecimal color notation.\n\nSuggests replacing such color value with an equivalent `rgb()` or `rgba()` color function.\n\n**Example:**\n\n #0c0fff\n\nAfter the quick-fix is applied:\n\n rgb(12, 15, 255).\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssConvertColorToRgbInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnusedSymbol", + "shortDescription": { + "text": "Unused selector" + }, + "fullDescription": { + "text": "Reports a CSS class or an element IDs that appears in selectors but is not used in HTML. Note that complete inspection results are available only when running it via Code | Inspect Code or Code | Analyze Code | Run Inspection by Name. Due to performance reasons, style sheet files are not inspected on the fly.", + "markdown": "Reports a CSS class or an element IDs that appears in selectors but is not used in HTML.\n\n\nNote that complete inspection results are available only when running it via **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name**.\nDue to performance reasons, style sheet files are not inspected on the fly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssUnusedSymbol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssDeprecatedValue", + "shortDescription": { + "text": "Deprecated value" + }, + "fullDescription": { + "text": "Reports a deprecated CSS value. Suggests replacing the deprecated value with its valid equivalent.", + "markdown": "Reports a deprecated CSS value. Suggests replacing the deprecated value with its valid equivalent." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssDeprecatedValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNonIntegerLengthInPixels", + "shortDescription": { + "text": "Non-integer length in pixels" + }, + "fullDescription": { + "text": "Reports a non-integer length in pixels. Example: 'width: 3.14px'", + "markdown": "Reports a non-integer length in pixels.\n\n**Example:**\n\n width: 3.14px\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssNonIntegerLengthInPixels", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 104, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssOverwrittenProperties", + "shortDescription": { + "text": "Overwritten property" + }, + "fullDescription": { + "text": "Reports a duplicated CSS property within a ruleset. Respects shorthand properties. Example: '.foo {\n margin-bottom: 1px;\n margin-bottom: 1px; /* duplicates margin-bottom */\n margin: 0; /* overrides margin-bottom */\n}'", + "markdown": "Reports a duplicated CSS property within a ruleset. Respects shorthand properties.\n\n**Example:**\n\n\n .foo {\n margin-bottom: 1px;\n margin-bottom: 1px; /* duplicates margin-bottom */\n margin: 0; /* overrides margin-bottom */\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssOverwrittenProperties", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidNestedSelector", + "shortDescription": { + "text": "Invalid nested selector" + }, + "fullDescription": { + "text": "Reports a nested selector starting with an identifier or a functional notation.", + "markdown": "Reports a nested selector starting with an identifier or a functional notation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidNestedSelector", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidHtmlTagReference", + "shortDescription": { + "text": "Invalid type selector" + }, + "fullDescription": { + "text": "Reports a CSS type selector that matches an unknown HTML element.", + "markdown": "Reports a CSS [type selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Type_selectors) that matches an unknown HTML element." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidHtmlTagReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssMissingSemicolon", + "shortDescription": { + "text": "Missing semicolon" + }, + "fullDescription": { + "text": "Reports a missing semicolon at the end of a declaration.", + "markdown": "Reports a missing semicolon at the end of a declaration." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssMissingSemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Code style issues", + "index": 191, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCustomPropertyAtRuleName", + "shortDescription": { + "text": "Invalid @property name" + }, + "fullDescription": { + "text": "Reports an invalid custom property name. Custom property name should be prefixed with two dashes. Example: '@property invalid-property-name {\n ...\n}\n\n@property --valid-property-name {\n ...\n}'", + "markdown": "Reports an invalid custom property name. Custom property name should be prefixed with two dashes.\n\n**Example:**\n\n\n @property invalid-property-name {\n ...\n }\n\n @property --valid-property-name {\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidCustomPropertyAtRuleName", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssConvertColorToHexInspection", + "shortDescription": { + "text": "Color could be replaced with #-hex" + }, + "fullDescription": { + "text": "Reports an 'rgb()', 'hsl()', or other color function. Suggests replacing a color function with an equivalent hexadecimal notation. Example: 'rgb(12, 15, 255)' After the quick-fix is applied: '#0c0fff'.", + "markdown": "Reports an `rgb()`, `hsl()`, or other color function.\n\nSuggests replacing a color function with an equivalent hexadecimal notation.\n\n**Example:**\n\n rgb(12, 15, 255)\n\nAfter the quick-fix is applied:\n\n #0c0fff.\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssConvertColorToHexInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidAtRule", + "shortDescription": { + "text": "Unknown at-rule" + }, + "fullDescription": { + "text": "Reports an unknown CSS at-rule.", + "markdown": "Reports an unknown [CSS at-rule](https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidAtRule", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownTarget", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference, for example, an incorrect path in an '@import' statement.", + "markdown": "Reports an unresolved file reference, for example, an incorrect path in an `@import` statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnknownTarget", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNegativeValue", + "shortDescription": { + "text": "Negative property value" + }, + "fullDescription": { + "text": "Reports a negative value of a CSS property that is not expected to be less than zero, for example, object width or height.", + "markdown": "Reports a negative value of a CSS property that is not expected to be less than zero, for example, object width or height." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssNegativeValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNoGenericFontName", + "shortDescription": { + "text": "Missing generic font family name" + }, + "fullDescription": { + "text": "Verifies that the 'font-family' property contains a generic font family name as a fallback alternative. Generic font family names are: 'serif', 'sans-serif', 'cursive', 'fantasy', and 'monospace'.", + "markdown": "Verifies that the [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) property contains a generic font family name as a fallback alternative.\n\n\nGeneric font family names are: `serif`, `sans-serif`, `cursive`, `fantasy`,\nand `monospace`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssNoGenericFontName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 104, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCharsetRule", + "shortDescription": { + "text": "Misplaced or incorrect @charset" + }, + "fullDescription": { + "text": "Reports a misplaced '@charset' at-rule or an incorrect charset value.", + "markdown": "Reports a misplaced `@charset` at-rule or an incorrect charset value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidCharsetRule", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidPseudoSelector", + "shortDescription": { + "text": "Invalid pseudo-selector" + }, + "fullDescription": { + "text": "Reports an incorrect CSS pseudo-class pseudo-element.", + "markdown": "Reports an incorrect CSS [pseudo-class](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes) [pseudo-element](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidPseudoSelector", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCustomPropertyAtRuleDeclaration", + "shortDescription": { + "text": "Invalid @property declaration" + }, + "fullDescription": { + "text": "Reports a missing required syntax, inherits, or initial-value property in a declaration of a custom property.", + "markdown": "Reports a missing required [syntax](https://developer.mozilla.org/en-US/docs/web/css/@property/syntax), [inherits](https://developer.mozilla.org/en-US/docs/web/css/@property/inherits), or [initial-value](https://developer.mozilla.org/en-US/docs/web/css/@property/initial-value) property in a declaration of a custom property." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidCustomPropertyAtRuleDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssRedundantUnit", + "shortDescription": { + "text": "Redundant measure unit" + }, + "fullDescription": { + "text": "Reports a measure unit of a zero value where units are not required by the specification. Example: 'width: 0px'", + "markdown": "Reports a measure unit of a zero value where units are not required by the specification.\n\n**Example:**\n\n width: 0px\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssRedundantUnit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Code style issues", + "index": 191, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidPropertyValue", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports an incorrect CSS property value.", + "markdown": "Reports an incorrect CSS property value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidPropertyValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssBrowserCompatibilityForProperties", + "shortDescription": { + "text": "Property is incompatible with selected browsers" + }, + "fullDescription": { + "text": "Reports a CSS property that is not supported by the specified browsers. Based on the MDN Compatibility Data.", + "markdown": "Reports a CSS property that is not supported by the specified browsers. Based on the [MDN Compatibility Data](https://github.com/mdn/browser-compat-data)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssBrowserCompatibilityForProperties", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssReplaceWithShorthandUnsafely", + "shortDescription": { + "text": "Properties may probably be replaced with a shorthand" + }, + "fullDescription": { + "text": "Reports a set of longhand CSS properties and suggests replacing an incomplete set of longhand CSS properties with a shorthand form, which is however not 100% equivalent in this case. For example, 2 properties: 'outline-color' and 'outline-style' may be replaced with a single 'outline'. Such replacement is not 100% equivalent because shorthands reset all omitted sub-values to their initial states. In this example, switching to the 'outline' shorthand means that 'outline-width' is also set to its initial value, which is 'medium'. This inspection doesn't handle full sets of longhand properties (when switching to shorthand is 100% safe). For such cases see the 'Properties may be safely replaced with a shorthand' inspection instead.", + "markdown": "Reports a set of longhand CSS properties and suggests replacing an incomplete set of longhand CSS properties with a shorthand form, which is however not 100% equivalent in this case.\n\n\nFor example, 2 properties: `outline-color` and `outline-style` may be replaced with a single `outline`.\nSuch replacement is not 100% equivalent because shorthands reset all omitted sub-values to their initial states.\nIn this example, switching to the `outline` shorthand means that `outline-width` is also set to its initial value,\nwhich is `medium`.\n\n\nThis inspection doesn't handle full sets of longhand properties (when switching to shorthand is 100% safe).\nFor such cases see the 'Properties may be safely replaced with a shorthand' inspection instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssReplaceWithShorthandUnsafely", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownUnit", + "shortDescription": { + "text": "Unknown unit" + }, + "fullDescription": { + "text": "Reports an unknown unit.", + "markdown": "Reports an unknown unit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnknownUnit", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidMediaFeature", + "shortDescription": { + "text": "Invalid media feature" + }, + "fullDescription": { + "text": "Reports an unknown CSS media feature or an incorrect media feature value.", + "markdown": "Reports an unknown [CSS media feature](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries) or an incorrect media feature value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidMediaFeature", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidImport", + "shortDescription": { + "text": "Misplaced @import" + }, + "fullDescription": { + "text": "Reports a misplaced '@import' statement. According to the specification, '@import' rules must precede all other types of rules, except '@charset' rules.", + "markdown": "Reports a misplaced `@import` statement.\n\n\nAccording to the [specification](https://developer.mozilla.org/en-US/docs/Web/CSS/@import),\n`@import` rules must precede all other types of rules, except `@charset` rules." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnresolvedCustomProperty", + "shortDescription": { + "text": "Unresolved custom property" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a custom property among the arguments of the 'var()' function.", + "markdown": "Reports an unresolved reference to a [custom property](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) among the arguments of the `var()` function." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnresolvedCustomProperty", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnresolvedClassInComposesRule", + "shortDescription": { + "text": "Unresolved class in 'composes' rule" + }, + "fullDescription": { + "text": "Reports a CSS class reference in the 'composes' rule that cannot be resolved to any valid target. Example: '.className {/* ... */}\n\n .otherClassName {\n composes: className;\n }'", + "markdown": "Reports a CSS class reference in the ['composes'](https://github.com/css-modules/css-modules#composition) rule that cannot be resolved to any valid target.\n\n**Example:**\n\n\n .className {/* ... */}\n\n .otherClassName {\n composes: className;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnresolvedClassInComposesRule", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssReplaceWithShorthandSafely", + "shortDescription": { + "text": "Properties may be safely replaced with a shorthand" + }, + "fullDescription": { + "text": "Reports a set of longhand properties. Suggests replacing a complete set of longhand CSS properties with an equivalent shorthand form. For example, 4 properties: 'padding-top', 'padding-right', 'padding-bottom', and 'padding-left' can be safely replaced with a single 'padding' property. Note that this inspection doesn't show up if the set of longhand properties is incomplete (e.g. only 3 'padding-xxx' properties in a ruleset) because switching to a shorthand may change the result. For such cases consider the 'Properties may probably be replaced with a shorthand' inspection.", + "markdown": "Reports a set of longhand properties. Suggests replacing a complete set of longhand CSS properties with an equivalent shorthand form.\n\n\nFor example, 4 properties: `padding-top`, `padding-right`, `padding-bottom`, and\n`padding-left`\ncan be safely replaced with a single `padding` property.\n\n\nNote that this inspection doesn't show up if the set of longhand properties is incomplete\n(e.g. only 3 `padding-xxx` properties in a ruleset)\nbecause switching to a shorthand may change the result.\nFor such cases consider the 'Properties may probably be replaced with a shorthand'\ninspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssReplaceWithShorthandSafely", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 72, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownProperty", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports an unknown CSS property or a property used in a wrong context. Add the unknown property to the 'Custom CSS properties' list to skip validation.", + "markdown": "Reports an unknown CSS property or a property used in a wrong context.\n\nAdd the unknown property to the 'Custom CSS properties' list to skip validation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssUnknownProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 73, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.jetbrains.restClient", + "version": "241.17569", + "rules": [ + { + "id": "HttpClientUnresolvedAuthId", + "shortDescription": { + "text": "Unresolved Auth identifier" + }, + "fullDescription": { + "text": "Highlights references to non-existent Auth configurations. Suggests creating a new one in the current environment.", + "markdown": "Highlights references to non-existent Auth configurations. Suggests creating a new one in the current environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "HttpClientUnresolvedAuthId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestEnvironmentAuthConfigurationValidationInspection", + "shortDescription": { + "text": "Auth configuration validation" + }, + "fullDescription": { + "text": "Reports Auth configuration the following problems in HTTP Client environment files: Missing properties in Auth configuration Auth/Security configuration placed in private environment file", + "markdown": "Reports Auth configuration the following problems in HTTP Client environment files:\n\n* Missing properties in Auth configuration\n* Auth/Security configuration placed in private environment file" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HttpRequestEnvironmentAuthConfigurationValidationInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpUrlsUsage", + "shortDescription": { + "text": "Link with unencrypted protocol" + }, + "fullDescription": { + "text": "Reports the links that use unencrypted protocols (such as HTTP), which can expose your data to man-in-the-middle attacks. These attacks are dangerous in general and may be especially harmful for artifact repositories. Use protocols with encryption, such as HTTPS, instead. See HTTPS: Difference from HTTP (wikipedia.org).", + "markdown": "Reports the links that use unencrypted protocols (such as HTTP), which can expose your data to man-in-the-middle attacks. These attacks\nare dangerous in general and may be especially harmful for artifact repositories. Use protocols with encryption, such as HTTPS,\ninstead.\n\nSee [HTTPS: Difference from HTTP (wikipedia.org)](https://en.wikipedia.org/wiki/HTTPS#Difference_from_HTTP)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpUrlsUsage", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Security", + "index": 142, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestRequestSeparatorJsonBodyInspection", + "shortDescription": { + "text": "Missing request separator in JSON body" + }, + "fullDescription": { + "text": "Reports possible requests in injected JSON body where request separator '###' is missing. The quick fix suggests adding the separator '###' before the request.", + "markdown": "Reports possible requests in injected JSON body where request separator `###` is missing. The quick fix suggests adding the separator `###` before the request." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpRequestRequestSeparatorJsonBodyInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestContentLengthIsIgnored", + "shortDescription": { + "text": "Redundant 'Content-Length'" + }, + "fullDescription": { + "text": "Reports an explicitly set 'Content-Length' header. The header is redundant because HTTP Client uses the actual request body length.", + "markdown": "Reports an explicitly set `Content-Length` header. The header is redundant because HTTP Client uses the actual request body length." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HttpRequestContentLengthIsIgnored", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestRequestSeparatorXmlBodyInspection", + "shortDescription": { + "text": "Missing request separator in HTML/XML body" + }, + "fullDescription": { + "text": "Reports possible requests in injected XML/HTML body where request separator '###' is missing. The quick fix suggests adding the separator '###' before the request.", + "markdown": "Reports possible requests in injected XML/HTML body where request separator `###` is missing. The quick fix suggests adding the separator `###` before the request." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpRequestRequestSeparatorXmlBodyInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestPlaceholder", + "shortDescription": { + "text": "'$placeholder' in HTTP Request" + }, + "fullDescription": { + "text": "Reports a '$placeholder' inside a request. A '$placeholder' to be replaced by the user is created automatically when a tool cannot recognize a part of a request. For example, a request mapping '/aaaa/*/bbb' will be generated as 'GET localhost/aaaa/{{$placeholder}}/bbb'.", + "markdown": "Reports a `$placeholder` inside a request.\n\nA `$placeholder` to be replaced by the user is created automatically when a tool cannot recognize a part of a request. For example, a request mapping `/aaaa/*/bbb` will be generated as `GET localhost/aaaa/{{$placeholder}}/bbb`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HttpRequestPlaceholder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestWhitespaceInsideRequestTargetPath", + "shortDescription": { + "text": "Whitespace in URL in request" + }, + "fullDescription": { + "text": "Highlights spaces inside URL path segments. HTTP Client will ignore them. For better composing use Split Lines action.", + "markdown": "Highlights spaces inside URL path segments. HTTP Client will ignore them. For better composing use Split Lines action." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpRequestWhitespaceInsideRequestTargetPath", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpClientUnresolvedVariable", + "shortDescription": { + "text": "Unresolved environment variable" + }, + "fullDescription": { + "text": "Reports variables undeclared in the current environment HTTP Client. Executing requests with undeclared variables probably fail. Consider adding a variable to the environment or selecting an environment with this variable. Inspection doesn't report variables in request bodies, because it can be a valid syntax of the body. Some variables may be not reported as unresolved, because they are declared in response or pre-request handler scripts via 'client.global.set' or 'request.variables.set' functions call.", + "markdown": "Reports variables undeclared in the current environment HTTP Client.\n\n\nExecuting requests with undeclared variables probably fail.\nConsider adding a variable to the environment or selecting an environment with this variable.\n\nInspection doesn't report variables in request bodies, because it can be a valid syntax of the body.\n\n\nSome variables may be not reported as unresolved, because they are declared in response or pre-request handler scripts via\n`client.global.set` or `request.variables.set` functions call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HttpClientUnresolvedVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectHttpHeaderInspection", + "shortDescription": { + "text": "Incorrect HTTP header" + }, + "fullDescription": { + "text": "Reports unknown HTTP headers that do not match any publicly known headers. The quick fix suggests adding the header to the list of custom headers when the Use custom HTTP headers option is enabled. HTTP headers from the list of custom headers will not trigger the inspection.", + "markdown": "Reports unknown HTTP headers that do not match any [publicly\nknown headers](https://www.iana.org/assignments/message-headers/message-headers.xml). The quick fix suggests adding the header to the list of custom headers when the **Use custom HTTP headers** option\nis enabled. HTTP headers from the list of custom headers will not trigger the inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncorrectHttpHeaderInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpClientInappropriateProtocolUsageInspection", + "shortDescription": { + "text": "Inappropriate HTTP Protocol usage" + }, + "fullDescription": { + "text": "Reports inappropriate usage of HTTP protocol keyword, e.g. 'HTTP/2', with non-HTTP method requests. Such a usage will be ignored.", + "markdown": "Reports inappropriate usage of HTTP protocol keyword, e.g. `HTTP/2`, with non-HTTP method requests. Such a usage will be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpClientInappropriateProtocolUsageInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HttpRequestRequestSeparatorYamlBodyInspection", + "shortDescription": { + "text": "Missing request separator in YAML body" + }, + "fullDescription": { + "text": "Reports possible requests in injected YAML body where request separator '###' is missing. The quick fix suggests adding the separator '###' before the request.", + "markdown": "Reports possible requests in injected YAML body where request separator `###` is missing. The quick fix suggests adding the separator `###` before the request." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HttpRequestRequestSeparatorYamlBodyInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "HTTP Client", + "index": 80, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.hibernate", + "version": "241.17569", + "rules": [ + { + "id": "CriteriaApiResolveInspection", + "shortDescription": { + "text": "Hibernate Criteria API unrecognized property" + }, + "fullDescription": { + "text": "Reports unrecognized properties in Hibernate Criteria API usages", + "markdown": "Reports unrecognized properties in Hibernate Criteria API usages" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CriteriaApiResolveInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateMappingDomInspection", + "shortDescription": { + "text": "Invalid Hibernate XML mappings" + }, + "fullDescription": { + "text": "Reports Hibernate XML configuration mapping errors including: References to non-instantiable classes References to classes that do not extend the required class References to classes with inappropriate scope Empty tag and attribute values Tag and attribute values that do not match the required pattern (for example, Java Identifiers) Tags that do not include the required children tags or attributes Tags that define objects with duplicate names", + "markdown": "Reports Hibernate XML configuration mapping errors including:\n\n* References to non-instantiable classes\n* References to classes that do not extend the required class\n* References to classes with inappropriate scope\n* Empty tag and attribute values\n* Tag and attribute values that do not match the required pattern (for example, Java Identifiers)\n* Tags that do not include the required children tags or attributes\n* Tags that define objects with duplicate names" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "HibernateMappingDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateMappingDatasourceDomInspection", + "shortDescription": { + "text": "Invalid Hibernate DB-related XML mappings" + }, + "fullDescription": { + "text": "Reports Hibernate XML configuration DB-related mapping errors including: References to unrecognized catalogs/schemas/tables References to unrecognized columns", + "markdown": "Reports Hibernate XML configuration DB-related mapping errors including:\n\n* References to unrecognized catalogs/schemas/tables\n* References to unrecognized columns" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "HibernateMappingDatasourceDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateConfigDomInspection", + "shortDescription": { + "text": "Invalid Hibernate XML configuration" + }, + "fullDescription": { + "text": "Reports Hibernate XML configuration errors including: References to non-instantiable classes References to classes that do not extend the required class References to classes with inappropriate scope Empty tag and attribute values Tag and attribute values that do not match the required pattern (for example, Java Identifiers) Tags that do not include the required children tags or attributes Tags that define objects with duplicate names", + "markdown": "Reports Hibernate XML configuration errors including:\n\n* References to non-instantiable classes\n* References to classes that do not extend the required class\n* References to classes with inappropriate scope\n* Empty tag and attribute values\n* Tag and attribute values that do not match the required pattern (for example, Java Identifiers)\n* Tags that do not include the required children tags or attributes\n* Tags that define objects with duplicate names" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "HibernateConfigDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateFindAnnotationInspection", + "shortDescription": { + "text": "Incorrect use of @Find annotation" + }, + "fullDescription": { + "text": "Reports Hibernate @Find annotation errors The return type of an annotated method must be an entity type E, or one of the following types: java.util.List org.hibernate.query.Query org.hibernate.query.SelectionQuery jakarta.persistence.Query jakarta.persistence.TypedQuery The names and types of the parameters of a finder method must match exactly with the names and types of persistent fields of the entity type returned by the finder method.", + "markdown": "Reports Hibernate @Find annotation errors\n\n* The return type of an annotated method must be an entity type **E** , or one of the following types:\n * java.util.List\\\n * org.hibernate.query.Query\\\n * org.hibernate.query.SelectionQuery\\\n * jakarta.persistence.Query\\\n * jakarta.persistence.TypedQuery\\\n* The names and types of the parameters of a finder method must match exactly with the names and types of persistent fields of the entity type returned by the finder method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "HibernateFindAnnotationInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateConfigDomFacetInspection", + "shortDescription": { + "text": "Hibernate configuration XML is not added to facet" + }, + "fullDescription": { + "text": "Reports missing Hibernate XML configuration files. The quick-fix creates a facet if necessary and adds a configuration file to it.", + "markdown": "Reports missing Hibernate XML configuration files.\n\nThe quick-fix creates a facet if necessary and adds a configuration file to it." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HibernateConfigDomFacetInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Hibernate", + "index": 83, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.integration", + "version": "241.17569", + "rules": [ + { + "id": "UnresolvedMessageChannel", + "shortDescription": { + "text": "Incorrect 'channel' attribute in an endpoint method annotation" + }, + "fullDescription": { + "text": "Reports incorrect channel attributes in endpoint method annotations: @Gateway, @ServiceActivator, @Filter, and so on. Example: '@Component\n public class MyComponent {}\n @Gateway(requestChannel = \"requestChannel\", replyChannel = \"replyChannel\")\n public void gateway() {...}\n\n @Gateway(\n requestChannel =\"simpleBean\", // Bean must be one of these types: org.springframework.integration.MessageChannel,org.springframework.messaging.MessageChannel\n replyChannel = \"unknownChannel\") // Cannot find channel\n public void errors() {...}\n\n @Bean\n public MyBean simpleBean() {...}\n }'", + "markdown": "Reports incorrect channel attributes in endpoint method annotations:\n[@Gateway](https://docs.spring.io/spring-integration/api/org/springframework/integration/annotation/Gateway.html),\n[@ServiceActivator,](https://docs.spring.io/spring-integration/api/org/springframework/integration/annotation/ServiceActivator.html)\n[@Filter](https://docs.spring.io/spring-integration/api/org/springframework/integration/annotation/Filter.html), and so on.\n\n**Example:**\n\n\n @Component\n public class MyComponent {}\n @Gateway(requestChannel = \"requestChannel\", replyChannel = \"replyChannel\")\n public void gateway() {...}\n\n @Gateway(\n requestChannel =\"simpleBean\", // Bean must be one of these types: org.springframework.integration.MessageChannel,org.springframework.messaging.MessageChannel\n replyChannel = \"unknownChannel\") // Cannot find channel\n public void errors() {...}\n\n @Bean\n public MyBean simpleBean() {...}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UnresolvedMessageChannel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Integration", + "index": 84, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringIntegrationMethodEndpointInconsistency", + "shortDescription": { + "text": "Incorrect Spring Integration endpoint method" + }, + "fullDescription": { + "text": "Reports incorrect Spring Integration endpoint method declarations. Example: 'class MyEndpoints {\n @InboundChannelAdapter(\"channel\")\n public void cannotBeVoid() {...} // A method annotated with @InboundChannelAdapter must have a return type\n\n @InboundChannelAdapter(\"channel\")\n public String cannotHaveParams(String s) {..} // A method annotated with @InboundChannelAdapter can't have arguments\n\n @Filter(inputChannel = \"channel\", // Endpoint can have only one poller\n outputChannel = \"channel2\",\n poller = {@Poller(fixedDelay = \"100\"), @Poller(fixedRate = \"100\")})\n public void testMultiplePollers() {\n }\n\n @Filter(inputChannel = \"channel\",\n outputChannel = \"channel2\",\n poller = @Poller(value = \"poller\", maxMessagesPerPoll = \"100\"))\n public void testValue() {\n }\n\n @Filter(inputChannel = \"channel\",\n outputChannel = \"channel2\",\n poller = @Poller(trigger = \"trigger\", cron = \"0 */10 * * * *\")) // 'trigger' attribute is mutually exclusive with other attributes\n public void testTrigger() {\n }\n}'", + "markdown": "Reports incorrect [Spring Integration](https://spring.io/projects/spring-integration) endpoint method declarations.\n\n**Example:**\n\n\n class MyEndpoints {\n @InboundChannelAdapter(\"channel\")\n public void cannotBeVoid() {...} // A method annotated with @InboundChannelAdapter must have a return type\n\n @InboundChannelAdapter(\"channel\")\n public String cannotHaveParams(String s) {..} // A method annotated with @InboundChannelAdapter can't have arguments\n\n @Filter(inputChannel = \"channel\", // Endpoint can have only one poller\n outputChannel = \"channel2\",\n poller = {@Poller(fixedDelay = \"100\"), @Poller(fixedRate = \"100\")})\n public void testMultiplePollers() {\n }\n\n @Filter(inputChannel = \"channel\",\n outputChannel = \"channel2\",\n poller = @Poller(value = \"poller\", maxMessagesPerPoll = \"100\"))\n public void testValue() {\n }\n\n @Filter(inputChannel = \"channel\",\n outputChannel = \"channel2\",\n poller = @Poller(trigger = \"trigger\", cron = \"0 */10 * * * *\")) // 'trigger' attribute is mutually exclusive with other attributes\n public void testTrigger() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringIntegrationMethodEndpointInconsistency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Integration", + "index": 84, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringIntegrationDeprecations21", + "shortDescription": { + "text": "Spring Integration 2.1 deprecations" + }, + "fullDescription": { + "text": "Reports XML elements deprecated in the current version of the Spring Integration XML-based application context. For more information, see Migration Guide. Example: '\n \n \n \n \n \n \n channel=\"channel\"/>\n'", + "markdown": "Reports XML elements deprecated in the current version of the [Spring Integration](https://spring.io/projects/spring-integration) XML-based application context.\n\nFor more information, see [Migration Guide](https://github.com/SpringSource/spring-integration/wiki/Spring-Integration-2.0-to-2.1-Migration-Guide).\n\n**Example:**\n\n\n \n \n \n \n \n \n \n channel=\"channel\"/>\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringIntegrationDeprecations21", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Integration", + "index": 84, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringIntegrationModel", + "shortDescription": { + "text": "Incorrect Spring Integration XML-based application context" + }, + "fullDescription": { + "text": "Reports issues with the Spring Integration XML-based application context: Unresolved bean references Missing required tags or attributes Incorrect property types Inconsistent 'enum' properties Incorrect types of referenced beans Example: '\n \n \n \n \n \n \n \n capacity=\"4\" message-store=\"myMessageStore\" ref=\"myQueue\"/>\n \n \n \n\n \n \n \n message-store=\"dummyBean\" \n scheduler=\"dummyBean\" \n wait-for-tasks-to-complete-on-shutdown=\"INVALID_VALUE\"/> \n\n \n \n \n'", + "markdown": "Reports issues with the [Spring Integration](https://spring.io/projects/spring-integration) XML-based application context:\n\n* Unresolved bean references\n* Missing required tags or attributes\n* Incorrect property types\n* Inconsistent `enum` properties\n* Incorrect types of referenced beans\n\n**Example:**\n\n\n \n \n \n \n \n \n \n \n capacity=\"4\" message-store=\"myMessageStore\" ref=\"myQueue\"/>\n \n \n \n\n \n \n \n message-store=\"dummyBean\" \n scheduler=\"dummyBean\" \n wait-for-tasks-to-complete-on-shutdown=\"INVALID_VALUE\"/> \n\n \n \n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringIntegrationModel", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Integration", + "index": 84, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.properties", + "version": "241.17569", + "rules": [ + { + "id": "UseEllipsisInPropertyInspection", + "shortDescription": { + "text": "Three dot characters instead of the ellipsis" + }, + "fullDescription": { + "text": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files.", + "markdown": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseEllipsisInPropertyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AlphaUnsortedPropertiesFile", + "shortDescription": { + "text": "Properties file or resource bundle is alphabetically unsorted" + }, + "fullDescription": { + "text": "Reports alphabetically unsorted resource bundles or .properties files.", + "markdown": "Reports alphabetically unsorted resource bundles or .properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "AlphaUnsortedPropertiesFile", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingSpacesInProperty", + "shortDescription": { + "text": "Trailing spaces in property" + }, + "fullDescription": { + "text": "Reports properties whose keys or values end with a whitespace.", + "markdown": "Reports properties whose keys or values end with a whitespace." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TrailingSpacesInProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrongPropertyKeyValueDelimiter", + "shortDescription": { + "text": "Property key/value delimiter doesn't match code style settings" + }, + "fullDescription": { + "text": "Reports properties in which key or value delimiters do not match code style settings.", + "markdown": "Reports properties in which key or value delimiters do not match code style settings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "WrongPropertyKeyValueDelimiter", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatePropertyInspection", + "shortDescription": { + "text": "Duplicate property" + }, + "fullDescription": { + "text": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values. Example: 'property1=value;\nproperty2=value;' The Options list allows selecting the area in which the inspection should search for duplicates.", + "markdown": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values.\n\nExample:\n\n\n property1=value;\n property2=value;\n\nThe **Options** list allows selecting the area in which the inspection should search for duplicates." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicatePropertyInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedProperty", + "shortDescription": { + "text": "Unused property" + }, + "fullDescription": { + "text": "Reports properties that are not referenced outside of the .properties file they are contained in.", + "markdown": "Reports properties that are not referenced outside of the .properties file they are contained in." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 39, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "XPathView", + "version": "241.17569", + "rules": [ + { + "id": "XsltUnusedDeclaration", + "shortDescription": { + "text": "Unused variable or parameter" + }, + "fullDescription": { + "text": "Reports local variables and parameters that are never used.", + "markdown": "Reports local variables and parameters that are never used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XsltUnusedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 92, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantTypeConversion", + "shortDescription": { + "text": "Redundant type conversion" + }, + "fullDescription": { + "text": "Reports unnecessary type conversions. Type conversions are unnecessary when the argument type of a 'string()', 'number()', or 'boolean()' function is already the same as the function's return type or if the expected expression type is 'any'. Suggests removing the unnecessary conversion.", + "markdown": "Reports unnecessary type conversions. Type conversions are unnecessary when the argument type of a `string()`, `number()`, or `boolean()` function is already the same as the function's return type or if the expected expression type is `any`. Suggests removing the unnecessary conversion." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantTypeConversion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 148, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IndexZeroUsage", + "shortDescription": { + "text": "XPath predicate with index 0" + }, + "fullDescription": { + "text": "Reports usages of '0' in a predicate index or in a comparison with the function 'position()'. Such usage is almost always a bug because in XPath, the index starts at '1', not at '0'. Example: '//someelement[position() = 0]' or '//something[0]'", + "markdown": "Reports usages of `0` in a predicate index or in a comparison with the function `position()`. Such usage is almost always a bug because in XPath, the index starts at `1`, *not* at `0`.\n\n**Example:**\n\n\n //someelement[position() = 0] or //something[0]\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IndexZeroUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 148, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckNodeTest", + "shortDescription": { + "text": "Unknown element or attribute name" + }, + "fullDescription": { + "text": "Reports names of elements or attributes that are used in an XPath-expression but are missing in the associated XML files and are not defined in the referenced schemas. Such names are often the result of typos and would otherwise probably only be discovered at runtime. Example: '' If the 'h' is bound to the XHTML namespace, the inspection will report this part of the 'match' expression as an unknown element name because the correct name of the element is \"textarea\".", + "markdown": "Reports names of elements or attributes that are used in an XPath-expression but are missing in the associated XML files and are not defined in the referenced schemas. Such names are often the result of typos and would otherwise probably only be discovered at runtime.\n\n**Example:**\n\n\n \n\n\nIf the `h` is bound to the XHTML namespace, the inspection will report this part of the `match` expression as an\nunknown element name because the correct name of the element is \"textarea\"." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckNodeTest", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 148, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltDeclarations", + "shortDescription": { + "text": "Incorrect declaration" + }, + "fullDescription": { + "text": "Reports duplicate declarations and illegal identifiers in XSLT variables, parameters, and named templates:", + "markdown": "Reports duplicate declarations and illegal identifiers in XSLT variables, parameters, and named templates:" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XsltDeclarations", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 92, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardwiredNamespacePrefix", + "shortDescription": { + "text": "Hardcoded namespace prefix" + }, + "fullDescription": { + "text": "Reports comparisons of the 'name()' function with a string that contains a colon (':'). Such usages usually indicate a hardcoded namespace prefix in the comparison. As a result, the code will break when run against XML that uses another prefix for the same namespace. Example: '...'", + "markdown": "Reports comparisons of the `name()` function with a string that contains a colon (`:`). Such usages usually indicate a hardcoded namespace prefix in the comparison. As a result, the code will break when run against XML that uses another prefix for the same namespace.\n\n**Example:**\n\n\n ...\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HardwiredNamespacePrefix", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 148, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltTemplateInvocation", + "shortDescription": { + "text": "Incorrect template invocation" + }, + "fullDescription": { + "text": "Reports missing arguments, passing arguments that are not declared, and passing arguments for parameters more than once in named XSLT template invocations. Parameters declared with a default value are optional and will not be reported as missing.", + "markdown": "Reports missing arguments, passing arguments that are not declared, and passing arguments for parameters more than once in named XSLT template invocations.\n\n\nParameters declared with a default value are optional and will not be reported as missing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XsltTemplateInvocation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 92, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitTypeConversion", + "shortDescription": { + "text": "Implicit type conversion" + }, + "fullDescription": { + "text": "Reports implicit conversions between the predefined XPath-types 'STRING', 'NUMBER', 'BOOLEAN', and 'NODESET'. Helps to write XSLT scripts that are more expressive about types and prevents subtle bugs: Example: '' is not the same as '' The first test checks whether the element \"foo\" exists ('count(foo) > 0)'; the latter one however is only true if the element actually contains any text ('string-length(foo) > 0'). Suggests making the type conversion more explicit. Use the following options to configure the inspection: Enable or disable implicit conversions between certain types Always report explicit conversions that do not result in the actually expected type, for example, '' Ignore conversion from 'NODESET' to 'BOOLEAN' by using the 'string()' function as a shortcut for writing 'string-length() > 0'.", + "markdown": "Reports implicit conversions between the predefined XPath-types `STRING`, `NUMBER`, `BOOLEAN`, and `NODESET`. Helps to write XSLT scripts that are more expressive about types and prevents subtle bugs:\n\n**Example:**\n\n\n \n\nis not the same as\n\n\n \n\n\nThe first test checks whether the element \"foo\" exists (`count(foo) > 0)`; the latter one however is only\ntrue if the element actually contains any text (`string-length(foo) > 0`). Suggests making\nthe type conversion more explicit.\n\n\nUse the following options to configure the inspection:\n\n* Enable or disable implicit conversions between certain types\n* Always report explicit conversions that do not result in the actually expected type, for example, ``\n* Ignore conversion from `NODESET` to `BOOLEAN` by using the `string()` function as a shortcut for writing `string-length() > 0`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ImplicitTypeConversion", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 148, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltVariableShadowing", + "shortDescription": { + "text": "Shadowed variable" + }, + "fullDescription": { + "text": "Reports shadowed XSLT variables.", + "markdown": "Reports shadowed XSLT variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XsltVariableShadowing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 92, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.javaee", + "version": "241.17569", + "rules": [ + { + "id": "JavaeeApplicationDomInspection", + "shortDescription": { + "text": "Java EE application descriptor correctness" + }, + "fullDescription": { + "text": "Reports the following problems inside `application.xml` configuration files: References to non-instantiable classes References to classes that do not extend required class References to classes with inappropriate scope Tag and attribute values that do not match required pattern (for example, Java Identifiers) Tags that do not include required children tags or attributes Tags that define objects with duplicate names Example: '\n \n // Error: 'web-uri' child tag should be defined\n ExampleWebApp\n \n \n'", + "markdown": "Reports the following problems inside \\`application.xml\\` configuration files:\n\n* References to non-instantiable classes\n* References to classes that do not extend required class\n* References to classes with inappropriate scope\n* Tag and attribute values that do not match required pattern (for example, Java Identifiers)\n* Tags that do not include required children tags or attributes\n* Tags that define objects with duplicate names\n\n**Example:**\n\n\n \n \n // Error: 'web-uri' child tag should be defined\n ExampleWebApp\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JavaeeApplicationDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SecurityRoles", + "shortDescription": { + "text": "Security role name correctness" + }, + "fullDescription": { + "text": "Reports invalid security role names. Example: '\n \n custom#role // Error: invalid name\n \n \n customRole // Good name\n \n '", + "markdown": "Reports invalid security role names.\n\n**Example:**\n\n\n \n \n custom#role // Error: invalid name\n \n \n customRole // Good name\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SecurityRoles", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "TestNG-J", + "version": "241.17569", + "rules": [ + { + "id": "ConvertJavadoc", + "shortDescription": { + "text": "TestNG Javadoc can be converted to annotations" + }, + "fullDescription": { + "text": "Asserts your TestNG tests with Javadoc annotations and converts them to JDK annotations. Example: '/**\n * @testng.before-test\n */\n public void sample() {}' After the quick-fix is applied: '@BeforeTest\n public void sample() {}'", + "markdown": "Asserts your TestNG tests with Javadoc annotations and converts them to JDK annotations.\n\nExample:\n\n\n /**\n * @testng.before-test\n */\n public void sample() {}\n\nAfter the quick-fix is applied:\n\n\n @BeforeTest\n public void sample() {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConvertJavadoc", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataProviderReturnType", + "shortDescription": { + "text": "Invalid data provider return type" + }, + "fullDescription": { + "text": "Reports methods marked with '@DataProvider' annotation that doesn't return 'Object[][]' or 'Iterator'. If another type is returned, TestNG throws an exception. Example: 'public class TestNgTest {\n @DataProvider(name = \"Languages\")\n List getData() {\n return List.of(\"Java\", \"Kotlin\");\n }\n\n @Test(dataProvider = \"Languages\")\n public void testData(String language) {\n System.out.println(language);\n }\n}'", + "markdown": "Reports methods marked with `@DataProvider` annotation that doesn't return `Object[][]` or `Iterator`. If another type is returned, TestNG throws an exception.\n\nExample:\n\n\n public class TestNgTest {\n @DataProvider(name = \"Languages\")\n List getData() {\n return List.of(\"Java\", \"Kotlin\");\n }\n\n @Test(dataProvider = \"Languages\")\n public void testData(String language) {\n System.out.println(language);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "DataProviderReturnType", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "dependsOnMethodTestNG", + "shortDescription": { + "text": "Illegal method name passed to 'dependsOnMethods'" + }, + "fullDescription": { + "text": "Reports illegal method names passed to the 'dependsOnMethods' attribute in the '@Test' annotation. A method name is considered illegal if it can't be resolved into a valid, accessible '@Test' annotated method in the current class or any of its parent classes. Example: 'public class SampleTest {\n @Test(dependsOnMethods = \"testSpellignError\")\n public void testSample() {}\n @Test\n public void testSpellingError(){}\n }'", + "markdown": "Reports illegal method names passed to the `dependsOnMethods` attribute in the `@Test` annotation.\n\nA method name is considered illegal if it can't be resolved into a valid, accessible `@Test` annotated method in the current class\nor any of its parent classes.\n\nExample:\n\n\n public class SampleTest {\n @Test(dependsOnMethods = \"testSpellignError\")\n public void testSample() {}\n @Test\n public void testSpellingError(){}\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "dependsOnMethodTestNG", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MalformedDataProvider", + "shortDescription": { + "text": "Data provider problems" + }, + "fullDescription": { + "text": "Reports references to data provider methods that do not exist or are not accessible. Example: 'public class InstanceDataProviderFromForeignClass {\n // method data() doesn't exist in class A\n @Test(dataProvider = \"data\", dataProviderClass = A.class)\n public void test() {\n }\n}\nclass A { }' After the quick-fix is applied: '//the needed data() method is created in class A\nclass A {\n @DataProvider\n public Object[][] data() {\n return new Object[][]{};\n }\n}'", + "markdown": "Reports references to data provider methods that do not exist or are not accessible.\n\nExample:\n\n\n public class InstanceDataProviderFromForeignClass {\n // method data() doesn't exist in class A\n @Test(dataProvider = \"data\", dataProviderClass = A.class)\n public void test() {\n }\n }\n class A { }\n\nAfter the quick-fix is applied:\n\n\n //the needed data() method is created in class A\n class A {\n @DataProvider\n public Object[][] data() {\n return new Object[][]{};\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MalformedDataProvider", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "groupsTestNG", + "shortDescription": { + "text": "Undefined group name" + }, + "fullDescription": { + "text": "Reports undefined group names passed to the 'dependsOnGroups' or 'groups' attributes in the '@Test' annotation. The quick-fix adds an undefined name to a list of known groups. Use the Defined Groups field to define a comma-separated list of known groups.", + "markdown": "Reports undefined group names passed to the `dependsOnGroups` or `groups` attributes in the `@Test` annotation.\n\nThe quick-fix adds an undefined name to a list of known groups.\n\nUse the **Defined Groups** field to define a comma-separated list of known groups." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "groupsTestNG", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnitTestNG", + "shortDescription": { + "text": "JUnit Test can be converted to TestNG" + }, + "fullDescription": { + "text": "Reports any JUnit-based test class that can be converted into TestNG based unit test. Example: 'import org.junit.Test;\nimport static org.junit.Assert.*;\n\npublic class ExampleTest {\n @Test\n public void testExample(){\n assertEquals(2 + 2, 4);\n }\n}' After the quick-fix is applied: 'import org.testng.Assert;\nimport org.testng.annotations.Test;\n\npublic class ExampleTest {\n @Test\n public void testExample(){\n Assert.assertEquals(4, 2 + 2);\n }\n}'", + "markdown": "Reports any JUnit-based test class that can be converted into TestNG based unit test.\n\nExample:\n\n\n import org.junit.Test;\n import static org.junit.Assert.*;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n assertEquals(2 + 2, 4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.testng.Assert;\n import org.testng.annotations.Test;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n Assert.assertEquals(4, 2 + 2);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnitTestNG", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExpectedExceptionNeverThrownTestNG", + "shortDescription": { + "text": "Expected exception never thrown in test method body" + }, + "fullDescription": { + "text": "Reports checked exceptions expected by a TestNG test method that are never thrown inside the method body. Example: '@Test(expectedExceptions = Exception.class) // warning: Expected 'Exception' never thrown\n public void testEngineIsRunning() {\n assertTrue(engine.isRunning());\n }'", + "markdown": "Reports checked exceptions expected by a TestNG test method that are never thrown inside the method body.\n\n**Example:**\n\n\n @Test(expectedExceptions = Exception.class) // warning: Expected 'Exception' never thrown\n public void testEngineIsRunning() {\n assertTrue(engine.isRunning());\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExpectedExceptionNeverThrownTestNG", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UndeclaredTests", + "shortDescription": { + "text": "Undeclared test" + }, + "fullDescription": { + "text": "Reports test classes that are not registered in 'testing.xml'. This is often a mistake because such tests won't be executed.", + "markdown": "Reports test classes that are not registered in `testing.xml`. This is often a mistake because such tests won't be executed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UndeclaredTests", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertOldAnnotations", + "shortDescription": { + "text": "Old TestNG annotation @Configuration is used" + }, + "fullDescription": { + "text": "Reports TestNG 'org.testng.annotations.Configuration' annotations. It's better to configure a test suite with the modern '@BeforeXXX'/'@AfterXXX' annotations. Example: 'public class Test {\n @Configuration(beforeSuite = true, afterTest = true)\n public void afterBefore(){\n }\n }' After the quick-fix is applied: 'public class Test {\n @AfterTest()\n @BeforeSuite()\n public void afterBefore(){\n }\n }'", + "markdown": "Reports TestNG `org.testng.annotations.Configuration` annotations.\n\nIt's better to configure a test suite with the modern `@BeforeXXX`/`@AfterXXX` annotations.\n\nExample:\n\n\n public class Test {\n @Configuration(beforeSuite = true, afterTest = true)\n public void afterBefore(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test {\n @AfterTest()\n @BeforeSuite()\n public void afterBefore(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConvertOldAnnotations", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatedDataProviderNames", + "shortDescription": { + "text": "Duplicated data provider names" + }, + "fullDescription": { + "text": "Reports 'TestNG' data providers with equal names if 'org.testng.TestNGException' has occurred. Example: 'public class DuplicatedDataProviders {\n @DataProvider\n public Object[][] intTestData() { // duplicate 1\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @DataProvider(name = \"intTestData\")\n public Object[][] someTestData() { // duplicate 2\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @Test(dataProvider = \"intTestData\")\n public void testIsOK(Integer key, Integer value) {\n assertEquals(key, value);\n }\n }'", + "markdown": "Reports `TestNG` data providers with equal names if `org.testng.TestNGException` has occurred.\n\nExample:\n\n\n public class DuplicatedDataProviders {\n @DataProvider\n public Object[][] intTestData() { // duplicate 1\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @DataProvider(name = \"intTestData\")\n public Object[][] someTestData() { // duplicate 2\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @Test(dataProvider = \"intTestData\")\n public void testIsOK(Integer key, Integer value) {\n assertEquals(key, value);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "DuplicatedDataProviderNames", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 96, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.jsp", + "version": "241.17569", + "rules": [ + { + "id": "ELDeferredExpressionsInspection", + "shortDescription": { + "text": "EL deferred expressions inspection" + }, + "fullDescription": { + "text": "Reports dynamic expressions where deferred expressions are expected and vice versa. Example: '\n\n // Good\n // Error: `id` attribute requires dynamic expression, `value` - deferred'", + "markdown": "Reports dynamic expressions where deferred expressions are expected and vice versa.\n\n**Example:**\n\n\n \n\n // Good\n // Error: `id` attribute requires dynamic expression, `value` - deferred \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ELDeferredExpressionsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnhandledExceptionInJSP", + "shortDescription": { + "text": "Unhandled Exception in JSP" + }, + "fullDescription": { + "text": "Reports exceptions that are thrown by top-level JSP scriptlets. Example: '<%!\n String getFormattedDate() {\n ...\n throw new IllegalArgumentException(...); // Error\n }\n %>\n \n \n \n Hello, JSP!\n \n \n Today is <%= getFormattedDate() %>\n \n ' NOTE: Such JSP pages will compile, because the servlet container wraps all JSP code in a try {} catch() {} block, but they will produce runtime exceptions when deployed on the server.", + "markdown": "Reports exceptions that are thrown by top-level JSP scriptlets. \n\n**Example:**\n\n\n <%!\n String getFormattedDate() {\n ...\n throw new IllegalArgumentException(...); // Error\n }\n %>\n \n \n \n Hello, JSP!\n \n \n Today is <%= getFormattedDate() %>\n \n \n\n\n**NOTE:** Such JSP pages will compile, because the servlet container wraps\nall JSP code in a **try {} catch() {}** block,\nbut they will produce runtime exceptions when deployed on the server." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnhandledExceptionInJSP", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TaglibDomModelInspection", + "shortDescription": { + "text": "Tag library descriptor inspection" + }, + "fullDescription": { + "text": "Reports problems in JSP TLD files. TLD files should conform to the JSP tag library schema.", + "markdown": "Reports problems in JSP TLD files.\n\nTLD files should conform to the JSP tag library schema." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TaglibDomModelInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JspDirectiveInspection", + "shortDescription": { + "text": "Jsp directive inspection" + }, + "fullDescription": { + "text": "Reports JSP import directives without a URI or tagdir attributes. Example: '\n \n <%@ taglib prefix=\"html\"%> // Error: either `uri` or `tagdir` attribute should be specified\n ...\n \n'", + "markdown": "Reports JSP import directives without a URI or tagdir attributes.\n\n**Example:**\n\n\n \n \n <%@ taglib prefix=\"html\"%> // Error: either `uri` or `tagdir` attribute should be specified\n ...\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JspDirectiveInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JspTagBodyContent", + "shortDescription": { + "text": "Tag body content type" + }, + "fullDescription": { + "text": "Reports JSP tag body content that does not conform to the TLD body-content specification. If empty body content is specified, the tag should have an empty body. If scriptless body content is specified, the tag's body should not contain JSP scriptlets. The quick-fix removes a tag's body for empty content type, and removes scriptlets if scriptless content type is specified. Example: 'body not allowed here\nsay: <% System.out.println(\"hey\"); %>' After the quick-fix is applied: '\nsay: '", + "markdown": "Reports JSP tag body content that does not conform to the TLD body-content specification.\n\nIf empty body content is specified, the tag should have an empty body.\n\nIf scriptless body content is specified, the tag's body should not contain JSP scriptlets.\n\nThe quick-fix removes a tag's body for empty content type, and removes scriptlets if scriptless content type is specified.\n\n**Example:**\n\n\n body not allowed here\n say: <% System.out.println(\"hey\"); %>\n\nAfter the quick-fix is applied:\n\n\n \n say: \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JspTagBodyContent", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JspUnescapedEl", + "shortDescription": { + "text": "Unescaped EL Expressions" + }, + "fullDescription": { + "text": "Reports non-safe data in unescaped EL expressions in JSP pages. Such cases may lead to cross-site scripting (XSS) vulnerability. The description below uses the term untainted data to refer to safe and trusted data as the opposite of tainted (non-safe, untrusted). See taint checking for more information. A safe (untainted) object is: a primitive data type (except 'char') a result of a call of a method that is marked as untainted a result of an escaping function call a field, which is marked as untainted The JSP page could have different contexts for provided data, and if data is safe for one context, it is not necessarily mean that it is safe for all. See Cross Site Scripting Prevention Cheat Sheet for some examples. This inspection skips data marked as untainted (safe) in ALL contexts. This inspection supports the following options to mark methods and fields as safe: by using any annotation from the configurable list of untainted annotations by configuring the list of safe methods and fields all static final fields could be marked as untainted by choosing \"Consider static final fields as untainted\" option on \"Untainted Methods and Fields\" tab This inspection does not highlight places where non-safe data reaches the safe tags in JSP pages. For example, the 'out' tag from the JSTL taglib is secure because it escapes the given value by default. The list of safe tags is configurable (omit 'tag' or 'attribute' value to define a whole range). \"Wrap in JSTL tag\" quick fix wraps an EL expression with the JSTL '' tag. Before: '${foo}'\n After: '<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n '\n \"Wrap in JSTL escapeXml() function\" wraps non-safe value with 'escapeXml' escaping function. Before: '<%@ taglib prefix=\"custom\" uri=\"WEB_INF/custom.tld\" %>\n '\n After: '<%@ taglib prefix=\"custom\" uri=\"WEB_INF/custom.tld\" %>\n <%@ taglib prefix=\"fn\" uri=\"http://java.sun.com/jsp/jstl/functions\" %>\n '\n More quick fixes exist to add selected tags to safe tags or annotate related methods (or fields) with untainted annotation. It is possible to add custom escape functions (see \"Escape functions\" tab). Now it contains functions from the JSTL that return a safe value (e.g., a well-known 'escapeXml' function). It does not require defining JSTL functions twice with different namespace URIs. If one of the \"http://java.sun.com/jsp/jstl/functions\" or \"http://java.sun.com/jstl/functions\" were used, another one would also be checked. It is also possible to skip an escaping function everywhere by its name. To do so, leave a namespace URI field empty.", + "markdown": "Reports non-safe data in unescaped EL expressions in JSP pages. Such cases may lead to [cross-site scripting (XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting) vulnerability.\n\n\nThe description below uses the term **untainted** data to refer to safe and trusted data as the opposite of **tainted** (non-safe,\nuntrusted). See [taint checking](https://en.wikipedia.org/wiki/Taint_checking) for more information.\n\n\nA safe (untainted) object is:\n\n* a primitive data type (except `char`)\n* a result of a call of a method that is marked as untainted\n* a result of an escaping function call\n* a field, which is marked as untainted\n\n\nThe JSP page could have different contexts for provided data, and if data is safe for one context, it is not\nnecessarily mean that it is safe for all.\nSee [Cross Site\nScripting Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#output-encoding) for some examples. This inspection skips data marked as untainted (safe) in **ALL** contexts.\n\n\nThis inspection supports the following options to mark methods and fields as safe:\n\n* by using any annotation from the configurable list of untainted annotations\n* by configuring the list of safe methods and fields\n* all static final fields could be marked as untainted by choosing \"Consider static final fields as untainted\" option on \"Untainted Methods and Fields\" tab\n\n\nThis inspection does not highlight places where non-safe data reaches the safe tags in JSP pages.\nFor example, the `out` tag from the JSTL taglib is secure because it escapes the given value by default.\nThe list of safe tags is configurable (omit `tag` or `attribute` value to define a whole range).\n\n\"Wrap in JSTL \\ tag\" quick fix wraps an EL expression with the JSTL `` tag.\n\nBefore:\n\n \n ${foo}\n \nAfter:\n\n \n <%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>\n \n \n\"Wrap in JSTL escapeXml() function\" wraps non-safe value with `escapeXml` escaping function.\n\nBefore:\n\n \n <%@ taglib prefix=\"custom\" uri=\"WEB_INF/custom.tld\" %>\n \n \nAfter:\n\n \n <%@ taglib prefix=\"custom\" uri=\"WEB_INF/custom.tld\" %>\n <%@ taglib prefix=\"fn\" uri=\"http://java.sun.com/jsp/jstl/functions\" %>\n \n \nMore quick fixes exist to add selected tags to safe tags or annotate related methods (or fields) with untainted annotation.\n\n\nIt is possible to add custom escape functions (see \"Escape functions\" tab).\nNow it contains functions from the JSTL that return a safe value (e.g., a well-known `escapeXml` function).\nIt does not require defining JSTL functions twice with different namespace URIs.\nIf one of the \"http://java.sun.com/jsp/jstl/functions\" or \"http://java.sun.com/jstl/functions\" were used,\nanother one would also be checked. It is also possible to skip an escaping function everywhere by its name.\nTo do so, leave a namespace URI field empty." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JspUnescapedEl", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReferencesToClassesFromDefaultPackagesInJSPFile", + "shortDescription": { + "text": "References to classes from the default package in JSP files" + }, + "fullDescription": { + "text": "Reports any references to classes from the default package in JSP files. Example: '<%!\n Integer countSomeUsefulStuff() {\n ...\n new ClassFromDefaultPackage(...); // Error\n new com.example.GoodClass(...); // Good\n }\n %>\n \n \n Hello, JSP!\n \n ' NOTE: Such references will not be resolved during compilation of the JSP because a compiled class for the JSP will be usually placed in non-default package (for example, \"org.apache.jsp\" in case of Tomcat, \"com.ibm._jsp\" in case of WebSphere), but importing from the default package is not allowed in Java.", + "markdown": "Reports any references to classes from the default package in JSP files.\n\n**Example:**\n\n\n <%!\n Integer countSomeUsefulStuff() {\n ...\n new ClassFromDefaultPackage(...); // Error\n new com.example.GoodClass(...); // Good\n }\n %>\n \n \n Hello, JSP!\n \n \n\n\n**NOTE:** Such references will not be resolved during compilation of the JSP\nbecause a compiled class for the JSP will be usually placed in non-default package\n(for example, \"org.apache.jsp\" in case of Tomcat, \"com.ibm._jsp\" in case of WebSphere),\nbut importing from the default package is not allowed in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ReferencesToClassesFromDefaultPackagesInJSPFile", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JspPropertiesInspection", + "shortDescription": { + "text": "Jsp properties inspection" + }, + "fullDescription": { + "text": "Reports unresolved properties from '*.properties' files. Example JSP file: '<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n<%@ taglib uri=\"/tags/fmt\" prefix=\"fmt\" %>\n\n // Error: no such property inside referenced file'", + "markdown": "Reports unresolved properties from `*.properties` files.\n\n**Example JSP file:**\n\n\n <%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>\n <%@ taglib uri=\"/tags/fmt\" prefix=\"fmt\" %>\n\n // Error: no such property inside referenced file\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JspPropertiesInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ELMethodSignatureInspection", + "shortDescription": { + "text": "EL method signature inspection" + }, + "fullDescription": { + "text": "Reports method calls in EL that don't match 'method-signature' constraints in TLD files. Example Java class: 'public class ExampleAction {\n public void goodAction() { ... }\n public void badAction(String str) { ... }\n}' Example JSP file: '\n\n // Good: method accepts zero arguments and returns `void`\n // Error: method `void badAction(String)` returns `java.lang.String` type instead of `void`\n'", + "markdown": "Reports method calls in EL that don't match `method-signature` constraints in TLD files.\n\n**Example Java class:**\n\n\n public class ExampleAction {\n public void goodAction() { ... }\n public void badAction(String str) { ... }\n }\n\n**Example JSP file:**\n\n\n \n \n // Good: method accepts zero arguments and returns `void`\n // Error: method `void badAction(String)` returns `java.lang.String` type instead of `void`\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ELMethodSignatureInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SelfIncludingJspFiles", + "shortDescription": { + "text": "Self-including JSP files" + }, + "fullDescription": { + "text": "Reports any include directives in a JSP file which refer to the containing JSP file. Example JSP file named main.jsp: ' // Error: attempt to include the containing file\n ...' NOTE: Such self-including leads to infinite recursion and so the JSP file cannot be compiled.", + "markdown": "Reports any include directives in a JSP file which refer to the containing JSP file. \n\n**Example JSP file named main.jsp:**\n\n\n // Error: attempt to include the containing file\n ...\n\n\n**NOTE:** Such self-including leads to infinite recursion and so the JSP file cannot be compiled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SelfIncludingJspFiles", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionELReferenceInspection", + "shortDescription": { + "text": "EL method function parameters count" + }, + "fullDescription": { + "text": "Reports different number of formal and actual parameters in EL function call.", + "markdown": "Reports different number of formal and actual parameters in EL function call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "FunctionELReferenceInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JspAbsolutePathInspection", + "shortDescription": { + "text": "Absolute paths" + }, + "fullDescription": { + "text": "Reports absolute paths in JSP files. Absolute paths are prohibited in JSP, because they won't be resolved if your application context is not empty. The quick-fix adds a dynamic prefix to your path. Example: '<%@page contentType=\"text/html; ISO-8859-1\" %>\n\n hey' After the quick-fix is applied: '<%@page contentType=\"text/html; ISO-8859-1\" %>\n\n hey'", + "markdown": "Reports absolute paths in JSP files.\n\nAbsolute paths are prohibited in JSP, because they won't be resolved if your application context is not empty.\n\nThe quick-fix adds a dynamic prefix to your path.\n\n**Example:**\n\n\n <%@page contentType=\"text/html; ISO-8859-1\" %>\n\n hey\n\nAfter the quick-fix is applied:\n\n\n <%@page contentType=\"text/html; ISO-8859-1\" %>\n\n hey\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JspAbsolutePathInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ELSpecValidationInJSP", + "shortDescription": { + "text": "JSP EL specification validation" + }, + "fullDescription": { + "text": "Reports possible problems caused by non-standard EL extensions: JSF EL expressions outside attributes, non-standard EL expressions, and so on. Example: '\n \n \n // Warning: method call is nonstandard extension\n \n'", + "markdown": "Reports possible problems caused by non-standard EL extensions: JSF EL expressions outside attributes, non-standard EL expressions, and so on.\n\n**Example:**\n\n\n \n \n \n // Warning: method call is nonstandard extension\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ELSpecValidationInJSP", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JSP", + "index": 98, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "JUnit", + "version": "241.17569", + "rules": [ + { + "id": "ExpectedExceptionNeverThrown", + "shortDescription": { + "text": "Expected exception never thrown in test method body" + }, + "fullDescription": { + "text": "Reports checked exceptions expected by a JUnit 4 test-method that are never thrown inside the method body. Such test methods will never succeed. Example: '@Test(expected = CloneNotSupportedException.class)\n public void testIt() { }'", + "markdown": "Reports checked exceptions expected by a JUnit 4 test-method that are never thrown inside the method body. Such test methods will never succeed.\n\n**Example:**\n\n\n @Test(expected = CloneNotSupportedException.class)\n public void testIt() { }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExpectedExceptionNeverThrown", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnitMixedFramework", + "shortDescription": { + "text": "JUnit API usage from multiple versions in a single TestCase" + }, + "fullDescription": { + "text": "Reports JUnit annotated methods when used in a test case from a different JUnit version. To determine the framework version for a test case the inspection checks the framework version of the super class when available. When a super class is not available it will use the most used framework in the test case. Example (JUnit 4 annotation in JUnit 3 test case): 'public class MyTest extends TestCase {\n @Test\n public void foo() { }\n\n @Test\n @Ignore\n public void testBar() { }\n }' After the quick-fix is applied: 'public class MyTest extends TestCase {\n public void testFoo() {}\n\n public void _testBar() {}\n }' Example (JUnit 5 annotation in JUnit 4 test case): 'public class MyTest {\n @BeforeAll // JUnit 5 lifecycle method\n public void initialize() { }\n\n @org.junit.Test // JUnit 4 test annotation\n public void test() {}\n\n @org.junit.Test // JUnit 4 test annotation\n public void testWouldBeExecuted() {}\n }' After the quick-fix is applied: 'public class MyTest {\n @BeforeClass // JUnit 4 lifecycle method\n public void initialize() { }\n\n @org.junit.Test // JUnit 4 test annotation\n public void test() {}\n\n @org.junit.Test // JUnit 4 test annotation\n public void testWouldBeExecuted() {}\n }'", + "markdown": "Reports JUnit annotated methods when used in a test case from a different JUnit version. To determine the framework version for a test case the inspection checks the framework version of the super class when available. When a super class is not available it will use the most used framework in the test case.\n\nExample (JUnit 4 annotation in JUnit 3 test case):\n\n\n public class MyTest extends TestCase {\n @Test\n public void foo() { }\n\n @Test\n @Ignore\n public void testBar() { }\n }\n\nAfter the quick-fix is applied:\n\n\n public class MyTest extends TestCase {\n public void testFoo() {}\n\n public void _testBar() {}\n }\n\nExample (JUnit 5 annotation in JUnit 4 test case):\n\n\n public class MyTest {\n @BeforeAll // JUnit 5 lifecycle method\n public void initialize() { }\n\n @org.junit.Test // JUnit 4 test annotation\n public void test() {}\n\n @org.junit.Test // JUnit 4 test annotation\n public void testWouldBeExecuted() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class MyTest {\n @BeforeClass // JUnit 4 lifecycle method\n public void initialize() { }\n\n @org.junit.Test // JUnit 4 test annotation\n public void test() {}\n\n @org.junit.Test // JUnit 4 test annotation\n public void testWouldBeExecuted() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnitMixedFramework", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertEqualsMayBeAssertSame", + "shortDescription": { + "text": "'assertEquals()' may be 'assertSame()'" + }, + "fullDescription": { + "text": "Reports JUnit 'assertEquals()' calls that can be replaced with an equivalent 'assertSame()' call. This is possible when the arguments are instances of a 'final' class that does not override the 'Object.equals()' method and makes it explicit that the object identity is compared. Suggests replacing 'assertEquals()' with 'assertSame()'. Example: '@Test\n public void testObjectType() {\n Object o = getObject();\n Assert.assertEquals(String.class, o.getClass());\n }' After the quick fix is applied: '@Test\n public void testSort() {\n Object o = getObject();\n Assert.assertSame(String.class, o.getClass());\n }'", + "markdown": "Reports JUnit `assertEquals()` calls that can be replaced with an equivalent `assertSame()` call. This is possible when the arguments are instances of a `final` class that does not override the `Object.equals()` method and makes it explicit that the object identity is compared.\n\nSuggests replacing `assertEquals()` with `assertSame()`.\n\n**Example:**\n\n\n @Test\n public void testObjectType() {\n Object o = getObject();\n Assert.assertEquals(String.class, o.getClass());\n }\n\nAfter the quick fix is applied:\n\n\n @Test\n public void testSort() {\n Object o = getObject();\n Assert.assertSame(String.class, o.getClass());\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssertEqualsMayBeAssertSame", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuperTearDownInFinally", + "shortDescription": { + "text": "JUnit 3 'super.tearDown()' is not called from 'finally' block" + }, + "fullDescription": { + "text": "Reports calls of the JUnit 3's 'super.tearDown()' method that are not performed inside a 'finally' block. If an exception is thrown before 'super.tearDown()' is called it could lead to inconsistencies and leaks. Example: 'public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n Files.delete(path);\n super.tearDown();\n }\n }' Improved code: 'public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n try {\n Files.delete(path);\n } finally {\n super.tearDown();\n }\n }\n }'", + "markdown": "Reports calls of the JUnit 3's `super.tearDown()` method that are not performed inside a `finally` block. If an exception is thrown before `super.tearDown()` is called it could lead to inconsistencies and leaks.\n\n**Example:**\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n Files.delete(path);\n super.tearDown();\n }\n }\n\nImproved code:\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n try {\n Files.delete(path);\n } finally {\n super.tearDown();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuperTearDownInFinally", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertEqualsCalledOnArray", + "shortDescription": { + "text": "'assertEquals()' called on array" + }, + "fullDescription": { + "text": "Reports JUnit 'assertEquals()' calls with arguments of an array type. Such methods compare the arrays' identities instead of the arrays' contents. Array contents should be checked with the 'assertArrayEquals()' method. Example: '@Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertEquals(new int[] {0, 56, 248, 496}, actual);\n }' After the quick-fix is applied: '@Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertArrayEquals(new int[] {0, 56, 248, 496}, actual);\n }'", + "markdown": "Reports JUnit `assertEquals()` calls with arguments of an array type. Such methods compare the arrays' identities instead of the arrays' contents. Array contents should be checked with the `assertArrayEquals()` method.\n\n**Example:**\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertEquals(new int[] {0, 56, 248, 496}, actual);\n }\n\nAfter the quick-fix is applied:\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertArrayEquals(new int[] {0, 56, 248, 496}, actual);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssertEqualsCalledOnArray", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit5Converter", + "shortDescription": { + "text": "JUnit 4 test can be JUnit 5" + }, + "fullDescription": { + "text": "Reports JUnit 4 tests that can be automatically migrated to JUnit 5. While default runners are automatically convertible, custom runners, method- and field- rules are not and require manual changes. Example: 'import org.junit.Assert;\n import org.junit.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }' After the quick-fix is applied: 'import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assertions.assertEquals(\"expected\", \"actual\");\n }\n }' This inspection requires that the JUnit 5 library is available in the classpath, and JDK 1.8 or later is configured for the project.", + "markdown": "Reports JUnit 4 tests that can be automatically migrated to JUnit 5. While default runners are automatically convertible, custom runners, method- and field- rules are not and require manual changes.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assertions.assertEquals(\"expected\", \"actual\");\n }\n }\n\nThis inspection requires that the JUnit 5 library is available in the classpath, and JDK 1.8 or later is configured for the project." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnit5Converter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoredJUnitTest", + "shortDescription": { + "text": "JUnit test annotated with '@Ignore'/'@Disabled'" + }, + "fullDescription": { + "text": "Reports usages of JUnit 4's '@Ignore' or JUnit 5's '@Disabled' annotations. It is considered a code smell to have tests annotated with these annotations for a long time, especially when no reason is specified. Example: '@Ignore\n public class UrgentTest {\n\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }' Configure the inspection: Use the Only report annotations without reason option to only report the cases when no reason is specified as the annotation's 'value' attribute.", + "markdown": "Reports usages of JUnit 4's `@Ignore` or JUnit 5's `@Disabled` annotations. It is considered a code smell to have tests annotated with these annotations for a long time, especially when no reason is specified.\n\n**Example:**\n\n\n @Ignore\n public class UrgentTest {\n\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Only report annotations without reason** option to only report the cases when no reason is specified as the annotation's `value` attribute." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IgnoredJUnitTest", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleExceptionsDeclaredOnTestMethod", + "shortDescription": { + "text": "Multiple exceptions declared on test method" + }, + "fullDescription": { + "text": "Reports JUnit test method 'throws' clauses with more than one exception. Such clauses are unnecessarily verbose. Test methods will not be called from other project code, so there is no need to handle these exceptions separately. For example: '@Test\n public void testReflection() throws NoSuchMethodException,\n InvocationTargetException, IllegalAccessException {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }' A quick fix is provided to replace the exception declarations with a single exception: '@Test\n public void testReflection() throws Exception {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }'", + "markdown": "Reports JUnit test method `throws` clauses with more than one exception. Such clauses are unnecessarily verbose. Test methods will not be called from other project code, so there is no need to handle these exceptions separately.\n\nFor example:\n\n\n @Test\n public void testReflection() throws NoSuchMethodException,\n InvocationTargetException, IllegalAccessException {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n\nA quick fix is provided to replace the exception declarations with a single exception:\n\n\n @Test\n public void testReflection() throws Exception {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MultipleExceptionsDeclaredOnTestMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfObsoleteAssert", + "shortDescription": { + "text": "Usage of obsolete 'junit.framework.Assert' method" + }, + "fullDescription": { + "text": "Reports any calls to methods from the 'junit.framework.Assert' class. This class is obsolete and the calls can be replaced by calls to methods from the 'org.junit.Assert' class. For example: 'import org.junit.*;\n public class NecessaryTest {\n @Test\n public void testIt() {\n junit.framework.Assert.assertEquals(\"expected\", \"actual\");\n }\n }' After the quick fix is applied, the result looks like the following: 'import org.junit;\n public class NecessaryTest {\n\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }'", + "markdown": "Reports any calls to methods from the `junit.framework.Assert` class. This class is obsolete and the calls can be replaced by calls to methods from the `org.junit.Assert` class.\n\nFor example:\n\n\n import org.junit.*;\n public class NecessaryTest {\n @Test\n public void testIt() {\n junit.framework.Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick fix is applied, the result looks like the following:\n\n\n import org.junit;\n public class NecessaryTest {\n\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UseOfObsoleteAssert", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit3StyleTestMethodInJUnit4Class", + "shortDescription": { + "text": "Old style JUnit test method in JUnit 4 class" + }, + "fullDescription": { + "text": "Reports JUnit 3 style test methods that are located inside a class that does not extend the JUnit 3 'TestCase' class and contains JUnit 4 or JUnit 5 '@Test' annotated methods. Such test methods cannot be run.", + "markdown": "Reports JUnit 3 style test methods that are located inside a class that does not extend the JUnit 3 `TestCase` class and contains JUnit 4 or JUnit 5 `@Test` annotated methods. Such test methods cannot be run." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnit3StyleTestMethodInJUnit4Class", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnitMalformedDeclaration", + "shortDescription": { + "text": "JUnit malformed declaration" + }, + "fullDescription": { + "text": "Reports JUnit test member declarations that are malformed and are likely not recognized by the JUnit test framework. The following problems are reported by this inspection: Test classes that can't be constructed Fields annotated by '@RegisterExtension' that have the wrong type or are not declared as static when it is required Static or private inner classes annotated with '@Nested' Parameterized tests that are defined without a source Parameterized tests with a '@MethodSource' that has an unknown, non-static or no-arg target Mismatched types between parameterized test method parameter and the specified '@ValueSource' or '@EnumSource' values Tests that are annotated by more than one of '@Test', '@ParameterizedTest' or '@RepeatedTest' 'setup()' or 'tearDown()' methods that are not public, whose return type is not void or take arguments 'suite()' methods that are private, take arguments or are not static Methods annotated by '@BeforeClass', '@AfterClass', '@BeforeAll' or '@AfterAll' that are not public, not static, whose return type is not void or do not have a valid parameter list Methods annotated by '@Before', '@After', '@BeforeEach' or '@AfterEach' that are not public, whose return type is not void or take arguments Injected 'RepetitionInfo' in '@BeforeAll' or '@AfterAll' methods Injected 'RepetitionInfo' in '@BeforeEach' or '@AfterEach' methods that are used by '@Test' annotated tests Fields and methods annotated by '@DataPoint' or '@DataPoints' that are not public or not static Fields and methods annotated by '@Rule' that are not public or not a subtype of 'TestRule' or 'MethodRule' Fields and methods annotated by '@ClassRule' that are not public, not static or not a subtype of 'TestRule' Methods inside a subclass of 'TestCase' with a 'test' prefix that are not public, whose return type is not void, take arguments or are static Methods annotated by '@Test' that are not public, whose return type is not void, take arguments or are static Note that in Kotlin, suspending functions do have arguments and a non-void return type. Therefore, they also will not be executed by the JUnit test runner. This inspection will also report about this problem. Malformed '@Before' method example: '@Before private int foo(int arg) { }' After the quick-fix is applied: '@Before public void foo() { }' Missing method source example (Kotlin): 'class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n }' After the quick-fix is applied: 'class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n\n companion object {\n @JvmStatic\n fun parameters(): Stream {\n TODO(\"Not yet implemented\")\n }\n }\n }' Use the inspection options to specify annotations. Any parameter annotated with one of these annotations will not be reported.", + "markdown": "Reports JUnit test member declarations that are malformed and are likely not recognized by the JUnit test framework. The following problems are reported by this inspection:\n\n* Test classes that can't be constructed\n* Fields annotated by `@RegisterExtension` that have the wrong type or are not declared as static when it is required\n* Static or private inner classes annotated with `@Nested`\n* Parameterized tests that are defined without a source\n* Parameterized tests with a `@MethodSource` that has an unknown, non-static or no-arg target\n* Mismatched types between parameterized test method parameter and the specified `@ValueSource` or `@EnumSource` values\n* Tests that are annotated by more than one of `@Test`, `@ParameterizedTest` or `@RepeatedTest`\n* `setup()` or `tearDown()` methods that are not public, whose return type is not void or take arguments\n* `suite()` methods that are private, take arguments or are not static\n* Methods annotated by `@BeforeClass`, `@AfterClass`, `@BeforeAll` or `@AfterAll` that are not public, not static, whose return type is not void or do not have a valid parameter list\n* Methods annotated by `@Before`, `@After`, `@BeforeEach` or `@AfterEach` that are not public, whose return type is not void or take arguments\n* Injected `RepetitionInfo` in `@BeforeAll` or `@AfterAll` methods\n* Injected `RepetitionInfo` in `@BeforeEach` or `@AfterEach` methods that are used by `@Test` annotated tests\n* Fields and methods annotated by `@DataPoint` or `@DataPoints` that are not public or not static\n* Fields and methods annotated by `@Rule` that are not public or not a subtype of `TestRule` or `MethodRule`\n* Fields and methods annotated by `@ClassRule` that are not public, not static or not a subtype of `TestRule`\n* Methods inside a subclass of `TestCase` with a `test` prefix that are not public, whose return type is not void, take arguments or are static\n* Methods annotated by `@Test` that are not public, whose return type is not void, take arguments or are static\n\nNote that in Kotlin, suspending functions do have arguments and a non-void return type. Therefore, they also will not be executed by the JUnit test runner. This inspection will also report about this problem.\n\n**Malformed `@Before` method example:**\n\n\n @Before private int foo(int arg) { }\n\nAfter the quick-fix is applied:\n\n\n @Before public void foo() { }\n\n**Missing method source example (Kotlin):**\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n\n companion object {\n @JvmStatic\n fun parameters(): Stream {\n TODO(\"Not yet implemented\")\n }\n }\n }\n\nUse the inspection options to specify annotations. Any parameter annotated with one of these annotations will not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JUnitMalformedDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit5AssertionsConverter", + "shortDescription": { + "text": "JUnit 5 obsolete assertions" + }, + "fullDescription": { + "text": "Reports any calls to methods from the 'junit.framework.Assert', 'org.junit.Assert', or 'org.junit.Assume' classes inside JUnit 5 tests. Although the tests work properly, migration to 'org.junit.jupiter.api.Assertions'/'org.junit.jupiter.api.Assumptions' will help you avoid dependencies on old JUnit version. Example: 'import org.junit.Assert;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assert.assertEquals(4, 2 + 2);\n }\n }' After the quick-fix is applied: 'import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assertions.assertEquals(4, 2 + 2);\n }\n }'", + "markdown": "Reports any calls to methods from the `junit.framework.Assert`, `org.junit.Assert`, or `org.junit.Assume`\nclasses inside JUnit 5 tests.\n\nAlthough the tests work properly, migration to `org.junit.jupiter.api.Assertions`/`org.junit.jupiter.api.Assumptions`\nwill help you avoid dependencies on old JUnit version.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assert.assertEquals(4, 2 + 2);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assertions.assertEquals(4, 2 + 2);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JUnit5AssertionsConverter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterizedParametersStaticCollection", + "shortDescription": { + "text": "Parameterized test class without data provider method" + }, + "fullDescription": { + "text": "Reports JUnit 4 parameterized test classes that are annotated with '@RunWith(Parameterized.class)' but either do not include a data provider method annotated with '@Parameterized.Parameters' or this method has an incorrect signature. Such test classes cannot be run. The data provider method should be 'public' and 'static' and have a return type of 'Iterable' or 'Object[]'. Suggests creating an empty parameter provider method or changing the signature of the incorrect data provider method. Example: '@RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n // ... test cases\n }' After the quick-fix is applied: '@RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n @Parameters\n public static Iterable parameters() {\n return null;\n }\n\n // ... test cases\n }'", + "markdown": "Reports JUnit 4 [parameterized test](https://github.com/junit-team/junit4/wiki/parameterized-tests) classes that are annotated with `@RunWith(Parameterized.class)` but either do not include a data provider method annotated with `@Parameterized.Parameters` or this method has an incorrect signature. Such test classes cannot be run. The data provider method should be `public` and `static` and have a return type of `Iterable` or `Object[]`.\n\nSuggests creating an empty parameter provider method or changing the signature of the incorrect data provider method.\n\n**Example:**\n\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n // ... test cases\n }\n\nAfter the quick-fix is applied:\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n @Parameters\n public static Iterable parameters() {\n return null;\n }\n\n // ... test cases\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterizedParametersStaticCollection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Junit4RunWithInspection", + "shortDescription": { + "text": "'@RunWith' annotation already exists in a parent class" + }, + "fullDescription": { + "text": "Reports when parent and child classes in a JUnit test hierarchy are annotated with '@RunWith'. It can lead to unexpected testing behavior. Example: '@RunWith(Suite.class)\n @SuiteClasses(MySuiteClass.class)\n public abstract Parent {\n }\n\n @RunWith(Parameterized.class)\n public MyTest {\n }' New in 2024.1", + "markdown": "Reports when parent and child classes in a JUnit test hierarchy are annotated with `@RunWith`. It can lead to unexpected testing behavior.\n\n**Example:**\n\n\n @RunWith(Suite.class)\n @SuiteClasses(MySuiteClass.class)\n public abstract Parent {\n }\n\n @RunWith(Parameterized.class)\n public MyTest {\n }\n\n\nNew in 2024.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Junit4RunWithInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Junit4Converter", + "shortDescription": { + "text": "JUnit 3 test can be JUnit 4" + }, + "fullDescription": { + "text": "Reports JUnit 3 test classes that can be converted to JUnit 4 test classes. Example: 'public class MainTestCase extends junit.framework.TestCase {\n public void test() {\n Assert.assertTrue(true);\n }\n }' After the quick-fix is applied: 'public class MainTestCase {\n @org.junit.Test\n public void test() {\n Assert.assertTrue(true);\n }\n }' This inspection only reports if the language level of the project or module is 5 or higher, and JUnit 4 is available on the classpath.", + "markdown": "Reports JUnit 3 test classes that can be converted to JUnit 4 test classes.\n\n**Example:**\n\n\n public class MainTestCase extends junit.framework.TestCase {\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class MainTestCase {\n @org.junit.Test\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nThis inspection only reports if the language level of the project or module is 5 or higher, and JUnit 4 is available on the classpath." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "Junit4Converter", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MigrateAssertToMatcherAssert", + "shortDescription": { + "text": "JUnit assertion can be 'assertThat()' call" + }, + "fullDescription": { + "text": "Reports calls to 'Assert.assertEquals()', 'Assert.assertTrue()', etc. methods which can be migrated to Hamcrest declarative style 'Assert.assertThat()' calls. For example: 'public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n Assert.assertTrue(c.contains(s));\n Assert.assertEquals(c, s);\n Assert.assertNotNull(c);\n Assert.assertNull(c);\n Assert.assertFalse(c.contains(s));\n }\n }' A quick-fix is provided to perform the migration: 'public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n assertThat(c, hasItem(o));\n assertThat(o, is(c));\n assertThat(c, notNullValue());\n assertThat(c, nullValue());\n assertThat(c, not(hasItem(o)));\n }\n }' This inspection requires that the Hamcrest library is available on the classpath. Use the Statically import matcher's methods option to specify if you want the quick-fix to statically import the Hamcrest matcher methods.", + "markdown": "Reports calls to `Assert.assertEquals()`, `Assert.assertTrue()`, etc. methods which can be migrated to Hamcrest declarative style `Assert.assertThat()` calls.\n\nFor example:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n Assert.assertTrue(c.contains(s));\n Assert.assertEquals(c, s);\n Assert.assertNotNull(c);\n Assert.assertNull(c);\n Assert.assertFalse(c.contains(s));\n }\n }\n\nA quick-fix is provided to perform the migration:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n assertThat(c, hasItem(o));\n assertThat(o, is(c));\n assertThat(c, notNullValue());\n assertThat(c, nullValue());\n assertThat(c, not(hasItem(o)));\n }\n }\n\nThis inspection requires that the Hamcrest library is available on the classpath.\n\nUse the **Statically import matcher's methods** option to specify if you want the quick-fix to statically import the Hamcrest matcher methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MigrateAssertToMatcherAssert", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JUnit", + "index": 102, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "Lombook Plugin", + "version": "241.17569", + "rules": [ + { + "id": "RedundantModifiersUtilityClassLombok", + "shortDescription": { + "text": "@UtilityClass modifiers" + }, + "fullDescription": { + "text": "Reports unneeded modifiers for classes annotated with '@UtilityClass'.", + "markdown": "Reports unneeded modifiers for classes annotated with `@UtilityClass`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantModifiersUtilityClassLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 106, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringQualifierCopyableLombok", + "shortDescription": { + "text": "@Qualifier not copyable by lombok" + }, + "fullDescription": { + "text": "Reports Spring '@Qualifier' annotations on class fields that are ignored by the corresponding Lombok '@RequiredArgsConstructor' and '@AllArgsConstructor' annotations. The generated constructors will not receive the '@Qualifier' annotation without a 'lombok.copyableAnnotations' definition inside the 'lombok.config' file.", + "markdown": "Reports Spring `@Qualifier` annotations on class fields that are ignored by the corresponding Lombok `@RequiredArgsConstructor` and `@AllArgsConstructor` annotations. The generated constructors will not receive the `@Qualifier` annotation without a `lombok.copyableAnnotations` definition inside the `lombok.config` file." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringQualifierCopyableLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModifiersValLombok", + "shortDescription": { + "text": "Unnecessary final before 'val'" + }, + "fullDescription": { + "text": "Reports unneeded 'final' modifiers before 'val'.", + "markdown": "Reports unneeded `final` modifiers before `val`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantModifiersValLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 106, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LombokGetterMayBeUsed", + "shortDescription": { + "text": "Lombok @Getter may be used" + }, + "fullDescription": { + "text": "Reports standard getter method that can be replaced by the lombok '@Getter' annotation. Example: 'import java.util.Date;\n\n public class MyClass {\n /**\n * The process date.\n */\n private Date processDate;\n\n /**\n * Returns the date.\n *\n * @return The date\n */\n public Date getProcessDate() {\n return processDate;\n }\n }' After the quick-fix/cleanup is applied: 'import lombok.Getter;\n import java.util.Date;\n\n @Getter\n public class MyClass {\n /**\n * The process date.\n * -- GETTER --\n * Returns the date.\n *\n * @return The date\n */\n private Date processDate;\n }' It only reports when the lombok library is configured. To unlombok, see the lombok site. New in 2023.2", + "markdown": "Reports standard getter method that can be replaced by the lombok `@Getter` annotation.\n\nExample:\n\n\n import java.util.Date;\n\n public class MyClass {\n /**\n * The process date.\n */\n private Date processDate;\n\n /**\n * Returns the date.\n *\n * @return The date\n */\n public Date getProcessDate() {\n return processDate;\n }\n }\n\nAfter the quick-fix/cleanup is applied:\n\n\n import lombok.Getter;\n import java.util.Date;\n\n @Getter\n public class MyClass {\n /**\n * The process date.\n * -- GETTER --\n * Returns the date.\n *\n * @return The date\n */\n private Date processDate;\n }\n\nIt only reports when the lombok library is configured. To unlombok, see the lombok site.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LombokGetterMayBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSlf4jDefinition", + "shortDescription": { + "text": "@Slf4j" + }, + "fullDescription": { + "text": "Reports explicitly defined Slf4j Loggers. The '@Slf4j' annotation can be used instead.", + "markdown": "Reports explicitly defined *Slf4j* Loggers. The `@Slf4j` annotation can be used instead." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSlf4jDefinition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant definitions", + "index": 189, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModifiersValueLombok", + "shortDescription": { + "text": "@Value modifiers" + }, + "fullDescription": { + "text": "Reports unneeded modifiers for classes annotated with '@Value'.", + "markdown": "Reports unneeded modifiers for classes annotated with `@Value`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantModifiersValueLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 106, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticMethodImportLombok", + "shortDescription": { + "text": "Using static import for lombok generated methods" + }, + "fullDescription": { + "text": "Reports usages of static imports for Lombok's generated methods. This will fail on compilation with javac. The reason is that static methods are resolved before the lombok annotation processor kicks in. At this time javac uses the original code before the one that should have been generated by the annotation processor, then javac of course report the missing symbols (generated methods). See for more details", + "markdown": "Reports usages of static imports for Lombok's generated methods. \n\n\nThis will fail on compilation with javac. The reason is that static methods are resolved before the lombok annotation processor kicks in.\nAt this time javac uses the original code before the one that should have been generated by the annotation processor, then javac of course\nreport the missing symbols (generated methods).\nSee for more [details](https://github.com/projectlombok/lombok/issues/2044)" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "StaticMethodImportLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LombokSetterMayBeUsed", + "shortDescription": { + "text": "Lombok @Setter may be used" + }, + "fullDescription": { + "text": "Reports standard setter method that can be replaced by the lombok '@Setter' annotation. Example: 'import java.util.Date;\n\n public class MyClass {\n /**\n * The process date.\n */\n private Date processDate;\n\n /**\n * Sets the date.\n *\n * @param The date\n */\n public void setProcessDate(Date param) {\n processDate = param;\n }\n }' After the quick-fix/cleanup is applied: 'import lombok.Setter;\n import java.util.Date;\n\n @Setter\n public class MyClass {\n /**\n * The process date.\n * -- SETTER --\n * Sets the date.\n *\n * @param The date\n */\n private Date processDate;\n }' It only reports when the lombok library is configured. To unlombok, see the lombok site. New in 2023.2", + "markdown": "Reports standard setter method that can be replaced by the lombok `@Setter` annotation.\n\nExample:\n\n\n import java.util.Date;\n\n public class MyClass {\n /**\n * The process date.\n */\n private Date processDate;\n\n /**\n * Sets the date.\n *\n * @param The date\n */\n public void setProcessDate(Date param) {\n processDate = param;\n }\n }\n\nAfter the quick-fix/cleanup is applied:\n\n\n import lombok.Setter;\n import java.util.Date;\n\n @Setter\n public class MyClass {\n /**\n * The process date.\n * -- SETTER --\n * Sets the date.\n *\n * @param The date\n */\n private Date processDate;\n }\n\nIt only reports when the lombok library is configured. To unlombok, see the lombok site.\n\nNew in 2023.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LombokSetterMayBeUsed", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 47, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Lombok", + "shortDescription": { + "text": "Lombok annotations" + }, + "fullDescription": { + "text": "Offers general inspections for Lombok annotations.", + "markdown": "Offers general inspections for Lombok annotations." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Lombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedLombok", + "shortDescription": { + "text": "Deprecated Lombok annotations" + }, + "fullDescription": { + "text": "Reports deprecated Lombok annotations and suggests quick-fixes to replace them with the ones promoted to the main package.", + "markdown": "Reports deprecated Lombok annotations and suggests quick-fixes to replace them with the ones promoted to the main package." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "DeprecatedLombok", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 105, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.javaee.web", + "version": "241.17569", + "rules": [ + { + "id": "MimeType", + "shortDescription": { + "text": "MIME type" + }, + "fullDescription": { + "text": "Lets you control MIME type name validity.", + "markdown": "Lets you control MIME type name validity." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MimeType", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WebWarnings", + "shortDescription": { + "text": "Web.xml warnings" + }, + "fullDescription": { + "text": "Reports duplicated welcome-files listed in the descriptor for deploying a Web Module to a server. Example: '\n \n \n \n \n Welcome1.jsp\n \n \n /Welcome1.jsp // Error: duplicated welcome-file\n \n \n Welcome3.jsp\n \n \n '", + "markdown": "Reports duplicated welcome-files listed in the descriptor for deploying a Web Module to a server.\n\n**Example:**\n\n\n \n \n \n \n \n Welcome1.jsp\n \n \n /Welcome1.jsp // Error: duplicated welcome-file\n \n \n Welcome3.jsp\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WebWarnings", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ServletWithoutMappingInspection", + "shortDescription": { + "text": "Servlet mapping" + }, + "fullDescription": { + "text": "Reports servlets without associated mappings. Example: '\n \n foo // Error: servlet should have a mapping\n javax.servlet.Servlet\n \n \n \n bar // Error: filter should have a mapping\n java.lang.String\n \n '", + "markdown": "Reports servlets without associated mappings.\n\n**Example:**\n\n\n \n \n foo // Error: servlet should have a mapping\n javax.servlet.Servlet\n \n \n \n bar // Error: filter should have a mapping\n java.lang.String\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ServletWithoutMappingInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WebProperties", + "shortDescription": { + "text": "Web.xml errors" + }, + "fullDescription": { + "text": "Reports the following problems in descriptors that are used to deploy your Web Module to a server: References to non-instantiable classes References to classes that do not extend required class References to classes with inappropriate scope Empty tag and attribute values Tag and attribute values that do not match required pattern (for example, Java Identifiers) Tags that do not include required children tags or attributes Tags that define objects with duplicate names Example: '\n \n CustomFilter // Error: either servlet-name or url-pattern child tag should be defined\n \n \n CustomServletName\n / baseUrl // Error: URI-pattern must not contain white spaces\n \n'", + "markdown": "Reports the following problems in descriptors that are used to deploy your Web Module to a server:\n\n* References to non-instantiable classes\n* References to classes that do not extend required class\n* References to classes with inappropriate scope\n* Empty tag and attribute values\n* Tag and attribute values that do not match required pattern (for example, Java Identifiers)\n* Tags that do not include required children tags or attributes\n* Tags that define objects with duplicate names\n\n**Example:**\n\n\n \n \n CustomFilter // Error: either servlet-name or url-pattern child tag should be defined\n \n \n CustomServletName\n / baseUrl // Error: URI-pattern must not contain white spaces\n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "WebProperties", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Java EE", + "index": 94, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.uiDesigner", + "version": "241.17569", + "rules": [ + { + "id": "InvalidPropertyKeyForm", + "shortDescription": { + "text": "Invalid property key in a UI form" + }, + "fullDescription": { + "text": "Reports unresolved references to .properties files.", + "markdown": "Reports unresolved references to .properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InvalidPropertyKeyForm", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingMnemonic", + "shortDescription": { + "text": "Missing mnemonics" + }, + "fullDescription": { + "text": "Reports focusable components with the 'text' property or labels with the assigned 'labelFor' property that do not have a mnemonic character. The quick-fix assigns a unique mnemonic to such a component.", + "markdown": "Reports focusable components with the `text` property or labels with the assigned `labelFor` property that do not have a mnemonic character. The quick-fix assigns a unique mnemonic to such a component." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MissingMnemonic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoScrollPane", + "shortDescription": { + "text": "Scrollable component not in JScrollPane" + }, + "fullDescription": { + "text": "Reports 'Scrollable' components, except for 'JTextField', that are not placed in 'JScrollPane'. The quick-fix surrounds the problematic component with a scroll pane.", + "markdown": "Reports `Scrollable` components, except for `JTextField`, that are not placed in `JScrollPane`. The quick-fix surrounds the problematic component with a scroll pane." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NoScrollPane", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FormSpellChecking", + "shortDescription": { + "text": "Typo in a UI form" + }, + "fullDescription": { + "text": "Reports typos and misspelling in your UI forms (for example, in a 'JLabel' text or 'JPanel' title) and fixes them with one click.", + "markdown": "Reports typos and misspelling in your UI forms (for example, in a `JLabel` text or `JPanel` title) and fixes them\nwith one click." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FormSpellChecking", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "I18nForm", + "shortDescription": { + "text": "Hardcoded string literal in a UI form" + }, + "fullDescription": { + "text": "Reports any instances of hardcoded strings in your UI forms. Hardcoded string literals are usually errors in an internationalized environment. This inspection does not report empty strings and strings consisting of only whitespace. The quick-fix transforms a string literal into a reference to a property in a resource bundle.", + "markdown": "Reports any instances of hardcoded strings in your UI forms.\n\nHardcoded string literals are usually errors in\nan internationalized environment.\nThis inspection does not report empty strings and strings consisting of only whitespace.\n\nThe quick-fix transforms a string literal\ninto a reference to a property in a resource bundle." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "I18nForm", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoundFieldAssignment", + "shortDescription": { + "text": "Assignment to UI-bound field" + }, + "fullDescription": { + "text": "Reports assignments to fields which are bound to components in UI Designer forms. Such assignments will cause the component setup code generated by UI Designer for such fields to be ignored.", + "markdown": "Reports assignments to fields which are bound to components in UI Designer forms.\n\nSuch assignments will cause the component setup code generated by UI Designer\nfor such fields to be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BoundFieldAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoLabelFor", + "shortDescription": { + "text": "No label for component" + }, + "fullDescription": { + "text": "Reports components that do not have any static text and do not have any label marked with 'setLabelFor' for this component. Components that do not have static text include edit fields and combo boxes. Such components cannot be activated with a keyboard shortcut. The quick-fix for this inspection allows you to automatically associate an adjacent label with the problematic component.", + "markdown": "Reports components that do not have any static text and do not have any label marked with `setLabelFor` for this component.\n\nComponents that do not have static text include edit fields and combo boxes.\nSuch components cannot be activated with a keyboard shortcut. The quick-fix for this inspection\nallows you to automatically associate an adjacent label with the problematic component." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NoLabelFor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OneButtonGroup", + "shortDescription": { + "text": "Button group with one button" + }, + "fullDescription": { + "text": "Reports 'ButtonGroup' instances that contain only one 'JRadioButton'.", + "markdown": "Reports `ButtonGroup` instances that contain only one `JRadioButton`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OneButtonGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateMnemonic", + "shortDescription": { + "text": "Duplicate mnemonics" + }, + "fullDescription": { + "text": "Reports components that have duplicated mnemonic characters. The quick-fix assigns a unique mnemonic character to each of the components.", + "markdown": "Reports components that have duplicated mnemonic characters.\n\nThe quick-fix assigns a unique mnemonic character to each of the components." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DuplicateMnemonic", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoButtonGroup", + "shortDescription": { + "text": "Radio button not in a group" + }, + "fullDescription": { + "text": "Reports 'JRadioButton' components that are not placed in 'ButtonGroup'. A quick-fix is available to group radio buttons placed in adjacent grid cells.", + "markdown": "Reports `JRadioButton` components that are not placed in `ButtonGroup`. A quick-fix is available to group radio buttons placed in adjacent grid cells." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NoButtonGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 107, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.qodana", + "version": "241.17569", + "rules": [ + { + "id": "JsCoverageInspection", + "shortDescription": { + "text": "Check JavaScript and TypeScript source code coverage" + }, + "fullDescription": { + "text": "Reports methods, classes and files whose coverage is below a certain threshold.", + "markdown": "Reports methods, classes and files whose coverage is below a certain threshold." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsCoverageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Code Coverage", + "index": 112, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaAnnotator", + "shortDescription": { + "text": "Java annotator" + }, + "fullDescription": { + "text": "Allows viewing the problems reported by the Java annotator: compilation problems, unresolved by IDEA references, and so on.", + "markdown": "Allows viewing the problems reported by the Java annotator: compilation problems, unresolved by IDEA references, and so on." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JavaAnnotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JvmCoverageInspection", + "shortDescription": { + "text": "Check Kotlin and Java source code coverage" + }, + "fullDescription": { + "text": "Reports methods and classes whose coverage is below a certain threshold.", + "markdown": "Reports methods and classes whose coverage is below a certain threshold." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "JvmCoverageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Code Coverage", + "index": 112, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QodanaKotlinSanity", + "shortDescription": { + "text": "Kotlin sanity" + }, + "fullDescription": { + "text": "Reports unresolved references in Kotlin code.", + "markdown": "Reports unresolved references in Kotlin code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "QodanaKotlinSanity", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QodanaSanity", + "shortDescription": { + "text": "Sanity" + }, + "fullDescription": { + "text": "Reports issues essential to this file like syntax errors, unresolved methods and variables, etc...", + "markdown": "Reports issues essential to this file like syntax errors, unresolved methods and variables, etc..." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "QodanaSanity", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Qodana", + "index": 182, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QodanaJavaSanity", + "shortDescription": { + "text": "Java sanity" + }, + "fullDescription": { + "text": "Reports unresolved references in Java code.", + "markdown": "Reports unresolved references in Java code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "QodanaJavaSanity", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 50, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.jetbrains.restWebServices", + "version": "241.17569", + "rules": [ + { + "id": "WadlDomInspection", + "shortDescription": { + "text": "Incorrect WADL configuration" + }, + "fullDescription": { + "text": "Reports configuration errors in WADL files.", + "markdown": "Reports configuration errors in WADL files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "WadlDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RestParamTypeInspection", + "shortDescription": { + "text": "Incorrect parameter type of resource method" + }, + "fullDescription": { + "text": "Reports resource method parameters (annotated with '@PathParam', '@QueryParam', and so on) with unsupported types. The type of the annotated parameter, field, or property must meet one of the following requirements: Be a primitive type Have a constructor that accepts a single 'String' argument Have a static method named 'valueOf()' or 'fromString()' that accepts a single 'String' argument, for example, 'Integer.valueOf(String)'. Have a registered implementation of 'ParamConverterProvider' JAX-RS extension SPI that returns a 'ParamConverter' instance capable of converting a string to a particular type. Be 'List', 'Set', or 'SortedSet', where T satisfies 2, 3, or 4 above. The resulting collection is read-only.", + "markdown": "Reports resource method parameters (annotated with `@PathParam`, `@QueryParam`, and so on) with unsupported types.\n\nThe type of the annotated parameter, field, or property must meet one of the following requirements:\n\n1. Be a primitive type\n2. Have a constructor that accepts a single `String` argument\n3. Have a static method named `valueOf()` or `fromString()` that accepts a single `String` argument, for example, `Integer.valueOf(String)`.\n4. Have a registered implementation of `ParamConverterProvider` JAX-RS extension SPI that returns a `ParamConverter` instance capable of converting a string to a particular type.\n5. Be `List`, `Set`, or `SortedSet`, where T satisfies 2, 3, or 4 above. The resulting collection is read-only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "RestParamTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleMethodDesignatorsInspection", + "shortDescription": { + "text": "Resource method with multiple HTTP method annotations" + }, + "fullDescription": { + "text": "Reports resource methods with multiple HTTP method annotations ('@GET', '@POST', '@PUT', and so on).", + "markdown": "Reports resource methods with multiple HTTP method annotations (`@GET`, `@POST`, `@PUT`, and so on)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MultipleMethodDesignatorsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PathAnnotation", + "shortDescription": { + "text": "Incorrect @Path URI template" + }, + "fullDescription": { + "text": "Reports syntax errors and unused URI templates inside '@Path' annotations. Example: '@GET\n @Path(\"/{unused}\") // Template 'unused' is never used\n public String get() {\n return \"\";\n }'", + "markdown": "Reports syntax errors and unused URI templates inside `@Path` annotations.\n\n**Example:**\n\n\n @GET\n @Path(\"/{unused}\") // Template 'unused' is never used\n public String get() {\n return \"\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PathAnnotation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RestResourceMethodInspection", + "shortDescription": { + "text": "@Path class without resource methods" + }, + "fullDescription": { + "text": "Reports classes annotated with '@Path' that have no resource methods. The root resource class must have at least one resource method annotated with '@Path' or with any of '@HttpMethod' annotations ('@GET', '@POST', and so on).", + "markdown": "Reports classes annotated with `@Path` that have no resource methods.\nThe root resource class must have at least one resource method annotated with `@Path`\nor with any of `@HttpMethod` annotations (`@GET`, `@POST`, and so on)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "RestResourceMethodInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RestWrongDefaultValueInspection", + "shortDescription": { + "text": "Incorrect value of @DefaultValue parameter" + }, + "fullDescription": { + "text": "Reports the value of '@DefaultValue' if it cannot be converted to the specified type of parameter. Example: '@GET\n @Path(\"/{n}\")\n public String get(@PathParam(\"n\") @DefaultValue(\"III\") int n) { // Error: Cannot convert 'III' to int\n }'", + "markdown": "Reports the value of `@DefaultValue` if it cannot be converted to the specified type of parameter.\n\n**Example:**\n\n\n @GET\n @Path(\"/{n}\")\n public String get(@PathParam(\"n\") @DefaultValue(\"III\") int n) { // Error: Cannot convert 'III' to int\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "RestWrongDefaultValueInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VoidMethodAnnotatedWithGET", + "shortDescription": { + "text": "@GET annotated method returns void value" + }, + "fullDescription": { + "text": "Reports methods annotated with '@GET' that do not return anything. Methods annotated with '@GET' must have a non-void return type.", + "markdown": "Reports methods annotated with `@GET` that do not return anything.\nMethods annotated with `@GET` must have a non-void return type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VoidMethodAnnotatedWithGET", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedRestParam", + "shortDescription": { + "text": "Unresolved @PathParam reference" + }, + "fullDescription": { + "text": "Reports '@PathParam' parameters that are declared in a method signature and missing in the URL path or visa versa. Example: '@Get(\"/path/{myVariable}/\")\n public String handler(@PathParam(\"name_is_not_equal_to_myVariable\") String myVariable) { // Error\n return \"...\";\n }'", + "markdown": "Reports `@PathParam` parameters that are declared in a method signature and missing in the URL path or visa versa.\n\n**Example:**\n\n\n @Get(\"/path/{myVariable}/\")\n public String handler(@PathParam(\"name_is_not_equal_to_myVariable\") String myVariable) { // Error\n return \"...\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedRestParam", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "RESTful Web Service (JAX-RS)", + "index": 125, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "HtmlTools", + "version": "241.17569", + "rules": [ + { + "id": "HtmlDeprecatedTag", + "shortDescription": { + "text": "Obsolete tag" + }, + "fullDescription": { + "text": "Reports an obsolete HTML5 tag. Suggests replacing the obsolete tag with a CSS or another tag.", + "markdown": "Reports an obsolete HTML5 tag. Suggests replacing the obsolete tag with a CSS or another tag." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlDeprecatedTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredSummaryAttribute", + "shortDescription": { + "text": "Missing required 'summary' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'summary' attribute in a 'table' tag. Suggests adding a'summary' attribute. Based on WCAG 2.0: H73.", + "markdown": "Reports a missing `summary` attribute in a `table` tag. Suggests adding a`summary` attribute. Based on WCAG 2.0: [H73](https://www.w3.org/TR/WCAG20-TECHS/H73.html)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlRequiredSummaryAttribute", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlNonExistentInternetResource", + "shortDescription": { + "text": "Unresolved web link" + }, + "fullDescription": { + "text": "Reports an unresolved web link. Works by making network requests in the background.", + "markdown": "Reports an unresolved web link. Works by making network requests in the background." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlNonExistentInternetResource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlFormInputWithoutLabel", + "shortDescription": { + "text": "Missing associated label" + }, + "fullDescription": { + "text": "Reports a form element ('input', 'textarea', or 'select') without an associated label. Suggests creating a new label. Based on WCAG 2.0: H44.", + "markdown": "Reports a form element (`input`, `textarea`, or `select`) without an associated label. Suggests creating a new label. Based on WCAG 2.0: [H44](https://www.w3.org/TR/WCAG20-TECHS/H44.html). " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlFormInputWithoutLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredTitleAttribute", + "shortDescription": { + "text": "Missing required 'title' attribute" + }, + "fullDescription": { + "text": "Reports a missing title attribute 'frame', 'iframe', 'dl', and 'a' tags. Suggests adding a title attribute. Based on WCAG 2.0: H33, H40, and H64.", + "markdown": "Reports a missing title attribute `frame`, `iframe`, `dl`, and `a` tags. Suggests adding a title attribute. Based on WCAG 2.0: [H33](https://www.w3.org/TR/WCAG20-TECHS/H33.html), [H40](https://www.w3.org/TR/WCAG20-TECHS/H40.html), and [H64](https://www.w3.org/TR/WCAG20-TECHS/H64.html)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlRequiredTitleAttribute", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredTitleElement", + "shortDescription": { + "text": "Missing required 'title' element" + }, + "fullDescription": { + "text": "Reports a missing 'title' element inside a 'head' section. Suggests adding a 'title' element. The title should describe the document. Based on WCAG 2.0: H25.", + "markdown": "Reports a missing `title` element inside a `head` section. Suggests adding a `title` element. The title should describe the document. Based on WCAG 2.0: [H25](https://www.w3.org/TR/WCAG20-TECHS/H25.html)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredTitleElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlDeprecatedAttribute", + "shortDescription": { + "text": "Obsolete attribute" + }, + "fullDescription": { + "text": "Reports an obsolete HTML5 attribute.", + "markdown": "Reports an obsolete HTML5 attribute." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlDeprecatedAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredAltAttribute", + "shortDescription": { + "text": "Missing required 'alt' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'alt' attribute in a 'img' or 'applet' tag or in a 'area' element of an image map. Suggests adding a required attribute with a text alternative for the contents of the tag. Based on WCAG 2.0: H24, H35, H36, H37.", + "markdown": "Reports a missing `alt` attribute in a `img` or `applet` tag or in a `area` element of an image map. Suggests adding a required attribute with a text alternative for the contents of the tag. Based on WCAG 2.0: [H24](https://www.w3.org/TR/WCAG20-TECHS/H24.html), [H35](https://www.w3.org/TR/WCAG20-TECHS/H35.html), [H36](https://www.w3.org/TR/WCAG20-TECHS/H36.html), [H37](https://www.w3.org/TR/WCAG20-TECHS/H37.html)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredAltAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckImageSize", + "shortDescription": { + "text": "Mismatched image size" + }, + "fullDescription": { + "text": "Reports a 'width' and 'height' attribute value of a 'img' tag that is different from the actual width and height of the referenced image.", + "markdown": "Reports a `width` and `height` attribute value of a `img` tag that is different from the actual width and height of the referenced image." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckImageSize", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredLangAttribute", + "shortDescription": { + "text": "Missing required 'lang' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'lang' (or 'xml:lang') attribute in a 'html' tag. Suggests adding a required attribute to state the default language of the document. Based on WCAG 2.0: H57.", + "markdown": "Reports a missing `lang` (or `xml:lang`) attribute in a `html` tag. Suggests adding a required attribute to state the default language of the document. Based on WCAG 2.0: [H57](https://www.w3.org/TR/WCAG20-TECHS/H57.html)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredLangAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 146, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlPresentationalElement", + "shortDescription": { + "text": "Presentational tag" + }, + "fullDescription": { + "text": "Reports a presentational HTML tag. Suggests replacing the presentational tag with a CSS or another tag.", + "markdown": "Reports a presentational HTML tag. Suggests replacing the presentational tag with a CSS or another tag." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlPresentationalElement", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 35, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.security.package-checker", + "version": "241.17569", + "rules": [ + { + "id": "VulnerableCodeUsages", + "shortDescription": { + "text": "Vulnerable API usage" + }, + "fullDescription": { + "text": "Reports usages of Vulnerable APIs of imported dependencies. Fixing the reported problems helps prevent your software from being compromised by an attacker. To solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability. Vulnerability data provided by Checkmarx (c).", + "markdown": "Reports usages of Vulnerable APIs of imported dependencies.\n\nFixing the reported problems helps prevent your software from being compromised by an attacker.\n\nTo solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability.\n\nVulnerability data provided by [Checkmarx](https://checkmarx.com/) (c)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "VulnerableCodeUsages", + "cweIds": [ + 1395 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Security", + "index": 142, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NpmVulnerableApiCode", + "shortDescription": { + "text": "Vulnerable API usage" + }, + "fullDescription": { + "text": "Reports usages of Vulnerable APIs of imported dependencies. Fixing the reported problems helps prevent your software from being compromised by an attacker. To solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability. Vulnerability data provided by Checkmarx (c).", + "markdown": "Reports usages of Vulnerable APIs of imported dependencies.\n\nFixing the reported problems helps prevent your software from being compromised by an attacker.\n\nTo solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability.\n\nVulnerability data provided by [Checkmarx](https://checkmarx.com/) (c)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NpmVulnerableApiCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Security", + "index": 150, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VulnerableLibrariesLocal", + "shortDescription": { + "text": "Vulnerable declared dependency" + }, + "fullDescription": { + "text": "Reports vulnerabilities in Gradle, Maven, NPM and PyPI dependencies declared in your project. A full list of Gradle and Maven dependencies is shown in the Project tool window under External Libraries. Fixing the reported problems helps prevent your software from being compromised by an attacker. To solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability. The quick-fixes available may suggest updating to a safe version or visiting the Checkmarx website to learn more about a particular vulnerability. Vulnerability data provided by Checkmarx (c).", + "markdown": "Reports vulnerabilities in Gradle, Maven, NPM and PyPI dependencies declared in your project.\nA full list of Gradle and Maven dependencies is shown in the Project tool window under External Libraries.\n\nFixing the reported problems helps prevent your software from being compromised by an attacker.\n\nTo solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability.\n\nThe quick-fixes available may suggest updating to a safe version or visiting the Checkmarx website to learn more about a particular vulnerability.\n\nVulnerability data provided by [Checkmarx](https://checkmarx.com/) (c)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "VulnerableLibrariesLocal", + "cweIds": [ + 1395 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Security", + "index": 142, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VulnerableLibrariesGlobal", + "shortDescription": { + "text": "Vulnerable imported dependency" + }, + "fullDescription": { + "text": "Reports vulnerabilities in Gradle and Maven dependencies imported into your project. A full list of Gradle and Maven dependencies is shown in the Project tool window under External Libraries. Fixing the reported problems helps prevent your software from being compromised by an attacker. To solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability. The quick-fixes available may suggest updating to a safe version or visiting the Checkmarx website to learn more about a particular vulnerability. Vulnerability data provided by Checkmarx (c).", + "markdown": "Reports vulnerabilities in Gradle and Maven dependencies imported into your project.\nA full list of Gradle and Maven dependencies is shown in the Project tool window under External Libraries.\n\nFixing the reported problems helps prevent your software from being compromised by an attacker.\n\nTo solve a problem, you can update to a version where the vulnerability is fixed (if available) or switch to a dependency that doesn't have the vulnerability.\n\nThe quick-fixes available may suggest updating to a safe version or visiting the Checkmarx website to learn more about a particular vulnerability.\n\nVulnerability data provided by [Checkmarx](https://checkmarx.com/) (c)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VulnerableLibrariesGlobal", + "cweIds": [ + 1395 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Security", + "index": 142, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.aop", + "version": "241.17569", + "rules": [ + { + "id": "DeclareParentsInspection", + "shortDescription": { + "text": "Introductions (declare parents) errors" + }, + "fullDescription": { + "text": "Reports '@AspectJ' Introduction inconsistency: it checks whether the 'defaultImpl' is required and if yes, whether it implements the given interface.", + "markdown": "Reports `@AspectJ` Introduction inconsistency: it checks whether the `defaultImpl` is required and if yes, whether it implements the given interface." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "DeclareParentsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AopLanguageInspection", + "shortDescription": { + "text": "Pointcut expression errors" + }, + "fullDescription": { + "text": "Reports issues in AOP pointcut expressions Unresolved references Incompatible number of arguments to pointcut Unresolved pointcuts etc.", + "markdown": "Reports issues in AOP pointcut expressions\n\n* Unresolved references\n* Incompatible number of arguments to pointcut\n* Unresolved pointcuts\n* etc." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "AopLanguageInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AroundAdviceStyleInspection", + "shortDescription": { + "text": "Around advice style inspection" + }, + "fullDescription": { + "text": "When using '@Around' advice, remember two things: Calling 'org.aspectj.lang.ProceedingJoinPoint#proceed' is necessary, otherwise the call won't reach the target. Returning the result value (typed 'java.lang.Object') of that call is necessary, otherwise the return value will never reach the original caller. However, the following two conditions almost always indicate a coding error: The signature for the '@Around' method does not have 'ProceedingJoinPoint' as the first argument: in this case, it's impossible for the call to reach the target. The signature for the '@Around' method does not have 'Object' as a return type: in this case, the return value of the target method is always lost.", + "markdown": "When using `@Around` advice, remember two things:\n\n* Calling `org.aspectj.lang.ProceedingJoinPoint#proceed` is necessary, otherwise the call won't reach the target.\n* Returning the result value (typed `java.lang.Object`) of that call is necessary, otherwise the return value will never reach the original caller.\n\nHowever, the following two conditions almost always indicate a coding error:\n\n* The signature for the `@Around` method does not have `ProceedingJoinPoint` as the first argument: in this case, it's impossible for the call to reach the target.\n* The signature for the `@Around` method does not have `Object` as a return type: in this case, the return value of the target method is always lost." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AroundAdviceStyleInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointcutMethodStyleInspection", + "shortDescription": { + "text": "Pointcut method style" + }, + "fullDescription": { + "text": "Validates '@Pointcut' methods: the 'void' return type, no 'throws' clause, and an empty method body.", + "markdown": "Validates `@Pointcut` methods: the `void` return type, no `throws` clause, and an empty method body." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointcutMethodStyleInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArgNamesErrorsInspection", + "shortDescription": { + "text": "Advice parameters (argNames, returning, throwing) consistency check" + }, + "fullDescription": { + "text": "Reports if an '@AspectJ' 'argNames' attribute value does not correspond to the actual method parameter name.", + "markdown": "Reports if an `@AspectJ` `argNames` attribute value does not correspond to the actual method parameter name." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ArgNamesErrorsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArgNamesWarningsInspection", + "shortDescription": { + "text": "Warning: argNames not defined" + }, + "fullDescription": { + "text": "Reports if an 'argNames' attribute is not defined in an '@AspectJ' annotation. Defining 'argNames' attributes in '@AspectJ' annotations is recommended since the method parameter names may not be available at runtime.", + "markdown": "Reports if an `argNames` attribute is not defined in an `@AspectJ` annotation.\n\nDefining `argNames` attributes in `@AspectJ` annotations is recommended since the method parameter names\nmay not be available at runtime." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ArgNamesWarningsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "AOP", + "index": 151, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.beanValidation", + "version": "241.17569", + "rules": [ + { + "id": "BvConfigDomInspection", + "shortDescription": { + "text": "Incorrect elements in Bean Validation files" + }, + "fullDescription": { + "text": "Reports incorrect elements in Bean Validation '' files: References to non-instantiable classes References to classes that do not extend required class References to classes with inappropriate scope Empty tag and attribute values Tag and attribute values that do not match the required pattern (for example, Java Identifiers) Tags that do not include required children tags or attributes Tags that define objects with duplicate names Example: '\n foo.UnknownProvider \n my.Interpolator\n META-INF/ConstraintMappings.xml\n META-INF/unknown.xml\n'", + "markdown": "Reports incorrect elements in Bean Validation `` files:\n\n* References to non-instantiable classes\n* References to classes that do not extend required class\n* References to classes with inappropriate scope\n* Empty tag and attribute values\n* Tag and attribute values that do not match the required pattern (for example, Java Identifiers)\n* Tags that do not include required children tags or attributes\n* Tags that define objects with duplicate names\n\n**Example:**\n\n\n \n foo.UnknownProvider \n my.Interpolator\n META-INF/ConstraintMappings.xml\n META-INF/unknown.xml\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "BvConfigDomInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Bean Validation", + "index": 152, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MinMaxValuesInspection", + "shortDescription": { + "text": "Incorrect 'min' and 'max' values in Bean Validation annotations" + }, + "fullDescription": { + "text": "Reports incorrect values of 'max' and 'min' values in Bean Validation constraint annotations. Example: 'public class Car {\n @NotNull\n @Size(min = 14, max = 2) // 'max' value is less than 'min' value\n private String licensePlate;\n}'", + "markdown": "Reports incorrect values of `max` and `min` values in Bean Validation constraint annotations.\n\n**Example:**\n\n\n public class Car {\n @NotNull\n @Size(min = 14, max = 2) // 'max' value is less than 'min' value\n private String licensePlate;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MinMaxValuesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Bean Validation", + "index": 152, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BvConstraintMappingsInspection", + "shortDescription": { + "text": "Incorrect elements in Bean Validation files" + }, + "fullDescription": { + "text": "Reports incorrect elements in Bean Validation '' files: References to non-instantiable classes References to classes that do not extend required class References to classes with inappropriate scope Empty tag and attribute values Tag and attribute values that do not match the required pattern (for example, Java Identifiers) Tags that do not include required children tags or attributes Tags that define objects with duplicate names Example: '\n \n \n \n \n\n \n \n non-number \n \n \n\n Cannot resolve symbol 'zzz'\n \n \n\n \n'", + "markdown": "Reports incorrect elements in Bean Validation `` files:\n\n* References to non-instantiable classes\n* References to classes that do not extend required class\n* References to classes with inappropriate scope\n* Empty tag and attribute values\n* Tag and attribute values that do not match the required pattern (for example, Java Identifiers)\n* Tags that do not include required children tags or attributes\n* Tags that define objects with duplicate names\n\n**Example:**\n\n\n \n \n \n \n \n\n \n \n non-number \n \n \n\n Cannot resolve symbol 'zzz'\n \n \n\n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "BvConstraintMappingsInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Bean Validation", + "index": 152, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.vue", + "version": "241.17569", + "rules": [ + { + "id": "VueMissingComponentImportInspection", + "shortDescription": { + "text": "Missing component import" + }, + "fullDescription": { + "text": "Reports Vue components, which require to be imported in Vue templates. It provides a quick fix to add the missing import.", + "markdown": "Reports Vue components, which require to be imported in Vue templates. It provides a quick fix to add the missing import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueMissingComponentImportInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueDuplicateTag", + "shortDescription": { + "text": "Duplicate template/script tag" + }, + "fullDescription": { + "text": "Reports multiple usages of the 'template' or 'script' tag in a Vue file. Vue Component specification indicates that each '*.vue' file can contain at most one 'template' or 'script' block at a time.", + "markdown": "Reports multiple usages of the `template` or `script` tag in a Vue file.\n\n[Vue Component specification](https://vue-loader.vuejs.org/spec.html) indicates that each `*.vue` file can contain at most one `template` or `script` block at a time." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDuplicateTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueDeprecatedSymbol", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated Vue symbol.", + "markdown": "Reports a deprecated Vue symbol." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDeprecatedSymbol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueDataFunction", + "shortDescription": { + "text": "Data function" + }, + "fullDescription": { + "text": "Reports a Vue component data property that is not a function. Suggests wrapping an object literal with a function. When defining a component, 'data' must be declared as a function that returns the initial data object, because the same definition will be used for creating numerous instances. If a plain object is still used for 'data', that very object will be shared by reference across all instances created! With a 'data' function, every time a new instance is created we can simply call it to return a fresh copy of the initial data.", + "markdown": "Reports a Vue component [data](https://vuejs.org/v2/api/#data) property that is not a function. Suggests wrapping an object literal with a function.\n\nWhen defining a component, `data` must be declared as a function that returns the initial data object, because the same definition will be used for creating numerous instances. If a plain object is still used for `data`, that very object will be shared by reference across all instances created! With a `data` function, every time a new instance is created we can simply call it to return a fresh copy of the initial data." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDataFunction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueUnrecognizedDirective", + "shortDescription": { + "text": "Unrecognized directive" + }, + "fullDescription": { + "text": "Reports an unrecognized Vue directive.", + "markdown": "Reports an unrecognized Vue directive." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueUnrecognizedDirective", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueUnrecognizedSlot", + "shortDescription": { + "text": "Unrecognized slot" + }, + "fullDescription": { + "text": "Reports an unrecognized Vue slot.", + "markdown": "Reports an unrecognized Vue slot." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "VueUnrecognizedSlot", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 157, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.security", + "version": "241.17569", + "rules": [ + { + "id": "SpringSecurityMethodCallsInspection", + "shortDescription": { + "text": "@PreFilter/@PreAuthorize/@PostFilter self-invocation method calls" + }, + "fullDescription": { + "text": "Using @PreFilter/@PostFilter/@PreAuthorize: In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) will not work at runtime even if the invoked method is marked with @PreFilter/@PostFilter/@PreAuthorize", + "markdown": "Using @PreFilter/@PostFilter/@PreAuthorize: In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation (in effect, a method within the target object calling another method of the target object) will not work at runtime even if the invoked method is marked with @PreFilter/@PostFilter/@PreAuthorize" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringSecurityMethodCallsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Security", + "index": 166, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringSecurityModelInspection", + "shortDescription": { + "text": "Incorrect Spring Security XML-based application context" + }, + "fullDescription": { + "text": "Reports issues with the Spring Security XML-based context: Unresolved bean references Missing required tags or attributes Incorrect property types Inconsistent 'enum' properties Incorrect types of referenced beans Also reports the following issues: configuration errors with the pattern '/**' must be the last one Multiple elements without 'pattern' are not allowed configuration errors Empty tag if 'security='none'' Must either have attribute 'properties' or list of elements 'manager-password' is required when 'manager-dn' is used Must either have 'user-context-mapper-ref' or 'user-details-class' Only one kind of user-service is allowed 'pre-post-annotations' must have the value 'enabled' to use ' Cannot use 'mode' with value 'aspectj' for and 'requires-channel' attribute only allowed for parent Mixing with is not recommended", + "markdown": "Reports issues with the [Spring Security](https://spring.io/projects/spring-security) XML-based context:\n\n* Unresolved bean references\n* Missing required tags or attributes\n* Incorrect property types\n* Inconsistent `enum` properties\n* Incorrect types of referenced beans\n\nAlso reports the following issues:\n\n* \\ configuration errors\n * \\ with the pattern '/\\*\\*' must be the last one\n * Multiple \\ elements without 'pattern' are not allowed\n* \\ configuration errors\n * Empty tag if `security='none'`\n* \\\n * Must either have attribute 'properties' or list of \\ elements\n* \\\n * 'manager-password' is required when 'manager-dn' is used\n * Must either have 'user-context-mapper-ref' or 'user-details-class'\n* \\\n * Only one kind of user-service is allowed\n* \\\n * 'pre-post-annotations' must have the value 'enabled' to use \\'\n * Cannot use 'mode' with value 'aspectj' for \\ and \\\n * 'requires-channel' attribute only allowed for parent \\\n* \\\n * Mixing \\ with \\ is not recommended" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringSecurityModelInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Security", + "index": 166, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringSecurityDebugActivatedInspection", + "shortDescription": { + "text": "Debug mode is activated in the Spring Security configuration" + }, + "fullDescription": { + "text": "Reports activated that may expose sensitive information.", + "markdown": "Reports activated **\\** that may expose sensitive information." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringSecurityDebugActivatedInspection", + "cweIds": [ + 215 + ], + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Security", + "index": 166, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringSecurityAnnotationBeanPointersResolveInspection", + "shortDescription": { + "text": "Incorrect configuration of Spring beans referenced in the Spring Security annotation" + }, + "fullDescription": { + "text": "Reports unresolved Spring beans referenced in Spring Security annotations. Examples: '@WithUserDetails(value = \"admin\", userDetailsServiceBeanName = \"unknownUserDetailsService\")\n // \"Cannot resolve 'unknownUserDetailsService' bean\" will be reported if 'unknownUserDetailsService' is not defined in the Spring model' '@WithUserDetails(value = \"admin\", userDetailsServiceBeanName = \"jpaUserDetailsService\")\n //\"Bean must be of 'org.springframework.security.core.userdetails.UserDetailsService' type\"\n // will be reported if \"jpaUserDetailsService\" bean is not of 'UserDetailsService' type'", + "markdown": "Reports unresolved Spring beans referenced in [Spring Security](https://spring.io/projects/spring-security) annotations.\n\n**Examples:**\n\n*\n\n @WithUserDetails(value = \"admin\", userDetailsServiceBeanName = \"unknownUserDetailsService\")\n // \"Cannot resolve 'unknownUserDetailsService' bean\" will be reported if 'unknownUserDetailsService' is not defined in the Spring model\n \n*\n\n @WithUserDetails(value = \"admin\", userDetailsServiceBeanName = \"jpaUserDetailsService\")\n //\"Bean must be of 'org.springframework.security.core.userdetails.UserDetailsService' type\"\n // will be reported if \"jpaUserDetailsService\" bean is not of 'UserDetailsService' type\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringSecurityAnnotationBeanPointersResolveInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Security", + "index": 166, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.yaml", + "version": "241.17569", + "rules": [ + { + "id": "YAMLIncompatibleTypes", + "shortDescription": { + "text": "Suspicious type mismatch" + }, + "fullDescription": { + "text": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions. Example: 'myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings'", + "markdown": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions.\n\n**Example:**\n\n\n myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLIncompatibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLDuplicatedKeys", + "shortDescription": { + "text": "Duplicated YAML keys" + }, + "fullDescription": { + "text": "Reports duplicated keys in YAML files. Example: 'same_key: some value\n same_key: another value'", + "markdown": "Reports duplicated keys in YAML files.\n\n**Example:**\n\n\n same_key: some value\n same_key: another value\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLDuplicatedKeys", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLSchemaValidation", + "shortDescription": { + "text": "Validation by JSON Schema" + }, + "fullDescription": { + "text": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified. Scheme example: '{\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeNumberProperty: hello world'", + "markdown": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified.\n\n**Scheme example:**\n\n\n {\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeNumberProperty: hello world\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLSchemaValidation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLUnresolvedAlias", + "shortDescription": { + "text": "Unresolved alias" + }, + "fullDescription": { + "text": "Reports unresolved aliases in YAML files. Example: 'some_key: *unknown_alias'", + "markdown": "Reports unresolved aliases in YAML files.\n\n**Example:**\n\n\n some_key: *unknown_alias\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLUnresolvedAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLSchemaDeprecation", + "shortDescription": { + "text": "Deprecated YAML key" + }, + "fullDescription": { + "text": "Reports deprecated keys in YAML files. Deprecation is checked only if there exists a JSON schema associated with the corresponding YAML file. Note that the deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard 'deprecationMessage' extension. Scheme deprecation example: '{\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeDeprecatedProperty: some value'", + "markdown": "Reports deprecated keys in YAML files.\n\nDeprecation is checked only if there exists a JSON schema associated with the corresponding YAML file.\n\nNote that the deprecation mechanism is not defined in the JSON Schema specification yet,\nand this inspection uses a non-standard `deprecationMessage` extension.\n\n**Scheme deprecation example:**\n\n\n {\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeDeprecatedProperty: some value\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "YAMLSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLRecursiveAlias", + "shortDescription": { + "text": "Recursive alias" + }, + "fullDescription": { + "text": "Reports recursion in YAML aliases. Alias can't be recursive and be used inside the data referenced by a corresponding anchor. Example: 'some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor'", + "markdown": "Reports recursion in YAML aliases.\n\nAlias can't be recursive and be used inside the data referenced by a corresponding anchor.\n\n**Example:**\n\n\n some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLRecursiveAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLUnusedAnchor", + "shortDescription": { + "text": "Unused anchor" + }, + "fullDescription": { + "text": "Reports unused anchors. Example: 'some_key: &some_anchor\n key1: value1'", + "markdown": "Reports unused anchors.\n\n**Example:**\n\n\n some_key: &some_anchor\n key1: value1\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLUnusedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 168, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.boot", + "version": "241.17569", + "rules": [ + { + "id": "SpringBootApplicationYaml", + "shortDescription": { + "text": "Invalid YAML configuration" + }, + "fullDescription": { + "text": "Reports unresolved and deprecated configuration keys and invalid values in Spring Boot application '.yaml' configuration files, which can lead to runtime errors. Example: 'server:\n port: invalid # Reports 'Cannot convert 'invalid' to java.lang.Integer'' If a deprecated configuration key has a replacement key, you can apply the 'Use replacement key' quick-fix. Example: 'logging:\n path: ${path} # Reports 'Deprecated configuration property 'logging.path''' After the quick-fix is applied: 'logging:\n file:\n path: ${path}' If a configuration key is not defined in 'spring-configuration-metadata.json', you can apply the 'Define configuration key' quick-fix that creates the 'META-INF/spring-additional-configuration-metadata.json' file and defines the necessary key. Example: 'new:\n key: value # Reports 'Cannot resolve configuration property 'new.key''' After the quick-fix is applied, the following is added to 'META-INF/spring-additional-configuration-metadata.json': '{\n \"properties\": [\n {\n \"name\": \"new.key\",\n \"type\": \"java.lang.String\",\n \"description\": \"Description for new.key.\"\n }\n] }' Use the Replacement tokens option to define tokens used for value placeholders in configuration files. These tokens are specified in the form 'beginToken*endToken'. Without the '*', the token is assumed to be the same for start and end. For example, the default is '@' for both start and end token, which enables you to define placeholders, such as 'some.property=@another.property@'. Values inside the replacement token ('@property.key@') will not be highlighted.", + "markdown": "Reports unresolved and deprecated configuration keys and invalid values in Spring Boot application `.yaml` configuration files,\nwhich can lead to runtime errors.\n\n**Example:**\n\n\n server:\n port: invalid # Reports 'Cannot convert 'invalid' to java.lang.Integer'\n\nIf a deprecated configuration key has a replacement key, you can apply the 'Use replacement key' quick-fix.\n\n**Example:**\n\n\n logging:\n path: ${path} # Reports 'Deprecated configuration property 'logging.path''\n\nAfter the quick-fix is applied:\n\n\n logging:\n file:\n path: ${path}\n\n\nIf a configuration key is not defined in `spring-configuration-metadata.json`, you can apply the 'Define configuration key' quick-fix\nthat creates the `META-INF/spring-additional-configuration-metadata.json` file and defines the necessary key.\n\n**Example:**\n\n\n new:\n key: value # Reports 'Cannot resolve configuration property 'new.key''\n\nAfter the quick-fix is applied, the following is added to `META-INF/spring-additional-configuration-metadata.json`:\n\n\n {\n \"properties\": [\n {\n \"name\": \"new.key\",\n \"type\": \"java.lang.String\",\n \"description\": \"Description for new.key.\"\n }\n ] }\n\n\nUse the **Replacement tokens** option to define tokens used for value placeholders in configuration files.\nThese tokens are specified in the form `beginToken*endToken`.\nWithout the `*`, the token is assumed to be the same for start and end.\n\n\nFor example, the default is `@` for both start and end token,\nwhich enables you to define placeholders, such as `some.property=@another.property@`.\n\nValues inside the replacement token (`@property.key@`) will not be highlighted." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringBootApplicationYaml", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBootApplicationSetup", + "shortDescription": { + "text": "Invalid Spring Boot application setup" + }, + "fullDescription": { + "text": "Reports '@SpringBootApplication' in the default package and redundant '@EnableAutoConfiguration' or '@ComponentScan' annotations. The quick-fix removes the redundant annotations. Example: '@SpringBootApplication\n@ComponentScan // Reports 'Redundant declaration: @SpringBootApplication already implies @ComponentScan'\npublic class DemoApplication {\n public static void main(String[] args) {\n SpringApplication.run(DemoApplication.class, args);\n }\n}' After the quick-fix is applied: '@SpringBootApplication\n public class DemoApplication {\n public static void main(String[] args) {\n SpringApplication.run(DemoApplication.class, args);\n }\n }' New in 2018.2", + "markdown": "Reports `@SpringBootApplication` in the default package and redundant `@EnableAutoConfiguration` or `@ComponentScan` annotations.\n\nThe quick-fix removes the redundant annotations.\n\n**Example:**\n\n\n @SpringBootApplication\n @ComponentScan // Reports 'Redundant declaration: @SpringBootApplication already implies @ComponentScan'\n public class DemoApplication {\n public static void main(String[] args) {\n SpringApplication.run(DemoApplication.class, args);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n @SpringBootApplication\n public class DemoApplication {\n public static void main(String[] args) {\n SpringApplication.run(DemoApplication.class, args);\n }\n }\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringBootApplicationSetup", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBootAdditionalConfig", + "shortDescription": { + "text": "Invalid additional-spring-configuration-metadata.json" + }, + "fullDescription": { + "text": "Reports missing and deprecated properties, unresolved references, and invalid values in the 'additional-spring-configuration-metadata.json' configuration file. Example: '{\n \"properties\": [\n {\n \"name\": \"old.key\",\n \"type\": \"com.Unknown\", // Reports 'Cannot resolve class 'Unknown''\n \"description\": \"Description for old.key\", // Reports 'Text should end with '.''\n \"deprecation\": {\n \"replacement\": \"new.key\", // Reports 'Cannot resolve configuration key reference 'new.key''\n \"reason\": \"Reason\", // Reports 'Text should end with '.''\n \"level\": \"warning\"\n }\n },\n {\n \"name\": \"duplicate\", // Reports 'Duplicate entry for 'duplicate''\n \"type\": \"java.lang.String\"\n },\n {\n \"name\": \"duplicate\", // Reports 'Duplicate entry for 'duplicate''\n \"type\": \"java.lang.String\"\n },\n {\n // Reports 'Missing required 'name''\n \"type\": \"java.lang.String\"\n }\n ]\n }'", + "markdown": "Reports missing and deprecated properties, unresolved references, and invalid values\nin the `additional-spring-configuration-metadata.json` configuration file.\n\n**Example:**\n\n\n {\n \"properties\": [\n {\n \"name\": \"old.key\",\n \"type\": \"com.Unknown\", // Reports 'Cannot resolve class 'Unknown''\n \"description\": \"Description for old.key\", // Reports 'Text should end with '.''\n \"deprecation\": {\n \"replacement\": \"new.key\", // Reports 'Cannot resolve configuration key reference 'new.key''\n \"reason\": \"Reason\", // Reports 'Text should end with '.''\n \"level\": \"warning\"\n }\n },\n {\n \"name\": \"duplicate\", // Reports 'Duplicate entry for 'duplicate''\n \"type\": \"java.lang.String\"\n },\n {\n \"name\": \"duplicate\", // Reports 'Duplicate entry for 'duplicate''\n \"type\": \"java.lang.String\"\n },\n {\n // Reports 'Missing required 'name''\n \"type\": \"java.lang.String\"\n }\n ]\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringBootAdditionalConfig", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBootReactorHooksOnDebug", + "shortDescription": { + "text": "Suspicious Hooks.onOperatorDebug() usage" + }, + "fullDescription": { + "text": "Reports the usage of 'Hooks.onOperatorDebug()' when 'ReactorDebugAgent.init()' is called. If 'ReactorDebugAgent' is in the classpath, and 'spring.reactor.debug-agent.enabled' is 'true' (default value), 'ReactorDebugAgent.init()' is called automatically at startup. Using both 'Hooks.onOperatorDebug()' and 'ReactorDebugAgent.init()' cause doubled debugging stack frames generated by Reactor. Also, 'Hooks.onOperatorDebug()' can cause performance overhead. The quick-fix removes the invocation of 'Hooks.onOperatorDebug()'. Example: 'public void hook() {\n Hooks.onOperatorDebug(); // Reports 'Call Hooks.onOperatorDebug() while ReactorDebugAgent is initialized'\n }' After the quick-fix is applied: 'public void hook() {\n }' This inspection only triggers when Spring Boot version for the project or module is 2.2.0 or higher.", + "markdown": "Reports the usage of `Hooks.onOperatorDebug()` when `ReactorDebugAgent.init()` is called.\n\n\nIf `ReactorDebugAgent` is in the classpath, and `spring.reactor.debug-agent.enabled`\nis `true` (default value), `ReactorDebugAgent.init()` is called automatically at startup.\nUsing both `Hooks.onOperatorDebug()` and `ReactorDebugAgent.init()` cause doubled debugging stack frames generated by Reactor.\nAlso, `Hooks.onOperatorDebug()` can cause performance overhead.\n\nThe quick-fix removes the invocation of `Hooks.onOperatorDebug()`.\n\n**Example:**\n\n\n public void hook() {\n Hooks.onOperatorDebug(); // Reports 'Call Hooks.onOperatorDebug() while ReactorDebugAgent is initialized'\n }\n\nAfter the quick-fix is applied:\n\n\n public void hook() {\n }\n\nThis inspection only triggers when Spring Boot version for the project or module is 2.2.0 or higher." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringBootReactorHooksOnDebug", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfigurationProperties", + "shortDescription": { + "text": "Invalid @ConfigurationProperties" + }, + "fullDescription": { + "text": "Reports invalid prefixes defined in the '@ConfigurationProperties' annotations: Missing prefix Empty prefix Duplicate prefix Prefix in notation other than kebab-case The inspection triggers in classes that are annotated with '@ConfigurationProperties' and not registered via '@EnableConfigurationProperties', marked as Spring component, or scanned via '@ConfigurationPropertiesScan'. This inspection only triggers in classes annotated with '@ConfigurationProperties' that are not scanned via '@ConfigurationPropertiesScan' when the Spring Boot version for the project or module is set to 2.2.0 or later. New in 2018.3", + "markdown": "Reports invalid prefixes defined in the `@ConfigurationProperties` annotations:\n\n* Missing prefix\n* Empty prefix\n* Duplicate prefix\n* Prefix in notation other than kebab-case\n\n\nThe inspection triggers in classes that are annotated with `@ConfigurationProperties` and not registered via `@EnableConfigurationProperties`,\nmarked as Spring component, or scanned via `@ConfigurationPropertiesScan`.\n\n\nThis inspection only triggers in classes annotated with `@ConfigurationProperties` that are not scanned via `@ConfigurationPropertiesScan`\nwhen the Spring Boot version for the project or module is set to 2.2.0 or later.\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "ConfigurationProperties", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringBootApplicationProperties", + "shortDescription": { + "text": "Invalid properties configuration" + }, + "fullDescription": { + "text": "Reports unresolved and deprecated configuration keys and invalid values in Spring Boot application '.properties' configuration files, which can lead to runtime errors. Example: 'server.port=invalid # Reports 'Cannot convert 'invalid' to java.lang.Integer'' If a deprecated configuration key has a replacement key, you can apply the 'Use replacement key' quick-fix. Example: 'logging.path=${path} # Reports 'Deprecated configuration property 'logging.path''' After the quick-fix is applied: 'logging.file.path=${path}' If a configuration key is not defined in 'spring-configuration-metadata.json', you can apply the 'Define configuration key' quick-fix that creates the 'META-INF/spring-additional-configuration-metadata.json' file and defines the necessary key. Example: 'new.key=value #Reports 'Cannot resolve configuration property 'new.key''' After the quick-fix is applied, the following is added to 'META-INF/spring-additional-configuration-metadata.json': '{\n \"properties\": [\n {\n \"name\": \"new.key\",\n \"type\": \"java.lang.String\",\n \"description\": \"Description for new.key.\"\n }\n] }' The inspection also highlights index notation errors in list and map configuration keys. Example: 'spring.datasource.schema[]=${schema} #Reports 'Missing index value'' Use the Replacement tokens option to define tokens used for value placeholders in configuration files. These tokens are specified in the form 'beginToken*endToken'. Without the '*', the token is assumed to be the same for start and end. For example, the default is '@' for both start and end token, which enables you to define placeholders, such as 'some.property=@another.property@'. Values inside the replacement token ('@property.key@') will not be highlighted.", + "markdown": "Reports unresolved and deprecated configuration keys and invalid values in Spring Boot application `.properties` configuration files,\nwhich can lead to runtime errors.\n\n**Example:**\n\n\n server.port=invalid # Reports 'Cannot convert 'invalid' to java.lang.Integer'\n\nIf a deprecated configuration key has a replacement key, you can apply the 'Use replacement key' quick-fix.\n\n**Example:**\n\n\n logging.path=${path} # Reports 'Deprecated configuration property 'logging.path''\n\nAfter the quick-fix is applied:\n\n\n logging.file.path=${path}\n\n\nIf a configuration key is not defined in `spring-configuration-metadata.json`, you can apply the 'Define configuration key' quick-fix\nthat creates the `META-INF/spring-additional-configuration-metadata.json` file and defines the necessary key.\n\n**Example:**\n\n\n new.key=value #Reports 'Cannot resolve configuration property 'new.key''\n\nAfter the quick-fix is applied, the following is added to `META-INF/spring-additional-configuration-metadata.json`:\n\n\n {\n \"properties\": [\n {\n \"name\": \"new.key\",\n \"type\": \"java.lang.String\",\n \"description\": \"Description for new.key.\"\n }\n ] }\n\nThe inspection also highlights index notation errors in list and map configuration keys.\n\n**Example:**\n\n\n spring.datasource.schema[]=${schema} #Reports 'Missing index value'\n\n\nUse the **Replacement tokens** option to define tokens used for value placeholders in configuration files.\nThese tokens are specified in the form `beginToken*endToken`.\nWithout the `*`, the token is assumed to be the same for start and end.\n\n\nFor example, the default is `@` for both start and end token,\nwhich enables you to define placeholders, such as `some.property=@another.property@`.\n\nValues inside the replacement token (`@property.key@`) will not be highlighted." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringBootApplicationProperties", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring Boot", + "index": 170, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.microservices.jvm", + "version": "241.17569", + "rules": [ + { + "id": "UastIncorrectMimeTypeInspection", + "shortDescription": { + "text": "Incorrect MIME Type declaration" + }, + "fullDescription": { + "text": "Reports incorrect MIME types (for example, in 'Content-Type' strings) for HTTP servers and clients.", + "markdown": "Reports incorrect MIME types (for example, in `Content-Type` strings) for HTTP servers and clients." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "UastIncorrectMimeTypeInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UastIncorrectHttpHeaderInspection", + "shortDescription": { + "text": "Unknown HTTP header" + }, + "fullDescription": { + "text": "Reports unknown HTTP headers that do not match any publicly known headers. The quick fix suggests adding the header to the list of custom headers to avoid triggering this inspection in the future. Custom HTTP headers are listed for the inspection with the same name in the HTTP Client group.", + "markdown": "Reports unknown HTTP headers that do not match any [publicly\nknown headers](https://www.iana.org/assignments/message-headers/message-headers.xml). The quick fix suggests adding the header to the list of custom headers to avoid triggering this inspection in the\nfuture.\n\nCustom HTTP headers are listed for the inspection with the same name in the HTTP Client group." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "UastIncorrectHttpHeaderInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 3, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "intellij.webpack", + "version": "241.17569", + "rules": [ + { + "id": "WebpackConfigHighlighting", + "shortDescription": { + "text": "Webpack config compliance with JSON Schema" + }, + "fullDescription": { + "text": "Validates options in webpack config files (which name should start with `webpack`, e.g. `webpack.config.js`) against webpack options schema. Disable this inspection to turn off validation and code completion inside the configuration object.", + "markdown": "Validates options in webpack config files (which name should start with \\`webpack\\`, e.g. \\`webpack.config.js\\`) against [webpack options schema](https://github.com/webpack/webpack/blob/master/schemas/WebpackOptions.json). \n\nDisable this inspection to turn off validation and code completion inside the configuration object." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WebpackConfigHighlighting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 43, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.plugins.dependencyAnalysis", + "version": "241.17569", + "rules": [ + { + "id": "CheckDependencyLicenses", + "shortDescription": { + "text": "Check dependency licenses" + }, + "fullDescription": { + "text": "Check dependencies licenses for possible problems: missing or prohibited licenses, or other compliance issues", + "markdown": "Check dependencies licenses for possible problems: missing or prohibited licenses, or other compliance issues" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CheckDependencyLicenses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Dependency analysis", + "index": 183, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckModuleLicenses", + "shortDescription": { + "text": "Check module licenses" + }, + "fullDescription": { + "text": "Check module licenses for possible problems: missing licenses or other compliance issues", + "markdown": "Check module licenses for possible problems: missing licenses or other compliance issues" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckModuleLicenses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Dependency analysis", + "index": 183, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckThirdPartySoftwareList", + "shortDescription": { + "text": "Check third party software list" + }, + "fullDescription": { + "text": "Check project for possible problems: user's third party software list does not match the collected project metadata", + "markdown": "Check project for possible problems: user's third party software list does not match the collected project metadata" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckThirdPartySoftwareList", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Dependency analysis", + "index": 183, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.javaee.el", + "version": "241.17569", + "rules": [ + { + "id": "ELValidationInspection", + "shortDescription": { + "text": "EL validation" + }, + "fullDescription": { + "text": "Reports possible EL problems, such as unresolved references and invalid EL locations.", + "markdown": "Reports possible EL problems, such as unresolved references and invalid EL locations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ELValidationInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "EL", + "index": 184, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.jetbrains.sh", + "version": "241.17569", + "rules": [ + { + "id": "ShellCheck", + "shortDescription": { + "text": "ShellCheck" + }, + "fullDescription": { + "text": "Reports shell script bugs detected by the integrated ShellCheck static analysis tool.", + "markdown": "Reports shell script bugs detected by the integrated [ShellCheck](https://github.com/koalaman/shellcheck) static analysis tool." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ShellCheck", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Shell script", + "index": 186, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.spring.mvc", + "version": "241.17569", + "rules": [ + { + "id": "SpringMVCViewInspection", + "shortDescription": { + "text": "Unresolved view reference" + }, + "fullDescription": { + "text": "Reports unresolved Spring MVC View references. Example: '@RequestMapping\n public String viewHandler() {\n return \"viewName\"; // will be highlighted if no view with \"viewName\" can be found\n }'", + "markdown": "Reports unresolved Spring MVC View references.\n\nExample:\n\n\n @RequestMapping\n public String viewHandler() {\n return \"viewName\"; // will be highlighted if no view with \"viewName\" can be found\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "SpringMVCViewInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring MVC", + "index": 190, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringMVCInitBinder", + "shortDescription": { + "text": "Non-void @InitBinder method" + }, + "fullDescription": { + "text": "Reports Spring MVC Controller methods annotated with '@InitBinder' that are not declared as 'void'. According to the specification, init-binder methods should be declared as 'void'.", + "markdown": "Reports Spring MVC Controller methods annotated with `@InitBinder` that are not declared as `void`.\n\nAccording to the [specification](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/InitBinder.html),\ninit-binder methods should be declared as `void`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "SpringMVCInitBinder", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring MVC", + "index": 190, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MVCPathVariableInspection", + "shortDescription": { + "text": "Mismatch in @PathVariable declarations and usages" + }, + "fullDescription": { + "text": "Reports '@PathVariable' parameters that are declared in the method signature but are absent in the URL path or vice versa. The quick-fix adds the missing parameter. Example: '@RequestMapping(\"/path/{myVariable}/\")\n public String handler(@PathVariable String name_is_not_equal_to_myVariable) {\n return \"...\";\n }' After the quick-fix is applied the result looks like: '@RequestMapping(\"/path/{myVariable}/\")\n public String handler(@PathVariable String myVariable) {\n return \"...\";\n }'", + "markdown": "Reports `@PathVariable` parameters that are declared in the method signature but are absent in the URL path or vice versa.\nThe quick-fix adds the missing parameter.\n\n**Example:**\n\n\n @RequestMapping(\"/path/{myVariable}/\")\n public String handler(@PathVariable String name_is_not_equal_to_myVariable) {\n return \"...\";\n }\n\nAfter the quick-fix is applied the result looks like:\n\n\n @RequestMapping(\"/path/{myVariable}/\")\n public String handler(@PathVariable String myVariable) {\n return \"...\";\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "MVCPathVariableInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Spring/Spring MVC", + "index": 190, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.less", + "version": "241.17569", + "rules": [ + { + "id": "LessUnresolvedVariable", + "shortDescription": { + "text": "Unresolved variable" + }, + "fullDescription": { + "text": "Reports a reference to a Less variable that is not resolved. Example: '* {\n margin: @unknown-var;\n}'", + "markdown": "Reports a reference to a [Less variable](http://lesscss.org/features/#variables-feature) that is not resolved.\n\n**Example:**\n\n\n * {\n margin: @unknown-var;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LessUnresolvedVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 193, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LessResolvedByNameOnly", + "shortDescription": { + "text": "Missing import" + }, + "fullDescription": { + "text": "Reports a reference to a variable or mixin that is declared in another file, which is not explicitly imported in the current file. Example: '* {\n margin: @var-in-other-file;\n}'", + "markdown": "Reports a reference to a variable or mixin that is declared in another file, which is not explicitly [imported](http://lesscss.org/features/#import-atrules-feature) in the current file.\n\n**Example:**\n\n\n * {\n margin: @var-in-other-file;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LessResolvedByNameOnly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 193, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LessUnresolvedMixin", + "shortDescription": { + "text": "Unresolved mixin" + }, + "fullDescription": { + "text": "Reports a reference to a Less mixin that is not resolved. Example: '* {\n .unknown-mixin();\n}'", + "markdown": "Reports a reference to a [Less mixin](http://lesscss.org/features/#mixins-feature) that is not resolved.\n\n**Example:**\n\n\n * {\n .unknown-mixin();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LessUnresolvedMixin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 193, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "tanvd.grazi", + "version": "241.17569", + "rules": [ + { + "id": "LanguageDetectionInspection", + "shortDescription": { + "text": "Natural language detection" + }, + "fullDescription": { + "text": "Detects natural languages and suggests enabling corresponding grammar and spelling checks.", + "markdown": "Detects natural languages and suggests enabling corresponding grammar and spelling checks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LanguageDetectionInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 114, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrazieInspection", + "shortDescription": { + "text": "Grammar" + }, + "fullDescription": { + "text": "Reports grammar mistakes in your text. You can configure the inspection in Settings | Editor | Natural Languages | Grammar.", + "markdown": "Reports grammar mistakes in your text. You can configure the inspection in [Settings \\| Editor \\| Natural Languages \\| Grammar](settings://reference.settingsdialog.project.grazie)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrazieInspection", + "ideaSeverity": "GRAMMAR_ERROR", + "qodanaSeverity": "Info" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 114, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.toml.lang", + "version": "241.17569", + "rules": [ + { + "id": "TomlUnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports unresolved references in TOML files.", + "markdown": "Reports unresolved references in TOML files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "TomlUnresolvedReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "TOML", + "index": 198, + "toolComponent": { + "name": "QDJVM" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + } + ] + }, + "invocations": [ + { + "startTimeUtc": "2024-06-16T08:11:17.411453357Z", + "exitCode": 0, + "executionSuccessful": true + } + ], + "language": "en-US", + "versionControlProvenance": [ + { + "repositoryUri": "https://github.com/1c-syntax/bsl-language-server.git", + "revisionId": "3a304d2d351dd6498bc656512ff4338e5a7290ac", + "branch": "develop", + "properties": { + "repoUrl": "https://github.com/1c-syntax/bsl-language-server.git", + "lastAuthorName": "Nikita Fedkin", + "vcsType": "Git", + "lastAuthorEmail": "nixel2007@gmail.com" + } + } + ], + "results": [ + { + "ruleId": "ClassEscapesItsScope", + "kind": "fail", + "level": "warning", + "message": { + "text": "Class 'GenericIssueEntry' is exposed outside its defined visibility scope", + "markdown": "Class `GenericIssueEntry` is exposed outside its defined visibility scope" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 56, + "startColumn": 34, + "charOffset": 2139, + "charLength": 17, + "snippet": { + "text": "GenericIssueEntry" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 54, + "startColumn": 1, + "charOffset": 2076, + "charLength": 137, + "snippet": { + "text": "\n public GenericIssueReport(\n @JsonProperty(\"issues\") List issues\n ) {\n this.issues = new ArrayList<>(issues);" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "eb9d56a1b20e44f7", + "equalIndicator/v1": "5e1e0c9078f22fb512d7606edd98e10ed9dd482b6c59019544dee84279f35421" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "ConstantValue", + "kind": "fail", + "level": "warning", + "message": { + "text": "Condition 'diagnosticCompatibility != null' is always 'true'", + "markdown": "Condition `diagnosticCompatibility != null` is always `true`" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 239, + "startColumn": 9, + "charOffset": 9064, + "charLength": 31, + "snippet": { + "text": "diagnosticCompatibility != null" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 237, + "startColumn": 1, + "charOffset": 9024, + "charLength": 209, + "snippet": { + "text": " .getCompatibilityMode();\n\n if (diagnosticCompatibility != null\n && CompatibilityMode.compareTo(diagnosticCompatibility,\n DiagnosticCompatibilityMode.UNDEFINED.getCompatibilityMode()) != 0) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9cc69ec13a92c6a7", + "equalIndicator/v1": "45ec86cfc57ca5854037a2d2137b5a137672b511ff7330e22fda7f80e0a6608d" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "DataFlowIssue", + "kind": "fail", + "level": "warning", + "message": { + "text": "Method invocation 'getRuleIndex' may produce 'NullPointerException'", + "markdown": "Method invocation `getRuleIndex` may produce `NullPointerException`" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 122, + "startColumn": 10, + "charOffset": 5223, + "charLength": 12, + "snippet": { + "text": "getRuleIndex" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 120, + "startColumn": 1, + "charOffset": 4999, + "charLength": 350, + "snippet": { + "text": " .filter(parserRuleContext -> parserRuleContext.getRuleIndex() == SDBLParser.RULE_column)\n .filter(parserRuleContext -> Trees.getRootParent((BSLParserRuleContext) parserRuleContext, EXCLUDED_COLUMNS_ROOT)\n .getRuleIndex() == SDBLParser.RULE_query)\n .map(SDBLParser.ColumnContext.class::cast)\n .collect(Collectors.toList());" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "00c35b5e15b4b10e", + "equalIndicator/v1": "164b5a389c35175375ad8fdd7d9479e25085f5085907566b912986aabf9be8e3" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA", + "CWE Top 25" + ] + } + }, + { + "ruleId": "EmptyStatementBody", + "kind": "fail", + "level": "warning", + "message": { + "text": "'else' statement has empty body", + "markdown": "`else` statement has empty body" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 265, + "startColumn": 9, + "charOffset": 9718, + "charLength": 4, + "snippet": { + "text": "else" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 263, + "startColumn": 1, + "charOffset": 9562, + "charLength": 212, + "snippet": { + "text": " } else if (string.subParameter() != null) { // это строка с вложенным параметром типа\n current.addSubParameter(string.subParameter());\n } else { // прочее - пустая строка\n // noop\n }" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "34cb27724ac5f9fa", + "equalIndicator/v1": "1ab5199ed6476b60422ac2518362405aad2f36c6dbabe9b6f5b204e42d0cd376" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "EmptyStatementBody", + "kind": "fail", + "level": "warning", + "message": { + "text": "'else' statement has empty body", + "markdown": "`else` statement has empty body" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 124, + "startColumn": 9, + "charOffset": 4593, + "charLength": 4, + "snippet": { + "text": "else" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 122, + "startColumn": 1, + "charOffset": 4435, + "charLength": 214, + "snippet": { + "text": " } else if (string.subParameter() != null) { // это строка с вложенным параметром типа\n fakeParam.addSubParameter(string.subParameter());\n } else { // прочее - пустая строка\n // noop\n }" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "9e1733b0310158cd", + "equalIndicator/v1": "472d96730e8cd15325bdedccacc4e62d1beaad9ea8c6ca495ec9419eb738a088" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "EmptyStatementBody", + "kind": "fail", + "level": "warning", + "message": { + "text": "'else' statement has empty body", + "markdown": "`else` statement has empty body" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 374, + "startColumn": 9, + "charOffset": 13389, + "charLength": 4, + "snippet": { + "text": "else" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 372, + "startColumn": 1, + "charOffset": 13252, + "charLength": 167, + "snippet": { + "text": " } else if (paramType.complexType() != null) {\n addType(paramDescription, paramType.complexType().getText(), false);\n } else {\n // noop\n }" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "679224fa6c85f965", + "equalIndicator/v1": "4f7ae3b83624e119b544a7ebed2162291560266356b7ef58cb3ebec6c5d69b83" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "EmptyStatementBody", + "kind": "fail", + "level": "warning", + "message": { + "text": "'else' statement has empty body", + "markdown": "`else` statement has empty body" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 158, + "startColumn": 9, + "charOffset": 6004, + "charLength": 4, + "snippet": { + "text": "else" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 156, + "startColumn": 1, + "charOffset": 5854, + "charLength": 181, + "snippet": { + "text": " needReturn = !allowedMethodNamesPattern.matcher(\n ((BSLParser.GlobalMethodCallContext) t).methodName().getText()).matches();\n } else {\n // no-op\n }" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7f1af8230b16a5a9", + "equalIndicator/v1": "5b28c533bffb2dc8625cb1d8217bf0ea4cc15e1d387abfeb74e15f3b0b064b26" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "EmptyStatementBody", + "kind": "fail", + "level": "warning", + "message": { + "text": "'else' statement has empty body", + "markdown": "`else` statement has empty body" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 279, + "startColumn": 9, + "charOffset": 9308, + "charLength": 4, + "snippet": { + "text": "else" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 277, + "startColumn": 1, + "charOffset": 9184, + "charLength": 155, + "snippet": { + "text": " } else if (needAddSpace(tokenType, previousTokenType, previousIsUnary)) {\n newTextBuilder.append(' ');\n } else {\n // no-op\n }" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "57b37cb95443ab91", + "equalIndicator/v1": "69cdd380ee9b9e5b52fc87cb73b34e337fde9c37de27f182a66efdb8517fd5bf" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "MismatchedArrayReadWrite", + "kind": "fail", + "level": "warning", + "message": { + "text": "Contents of array 'reportersOptions' are read, but never written to", + "markdown": "Contents of array `reportersOptions` are read, but never written to" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 133, + "startColumn": 20, + "charOffset": 5321, + "charLength": 16, + "snippet": { + "text": "reportersOptions" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 131, + "startColumn": 1, + "charOffset": 5193, + "charLength": 162, + "snippet": { + "text": " completionCandidates = ReportersKeys.class,\n description = \"Reporter key (${COMPLETION-CANDIDATES})\")\n private String[] reportersOptions = {};\n\n @Option(" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "21af5e0eefbedfa7", + "equalIndicator/v1": "228a887bfb7de8968995726425f78a9cf9b2f8fd68a618140a617b66df637b06" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "MissingSerialAnnotation", + "kind": "fail", + "level": "warning", + "message": { + "text": "'serialVersionUID' can be annotated with '@Serial' annotation", + "markdown": "`serialVersionUID` can be annotated with '@Serial' annotation" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 29, + "charOffset": 1325, + "charLength": 16, + "snippet": { + "text": "serialVersionUID" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 1216, + "charLength": 243, + "snippet": { + "text": "public class LanguageServerConfigurationChangedEvent extends ApplicationEvent {\n\n private static final long serialVersionUID = 649143503434640953L;\n\n public LanguageServerConfigurationChangedEvent(LanguageServerConfiguration configuration) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "26062a86f471decb", + "equalIndicator/v1": "106f26b585e933e5774e266ea29de3044f718fe3eeb0e1868d97ec54e03636ea" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "MissingSerialAnnotation", + "kind": "fail", + "level": "warning", + "message": { + "text": "'serialVersionUID' can be annotated with '@Serial' annotation", + "markdown": "`serialVersionUID` can be annotated with '@Serial' annotation" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 29, + "startColumn": 29, + "charOffset": 1172, + "charLength": 16, + "snippet": { + "text": "serialVersionUID" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 27, + "startColumn": 1, + "charOffset": 1068, + "charLength": 215, + "snippet": { + "text": "public class DocumentContextContentChangedEvent extends ApplicationEvent {\n\n private static final long serialVersionUID = 3091414460731918073L;\n\n public DocumentContextContentChangedEvent(DocumentContext source) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "03ac31b71821950c", + "equalIndicator/v1": "9be980b05c2537cfcb0743411607734fbe1bf3ab6db0684d31631d98a1039ab9" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "MissingSerialAnnotation", + "kind": "fail", + "level": "warning", + "message": { + "text": "'serialVersionUID' can be annotated with '@Serial' annotation", + "markdown": "`serialVersionUID` can be annotated with '@Serial' annotation" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 29, + "startColumn": 29, + "charOffset": 1163, + "charLength": 16, + "snippet": { + "text": "serialVersionUID" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 27, + "startColumn": 1, + "charOffset": 1066, + "charLength": 200, + "snippet": { + "text": "public class ServerContextPopulatedEvent extends ApplicationEvent {\n\n private static final long serialVersionUID = -4485675935728156708L;\n\n public ServerContextPopulatedEvent(ServerContext source) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "aaeff5d3458c23b4", + "equalIndicator/v1": "ad0974a6c2243670178495f61c583f8d71ea6d8450acc2f17f5bdb59d748fd30" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "MissingSerialAnnotation", + "kind": "fail", + "level": "warning", + "message": { + "text": "'serialVersionUID' can be annotated with '@Serial' annotation", + "markdown": "`serialVersionUID` can be annotated with '@Serial' annotation" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 36, + "startColumn": 29, + "charOffset": 1374, + "charLength": 16, + "snippet": { + "text": "serialVersionUID" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 34, + "startColumn": 1, + "charOffset": 1260, + "charLength": 161, + "snippet": { + "text": "public class LanguageServerInitializeRequestReceivedEvent extends ApplicationEvent {\n\n private static final long serialVersionUID = 7153531865051478056L;\n\n /**" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "eed17a228b95fe14", + "equalIndicator/v1": "c8e898133b1bd904acc5eeb3982546589c7926b0b578b56666c7d4ca4aef1d76" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'app.globalConfiguration.path'", + "markdown": "Cannot resolve configuration property 'app.globalConfiguration.path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/test/resources/application-measures.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 21, + "startColumn": 1, + "charOffset": 1164, + "charLength": 28, + "snippet": { + "text": "app.globalConfiguration.path" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 19, + "startColumn": 1, + "charOffset": 1047, + "charLength": 198, + "snippet": { + "text": "logging.level.org.springframework.boot.test.context.SpringBootTestContextBootstrapper=warn\napp.measures.enabled=true\napp.globalConfiguration.path=\napp.configuration.path=\napp.websocket.lsp-path=/lsp" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.test", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "70da69bd7c2e50ab", + "equalIndicator/v1": "2aef5efcf52ab53dd5097c0759737d5452fe314eabbfe3c33d5f2e74f1fef5a1" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'app.globalConfiguration.path'", + "markdown": "Cannot resolve configuration property 'app.globalConfiguration.path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/resources/application.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 1, + "charOffset": 770, + "charLength": 28, + "snippet": { + "text": "app.globalConfiguration.path" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 639, + "charLength": 308, + "snippet": { + "text": "logging.level.org.springframework.core.LocalVariableTableParameterNameDiscoverer=error\nspring.application.name=BSL Language Server\napp.globalConfiguration.path=${user.home}/.bsl-language-server.json\napp.configuration.path=.bsl-language-server.json\nlogging.level.org.eclipse.lsp4j.jsonrpc.RemoteEndpoint=fatal" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0961af700675d4c2", + "equalIndicator/v1": "3ffe7294a90d0455d083f72024cfdf2cdc6df22b51464ca58a89cd16e511b0fc" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'app.measures.enabled'", + "markdown": "Cannot resolve configuration property 'app.measures.enabled'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/test/resources/application-measures.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 20, + "startColumn": 1, + "charOffset": 1138, + "charLength": 20, + "snippet": { + "text": "app.measures.enabled" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 18, + "startColumn": 1, + "charOffset": 965, + "charLength": 252, + "snippet": { + "text": "logging.level.org.springframework.test.context.support.AbstractContextLoader=warn\nlogging.level.org.springframework.boot.test.context.SpringBootTestContextBootstrapper=warn\napp.measures.enabled=true\napp.globalConfiguration.path=\napp.configuration.path=" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.test", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8c62c6134666e6c8", + "equalIndicator/v1": "456a188469ce3a39d3cb0c4815baaeff44169cbdc74f3328d7357811d08d64f0" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'app.globalConfiguration.path'", + "markdown": "Cannot resolve configuration property 'app.globalConfiguration.path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/test/resources/application-websocket.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 19, + "startColumn": 1, + "charOffset": 1098, + "charLength": 28, + "snippet": { + "text": "app.globalConfiguration.path" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 17, + "startColumn": 1, + "charOffset": 923, + "charLength": 259, + "snippet": { + "text": "logging.level.org.springframework.test.context.support.AbstractContextLoader=warn\r\nlogging.level.org.springframework.boot.test.context.SpringBootTestContextBootstrapper=warn\r\napp.globalConfiguration.path=\r\napp.configuration.path=\r\napp.websocket.lsp-path=/lsp\r" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.test", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "740991c3d402af76", + "equalIndicator/v1": "8cb191da383ec86c0cb7090cdab5ace7f4bc20cf896fc9769d9be10a5ee04174" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'picocli.disable.closures'", + "markdown": "Cannot resolve configuration property 'picocli.disable.closures'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/resources/application.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 1, + "charOffset": 1170, + "charLength": 24, + "snippet": { + "text": "picocli.disable.closures" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 1092, + "charLength": 109, + "snippet": { + "text": "sentry.attach-server-name=false\nsentry.logging.minimum-breadcrumb-level=debug\npicocli.disable.closures=true\n\n" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "8c924ff40ce6d3a9", + "equalIndicator/v1": "e5b3e1e8827b3124842ed8c38d81266525eedb186ff3df263fca029f48010315" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringBootApplicationProperties", + "kind": "fail", + "level": "warning", + "message": { + "text": "Cannot resolve configuration property 'app.globalConfiguration.path'", + "markdown": "Cannot resolve configuration property 'app.globalConfiguration.path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/test/resources/application.properties", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 20, + "startColumn": 1, + "charOffset": 1157, + "charLength": 28, + "snippet": { + "text": "app.globalConfiguration.path" + }, + "sourceLanguage": "Properties" + }, + "contextRegion": { + "startLine": 18, + "startColumn": 1, + "charOffset": 982, + "charLength": 259, + "snippet": { + "text": "logging.level.org.springframework.test.context.support.AbstractContextLoader=warn\r\nlogging.level.org.springframework.boot.test.context.SpringBootTestContextBootstrapper=warn\r\napp.globalConfiguration.path=\r\napp.configuration.path=\r\napp.websocket.lsp-path=/lsp\r" + }, + "sourceLanguage": "Properties" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.test", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3c8709ab00e30434", + "equalIndicator/v1": "fd657ff54558f88a1e941d85f44b5e2a1bfa383d27798d16be49c55c2e374317" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "tags": [ + "Properties" + ] + } + }, + { + "ruleId": "SpringJavaAutowiredFieldsWarningInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Field injection is not recommended", + "markdown": "Field injection is not recommended" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 39, + "startColumn": 3, + "charOffset": 1441, + "charLength": 10, + "snippet": { + "text": "@Autowired" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 37, + "startColumn": 1, + "charOffset": 1403, + "charLength": 95, + "snippet": { + "text": "public class ReportersAggregator {\n\n @Autowired\n private List reporters;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "bde8b5d87bc94c15", + "equalIndicator/v1": "dcb83b272633a56713a712d486d56e67069b140bacbd57fb64d5eb9cdbd6b740" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "SpringJavaAutowiredFieldsWarningInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Field injection is not recommended", + "markdown": "Field injection is not recommended" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 42, + "startColumn": 3, + "charOffset": 1501, + "charLength": 10, + "snippet": { + "text": "@Autowired" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 40, + "startColumn": 1, + "charOffset": 1452, + "charLength": 101, + "snippet": { + "text": " private List reporters;\n\n @Autowired\n @Qualifier(\"filteredReporters\")\n @Lazy" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "64caad04b4fe840f", + "equalIndicator/v1": "e21c7575c86856e1e73e72ca14d5bb6d4c620335b95855adcc1146e5b98ae0fb" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "SpringJavaInjectionPointsAutowiringInspection", + "kind": "fail", + "level": "error", + "message": { + "text": "Could not autowire. No beans of 'URI' type found.", + "markdown": "Could not autowire. No beans of 'URI' type found." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 87, + "startColumn": 21, + "charOffset": 3752, + "charLength": 3, + "snippet": { + "text": "uri" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 85, + "startColumn": 1, + "charOffset": 3721, + "charLength": 48, + "snippet": { + "text": "\n @Getter\n private final URI uri;\n\n @Nullable" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "5bd586d93fc09b4d", + "equalIndicator/v1": "36c9b96fb03e23518ea35a037b73a870e6147b5f27c305e1481dc11d80fb0109" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "SpringJavaInjectionPointsAutowiringInspection", + "kind": "fail", + "level": "error", + "message": { + "text": "Could not autowire. No beans of 'Map>' type found.", + "markdown": "Could not autowire. No beans of 'Map\\>' type found." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 44, + "startColumn": 63, + "charOffset": 1778, + "charLength": 21, + "snippet": { + "text": "markupContentBuilders" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 42, + "startColumn": 1, + "charOffset": 1662, + "charLength": 228, + "snippet": { + "text": "\n private final ReferenceResolver referenceResolver;\n private final Map> markupContentBuilders;\n\n public Optional getHover(DocumentContext documentContext, HoverParams params) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "f69a1a0a270c8eb7", + "equalIndicator/v1": "a235cc05ff772e251c2881958a80ed64b01477584e910eea9812db834ca06089" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "tags": [ + "JAVA" + ] + } + }, + { + "ruleId": "SpringLookupInjectionInspection", + "kind": "fail", + "level": "error", + "message": { + "text": "Cannot resolve bean 'diagnostics'", + "markdown": "Cannot resolve bean 'diagnostics'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 87, + "startColumn": 11, + "charOffset": 3084, + "charLength": 13, + "snippet": { + "text": "\"diagnostics\"" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 85, + "startColumn": 1, + "charOffset": 3069, + "charLength": 118, + "snippet": { + "text": " }\n\n @Lookup(\"diagnostics\")\n protected abstract List diagnostics(DocumentContext documentContext);\n}" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "dee368eaa8e40bac", + "equalIndicator/v1": "e1e04aa002a10fe4b3a599183ec145bdf184f0fa62a4d744b3b5eca92d9f5b90" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "tags": [ + "JAVA" + ] + } + } + ], + "automationDetails": { + "id": "bsl-language-server/qodana/2024-06-16", + "guid": "2896a16e-9a3e-4ba8-9e7d-79c574b769fa", + "properties": { + "jobUrl": "https://github.com/1c-syntax/bsl-language-server/actions/runs/9534506876" + } + }, + "newlineSequences": [ + "\r\n", + "\n" + ], + "properties": { + "qodana.sanity.results": [ + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 41, + "startColumn": 38, + "charOffset": 1625, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 39, + "startColumn": 1, + "charOffset": 1578, + "charLength": 163, + "snippet": { + "text": " */\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cf40ea496cc1653e", + "equalIndicator/v1": "0da93636f2ee69160be6e995f14c1dfb29b3fac463eebf0472676228c7660371" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 40, + "startColumn": 38, + "charOffset": 1576, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 38, + "startColumn": 1, + "charOffset": 1529, + "charLength": 163, + "snippet": { + "text": " */\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "03aa55bbbe108eba", + "equalIndicator/v1": "0e7c8a77e5a902f61f889c130d5db7ae1d2e9b02993af7233b316bac8ed83126" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 35, + "startColumn": 38, + "charOffset": 1295, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 33, + "startColumn": 1, + "charOffset": 1248, + "charLength": 163, + "snippet": { + "text": " */\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ac5db6b86ecdaddf", + "equalIndicator/v1": "100cb40fcaa53a4df7367a0520df7fcffea87d1d64b8f7d7b139171c83f5b109" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 96, + "startColumn": 23, + "charOffset": 3925, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 94, + "startColumn": 1, + "charOffset": 3830, + "charLength": 201, + "snippet": { + "text": " @Setter(onMethod = @__({@Autowired}))\n private ServerContext context;\n @Setter(onMethod = @__({@Autowired}))\n private DiagnosticComputer diagnosticComputer;\n @Setter(onMethod = @__({@Autowired}))" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "40b7f8ce4ab94da2", + "equalIndicator/v1": "1f2717aab17a63f70b38e35e254c226c09158c4df7defaa8a7dd345f390e2d78" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 98, + "startColumn": 23, + "charOffset": 4014, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 96, + "startColumn": 1, + "charOffset": 3903, + "charLength": 182, + "snippet": { + "text": " @Setter(onMethod = @__({@Autowired}))\n private DiagnosticComputer diagnosticComputer;\n @Setter(onMethod = @__({@Autowired}))\n private LanguageServerConfiguration configuration;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3b71aff1805e518c", + "equalIndicator/v1": "1f8b56cebb4302feddaa16cd68a7e3f3d901381bfdd985ba71552712ade710f1" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 72, + "startColumn": 38, + "charOffset": 3018, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 70, + "startColumn": 1, + "charOffset": 2928, + "charLength": 169, + "snippet": { + "text": "@Component\n@Role(BeanDefinition.ROLE_INFRASTRUCTURE)\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@Slf4j" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "1181925a15ba9260", + "equalIndicator/v1": "217a21df4032bee64c507cebd18530165ed34605d8a12e2e81d0d3b068ee3dbb" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 101, + "startColumn": 23, + "charOffset": 4108, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 99, + "startColumn": 1, + "charOffset": 4032, + "charLength": 224, + "snippet": { + "text": " private LanguageServerConfiguration configuration;\n\n @Setter(onMethod = @__({@Autowired}))\n private ObjectProvider cognitiveComplexityComputerProvider;\n @Setter(onMethod = @__({@Autowired}))" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "67bec290e75c9ea1", + "equalIndicator/v1": "65ee08075b816582a26dd66fc5efe287a5f3342482f705dc17354260652d8a05" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 38, + "charOffset": 1319, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 1272, + "charLength": 163, + "snippet": { + "text": " */\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "83da478433e951c5", + "equalIndicator/v1": "7ac59927d7bddc7cee15565e790adb4bbec70aa6526f96cd5917b141510ff8bd" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 66, + "startColumn": 23, + "charOffset": 2598, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 64, + "startColumn": 1, + "charOffset": 2526, + "charLength": 160, + "snippet": { + "text": " private final DocumentContext documentContext;\n\n @Setter(onMethod = @__({@Autowired}), value = AccessLevel.PACKAGE)\n private StringInterner stringInterner;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cb668891729a654d", + "equalIndicator/v1": "7e189a2db2fc9369500827720b491be8db24c1ee75ac0b0ce962762b335e1354" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 40, + "startColumn": 38, + "charOffset": 1574, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 38, + "startColumn": 1, + "charOffset": 1527, + "charLength": 163, + "snippet": { + "text": " */\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2026e81a842c4025", + "equalIndicator/v1": "8609217f18893d5c4a3136a3e209e59b0d25dbd42057be384b68375b1354b2aa" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 103, + "startColumn": 23, + "charOffset": 4239, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 101, + "startColumn": 1, + "charOffset": 4086, + "charLength": 264, + "snippet": { + "text": " @Setter(onMethod = @__({@Autowired}))\n private ObjectProvider cognitiveComplexityComputerProvider;\n @Setter(onMethod = @__({@Autowired}))\n private ObjectProvider cyclomaticComplexityComputerProvider;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cebd0ac771b406b5", + "equalIndicator/v1": "8f92f9c74e37912bae43890876605da9a6f694dc6f9d4ce2b6f0ce60cbbd415f" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 46, + "startColumn": 23, + "charOffset": 1776, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 44, + "startColumn": 1, + "charOffset": 1723, + "charLength": 116, + "snippet": { + "text": "public class MeasuresAspect {\n\n @Setter(onMethod = @__({@Autowired}))\n private MeasureCollector measureCollector;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "aa6e80368afc263e", + "equalIndicator/v1": "ba418748d5c74c0794765456456e87dba3fa1b84befc576e5e4df2d948ef6c23" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 31, + "startColumn": 38, + "charOffset": 1196, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 29, + "startColumn": 1, + "charOffset": 1152, + "charLength": 160, + "snippet": { + "text": "\n@Data\n@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)}))\n@NoArgsConstructor\n@JsonIgnoreProperties(ignoreUnknown = true)" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c9995869438adcac", + "equalIndicator/v1": "c3767c17d04674a1aecdb5499bf70c1b598aa6099bd34617e507d82a11a1f6b3" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + { + "ruleId": "QodanaJavaSanity", + "kind": "fail", + "level": "error", + "message": { + "text": "Unresolved reference __", + "markdown": "Unresolved reference __" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 63, + "startColumn": 23, + "charOffset": 2488, + "charLength": 2, + "snippet": { + "text": "__" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 61, + "startColumn": 1, + "charOffset": 2416, + "charLength": 160, + "snippet": { + "text": " private final DocumentContext documentContext;\n\n @Setter(onMethod = @__({@Autowired}), value = AccessLevel.PACKAGE)\n private StringInterner stringInterner;\n" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "c6c03ff28c4ecacb", + "equalIndicator/v1": "dc87af1f7421c91b2688608780dcd693125e6a1fed0c1afe1e2f99e378fc9ae6" + }, + "properties": { + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + } + ], + "qodana.promo.results": [ + { + "ruleId": "FieldMayBeFinal", + "kind": "fail", + "level": "warning", + "message": { + "text": "Field 'userWordsToIgnore' may be 'final'", + "markdown": "Field `userWordsToIgnore` may be 'final'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 112, + "startColumn": 18, + "charOffset": 4320, + "charLength": 17, + "snippet": { + "text": "userWordsToIgnore" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 110, + "startColumn": 1, + "charOffset": 4275, + "charLength": 107, + "snippet": { + "text": " type = String.class\n )\n private String userWordsToIgnore = DEFAULT_USER_WORDS_TO_IGNORE;\n\n @Override" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "982982c511da4b5e", + "equalIndicator/v1": "a39ff74a751adb747b8e95014bb15705a7436762269ce0e8b246f3002057c508" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + { + "ruleId": "FieldMayBeFinal", + "kind": "fail", + "level": "warning", + "message": { + "text": "Field 'maxMetadataObjectNameLength' may be 'final'", + "markdown": "Field `maxMetadataObjectNameLength` may be 'final'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 58, + "startColumn": 15, + "charOffset": 2347, + "charLength": 27, + "snippet": { + "text": "maxMetadataObjectNameLength" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 56, + "startColumn": 1, + "charOffset": 2273, + "charLength": 225, + "snippet": { + "text": " defaultValue = \"\" + MAX_METADATA_OBJECT_NAME_LENGTH\n )\n private int maxMetadataObjectNameLength = MAX_METADATA_OBJECT_NAME_LENGTH;\n\n MetadataObjectNameLengthDiagnostic(LanguageServerConfiguration serverConfiguration) {" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "ae9db212f6192855", + "equalIndicator/v1": "c35cbcce13d6a97b7cb579ae9331242b7a36e09b0f8547bbcc1de987a237ebc8" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + { + "ruleId": "LombokGetterMayBeUsed", + "kind": "fail", + "level": "warning", + "message": { + "text": "Class 'JUnitTestSuites' may use Lombok @Getter", + "markdown": "Class 'JUnitTestSuites' may use Lombok @Getter" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 50, + "startColumn": 7, + "charOffset": 2192, + "charLength": 15, + "snippet": { + "text": "JUnitTestSuites" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 48, + "startColumn": 1, + "charOffset": 2136, + "charLength": 84, + "snippet": { + "text": "\n@JacksonXmlRootElement(localName = \"testsuites\")\nclass JUnitTestSuites {\n\n @Getter" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "d107bafb8f5bfddb", + "equalIndicator/v1": "53ed8c9a2301f0f9bc67932014554d2f49717eb927487dc94c117d9aa2074d99" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + { + "ruleId": "NullableProblems", + "kind": "fail", + "level": "warning", + "message": { + "text": "Not annotated parameter overrides @NonNullApi parameter", + "markdown": "Not annotated parameter overrides @NonNullApi parameter" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 66, + "startColumn": 70, + "charOffset": 2678, + "charLength": 25, + "snippet": { + "text": "applicationEventPublisher" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 64, + "startColumn": 1, + "charOffset": 2604, + "charLength": 185, + "snippet": { + "text": " }\n\n public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {\n active = true;\n this.applicationEventPublisher = applicationEventPublisher;" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2e21c001a936585c", + "equalIndicator/v1": "02ec34491b4dfcd35790f2b22808567695d2244df16e97b0127adba14e8497fa" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + { + "ruleId": "SimplifyStreamApiCallChains", + "kind": "fail", + "level": "warning", + "message": { + "text": "Can be replaced with 'peek'", + "markdown": "Can be replaced with 'peek'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 89, + "startColumn": 8, + "charOffset": 3616, + "charLength": 3, + "snippet": { + "text": "map" + }, + "sourceLanguage": "JAVA" + }, + "contextRegion": { + "startLine": 87, + "startColumn": 1, + "charOffset": 3505, + "charLength": 263, + "snippet": { + "text": " scheduledJobHandlers.values().stream()\n .filter(mdScheduledJobs -> mdScheduledJobs.size() > 1)\n .map((List mdScheduledJobs) -> {\n mdScheduledJobs.sort(Comparator.comparing(ScheduledJob::getName));\n return mdScheduledJobs;" + }, + "sourceLanguage": "JAVA" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "bsl-language-server.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "4ce949a131fdb141", + "equalIndicator/v1": "d75bc188467d39ee04433591d600a8fa468b0be0c1f6afa4559e0b46e5715587" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + } + ], + "configProfile": "starter", + "deviceId": "200820300000000-b1a5-d275-f8e7-faf9fd093ee8", + "qodanaNewResultSummary": { + "high": 19, + "moderate": 2, + "critical": 3, + "total": 24 + } + } + } + ] +} \ No newline at end of file From 01ca662127cbaae81208f92a21400c99c88c1f0f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 16 Jun 2024 10:44:52 +0200 Subject: [PATCH 510/595] Update qodana.yml --- .github/workflows/qodana.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index cd2ccc3b726..38418afa8db 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -23,6 +23,8 @@ jobs: uses: JetBrains/qodana-action@v2024.1.5 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} + with: + args: --baseline,qodana.sarif.json - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ runner.temp }}/qodana/results/qodana.sarif.json From 6bb5c3a1c45794089844493720a307c1e1aff70f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 09:38:53 +0000 Subject: [PATCH 511/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.5 to 4.8.6. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.5...4.8.6) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3dc34666a09..dcc5159d894 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -137,7 +137,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.5") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.6") // TEST From 7e2945b0abe09b3e04bd7a4a61a58eb4eeb06444 Mon Sep 17 00:00:00 2001 From: Alexey Sosnoviy Date: Fri, 21 Jun 2024 15:51:52 +0300 Subject: [PATCH 512/595] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=20=D1=81=20NoSuchElementExcep?= =?UTF-8?q?tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/diagnostics/DoubleNegativesDiagnostic.bsl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl index f0493b0ec06..2890d3154b3 100644 --- a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl +++ b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl @@ -38,4 +38,8 @@ // Прямое двойное отрицание Б = Не (Не Значение); -Б = Не (Не Значение И ДругоеЗначение); // не срабатывает \ No newline at end of file +Б = Не (Не Значение И ДругоеЗначение); // не срабатывает + +// NoSuchElementException +Запись = РегистрыСведений.ЗаданияКПересчетуСтатуса.СоздатьМенеджерЗаписи(); +Запись.Записать(Истина); From 9bce931403f06032b5d2eb42381f03d0be210627 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:58:23 +0000 Subject: [PATCH 513/595] build(deps): bump io.sentry:sentry-bom from 7.10.0 to 7.11.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.10.0 to 7.11.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.10.0...7.11.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index dcc5159d894..0b3c552a2cd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,7 +62,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.10.0") + mavenBom("io.sentry:sentry-bom:7.11.0") } } From 7b0c5cb1216b312de34a905be02a3305d3cdbd65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:28:11 +0000 Subject: [PATCH 514/595] build(deps): bump JetBrains/qodana-action from 2024.1.5 to 2024.1.8 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.5 to 2024.1.8. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.5...v2024.1.8) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 38418afa8db..4dd4e5764ab 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.5 + uses: JetBrains/qodana-action@v2024.1.8 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 0c67f30b116f37fecccf838b3aa52fa5d439dc74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:53:10 +0000 Subject: [PATCH 515/595] build(deps): bump org.sonarqube from 5.0.0.4638 to 5.1.0.4872 Bumps org.sonarqube from 5.0.0.4638 to 5.1.0.4872. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index dcc5159d894..69a08ef9cb0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "5.0.0.4638" + id("org.sonarqube") version "5.1.0.4872" id("io.freefair.lombok") version "8.6" id("io.freefair.javadoc-links") version "8.6" id("io.freefair.javadoc-utf-8") version "8.6" From 7d56bd21ddc45ba354025636dc4112f633aa68be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 09:37:03 +0000 Subject: [PATCH 516/595] build(deps): bump org.sonarqube from 5.1.0.4872 to 5.1.0.4882 Bumps org.sonarqube from 5.1.0.4872 to 5.1.0.4882. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 723c9cd1650..edf51e16015 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "5.1.0.4872" + id("org.sonarqube") version "5.1.0.4882" id("io.freefair.lombok") version "8.6" id("io.freefair.javadoc-links") version "8.6" id("io.freefair.javadoc-utf-8") version "8.6" From 5ef9a5d144435d3171f608850390cace2169260a Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 9 Jul 2024 11:32:52 +0300 Subject: [PATCH 517/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractExpressionTreeDiagnostic.java | 27 ++++++++++++------- .../DoubleNegativesDiagnostic.java | 4 ++- .../ExpressionTreeBuildingVisitor.java | 5 ++-- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java index d3e23cf5107..dbbcc1c9c50 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java @@ -26,6 +26,7 @@ import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeBuildingVisitor; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionTreeVisitor; import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLParserBaseVisitor; import lombok.Getter; import lombok.Setter; import org.antlr.v4.runtime.tree.ParseTree; @@ -60,7 +61,8 @@ public final List getDiagnostics(DocumentContext documentContext) { * Позволяет сократить время на построение дерева, если это не требуется для данного AST. * * @param ctx - выражение, которое в данный момент посещается. - * @return - если надо прекратить обход в глубину и построить Expression Tree на данном выражении - надо вернуть ACCEPT + * @return - флаг дальнейшего поведения. + * - если надо прекратить обход в глубину и построить Expression Tree на данном выражении - надо вернуть ACCEPT * - если надо пройти дальше и посетить дочерние выражения, не затрагивая данное - надо вернуть VISIT_CHILDREN * - если надо пропустить выражение, не ходить глубже и не строить Expression Tree - надо вернуть SKIP */ @@ -86,26 +88,33 @@ protected enum ExpressionVisitorDecision { /** * Пропустить данное выражение и обойти вложенные в него выражения */ - VISIT_CHILDREN; + VISIT_CHILDREN } - private class ExpressionTreeBuilder extends ExpressionTreeBuildingVisitor { + private class ExpressionTreeBuilder extends BSLParserBaseVisitor { + @Override public ParseTree visitExpression(BSLParser.ExpressionContext ctx) { + var treeBuildingVisitor = new ExpressionTreeBuildingVisitor(); + var result = onExpressionEnter(ctx); return switch (result) { case SKIP -> ctx; - case ACCEPT -> processExpression(ctx); - case VISIT_CHILDREN -> super.visitChildren(ctx); + case ACCEPT -> processExpression(treeBuildingVisitor, ctx); + case VISIT_CHILDREN -> treeBuildingVisitor.visitChildren(ctx); }; } - private BSLParser.ExpressionContext processExpression(BSLParser.ExpressionContext ctx) { - super.visitExpression(ctx); - var expressionTree = getExpressionTree(); - if (expressionTree != null) // нашлись выражения в предложенном файле + private BSLParser.ExpressionContext processExpression( + ExpressionTreeBuildingVisitor treeBuildingVisitor, + BSLParser.ExpressionContext ctx + ) { + treeBuildingVisitor.visitExpression(ctx); + var expressionTree = treeBuildingVisitor.getExpressionTree(); + if (expressionTree != null) { // нашлись выражения в предложенном файле visitTopLevelExpression(expressionTree); + } return ctx; } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 1a3cd45fcd1..35594f1abe5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -59,7 +59,9 @@ protected void visitBinaryOperation(BinaryOperationNode node) { return; } - if (node.getOperator() == BslOperator.NOT_EQUAL || isBooleanLiteral(node.getLeft()) || isBooleanLiteral(node.getRight())) { + if (node.getOperator() == BslOperator.NOT_EQUAL + || isBooleanLiteral(node.getLeft()) + || isBooleanLiteral(node.getRight())) { addDiagnostic(node); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index 53e60bc6fda..cf39d3ed566 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -33,13 +33,12 @@ import java.util.Deque; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * Посетитель AST, который находит выражения и преобразует их в Expression Tree */ -public class ExpressionTreeBuildingVisitor extends BSLParserBaseVisitor { +public final class ExpressionTreeBuildingVisitor extends BSLParserBaseVisitor { @Value private static class OperatorInCode { @@ -317,7 +316,7 @@ public ParseTree visitNewExpression(BSLParser.NewExpressionContext ctx) { if (typeName == null) { // function style var typeNameArg = args.get(0); - args = args.stream().skip(1).collect(Collectors.toList()); + args = args.stream().skip(1).toList(); callNode = ConstructorCallNode.createDynamic(makeSubexpression(typeNameArg.expression())); } else { // static style From cd30105826ea9834f8b93ff3ba8df5708f148ee3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 09:45:47 +0000 Subject: [PATCH 518/595] build(deps): bump io.spring.dependency-management from 1.1.5 to 1.1.6 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.5 to 1.1.6. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.5...v1.1.6) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index edf51e16015..2a8992e8abf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" - id("io.spring.dependency-management") version "1.1.5" + id("io.spring.dependency-management") version "1.1.6" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.0" id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.2" From 2dff72e31b6b8984d126c0984c852418512ed7ca Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Tue, 9 Jul 2024 22:16:07 +0300 Subject: [PATCH 519/595] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D1=81=20=D0=BE?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D1=86=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D0=BD=D1=81=D1=82=D0=B2=D0=B0=20=D0=B1=D1=83?= =?UTF-8?q?=D0=BB=D0=B5=D0=B2=D0=B0=20=D0=BB=D0=B8=D1=82=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleNegativesDiagnostic.java | 14 +---------- .../DoubleNegativesDiagnosticTest.java | 24 +++++++++---------- .../diagnostics/DoubleNegativesDiagnostic.bsl | 4 ---- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 35594f1abe5..9e895698adc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -31,7 +31,6 @@ import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.BslOperator; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.ExpressionNodeType; import com.github._1c_syntax.bsl.languageserver.utils.expressiontree.UnaryOperationNode; -import com.github._1c_syntax.bsl.parser.BSLParser; @DiagnosticMetadata( type = DiagnosticType.CODE_SMELL, @@ -59,9 +58,7 @@ protected void visitBinaryOperation(BinaryOperationNode node) { return; } - if (node.getOperator() == BslOperator.NOT_EQUAL - || isBooleanLiteral(node.getLeft()) - || isBooleanLiteral(node.getRight())) { + if (node.getOperator() == BslOperator.NOT_EQUAL) { addDiagnostic(node); } @@ -83,15 +80,6 @@ protected void visitUnaryOperation(UnaryOperationNode node) { super.visitUnaryOperation(node); } - private static boolean isBooleanLiteral(BslExpression node) { - if (node.getNodeType() != ExpressionNodeType.LITERAL) { - return false; - } - - var constant = (BSLParser.ConstValueContext) node.getRepresentingAst(); - return constant.TRUE() != null || constant.FALSE() != null; - } - private static boolean isNegationOperator(BslExpression parent) { return parent.getNodeType() == ExpressionNodeType.UNARY_OP && parent.cast().getOperator() == BslOperator.NOT; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java index 1880469c2c1..00311548343 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -40,19 +40,17 @@ void test() { assertThat(diagnostics, true) .hasRange(1, 5, 1, 73) - .hasRange(7, 4, 7, 19) - .hasRange(8, 4, 8, 20) - .hasRange(9, 4, 9, 20) - .hasRange(10, 4, 10, 21) - .hasRange(11, 4, 11, 42) - .hasRange(12, 4, 12, 42) - .hasRange(13, 4, 13, 25) - .hasRange(14, 4, 14, 24) - .hasRange(19, 5, 19, 38) - .hasRange(23, 19, 23, 39) - .hasRange(32, 4, 32, 26) - .hasRange(33, 4, 33, 36) - .hasRange(39, 4, 39, 19) + .hasRange(5, 4, 5, 20) + .hasRange(6, 4, 6, 21) + .hasRange(7, 4, 7, 42) + .hasRange(8, 4, 8, 42) + .hasRange(9, 4, 9, 25) + .hasRange(10, 4, 10, 24) + .hasRange(15, 5, 15, 38) + .hasRange(19, 19, 19, 39) + .hasRange(28, 4, 28, 26) + .hasRange(29, 4, 29, 36) + .hasRange(35, 4, 35, 19) ; } diff --git a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl index 2890d3154b3..b28fe9f6ca5 100644 --- a/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl +++ b/src/test/resources/diagnostics/DoubleNegativesDiagnostic.bsl @@ -3,10 +3,6 @@ // Сделать действие КонецЕсли; -// Отрицание с проверкой на литерал - -А = Не Отказ = Ложь; -А = Не (Отказ = Ложь); А = Не Отказ <> Ложь; А = Не (Отказ <> Ложь); А = Не НекотороеЗначение() <> Неопределено; From 26cc0ee439015effdebf6380ec24a18be1160976 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Wed, 10 Jul 2024 10:44:56 +0300 Subject: [PATCH 520/595] new bslls-dev-tools --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2a8992e8abf..7fd16c4f858 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ plugins { id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.6" - id("io.github.1c-syntax.bslls-dev-tools") version "0.8.0" + id("io.github.1c-syntax.bslls-dev-tools") version "0.8.1" id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.2" id("io.codearte.nexus-staging") version "0.30.0" From 245220ac5d6cbe782b3b52df2b86cde0ada8ca18 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Wed, 10 Jul 2024 20:57:41 +0300 Subject: [PATCH 521/595] Update ReservedParameterNamesTest.java --- .../languageserver/diagnostics/ReservedParameterNamesTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java index 86d6f25641c..415cd8c32de 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java @@ -39,10 +39,8 @@ class ReservedParameterNamesDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(); assertThat(diagnostics).isEmpty(); - } @Test From 82a076ecb88961421407b166d3ea34524cc6d2fd Mon Sep 17 00:00:00 2001 From: theshadowco Date: Thu, 11 Jul 2024 13:32:36 +0300 Subject: [PATCH 522/595] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20mdclasses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 9 ++++++--- .../diagnostics/DeprecatedMethodCallDiagnostic.java | 6 +++--- .../MissedRequiredParameterDiagnostic.java | 2 +- .../diagnostics/RefOveruseDiagnostic.java | 12 +++--------- .../diagnostics/UnusedLocalVariableDiagnostic.java | 8 ++++++-- .../WrongDataPathForFormElementsDiagnostic.java | 2 +- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7fd16c4f858..3729ef2ca5f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,6 +32,7 @@ repositories { mavenCentral() maven(url = "https://jitpack.io") maven(url = "https://projectlombok.org/edge-releases") + maven(url = "https://s01.oss.sonatype.org/content/repositories/snapshots") } group = "io.github.1c-syntax" @@ -88,9 +89,11 @@ dependencies { exclude("org.antlr", "antlr-runtime") } api("io.github.1c-syntax", "utils", "0.6.1") - api("io.github.1c-syntax", "mdclasses", "0.13.0") - api("io.github.1c-syntax", "bsl-common-library", "0.6.0") - api("io.github.1c-syntax", "supportconf", "0.14.0") + api("io.github.1c-syntax", "mdclasses", "0.14.0") + api("io.github.1c-syntax", "bsl-common-library", "0.7.0") + api("io.github.1c-syntax", "supportconf", "0.14.0") { + exclude("io.github.1c-syntax", "bsl-common-library") + } api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") // JLanguageTool diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java index e43afa828cf..a305ee926a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java @@ -56,9 +56,9 @@ public void check() { .filter(reference -> reference.getSymbol().isDeprecated()) .filter(reference -> !reference.getFrom().isDeprecated()) .forEach((Reference reference) -> { - Symbol deprecatedSymbol = reference.getSymbol(); - String deprecationInfo = getDeprecationInfo(deprecatedSymbol); - String message = info.getMessage(deprecatedSymbol.getName(), deprecationInfo); + var deprecatedSymbol = reference.getSymbol(); + var deprecationInfo = getDeprecationInfo(deprecatedSymbol); + var message = info.getMessage(deprecatedSymbol.getName(), deprecationInfo); diagnosticStorage.addDiagnostic(reference.getSelectionRange(), message); }); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 8fc323b798f..8a934f61b32 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -120,4 +120,4 @@ private static class MethodCall { Boolean[] parameters; Range range; } -} \ No newline at end of file +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 0ddb0d606ac..5b800a0dd33 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -37,8 +37,6 @@ import com.github._1c_syntax.bsl.types.MdoReference; import com.github._1c_syntax.utils.CaseInsensitivePattern; import edu.umd.cs.findbugs.annotations.Nullable; -import lombok.AllArgsConstructor; -import lombok.Value; import org.antlr.v4.runtime.tree.ParseTree; import org.eclipse.lsp4j.Range; @@ -160,8 +158,8 @@ private Map> calcDataSourceWithTabularSectionNames( .map(dataSourceContext -> new TabularSectionTable(getTableNameOrAlias(dataSourceContext), getTabularSectionNames(dataSourceContext))) .collect(Collectors.toMap( - TabularSectionTable::getTableNameOrAlias, - TabularSectionTable::getTabularSectionNames, + TabularSectionTable::tableNameOrAlias, + TabularSectionTable::tabularSectionNames, (existing, replacement) -> existing)); } @@ -322,10 +320,6 @@ private static List extractFirstMetadataTypeName(SDBLParser.ColumnCon return children.subList(1, children.size() - 1); } - @Value - @AllArgsConstructor - private static class TabularSectionTable { - String tableNameOrAlias; - List tabularSectionNames; + private record TabularSectionTable(String tableNameOrAlias, List tabularSectionNames) { } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java index f9308c3caf6..7ad35b53ea3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java @@ -66,7 +66,11 @@ public void check() { documentContext.getSymbolTree().getVariables().stream() .filter(variable -> CHECKING_VARIABLE_KINDS.contains(variable.getKind())) .filter(variable -> !variable.isExport()) - .filter(variable -> referenceIndex.getReferencesTo(variable).stream().filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE).findFirst().isEmpty()) - .forEach(variable -> diagnosticStorage.addDiagnostic(variable.getSelectionRange(), info.getMessage(variable.getName()))); + .filter(variable -> referenceIndex.getReferencesTo(variable).stream() + .filter(ref -> ref.getOccurrenceType() == OccurrenceType.REFERENCE).findFirst().isEmpty() + ) + .forEach(variable -> diagnosticStorage.addDiagnostic( + variable.getSelectionRange(), info.getMessage(variable.getName())) + ); } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index a0e573239a2..a697943ef9f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -64,7 +64,7 @@ protected void check() { } private static boolean wrongDataPath(FormItem formItem) { - return formItem.getDataPath().getSegments().startsWith("~"); + return formItem.getDataPath().segments().startsWith("~"); } private static boolean haveFormModules(Form form) { From be6efd322ab9fae7a5a0286ae4c501d81663ffb5 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 14 Jul 2024 01:40:14 +0000 Subject: [PATCH 523/595] Update Gradle Wrapper from 8.8 to 8.9. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 ++++- gradlew.bat | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 zcmYLtRag{&)-BQ@Dc#cDDP2Q%r*wBHJ*0FE-92)X$3_b$L+F2Fa28UVeg>}yRjC}^a^+(Cdu_FTlV;w_x7ig{yd(NYi_;SHXEq`|Qa`qPMf1B~v#%<*D zn+KWJfX#=$FMopqZ>Cv7|0WiA^M(L@tZ=_Hi z*{?)#Cn^{TIzYD|H>J3dyXQCNy8f@~OAUfR*Y@C6r=~KMZ{X}q`t@Er8NRiCUcR=?Y+RMv`o0i{krhWT6XgmUt!&X=e_Q2=u@F=PXKpr9-FL@0 zfKigQcGHyPn{3vStLFk=`h@+Lh1XBNC-_nwNU{ytxZF$o}oyVfHMj|ZHWmEmZeNIlO5eLco<=RI&3=fYK*=kmv*75aqE~&GtAp(VJ z`VN#&v2&}|)s~*yQ)-V2@RmCG8lz5Ysu&I_N*G5njY`<@HOc*Bj)ZwC%2|2O<%W;M z+T{{_bHLh~n(rM|8SpGi8Whep9(cURNRVfCBQQ2VG<6*L$CkvquqJ~9WZ~!<6-EZ&L(TN zpSEGXrDiZNz)`CzG>5&_bxzBlXBVs|RTTQi5GX6s5^)a3{6l)Wzpnc|Cc~(5mO)6; z6gVO2Zf)srRQ&BSeg0)P2en#<)X30qXB{sujc3Ppm4*)}zOa)@YZ<%1oV9K%+(VzJ zk(|p>q-$v>lImtsB)`Mm;Z0LaU;4T1BX!wbnu-PSlH1%`)jZZJ(uvbmM^is*r=Y{B zI?(l;2n)Nx!goxrWfUnZ?y5$=*mVU$Lpc_vS2UyW>tD%i&YYXvcr1v7hL2zWkHf42 z_8q$Gvl>%468i#uV`RoLgrO+R1>xP8I^7~&3(=c-Z-#I`VDnL`6stnsRlYL zJNiI`4J_0fppF<(Ot3o2w?UT*8QQrk1{#n;FW@4M7kR}oW-}k6KNQaGPTs=$5{Oz} zUj0qo@;PTg#5moUF`+?5qBZ)<%-$qw(Z?_amW*X}KW4j*FmblWo@SiU16V>;nm`Eg zE0MjvGKN_eA%R0X&RDT!hSVkLbF`BFf;{8Nym#1?#5Fb?bAHY(?me2tww}5K9AV9y+T7YaqaVx8n{d=K`dxS|=))*KJn(~8u@^J% zj;8EM+=Dq^`HL~VPag9poTmeP$E`npJFh^|=}Mxs2El)bOyoimzw8(RQle(f$n#*v zzzG@VOO(xXiG8d?gcsp-Trn-36}+S^w$U(IaP`-5*OrmjB%Ozzd;jfaeRHAzc_#?- z`0&PVZANQIcb1sS_JNA2TFyN$*yFSvmZbqrRhfME3(PJ62u%KDeJ$ZeLYuiQMC2Sc z35+Vxg^@gSR6flp>mS|$p&IS7#fL@n20YbNE9(fH;n%C{w?Y0=N5?3GnQLIJLu{lm zV6h@UDB+23dQoS>>)p`xYe^IvcXD*6nDsR;xo?1aNTCMdbZ{uyF^zMyloFDiS~P7W>WuaH2+`xp0`!d_@>Fn<2GMt z&UTBc5QlWv1)K5CoShN@|0y1M?_^8$Y*U(9VrroVq6NwAJe zxxiTWHnD#cN0kEds(wN8YGEjK&5%|1pjwMH*81r^aXR*$qf~WiD2%J^=PHDUl|=+f zkB=@_7{K$Fo0%-WmFN_pyXBxl^+lLG+m8Bk1OxtFU}$fQU8gTYCK2hOC0sVEPCb5S z4jI07>MWhA%cA{R2M7O_ltorFkJ-BbmPc`{g&Keq!IvDeg8s^PI3a^FcF z@gZ2SB8$BPfenkFc*x#6&Z;7A5#mOR5qtgE}hjZ)b!MkOQ zEqmM3s>cI_v>MzM<2>U*eHoC69t`W`^9QBU^F$ z;nU4%0$)$ILukM6$6U+Xts8FhOFb|>J-*fOLsqVfB=vC0v2U&q8kYy~x@xKXS*b6i zy=HxwsDz%)!*T5Bj3DY1r`#@Tc%LKv`?V|g6Qv~iAnrqS+48TfuhmM)V_$F8#CJ1j4;L}TBZM~PX!88IT+lSza{BY#ER3TpyMqi# z#{nTi!IsLYt9cH?*y^bxWw4djrd!#)YaG3|3>|^1mzTuXW6SV4+X8sA2dUWcjH)a3 z&rXUMHbOO?Vcdf3H<_T-=DB0M4wsB;EL3lx?|T(}@)`*C5m`H%le54I{bfg7GHqYB z9p+30u+QXMt4z&iG%LSOk1uw7KqC2}ogMEFzc{;5x`hU(rh0%SvFCBQe}M#RSWJv;`KM zf7D&z0a)3285{R$ZW%+I@JFa^oZN)vx77y_;@p0(-gz6HEE!w&b}>0b)mqz-(lfh4 zGt}~Hl@{P63b#dc`trFkguB}6Flu!S;w7lp_>yt|3U=c|@>N~mMK_t#LO{n;_wp%E zQUm=z6?JMkuQHJ!1JV$gq)q)zeBg)g7yCrP=3ZA|wt9%_l#yPjsS#C7qngav8etSX+s?JJ1eX-n-%WvP!IH1%o9j!QH zeP<8aW}@S2w|qQ`=YNC}+hN+lxv-Wh1lMh?Y;LbIHDZqVvW^r;^i1O<9e z%)ukq=r=Sd{AKp;kj?YUpRcCr*6)<@Mnp-cx{rPayiJ0!7Jng}27Xl93WgthgVEn2 zQlvj!%Q#V#j#gRWx7((Y>;cC;AVbPoX*mhbqK*QnDQQ?qH+Q*$u6_2QISr!Fn;B-F@!E+`S9?+Jr zt`)cc(ZJ$9q^rFohZJoRbP&X3)sw9CLh#-?;TD}!i>`a;FkY6(1N8U-T;F#dGE&VI zm<*Tn>EGW(TioP@hqBg zn6nEolK5(}I*c;XjG!hcI0R=WPzT)auX-g4Znr;P`GfMa*!!KLiiTqOE*STX4C(PD z&}1K|kY#>~>sx6I0;0mUn8)=lV?o#Bcn3tn|M*AQ$FscYD$0H(UKzC0R588Mi}sFl z@hG4h^*;_;PVW#KW=?>N)4?&PJF&EO(X?BKOT)OCi+Iw)B$^uE)H>KQZ54R8_2z2_ z%d-F7nY_WQiSB5vWd0+>^;G^j{1A%-B359C(Eji{4oLT9wJ~80H`6oKa&{G- z)2n-~d8S0PIkTW_*Cu~nwVlE&Zd{?7QbsGKmwETa=m*RG>g??WkZ|_WH7q@ zfaxzTsOY2B3!Fu;rBIJ~aW^yqn{V;~4LS$xA zGHP@f>X^FPnSOxEbrnEOd*W7{c(c`b;RlOEQ*x!*Ek<^p*C#8L=Ty^S&hg zaV)g8<@!3p6(@zW$n7O8H$Zej+%gf^)WYc$WT{zp<8hmn!PR&#MMOLm^hcL2;$o=Q zXJ=9_0vO)ZpNxPjYs$nukEGK2bbL%kc2|o|zxYMqK8F?$YtXk9Owx&^tf`VvCCgUz zLNmDWtociY`(}KqT~qnVUkflu#9iVqXw7Qi7}YT@{K2Uk(Wx7Q-L}u^h+M(81;I*J ze^vW&-D&=aOQq0lF5nLd)OxY&duq#IdK?-r7En0MnL~W51UXJQFVVTgSl#85=q$+| zHI%I(T3G8ci9Ubq4(snkbQ*L&ksLCnX_I(xa1`&(Bp)|fW$kFot17I)jyIi06dDTTiI%gNR z8i*FpB0y0 zjzWln{UG1qk!{DEE5?0R5jsNkJ(IbGMjgeeNL4I9;cP&>qm%q7cHT}@l0v;TrsuY0 zUg;Z53O-rR*W!{Q*Gp26h`zJ^p&FmF0!EEt@R3aT4YFR0&uI%ko6U0jzEYk_xScP@ zyk%nw`+Ic4)gm4xvCS$)y;^)B9^}O0wYFEPas)!=ijoBCbF0DbVMP z`QI7N8;88x{*g=51AfHx+*hoW3hK(?kr(xVtKE&F-%Tb}Iz1Z8FW>usLnoCwr$iWv ztOVMNMV27l*fFE29x}veeYCJ&TUVuxsd`hV-8*SxX@UD6au5NDhCQ4Qs{{CJQHE#4 z#bg6dIGO2oUZQVY0iL1(Q>%-5)<7rhnenUjOV53*9Qq?aU$exS6>;BJqz2|#{We_| zX;Nsg$KS<+`*5=WA?idE6G~kF9oQPSSAs#Mh-|)@kh#pPCgp&?&=H@Xfnz`5G2(95 z`Gx2RfBV~`&Eyq2S9m1}T~LI6q*#xC^o*EeZ#`}Uw)@RD>~<_Kvgt2?bRbO&H3&h- zjB&3bBuWs|YZSkmcZvX|GJ5u7#PAF$wj0ULv;~$7a?_R%e%ST{al;=nqj-<0pZiEgNznHM;TVjCy5E#4f?hudTr0W8)a6o;H; zhnh6iNyI^F-l_Jz$F`!KZFTG$yWdioL=AhImGr!$AJihd{j(YwqVmqxMKlqFj<_Hlj@~4nmrd~&6#f~9>r2_e-^nca(nucjf z;(VFfBrd0?k--U9L*iey5GTc|Msnn6prtF*!5AW3_BZ9KRO2(q7mmJZ5kz-yms`04e; z=uvr2o^{lVBnAkB_~7b7?1#rDUh4>LI$CH1&QdEFN4J%Bz6I$1lFZjDz?dGjmNYlD zDt}f;+xn-iHYk~V-7Fx!EkS``+w`-f&Ow>**}c5I*^1tpFdJk>vG23PKw}FrW4J#x zBm1zcp^){Bf}M|l+0UjvJXRjP3~!#`I%q*E=>?HLZ>AvB5$;cqwSf_*jzEmxxscH; zcl>V3s>*IpK`Kz1vP#APs#|tV9~#yMnCm&FOllccilcNmAwFdaaY7GKg&(AKG3KFj zk@%9hYvfMO;Vvo#%8&H_OO~XHlwKd()gD36!_;o z*7pl*o>x9fbe?jaGUO25ZZ@#qqn@|$B+q49TvTQnasc$oy`i~*o}Ka*>Wg4csQOZR z|Fs_6-04vj-Dl|B2y{&mf!JlPJBf3qG~lY=a*I7SBno8rLRdid7*Kl@sG|JLCt60# zqMJ^1u^Gsb&pBPXh8m1@4;)}mx}m%P6V8$1oK?|tAk5V6yyd@Ez}AlRPGcz_b!c;; z%(uLm1Cp=NT(4Hcbk;m`oSeW5&c^lybx8+nAn&fT(!HOi@^&l1lDci*?L#*J7-u}} z%`-*V&`F1;4fWsvcHOlZF#SD&j+I-P(Mu$L;|2IjK*aGG3QXmN$e}7IIRko8{`0h9 z7JC2vi2Nm>g`D;QeN@^AhC0hKnvL(>GUqs|X8UD1r3iUc+-R4$=!U!y+?p6rHD@TL zI!&;6+LK_E*REZ2V`IeFP;qyS*&-EOu)3%3Q2Hw19hpM$3>v!!YABs?mG44{L=@rjD%X-%$ajTW7%t_$7to%9d3 z8>lk z?_e}(m&>emlIx3%7{ER?KOVXi>MG_)cDK}v3skwd%Vqn0WaKa1;e=bK$~Jy}p#~`B zGk-XGN9v)YX)K2FM{HNY-{mloSX|a?> z8Om9viiwL|vbVF~j%~hr;|1wlC0`PUGXdK12w;5Wubw}miQZ)nUguh?7asm90n>q= z;+x?3haT5#62bg^_?VozZ-=|h2NbG%+-pJ?CY(wdMiJ6!0ma2x{R{!ys=%in;;5@v z{-rpytg){PNbCGP4Ig>=nJV#^ie|N68J4D;C<1=$6&boh&ol~#A?F-{9sBL*1rlZshXm~6EvG!X9S zD5O{ZC{EEpHvmD5K}ck+3$E~{xrrg*ITiA}@ZCoIm`%kVqaX$|#ddV$bxA{jux^uRHkH)o6#}fT6XE|2BzU zJiNOAqcxdcQdrD=U7OVqer@p>30l|ke$8h;Mny-+PP&OM&AN z9)!bENg5Mr2g+GDIMyzQpS1RHE6ow;O*ye;(Qqej%JC?!D`u;<;Y}1qi5cL&jm6d9 za{plRJ0i|4?Q%(t)l_6f8An9e2<)bL3eULUVdWanGSP9mm?PqFbyOeeSs9{qLEO-) zTeH*<$kRyrHPr*li6p+K!HUCf$OQIqwIw^R#mTN>@bm^E=H=Ger_E=ztfGV9xTgh=}Hep!i97A;IMEC9nb5DBA5J#a8H_Daq~ z6^lZ=VT)7=y}H3=gm5&j!Q79#e%J>w(L?xBcj_RNj44r*6^~nCZZYtCrLG#Njm$$E z7wP?E?@mdLN~xyWosgwkCot8bEY-rUJLDo7gukwm@;TjXeQ>fr(wKP%7LnH4Xsv?o zUh6ta5qPx8a5)WO4 zK37@GE@?tG{!2_CGeq}M8VW(gU6QXSfadNDhZEZ}W2dwm)>Y7V1G^IaRI9ugWCP#sw1tPtU|13R!nwd1;Zw8VMx4hUJECJkocrIMbJI zS9k2|`0$SD%;g_d0cmE7^MXP_;_6`APcj1yOy_NXU22taG9Z;C2=Z1|?|5c^E}dR& zRfK2Eo=Y=sHm@O1`62ciS1iKv9BX=_l7PO9VUkWS7xlqo<@OxlR*tn$_WbrR8F?ha zBQ4Y!is^AIsq-46^uh;=9B`gE#Sh+4m>o@RMZFHHi=qb7QcUrgTos$e z^4-0Z?q<7XfCP~d#*7?hwdj%LyPj2}bsdWL6HctL)@!tU$ftMmV=miEvZ2KCJXP%q zLMG&%rVu8HaaM-tn4abcSE$88EYmK|5%_29B*L9NyO|~j3m>YGXf6fQL$(7>Bm9o zjHfJ+lmYu_`+}xUa^&i81%9UGQ6t|LV45I)^+m@Lz@jEeF;?_*y>-JbK`=ZVsSEWZ z$p^SK_v(0d02AyIv$}*8m)9kjef1-%H*_daPdSXD6mpc>TW`R$h9On=Z9n>+f4swL zBz^(d9uaQ_J&hjDvEP{&6pNz-bg;A===!Ac%}bu^>0}E)wdH1nc}?W*q^J2SX_A*d zBLF@n+=flfH96zs@2RlOz&;vJPiG6In>$&{D+`DNgzPYVu8<(N&0yPt?G|>D6COM# zVd)6v$i-VtYfYi1h)pXvO}8KO#wuF=F^WJXPC+;hqpv>{Z+FZTP1w&KaPl?D)*A=( z8$S{Fh;Ww&GqSvia6|MvKJg-RpNL<6MXTl(>1}XFfziRvPaLDT1y_tjLYSGS$N;8| zZC*Hcp!~u?v~ty3&dBm`1A&kUe6@`q!#>P>ZZZgGRYhNIxFU6B>@f@YL%hOV0=9s# z?@0~aR1|d9LFoSI+li~@?g({Y0_{~~E_MycHTXz`EZmR2$J$3QVoA25j$9pe?Ub)d z`jbm8v&V0JVfY-^1mG=a`70a_tjafgi}z-8$smw7Mc`-!*6y{rB-xN1l`G3PLBGk~ z{o(KCV0HEfj*rMAiluQuIZ1tevmU@m{adQQr3xgS!e_WXw&eE?GjlS+tL0@x%Hm{1 zzUF^qF*2KAxY0$~pzVRpg9dA*)^ z7&wu-V$7+Jgb<5g;U1z*ymus?oZi7&gr!_3zEttV`=5VlLtf!e&~zv~PdspA0JCRz zZi|bO5d)>E;q)?}OADAhGgey#6(>+36XVThP%b#8%|a9B_H^)Nps1md_lVv5~OO@(*IJO@;eqE@@(y}KA- z`zj@%6q#>hIgm9}*-)n(^Xbdp8`>w~3JCC`(H{NUh8Umm{NUntE+eMg^WvSyL+ilV zff54-b59jg&r_*;*#P~ON#I=gAW99hTD;}nh_j;)B6*tMgP_gz4?=2EJZg$8IU;Ly<(TTC?^)& zj@%V!4?DU&tE=8)BX6f~x0K+w$%=M3;Fpq$VhETRlJ8LEEe;aUcG;nBe|2Gw>+h7CuJ-^gYFhQzDg(`e=!2f7t0AXrl zAx`RQ1u1+}?EkEWSb|jQN)~wOg#Ss&1oHoFBvg{Z|4#g$)mNzjKLq+8rLR(jC(QUC Ojj7^59?Sdh$^Qpp*~F>< delta 8662 zcmYM1RaBhK(uL9BL4pT&ch}$qcL*As0R|^HFD`?-26qkaNwC3nu;A|Q0Yd)oJ7=x) z_f6HatE;=#>YLq{FoYf$!na@pfNwSyI%>|UMk5`vO(z@Ao)eZR(~D#FF?U$)+q)1q z9OVG^Ib0v?R8wYfQ*1H;5Oyixqnyt6cXR#u=LM~V7_GUu}N(b}1+x^JUL#_8Xj zB*(FInWvSPGo;K=k3}p&4`*)~)p`nX#}W&EpfKCcOf^7t zPUS81ov(mXS;$9To6q84I!tlP&+Z?lkctuIZ(SHN#^=JGZe^hr^(3d*40pYsjikBWME6IFf!!+kC*TBc!T)^&aJ#z0#4?OCUbNoa}pwh=_SFfMf|x$`-5~ zP%%u%QdWp#zY6PZUR8Mz1n$f44EpTEvKLTL;yiZrPCV=XEL09@qmQV#*Uu*$#-WMN zZ?rc(7}93z4iC~XHcatJev=ey*hnEzajfb|22BpwJ4jDi;m>Av|B?TqzdRm-YT(EV zCgl${%#nvi?ayAFYV7D_s#07}v&FI43BZz@`dRogK!k7Y!y6r=fvm~=F9QP{QTj>x z#Y)*j%`OZ~;rqP0L5@qYhR`qzh^)4JtE;*faTsB;dNHyGMT+fpyz~LDaMOO?c|6FD z{DYA+kzI4`aD;Ms|~h49UAvOfhMEFip&@&Tz>3O+MpC0s>`fl!T(;ZP*;Ux zr<2S-wo(Kq&wfD_Xn7XXQJ0E4u7GcC6pqe`3$fYZ5Eq4`H67T6lex_QP>Ca##n2zx z!tc=_Ukzf{p1%zUUkEO(0r~B=o5IoP1@#0A=uP{g6WnPnX&!1Z$UWjkc^~o^y^Kkn z%zCrr^*BPjcTA58ZR}?%q7A_<=d&<*mXpFSQU%eiOR`=78@}+8*X##KFb)r^zyfOTxvA@cbo65VbwoK0lAj3x8X)U5*w3(}5 z(Qfv5jl{^hk~j-n&J;kaK;fNhy9ZBYxrKQNCY4oevotO-|7X}r{fvYN+{sCFn2(40 zvCF7f_OdX*L`GrSf0U$C+I@>%+|wQv*}n2yT&ky;-`(%#^vF79p1 z>y`59E$f7!vGT}d)g)n}%T#-Wfm-DlGU6CX`>!y8#tm-Nc}uH50tG)dab*IVrt-TTEM8!)gIILu*PG_-fbnFjRA+LLd|_U3yas12Lro%>NEeG%IwN z{FWomsT{DqMjq{7l6ZECb1Hm@GQ`h=dcyApkoJ6CpK3n83o-YJnXxT9b2%TmBfKZ* zi~%`pvZ*;(I%lJEt9Bphs+j#)ws}IaxQYV6 zWBgVu#Kna>sJe;dBQ1?AO#AHecU~3cMCVD&G})JMkbkF80a?(~1HF_wv6X!p z6uXt_8u)`+*%^c@#)K27b&Aa%m>rXOcGQg8o^OB4t0}@-WWy38&)3vXd_4_t%F1|( z{z(S)>S!9eUCFA$fQ^127DonBeq@5FF|IR7(tZ?Nrx0(^{w#a$-(fbjhN$$(fQA(~|$wMG4 z?UjfpyON`6n#lVwcKQ+#CuAQm^nmQ!sSk>=Mdxk9e@SgE(L2&v`gCXv&8ezHHn*@% zi6qeD|I%Q@gb(?CYus&VD3EE#xfELUvni89Opq-6fQmY-9Di3jxF?i#O)R4t66ekw z)OW*IN7#{_qhrb?qlVwmM@)50jEGbjTiDB;nX{}%IC~pw{ev#!1`i6@xr$mgXX>j} zqgxKRY$fi?B7|GHArqvLWu;`?pvPr!m&N=F1<@i-kzAmZ69Sqp;$)kKg7`76GVBo{ zk+r?sgl{1)i6Hg2Hj!ehsDF3tp(@n2+l%ihOc7D~`vzgx=iVU0{tQ&qaV#PgmalfG zPj_JimuEvo^1X)dGYNrTHBXwTe@2XH-bcnfpDh$i?Il9r%l$Ob2!dqEL-To>;3O>` z@8%M*(1#g3_ITfp`z4~Z7G7ZG>~F0W^byMvwzfEf*59oM*g1H)8@2zL&da+$ms$Dp zrPZ&Uq?X)yKm7{YA;mX|rMEK@;W zA-SADGLvgp+)f01=S-d$Z8XfvEZk$amHe}B(gQX-g>(Y?IA6YJfZM(lWrf);5L zEjq1_5qO6U7oPSb>3|&z>OZ13;mVT zWCZ=CeIEK~6PUv_wqjl)pXMy3_46hB?AtR7_74~bUS=I}2O2CjdFDA*{749vOj2hJ z{kYM4fd`;NHTYQ_1Rk2dc;J&F2ex^}^%0kleFbM!yhwO|J^~w*CygBbkvHnzz@a~D z|60RVTr$AEa-5Z->qEMEfau=__2RanCTKQ{XzbhD{c!e5hz&$ZvhBX0(l84W%eW17 zQ!H)JKxP$wTOyq83^qmx1Qs;VuWuxclIp!BegkNYiwyMVBay@XWlTpPCzNn>&4)f* zm&*aS?T?;6?2>T~+!=Gq4fjP1Z!)+S<xiG>XqzY@WKKMzx?0|GTS4{ z+z&e0Uysciw#Hg%)mQ3C#WQkMcm{1yt(*)y|yao2R_FRX$WPvg-*NPoj%(k*{BA8Xx&0HEqT zI0Swyc#QyEeUc)0CC}x{p+J{WN>Z|+VZWDpzW`bZ2d7^Yc4ev~9u-K&nR zl#B0^5%-V4c~)1_xrH=dGbbYf*7)D&yy-}^V|Np|>V@#GOm($1=El5zV?Z`Z__tD5 zcLUi?-0^jKbZrbEny&VD!zA0Nk3L|~Kt4z;B43v@k~ zFwNisc~D*ZROFH;!f{&~&Pof-x8VG8{gSm9-Yg$G(Q@O5!A!{iQH0j z80Rs>Ket|`cbw>z$P@Gfxp#wwu;I6vi5~7GqtE4t7$Hz zPD=W|mg%;0+r~6)dC>MJ&!T$Dxq3 zU@UK_HHc`_nI5;jh!vi9NPx*#{~{$5Azx`_VtJGT49vB_=WN`*i#{^X`xu$9P@m>Z zL|oZ5CT=Zk?SMj{^NA5E)FqA9q88h{@E96;&tVv^+;R$K`kbB_ zZneKrSN+IeIrMq;4EcH>sT2~3B zrZf-vSJfekcY4A%e2nVzK8C5~rAaP%dV2Hwl~?W87Hdo<*EnDcbZqVUb#8lz$HE@y z2DN2AQh%OcqiuWRzRE>cKd)24PCc)#@o&VCo!Rcs;5u9prhK}!->CC)H1Sn-3C7m9 zyUeD#Udh1t_OYkIMAUrGU>ccTJS0tV9tW;^-6h$HtTbon@GL1&OukJvgz>OdY)x4D zg1m6Y@-|p;nB;bZ_O>_j&{BmuW9km4a728vJV5R0nO7wt*h6sy7QOT0ny-~cWTCZ3 z9EYG^5RaAbLwJ&~d(^PAiicJJs&ECAr&C6jQcy#L{JCK&anL)GVLK?L3a zYnsS$+P>UB?(QU7EI^%#9C;R-jqb;XWX2Bx5C;Uu#n9WGE<5U=zhekru(St>|FH2$ zOG*+Tky6R9l-yVPJk7giGulOO$gS_c!DyCog5PT`Sl@P!pHarmf7Y0HRyg$X@fB7F zaQy&vnM1KZe}sHuLY5u7?_;q!>mza}J?&eLLpx2o4q8$qY+G2&Xz6P8*fnLU+g&i2}$F%6R_Vd;k)U{HBg{+uuKUAo^*FRg!#z}BajS)OnqwXd!{u>Y&aH?)z%bwu_NB9zNw+~661!> zD3%1qX2{743H1G8d~`V=W`w7xk?bWgut-gyAl*6{dW=g_lU*m?fJ>h2#0_+J3EMz_ zR9r+0j4V*k>HU`BJaGd~@*G|3Yp?~Ljpth@!_T_?{an>URYtict~N+wb}%n)^GE8eM(=NqLnn*KJnE*v(7Oo)NmKB*qk;0&FbO zkrIQs&-)ln0-j~MIt__0pLdrcBH{C(62`3GvGjR?`dtTdX#tf-2qkGbeV;Ud6Dp0& z|A6-DPgg=v*%2`L4M&p|&*;;I`=Tn1M^&oER=Gp&KHBRxu_OuFGgX;-U8F?*2>PXjb!wwMMh_*N8$?L4(RdvV#O5cUu0F|_zQ#w1zMA4* zJeRk}$V4?zPVMB=^}N7x?(P7!x6BfI%*)yaUoZS0)|$bw07XN{NygpgroPW>?VcO} z@er3&#@R2pLVwkpg$X8HJM@>FT{4^Wi&6fr#DI$5{ERpM@|+60{o2_*a7k__tIvGJ9D|NPoX@$4?i_dQPFkx0^f$=#_)-hphQ93a0|`uaufR!Nlc^AP+hFWe~(j_DCZmv;7CJ4L7tWk{b;IFDvT zchD1qB=cE)Mywg5Nw>`-k#NQhT`_X^c`s$ODVZZ-)T}vgYM3*syn41}I*rz?)`Q<* zs-^C3!9AsV-nX^0wH;GT)Y$yQC*0x3o!Bl<%>h-o$6UEG?{g1ip>njUYQ}DeIw0@qnqJyo0do(`OyE4kqE2stOFNos%!diRfe=M zeU@=V=3$1dGv5ZbX!llJ!TnRQQe6?t5o|Y&qReNOxhkEa{CE6d^UtmF@OXk<_qkc0 zc+ckH8Knc!FTjk&5FEQ}$sxj!(a4223cII&iai-nY~2`|K89YKcrYFAMo^oIh@W^; zsb{KOy?dv_D5%}zPk_7^I!C2YsrfyNBUw_ude7XDc0-+LjC0!X_moHU3wmveS@GRu zX>)G}L_j1I-_5B|b&|{ExH~;Nm!xytCyc}Ed!&Hqg;=qTK7C93f>!m3n!S5Z!m`N} zjIcDWm8ES~V2^dKuv>8@Eu)Zi{A4;qHvTW7hB6B38h%$K76BYwC3DIQ0a;2fSQvo$ z`Q?BEYF1`@I-Nr6z{@>`ty~mFC|XR`HSg(HN>&-#&eoDw-Q1g;x@Bc$@sW{Q5H&R_ z5Aici44Jq-tbGnDsu0WVM(RZ=s;CIcIq?73**v!Y^jvz7ckw*=?0=B!{I?f{68@V( z4dIgOUYbLOiQccu$X4P87wZC^IbGnB5lLfFkBzLC3hRD?q4_^%@O5G*WbD?Wug6{<|N#Fv_Zf3ST>+v_!q5!fSy#{_XVq$;k*?Ar^R&FuFM7 zKYiLaSe>Cw@`=IUMZ*U#v>o5!iZ7S|rUy2(yG+AGnauj{;z=s8KQ(CdwZ>&?Z^&Bt z+74(G;BD!N^Ke>(-wwZN5~K%P#L)59`a;zSnRa>2dCzMEz`?VaHaTC>?&o|(d6e*Z zbD!=Ua-u6T6O!gQnncZ&699BJyAg9mKXd_WO8O`N@}bx%BSq)|jgrySfnFvzOj!44 z9ci@}2V3!ag8@ZbJO;;Q5ivdTWx+TGR`?75Jcje}*ufx@%5MFUsfsi%FoEx)&uzkN zgaGFOV!s@Hw3M%pq5`)M4Nz$)~Sr9$V2rkP?B7kvI7VAcnp6iZl zOd!(TNw+UH49iHWC4!W&9;ZuB+&*@Z$}>0fx8~6J@d)fR)WG1UndfdVEeKW=HAur| z15zG-6mf`wyn&x@&?@g1ibkIMob_`x7nh7yu9M>@x~pln>!_kzsLAY#2ng0QEcj)qKGj8PdWEuYKdM!jd{ zHP6j^`1g}5=C%)LX&^kpe=)X+KR4VRNli?R2KgYlwKCN9lcw8GpWMV+1Ku)~W^jV2 zyiTv-b*?$AhvU7j9~S5+u`Ysw9&5oo0Djp8e(j25Etbx42Qa=4T~}q+PG&XdkWDNF z7bqo#7KW&%dh~ST6hbu8S=0V`{X&`kAy@8jZWZJuYE}_#b4<-^4dNUc-+%6g($yN% z5ny^;ogGh}H5+Gq3jR21rQgy@5#TCgX+(28NZ4w}dzfx-LP%uYk9LPTKABaQh1ah) z@Y(g!cLd!Mcz+e|XI@@IH9z*2=zxJ0uaJ+S(iIsk7=d>A#L<}={n`~O?UTGX{8Pda z_KhI*4jI?b{A!?~-M$xk)w0QBJb7I=EGy&o3AEB_RloU;v~F8ubD@9BbxV1c36CsTX+wzAZlvUm*;Re06D+Bq~LYg-qF4L z5kZZ80PB&4U?|hL9nIZm%jVj0;P_lXar)NSt3u8xx!K6Y0bclZ%<9fwjZ&!^;!>ug zQ}M`>k@S{BR20cyVXtKK%Qa^7?e<%VSAPGmVtGo6zc6BkO5vW5)m8_k{xT3;ocdpH zudHGT06XU@y6U!&kP8i6ubMQl>cm7=(W6P7^24Uzu4Xpwc->ib?RSHL*?!d{c-aE# zp?TrFr{4iDL3dpljl#HHbEn{~eW2Nqfksa(r-}n)lJLI%e#Bu|+1% zN&!n(nv(3^jGx?onfDcyeCC*p6)DuFn_<*62b92Pn$LH(INE{z^8y?mEvvO zZ~2I;A2qXvuj>1kk@WsECq1WbsSC!0m8n=S^t3kxAx~of0vpv{EqmAmDJ3(o;-cvf zu$33Z)C0)Y4(iBhh@)lsS|a%{;*W(@DbID^$ z|FzcJB-RFzpkBLaFLQ;EWMAW#@K(D#oYoOmcctdTV?fzM2@6U&S#+S$&zA4t<^-!V z+&#*xa)cLnfMTVE&I}o#4kxP~JT3-A)L_5O!yA2ebq?zvb0WO1D6$r9p?!L0#)Fc> z+I&?aog~FPBH}BpWfW^pyc{2i8#Io6e)^6wv}MZn&`01oq@$M@5eJ6J^IrXLI) z4C!#kh)89u5*Q@W5(rYDqBKO6&G*kPGFZfu@J}ug^7!sC(Wcv3Fbe{$Sy|{-VXTct znsP+0v}kduRs=S=x0MA$*(7xZPE-%aIt^^JG9s}8$43E~^t4=MxmMts;q2$^sj=k( z#^suR{0Wl3#9KAI<=SC6hifXuA{o02vdyq>iw%(#tv+@ov{QZBI^*^1K?Q_QQqA5n9YLRwO3a7JR+1x3#d3lZL;R1@8Z!2hnWj^_5 z^M{3wg%f15Db5Pd>tS!6Hj~n^l478ljxe@>!C;L$%rKfm#RBw^_K&i~ZyY_$BC%-L z^NdD{thVHFlnwfy(a?{%!m;U_9ic*!OPxf&5$muWz7&4VbW{PP)oE5u$uXUZU>+8R zCsZ~_*HLVnBm*^{seTAV=iN)mB0{<}C!EgE$_1RMj1kGUU?cjSWu*|zFA(ZrNE(CkY7>Mv1C)E1WjsBKAE%w}{~apwNj z0h`k)C1$TwZ<3de9+>;v6A0eZ@xHm#^7|z9`gQ3<`+lpz(1(RsgHAM@Ja+)c?;#j- zC=&5FD)m@9AX}0g9XQ_Yt4YB}aT`XxM-t>7v@BV}2^0gu0zRH%S9}!P(MBAFGyJ8F zEMdB&{eGOd$RqV77Lx>8pX^<@TdL{6^K7p$0uMTLC^n)g*yXRXMy`tqjYIZ|3b#Iv z4<)jtQU5`b{A;r2QCqIy>@!uuj^TBed3OuO1>My{GQe<^9|$4NOHTKFp{GpdFY-kC zi?uHq>lF$}<(JbQatP0*>$Aw_lygfmUyojkE=PnV)zc)7%^5BxpjkU+>ol2}WpB2hlDP(hVA;uLdu`=M_A!%RaRTd6>Mi_ozLYOEh!dfT_h0dSsnQm1bk)%K45)xLw zql&fx?ZOMBLXtUd$PRlqpo2CxNQTBb=!T|_>p&k1F})Hq&xksq>o#4b+KSs2KyxPQ z#{(qj@)9r6u2O~IqHG76@Fb~BZ4Wz_J$p_NU9-b3V$$kzjN24*sdw5spXetOuU1SR z{v}b92c>^PmvPs>BK2Ylp6&1>tnPsBA0jg0RQ{({-?^SBBm>=W>tS?_h^6%Scc)8L zgsKjSU@@6kSFX%_3%Qe{i7Z9Wg7~fM_)v?ExpM@htI{G6Db5ak(B4~4kRghRp_7zr z#Pco0_(bD$IS6l2j>%Iv^Hc)M`n-vIu;-2T+6nhW0JZxZ|NfDEh;ZnAe d|9e8rKfIInFTYPwOD9TMuEcqhmizAn{|ERF)u#Xe diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c96..09523c0e549 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## From 120f9bd24344479a2688c134a1b121bf83af6cd3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 09:25:25 +0000 Subject: [PATCH 524/595] build(deps): bump io.sentry:sentry-bom from 7.11.0 to 7.12.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.11.0 to 7.12.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.11.0...7.12.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3729ef2ca5f..7da15dde678 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.11.0") + mavenBom("io.sentry:sentry-bom:7.12.0") } } From 6d355c35aa7dd3d9150a0bf2e6791f2bef3c3f8e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 22 Jul 2024 20:47:42 +0200 Subject: [PATCH 525/595] =?UTF-8?q?Fix=20#3326.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B8=D0=BC=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20=D0=B0=D0=BF=D0=BF=D0=B5=D1=80=D0=BA=D0=B5=D0=B9?= =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_1c_syntax/bsl/languageserver/configuration/schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 96fdadfbdff..fda40aa8eb9 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -858,7 +858,7 @@ "type": "object", "title": "Formatting configuration.", "properties": { - "useUpperCaseForOrNotKeywords": { + "useUpperCaseForOrNotAndKeywords": { "$id": "#/properties/useUpperCaseForOrNotAndKeywords", "type": "boolean", "default": true, @@ -948,4 +948,4 @@ "default": "ask" } } -} \ No newline at end of file +} From de1832bc52055617bc955947f795c51e0764bc80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:41:14 +0000 Subject: [PATCH 526/595] build(deps): bump io.sentry:sentry-bom from 7.12.0 to 7.12.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.12.0 to 7.12.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.12.0...7.12.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7da15dde678..690e25f99cf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.12.0") + mavenBom("io.sentry:sentry-bom:7.12.1") } } From b535d80c761a6ad7813de029e301d0c8b9d898ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:08:53 +0000 Subject: [PATCH 527/595] build(deps): bump the freefair group with 5 updates Bumps the freefair group with 5 updates: | Package | From | To | | --- | --- | --- | | [io.freefair.lombok](https://github.com/freefair/gradle-plugins) | `8.6` | `8.7.1` | | [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) | `8.6` | `8.7.1` | | [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) | `8.6` | `8.7.1` | | [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) | `8.6` | `8.7.1` | | [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) | `8.6` | `8.7.1` | Updates `io.freefair.lombok` from 8.6 to 8.7.1 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.6...8.7.1) Updates `io.freefair.javadoc-links` from 8.6 to 8.7.1 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.6...8.7.1) Updates `io.freefair.javadoc-utf-8` from 8.6 to 8.7.1 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.6...8.7.1) Updates `io.freefair.aspectj.post-compile-weaving` from 8.6 to 8.7.1 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.6...8.7.1) Updates `io.freefair.maven-central.validate-poms` from 8.6 to 8.7.1 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.6...8.7.1) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 690e25f99cf..76510054526 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,11 +11,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "5.1.0.4882" - id("io.freefair.lombok") version "8.6" - id("io.freefair.javadoc-links") version "8.6" - id("io.freefair.javadoc-utf-8") version "8.6" - id("io.freefair.aspectj.post-compile-weaving") version "8.6" - id("io.freefair.maven-central.validate-poms") version "8.6" + id("io.freefair.lombok") version "8.7.1" + id("io.freefair.javadoc-links") version "8.7.1" + id("io.freefair.javadoc-utf-8") version "8.7.1" + id("io.freefair.aspectj.post-compile-weaving") version "8.7.1" + id("io.freefair.maven-central.validate-poms") version "8.7.1" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" From a3273a01b41b5823c5cf17d19c7d72969cfaa008 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:36:09 +0000 Subject: [PATCH 528/595] build(deps): bump JetBrains/qodana-action from 2024.1.8 to 2024.1.9 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.8 to 2024.1.9. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.8...v2024.1.9) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 4dd4e5764ab..46470a82b73 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.8 + uses: JetBrains/qodana-action@v2024.1.9 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 444a8ca5a23024b9e4bac885fe0e2856b7659f12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:57:09 +0000 Subject: [PATCH 529/595] build(deps): bump io.sentry:sentry-bom from 7.12.1 to 7.14.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.12.1 to 7.14.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.12.1...7.14.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 76510054526..6f64a88e434 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.12.1") + mavenBom("io.sentry:sentry-bom:7.14.0") } } From 9a8aead7f78699cb42acd38ebb2b0a5a9d7f3f22 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 18 Aug 2024 01:40:29 +0000 Subject: [PATCH 530/595] Update Gradle Wrapper from 8.9 to 8.10. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 zcmV;H4{7l5(*nQL0Kr1kzC=_KMxQY0|W5(lc#i zH*M1^P4B}|{x<+fkObwl)u#`$GxKKV&3pg*-y6R6txw)0qU|Clf9Uds3x{_-**c=7 z&*)~RHPM>Rw#Hi1R({;bX|7?J@w}DMF>dQQU2}9yj%iLjJ*KD6IEB2^n#gK7M~}6R zkH+)bc--JU^pV~7W=3{E*4|ZFpDpBa7;wh4_%;?XM-5ZgZNnVJ=vm!%a2CdQb?oTa z70>8rTb~M$5Tp!Se+4_OKWOB1LF+7gv~$$fGC95ToUM(I>vrd$>9|@h=O?eARj0MH zT4zo(M>`LWoYvE>pXvqG=d96D-4?VySz~=tPVNyD$XMshoTX(1ZLB5OU!I2OI{kb) zS8$B8Qm>wLT6diNnyJZC?yp{Kn67S{TCOt-!OonOK7$K)e-13U9GlnQXPAb&SJ0#3 z+vs~+4Qovv(%i8g$I#FCpCG^C4DdyQw3phJ(f#y*pvNDQCRZ~MvW<}fUs~PL=4??j zmhPyg<*I4RbTz|NHFE-DC7lf2=}-sGkE5e!RM%3ohM7_I^IF=?O{m*uUPH(V?gqyc(Rp?-Qu(3bBIL4Fz(v?=_Sh?LbK{nqZMD>#9D_hNhaV$0ef3@9V90|0u#|PUNTO>$F=qRhg1duaE z0`v~X3G{8RVT@kOa-pU+z8{JWyP6GF*u2e8eKr7a2t1fuqQy)@d|Qn(%YLZ62TWtoX@$nL}9?atE#Yw`rd(>cr0gY;dT9~^oL;u)zgHUvxc2I*b&ZkGM-iq=&(?kyO(3}=P! zRp=rErEyMT5UE9GjPHZ#T<`cnD)jyIL!8P{H@IU#`e8cAG5jMK zVyKw7--dAC;?-qEu*rMr$5@y535qZ6p(R#+fLA_)G~!wnT~~)|s`}&fA(s6xXN`9j zP#Fd3GBa#HeS{5&8p?%DKUyN^X9cYUc6vq}D_3xJ&d@=6j(6BZKPl?!k1?!`f3z&a zR4ZF60Mx7oBxLSxGuzA*Dy5n-d2K=+)6VMZh_0KetK|{e;E{8NJJ!)=_E~1uu=A=r zrn&gh)h*SFhsQJo!f+wKMIE;-EOaMSMB@aXRU(UcnJhZW^B^mgs|M9@5WF@s6B0p& zm#CTz)yiQCgURE{%hjxHcJ6G&>G9i`7MyftL!QQd5 z@RflRs?7)99?X`kHNt>W3l7YqscBpi*R2+fsgABor>KVOu(i(`03aytf2UA!&SC9v z!E}whj#^9~=XHMinFZ;6UOJjo=mmNaWkv~nC=qH9$s-8roGeyaW-E~SzZ3Gg>j zZ8}<320rg4=$`M0nxN!w(PtHUjeeU?MvYgWKZ6kkzABK;vMN0|U;X9abJleJA(xy<}5h5P(5 z{RzAFPvMnX2m0yH0Jn2Uo-p`daE|(O`YQiC#jB8;6bVIUf?SY(k$#C0`d6qT`>Xe0+0}Oj0=F&*D;PVe=Z<=0AGI<6$gYLwa#r` zm449x*fU;_+J>Mz!wa;T-wldoBB%&OEMJgtm#oaI60TSYCy7;+$5?q!zi5K`u66Wq zvg)Fx$s`V3Em{=OEY{3lmh_7|08ykS&U9w!kp@Ctuzqe1JFOGz6%i5}Kmm9>^=gih z?kRxqLA<3@e=}G4R_?phW{4DVr?`tPfyZSN@R=^;P;?!2bh~F1I|fB7P=V=9a6XU5 z<#0f>RS0O&rhc&nTRFOW7&QhevP0#>j0eq<1@D5yAlgMl5n&O9X|Vq}%RX}iNyRFF z7sX&u#6?E~bm~N|z&YikXC=I0E*8Z$v7PtWfjy)$e_Ez25fnR1Q=q1`;U!~U>|&YS zaOS8y!^ORmr2L4ik!IYR8@Dcx8MTC=(b4P6iE5CnrbI~7j7DmM8em$!da&D!6Xu)!vKPdLG z9f#)se|6=5yOCe)N6xDhPI!m81*dNe7u985zi%IVfOfJh69+#ag4ELzGne?o`eA`42K4T)h3S+s)5IT97%O>du- z0U54L8m4}rkRQ?QBfJ%DLssy^+a7Ajw;0&`NOTY4o;0-ivm9 zBz1C%nr_hQ)X)^QM6T1?=yeLkuG9Lf50(eH}`tFye;01&(p?8i+6h};VV-2B~qdxeC#=X z(JLlzy&fHkyi9Ksbcs~&r^%lh^2COldLz^H@X!s~mr9Dr6z!j+4?zkD@Ls7F8(t(f z9`U?P$Lmn*Y{K}aR4N&1N=?xtQ1%jqf1~pJyQ4SgBrEtR`j4lQuh7cqP49Em5cO=I zB(He2`iPN5M=Y0}h(IU$37ANTGx&|b-u1BYA*#dE(L-lptoOpo&th~E)_)y-`6kSH z3vvyVrcBwW^_XYReJ=JYd9OBQrzv;f2AQdZH#$Y{Y+Oa33M70XFI((fs;mB4e`<<{ ze4dv2B0V_?Ytsi>>g%qs*}oDGd5d(RNZ*6?7qNbdp7wP4T72=F&r?Ud#kZr8Ze5tB z_oNb7{G+(o2ajL$!69FW@jjPQ2a5C)m!MKKRirC$_VYIuVQCpf9rIms0GRDf)8AH${I`q^~5rjot@#3$2#zT2f`(N^P7Z;6(@EK$q*Jgif00I6*^ZGV+XB5uw*1R-@23yTw&WKD{s1;HTL;dO)%5i#`dc6b7;5@^{KU%N|A-$zsYw4)7LA{3`Zp>1 z-?K9_IE&z)dayUM)wd8K^29m-l$lFhi$zj0l!u~4;VGR6Y!?MAfBC^?QD53hy6VdD z@eUZIui}~L%#SmajaRq1J|#> z4m=o$vZ*34=ZWK2!QMNEcp2Lbc5N1q!lEDq(bz0b;WI9;e>l=CG9^n#ro`w>_0F$Q zfZ={2QyTkfByC&gy;x!r*NyXXbk=a%~~(#K?< zTke0HuF5{Q+~?@!KDXR|g+43$+;ab`^flS%miup_0OUTm=nIc%d5nLP)i308PIjl_YMF6cpQ__6&$n6it8K- z8PIjl_YMF6cpQ_!r)L8IivW`WdK8mBs6PXdjR2DYdK8nCs73=4j{uVadK8oNjwX|E wpAeHLsTu^*Y>Trk?aBtSQ(D-o$(D8Px^?ZI-PUB? z*1fv!{YdHme3Fc8%cR@*@zc5A_nq&2=R47Hp@$-JF4Fz*;SLw5}K^y>s-s;V!}b2i=5=M- zComP?ju>8Fe@=H@rlwe1l`J*6BTTo`9b$zjQ@HxrAhp0D#u?M~TxGC_!?ccCHCjt| zF*PgJf@kJB`|Ml}cmsyrAjO#Kjr^E5p29w+#>$C`Q|54BoDv$fQ9D?3n32P9LPMIzu?LjNqggOH=1@T{9bMn*u8(GI z!;MLTtFPHal^S>VcJdiYqX0VU|Rn@A}C1xOlxCribxes0~+n2 z6qDaIA2$?e`opx3_KW!rAgbpzU)gFdjAKXh|5w``#F0R|c)Y)Du0_Ihhz^S?k^pk% zP>9|pIDx)xHH^_~+aA=^$M!<8K~Hy(71nJGf6`HnjtS=4X4=Hk^O71oNia2V{HUCC zoN3RSBS?mZCLw;l4W4a+D8qc)XJS`pUJ5X-f^1ytxwr`@si$lAE?{4G|o; zO0l>`rr?;~c;{ZEFJ!!3=7=FdGJ?Q^xfNQh4A?i;IJ4}B+A?4olTK(fN++3CRBP97 ze~lG9h%oegkn)lpW-4F8o2`*WW0mZHwHez`ko@>U1_;EC_6ig|Drn@=DMV9YEUSCa zIf$kHei3(u#zm9I!Jf(4t`Vm1lltJ&lVHy(eIXE8sy9sUpmz%I_gA#8x^Zv8%w?r2 z{GdkX1SkzRIr>prRK@rqn9j2wG|rUvf6PJbbin=yy-TAXrguvzN8jL$hUrIXzr^s5 zVM?H4;eM-QeRFr06@ifV(ocvk?_)~N@1c2ien56UjWXid6W%6ievIh)>dk|rIs##^kY67ib8Kw%#-oVFaXG7$ERyA9(NSJUvWiOA5H(!{uOpcW zg&-?iqPhds%3%tFspHDqqr;A!e@B#iPQjHd=c>N1LoOEGRehVoPOdxJ>b6>yc#o#+ zl8s8!(|NMeqjsy@0x{8^j0d00SqRZjp{Kj)&4UHYGxG+z9b-)72I*&J70?+8e?p_@ z=>-(>l6z5vYlP~<2%DU02b!mA{7mS)NS_eLe=t)sm&+Pmk?asOEKlkPQ)EUvvfC=;4M&*|I!w}(@V_)eUKLA_t^%`o z0PM9LV|UKTLnk|?M3u!|f2S0?UqZsEIH9*NJS-8lzu;A6-rr-ot=dg9SASoluZUkFH$7X; zP=?kYX!K?JL-b~<#7wU;b;eS)O;@?h%sPPk{4xEBxb{!sm0AY|f9cNvx6>$3F!*0c z75H=dy8JvTyO8}g1w{$9T$p~5en}AeSLoCF>_RT9YPMpChUjl310o*$QocjbH& zbnwg#gssR#jDVN{uEi3n(PZ%PFZ|6J2 z5_rBf0-u>e4sFe0*Km49ATi7>Kn0f9!uc|rRMR1Dtt6m1LW8^>qFlo}h$@br=Rmpi z;mI&>OF64Be{dVeHI8utrh)v^wsZ0jii%x8UgZ8TC%K~@I(4E};GFW&(;WVov}3%H zH;IhRkfD^(vt^DjZz(MyHLZxv8}qzPc(%itBkBwf_fC~sDBgh<3XAv5cxxfF3<2U! z03Xe&z`is!JDHbe;mNmfkH+_LFE*I2^mdL@7(@9DfAcP6O04V-ko;Rpgp<%Cj5r8Z zd0`sXoIjV$j)--;jA6Zy^D5&5v$o^>e%>Q?9GLm{i~p^lAn!%ZtF$I~>39XVZxk0b zROh^Bk9cE0AJBLozZIEmy7xG(yHWGztvfnr0(2ro1%>zsGMS^EMu+S$r=_;9 zWwZkgf7Q7`H9sLf2Go^Xy6&h~a&%s2_T@_Csf19MntF$aVFiFkvE3_hUg(B@&Xw@YJ zpL$wNYf78=0c@!QU6_a$>CPiXT7QAGDM}7Z(0z#_ZA=fmLUj{2z7@Ypo71UDy8GHr z-&TLKf6a5WCf@Adle3VglBt4>Z>;xF}}-S~B7<(%B;Y z0QR55{z-buw>8ilNM3u6I+D$S%?)(p>=eBx-HpvZj{7c*_?K=d()*7q?93us}1dq%FAFYLsW8ZTQ_XZLh`P2*6(NgS}qGcfGXVWpwsp#Rs}IuKbk*`2}&) zI^Vsk6S&Q4@oYS?dJ`NwMVBs6f57+RxdqVub#PvMu?$=^OJy5xEl0<5SLsSRy%%a0 zi}Y#1-F3m;Ieh#Y12UgW?-R)|eX>ZuF-2cc!1>~NS|XSF-6In>zBoZg+ml!6%fk7U zw0LHcz8VQk(jOJ+Yu)|^|15ufl$KQd_1eUZZzj`aC%umU6F1&D5XVWce_wAe(qCSZ zpX-QF4e{EmEVN9~6%bR5U*UT{eMHfcUo`jw*u?4r2s_$`}U{?NjvEm(u&<>B|%mq$Q3weshxk z76<``8vh{+nX`@9CB6IE&z)I%IFjR^LH{s1p|eppv=x za(g_jLU|xjWMAn-V7th$f({|LG8zzIE0g?cyW;%Dmtv%C+0@xVxPE^ zyZzi9P%JAD6ynwHptuzP`Kox7*9h7XSMonCalv;Md0i9Vb-c*!f0ubfk?&T&T}AHh z4m8Bz{JllKcdNg?D^%a5MFQ;#1z|*}H^qHLzW)L}wp?2tY7RejtSh8<;Zw)QGJYUm z|MbTxyj*McKlStlT9I5XlSWtQGN&-LTr2XyNU+`490rg?LYLMRnz-@oKqT1hpCGqP zyRXt4=_Woj$%n5ee<3zhLF>5>`?m9a#xQH+Jk_+|RM8Vi;2*XbK- zEL6sCpaGPzP>k8f4Kh|##_imt#zJMB;ir|JrMPGW`rityK1vHXMLy18%qmMQAm4WZ zP)i30KR&5vs15)C+8dM66&$k~i|ZT;KR&5vs15)C+8dJ(sAmGPijyIz6_bsqKLSFH zlOd=TljEpH0>h4zA*dCTK&emy#FCRCs1=i^sZ9bFmXjf<6_X39E(XY)00000#N437 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e549..9355b415575 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 4d80c9011bb0b2166005db26468634a7f647756b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 08:45:27 +0000 Subject: [PATCH 531/595] Translate EnvironmentSetting.md in en 100% translated source file: 'EnvironmentSetting.md' on 'en'. --- docs/en/contributing/EnvironmentSetting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/contributing/EnvironmentSetting.md b/docs/en/contributing/EnvironmentSetting.md index 94799ee9bdb..f631ae0cf62 100644 --- a/docs/en/contributing/EnvironmentSetting.md +++ b/docs/en/contributing/EnvironmentSetting.md @@ -14,7 +14,7 @@ Please note that plugins do not have to be installed - if you have Internet acce ### IntelliJ IDEA Settings -* Configure [Java SDK на JDK17](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) +* Set [Java SDK to JDK17](https://www.jetbrains.com/help/idea/sdk.html#manage_sdks) * Enable annotation processing: `File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors -> Enable annotation processing` * Configure auto import settings, details in the [article](https://www.jetbrains.com/help/idea/creating-and-optimizing-imports.html). Pay special attention to import optimization. * There is no need to start optimization of imports of the entire project, this is followed by maintainers. If, after optimizing imports, changed files appeared that did not change during the development process, you should notify the maintainers and roll back these changes. From 2f5258c1b88ce1aefd13c33e5facf7ad55419e91 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 06:49:37 +0000 Subject: [PATCH 532/595] Translate DoubleNegatives.md in en 100% translated source file: 'DoubleNegatives.md' on 'en'. --- docs/en/diagnostics/DoubleNegatives.md | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md index 3a6b3059d40..65eea5b15f4 100644 --- a/docs/en/diagnostics/DoubleNegatives.md +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -1,28 +1,5 @@ # Double negatives (DoubleNegatives) -## Description -Using double negatives complicates the understanding of the code and can lead to errors when instead of truth the developer "in his mind" calculated False, or vice versa. It is recommended to replace double negatives with conditions that directly express the author's intentions. - -## Examples - -### Wrong - -```bsl -If Not ValueTable.Find(ValueToSearch, "Column") <> Undefined Тогда - // Act -EndIf; -``` - -### Correct - -```bsl -If ValueTable.Find(ValueToSearch, "Column") = Undefined Тогда - // Act -EndIf; -``` - -## Sources - -* Источник: [Remove double negative](https://www.refactoring.com/catalog/removeDoubleNegative.html) +* Description From 2bba5fff1445275322e088fe0916a92d0b2d7f5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Aug 2024 09:04:56 +0000 Subject: [PATCH 533/595] build(deps): bump the freefair group with 5 updates Bumps the freefair group with 5 updates: | Package | From | To | | --- | --- | --- | | [io.freefair.lombok](https://github.com/freefair/gradle-plugins) | `8.7.1` | `8.10` | | [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) | `8.7.1` | `8.10` | | [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) | `8.7.1` | `8.10` | | [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) | `8.7.1` | `8.10` | | [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) | `8.7.1` | `8.10` | Updates `io.freefair.lombok` from 8.7.1 to 8.10 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.7.1...8.10) Updates `io.freefair.javadoc-links` from 8.7.1 to 8.10 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.7.1...8.10) Updates `io.freefair.javadoc-utf-8` from 8.7.1 to 8.10 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.7.1...8.10) Updates `io.freefair.aspectj.post-compile-weaving` from 8.7.1 to 8.10 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.7.1...8.10) Updates `io.freefair.maven-central.validate-poms` from 8.7.1 to 8.10 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.7.1...8.10) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6f64a88e434..4d82eaf66b3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,11 +11,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "5.1.0.4882" - id("io.freefair.lombok") version "8.7.1" - id("io.freefair.javadoc-links") version "8.7.1" - id("io.freefair.javadoc-utf-8") version "8.7.1" - id("io.freefair.aspectj.post-compile-weaving") version "8.7.1" - id("io.freefair.maven-central.validate-poms") version "8.7.1" + id("io.freefair.lombok") version "8.10" + id("io.freefair.javadoc-links") version "8.10" + id("io.freefair.javadoc-utf-8") version "8.10" + id("io.freefair.aspectj.post-compile-weaving") version "8.10" + id("io.freefair.maven-central.validate-poms") version "8.10" id("me.qoomon.git-versioning") version "6.4.3" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" From 2f6bcd10cdc1139bcb97136dfd5199931c4c2d56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:04:22 +0000 Subject: [PATCH 534/595] build(deps): bump me.qoomon.git-versioning from 6.4.3 to 6.4.4 Bumps me.qoomon.git-versioning from 6.4.3 to 6.4.4. --- updated-dependencies: - dependency-name: me.qoomon.git-versioning dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4d82eaf66b3..d9056fbc834 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("io.freefair.javadoc-utf-8") version "8.10" id("io.freefair.aspectj.post-compile-weaving") version "8.10" id("io.freefair.maven-central.validate-poms") version "8.10" - id("me.qoomon.git-versioning") version "6.4.3" + id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.6" From 8831c1ecd6bb3ef633bb7efdb12186a0381af162 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Tue, 10 Sep 2024 15:41:42 +0300 Subject: [PATCH 535/595] =?UTF-8?q?=D0=98=D0=B3=D0=BD=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D1=85=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D0=BF=D1=80=D0=B8=20=D0=B4=D0=B8=D0=B0?= =?UTF-8?q?=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B5=20UsingSynchro?= =?UTF-8?q?nousCallsDiagnostic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UsingSynchronousCallsDiagnostic.java | 29 ++++ .../UsingSynchronousCallsDiagnosticTest.java | 21 ++- ...0\266\320\265\321\200\320\276\320\274.xml" | 126 ++++++++++++++++++ .../Ext/ManagerModule.bsl" | 1 + .../Ext/ObjectModule.bsl" | 1 + 5 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 "src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274.xml" create mode 100644 "src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ManagerModule.bsl" create mode 100644 "src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ObjectModule.bsl" diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index 3c65954060d..b07f9db977b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -29,14 +29,18 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.mdclasses.Configuration; +import com.github._1c_syntax.bsl.mdo.CommonModule; +import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.UseMode; import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; import java.util.EnumSet; import java.util.HashMap; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.regex.Pattern; @@ -134,9 +138,34 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { return ctx; } + if (isServerModule(documentContext.getModuleType(), documentContext.getMdObject())) { + return ctx; + } + return super.visitFile(ctx); } + private boolean isServerModule(ModuleType moduleType, Optional mdObject) { + + switch (moduleType) { + case ApplicationModule: + case CommandModule: + case FormModule: + case ManagedApplicationModule: + return false; + case CommonModule: { + if (mdObject.isPresent()) { + var md = (CommonModule) mdObject.get(); + return !(md.isClientManagedApplication() || md.isClientOrdinaryApplication()); + } else { + return false; // Мы не знаем, что за модуль, проверяем, как обычно. + } + } + default: + return true; // Все прочие модули это строго серверные и в них синхронные вызовы разрешены (и только они возможны) + } + } + @Override public ParseTree visitSub(BSLParser.SubContext ctx) { var methodSymbol = documentContext.getSymbolTree().getMethodSymbol(ctx); diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java index 6afaa9194aa..9ba4d1129ac 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java @@ -29,6 +29,8 @@ import com.github._1c_syntax.utils.Absolute; import org.eclipse.lsp4j.Diagnostic; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.springframework.test.annotation.DirtiesContext; import java.nio.file.Paths; @@ -45,7 +47,9 @@ class UsingSynchronousCallsDiagnosticTest extends AbstractDiagnosticTest diagnostics = getDiagnostics(context); + assertThat(diagnostics).isEmpty(); + } + private DocumentContext getDocumentContextWithUseFlag(UseMode useMode) { + return getDocumentContextWithUseFlag(useMode, PATH_TO_MODULE_FILE); + } + + private DocumentContext getDocumentContextWithUseFlag(UseMode useMode, String moduleFile) { var path = Absolute.path(PATH_TO_METADATA); - var testFile = Paths.get(PATH_TO_MODULE_FILE).toAbsolutePath(); + var testFile = Paths.get(moduleFile).toAbsolutePath(); initServerContext(path); var serverContext = spy(context); diff --git "a/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274.xml" "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274.xml" new file mode 100644 index 00000000000..d0a7c1002cf --- /dev/null +++ "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274.xml" @@ -0,0 +1,126 @@ + + + + + + cd5d9910-c790-46e8-8c99-a0f38f3f9e39 + b69e7b91-a362-429c-b5b4-39e1fd765840 + + + c3d8d716-ce70-459f-9a75-2b8c77a0194b + e4215019-0558-438e-b225-b0f926f42b8a + + + 604fe1d0-b22f-48a6-8335-c86562ba654c + fa9ac073-8e89-47de-8aab-9a3badb9a894 + + + e2756a94-423f-4fff-ab71-622cd2d99f62 + 23864a50-78d1-48ab-88a6-e3f4d212b34f + + + 227a9ad8-b4aa-4d7d-8cc0-bed15e263277 + d2fae109-dc57-483e-a56a-f2baf0515b86 + + + + СправочникСМенеджером + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.СправочникСМенеджером.StandardAttribute.Description + Catalog.СправочникСМенеджером.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + + Реквизит1 + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + \ No newline at end of file diff --git "a/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ManagerModule.bsl" "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ManagerModule.bsl" new file mode 100644 index 00000000000..5f282702bb0 --- /dev/null +++ "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ManagerModule.bsl" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ObjectModule.bsl" "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ObjectModule.bsl" new file mode 100644 index 00000000000..5f282702bb0 --- /dev/null +++ "b/src/test/resources/metadata/designer/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\276\320\274/Ext/ObjectModule.bsl" @@ -0,0 +1 @@ + \ No newline at end of file From fbe740048767dbb03ed13279f9d78cfc4c98df87 Mon Sep 17 00:00:00 2001 From: Andrey Ovsyankin Date: Tue, 10 Sep 2024 16:24:35 +0300 Subject: [PATCH 536/595] =?UTF-8?q?=D0=A0=D1=83=D0=B3=D0=B0=D0=BD=D1=8C=20?= =?UTF-8?q?=D0=A1=D0=BE=D0=BD=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UsingSynchronousCallsDiagnostic.java | 37 ++++++++----------- .../UsingSynchronousCallsDiagnosticTest.java | 7 ++-- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index b07f9db977b..b59d988649a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -21,6 +21,7 @@ */ package com.github._1c_syntax.bsl.languageserver.diagnostics; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.CompilerDirectiveKind; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCompatibilityMode; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; @@ -30,17 +31,14 @@ import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.bsl.mdclasses.Configuration; import com.github._1c_syntax.bsl.mdo.CommonModule; -import com.github._1c_syntax.bsl.mdo.MD; import com.github._1c_syntax.bsl.mdo.support.UseMode; import com.github._1c_syntax.bsl.parser.BSLParser; -import com.github._1c_syntax.bsl.types.ModuleType; import com.github._1c_syntax.utils.CaseInsensitivePattern; import org.antlr.v4.runtime.tree.ParseTree; import java.util.EnumSet; import java.util.HashMap; import java.util.Locale; -import java.util.Optional; import java.util.Set; import java.util.regex.Pattern; @@ -138,32 +136,27 @@ public ParseTree visitFile(BSLParser.FileContext ctx) { return ctx; } - if (isServerModule(documentContext.getModuleType(), documentContext.getMdObject())) { + if (isServerModule(documentContext)) { return ctx; } return super.visitFile(ctx); } - private boolean isServerModule(ModuleType moduleType, Optional mdObject) { + private static boolean isServerModule(DocumentContext documentContext) { + return switch (documentContext.getModuleType()) { + case ApplicationModule, CommandModule, FormModule, ManagedApplicationModule -> false; + case CommonModule -> isServerCommonModule(documentContext); + default -> true; // Все прочие модули это строго серверные и в них синхронные вызовы разрешены + }; + } - switch (moduleType) { - case ApplicationModule: - case CommandModule: - case FormModule: - case ManagedApplicationModule: - return false; - case CommonModule: { - if (mdObject.isPresent()) { - var md = (CommonModule) mdObject.get(); - return !(md.isClientManagedApplication() || md.isClientOrdinaryApplication()); - } else { - return false; // Мы не знаем, что за модуль, проверяем, как обычно. - } - } - default: - return true; // Все прочие модули это строго серверные и в них синхронные вызовы разрешены (и только они возможны) - } + private static boolean isServerCommonModule(DocumentContext documentContext) { + var mdObject = documentContext.getMdObject(); + + return mdObject.map(mdo -> (CommonModule) mdo) + .filter(commonModule -> !(commonModule.isClientManagedApplication() || commonModule.isClientOrdinaryApplication())) + .isPresent(); } @Override diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java index 9ba4d1129ac..7281cc1c758 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java @@ -47,7 +47,8 @@ class UsingSynchronousCallsDiagnosticTest extends AbstractDiagnosticTest Date: Tue, 10 Sep 2024 17:04:41 +0300 Subject: [PATCH 537/595] =?UTF-8?q?=D0=95=D1=89=D0=B5=20=D0=A1=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagnostics/UsingSynchronousCallsDiagnostic.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index b59d988649a..3cb4320e566 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -154,8 +154,9 @@ private static boolean isServerModule(DocumentContext documentContext) { private static boolean isServerCommonModule(DocumentContext documentContext) { var mdObject = documentContext.getMdObject(); - return mdObject.map(mdo -> (CommonModule) mdo) - .filter(commonModule -> !(commonModule.isClientManagedApplication() || commonModule.isClientOrdinaryApplication())) + return mdObject.map(CommonModule.class::cast) + .filter(commonModule -> !(commonModule.isClientManagedApplication() || + commonModule.isClientOrdinaryApplication())) .isPresent(); } From 5537b06cf42efd2e4ea948d2fabfee8b7f07f9a7 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 15 Sep 2024 01:50:49 +0000 Subject: [PATCH 538/595] Update Gradle Wrapper from 8.10 to 8.10.1. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b415575..0aaefbcaf0f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 8cc24fae081c0496baeee8946e4ee2d7311cc031 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 09:23:13 +0000 Subject: [PATCH 539/595] build(deps): bump gradle-update/update-gradle-wrapper-action from 1 to 2 Bumps [gradle-update/update-gradle-wrapper-action](https://github.com/gradle-update/update-gradle-wrapper-action) from 1 to 2. - [Release notes](https://github.com/gradle-update/update-gradle-wrapper-action/releases) - [Changelog](https://github.com/gradle-update/update-gradle-wrapper-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/gradle-update/update-gradle-wrapper-action/compare/v1...v2) --- updated-dependencies: - dependency-name: gradle-update/update-gradle-wrapper-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/update-gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-gradle.yml b/.github/workflows/update-gradle.yml index 82ef2caa042..661243c279a 100644 --- a/.github/workflows/update-gradle.yml +++ b/.github/workflows/update-gradle.yml @@ -20,7 +20,7 @@ jobs: cache: gradle - name: Update Gradle Wrapper - uses: gradle-update/update-gradle-wrapper-action@v1 + uses: gradle-update/update-gradle-wrapper-action@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} set-distribution-checksum: false From 45b0d86b10321d36f8a78f34fbde0a6d6d94477a Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 29 Sep 2024 01:53:31 +0000 Subject: [PATCH 540/595] Update Gradle Wrapper from 8.10.1 to 8.10.2. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0aaefbcaf0f..df97d72b8b9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 6e6d8fd666486040fdc5f531f70bba7fea5c3725 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 09:31:49 +0000 Subject: [PATCH 541/595] build(deps): bump io.sentry:sentry-bom from 7.14.0 to 7.15.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.14.0 to 7.15.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.14.0...7.15.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d9056fbc834..c01fc7adf64 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.14.0") + mavenBom("io.sentry:sentry-bom:7.15.0") } } From 41d08e797d82a612a22a2b459b08c1561b2115d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:24:13 +0000 Subject: [PATCH 542/595] build(deps): bump the freefair group with 5 updates Bumps the freefair group with 5 updates: | Package | From | To | | --- | --- | --- | | [io.freefair.lombok](https://github.com/freefair/gradle-plugins) | `8.10` | `8.10.2` | | [io.freefair.javadoc-links](https://github.com/freefair/gradle-plugins) | `8.10` | `8.10.2` | | [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins) | `8.10` | `8.10.2` | | [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) | `8.10` | `8.10.2` | | [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins) | `8.10` | `8.10.2` | Updates `io.freefair.lombok` from 8.10 to 8.10.2 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10...8.10.2) Updates `io.freefair.javadoc-links` from 8.10 to 8.10.2 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10...8.10.2) Updates `io.freefair.javadoc-utf-8` from 8.10 to 8.10.2 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10...8.10.2) Updates `io.freefair.aspectj.post-compile-weaving` from 8.10 to 8.10.2 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10...8.10.2) Updates `io.freefair.maven-central.validate-poms` from 8.10 to 8.10.2 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10...8.10.2) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-patch dependency-group: freefair - dependency-name: io.freefair.javadoc-links dependency-type: direct:production update-type: version-update:semver-patch dependency-group: freefair - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: freefair - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-patch dependency-group: freefair - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-patch dependency-group: freefair ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c01fc7adf64..b1525bab5a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,11 +11,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "5.1.0.4882" - id("io.freefair.lombok") version "8.10" - id("io.freefair.javadoc-links") version "8.10" - id("io.freefair.javadoc-utf-8") version "8.10" - id("io.freefair.aspectj.post-compile-weaving") version "8.10" - id("io.freefair.maven-central.validate-poms") version "8.10" + id("io.freefair.lombok") version "8.10.2" + id("io.freefair.javadoc-links") version "8.10.2" + id("io.freefair.javadoc-utf-8") version "8.10.2" + id("io.freefair.aspectj.post-compile-weaving") version "8.10.2" + id("io.freefair.maven-central.validate-poms") version "8.10.2" id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.2.5" From 5a38d1a2d83870ea8956bb6ff432bc2dba7714ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 09:19:30 +0000 Subject: [PATCH 543/595] build(deps): bump io.sentry:sentry-bom from 7.15.0 to 7.16.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.15.0 to 7.16.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.15.0...7.16.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b1525bab5a0..2f08e91940e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.4" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.15.0") + mavenBom("io.sentry:sentry-bom:7.16.0") } } From d06ca454d5fe3d1ea75e1dcdb9ff043fbe24885e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 09:22:15 +0000 Subject: [PATCH 544/595] build(deps): bump JetBrains/qodana-action from 2024.1.9 to 2024.2.5 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.1.9 to 2024.2.5. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.1.9...v2024.2.5) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 46470a82b73..42c7d34fd90 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1.9 + uses: JetBrains/qodana-action@v2024.2.5 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 32064ef4eb3ab824f2987f2754499dc9c9c247c0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 27 Oct 2024 16:25:05 +0100 Subject: [PATCH 545/595] Update qodana.yaml --- qodana.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qodana.yaml b/qodana.yaml index 3568f48c307..ff99e8effc2 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -1,6 +1,6 @@ version: "1.0" projectJDK: 17 -linter: jetbrains/qodana-jvm:2024.1 +linter: jetbrains/qodana-jvm:2024.2 profile: name: qodana.starter include: From e3844a5d0832d89ed91a6d55eb4e2bad05d20b70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 09:39:10 +0000 Subject: [PATCH 546/595] build(deps): bump JetBrains/qodana-action from 2024.2.5 to 2024.2.6 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.2.5 to 2024.2.6. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.2.5...v2024.2.6) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index 42c7d34fd90..ebe74690b62 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.2.5 + uses: JetBrains/qodana-action@v2024.2.6 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 9faef4b29b993ff33adf8af415db3414b8824a20 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 3 Nov 2024 00:19:26 +0100 Subject: [PATCH 547/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=B0=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=B0=20=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D1=87=D0=B8=D0=B8=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/computer/MethodSymbolComputer.java | 8 ++++++++ .../symbol/description/MethodDescriptionTest.java | 12 +++++++++--- .../resources/context/symbol/MethodDescription.bsl | 5 +++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index 0fd1d55c87e..ea4b58c43f4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -89,6 +89,10 @@ public ParseTree visitFunction(BSLParser.FunctionContext ctx) { return ctx; } + if (!declaration.annotation().isEmpty()) { + startNode = declaration.annotation().get(0).AMPERSAND(); + } + MethodSymbol methodSymbol = createMethodSymbol( startNode, stopNode, @@ -119,6 +123,10 @@ public ParseTree visitProcedure(BSLParser.ProcedureContext ctx) { return ctx; } + if (!declaration.annotation().isEmpty()) { + startNode = declaration.annotation().get(0).AMPERSAND(); + } + MethodSymbol methodSymbol = createMethodSymbol( startNode, stopNode, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 339f8f752af..6865eca7aae 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -44,18 +44,24 @@ void prepare() { var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/context/symbol/MethodDescription.bsl"); var methods = documentContext.getSymbolTree().getMethods(); - assertThat(methods.size()).isEqualTo(14); + assertThat(methods).hasSize(15); methodsWithDescription = methods.stream() .map(MethodSymbol::getDescription) .filter(Optional::isPresent) .map(Optional::get) - .collect(Collectors.toList()); + .toList(); - assertThat(methodsWithDescription.size()).isEqualTo(13); + assertThat(methodsWithDescription.size()).isEqualTo(14); } } + @Test + void testMethodWithAnnotation() { + var method = methodsWithDescription.get(13); + assertThat(method.getDescription()).isEqualTo("// Описание процедуры"); + } + @Test void testMethod13() { var method = methodsWithDescription.get(12); diff --git a/src/test/resources/context/symbol/MethodDescription.bsl b/src/test/resources/context/symbol/MethodDescription.bsl index 1abed2994d4..0fa49e789be 100644 --- a/src/test/resources/context/symbol/MethodDescription.bsl +++ b/src/test/resources/context/symbol/MethodDescription.bsl @@ -143,3 +143,8 @@ // Функция BUG_1495(Ссылки, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт КонецФункции + +// Описание процедуры +&Аннотация("Параметр") +Процедура ПроцедураСАннотацией() +КонецПроцедуры From 5f9406c7e9506bd09b562f26afa2de3e432728d0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 3 Nov 2024 10:05:50 +0100 Subject: [PATCH 548/595] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/resources/context/symbol/MethodDescription.bsl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/resources/context/symbol/MethodDescription.bsl b/src/test/resources/context/symbol/MethodDescription.bsl index 0fa49e789be..c66e7ccdd08 100644 --- a/src/test/resources/context/symbol/MethodDescription.bsl +++ b/src/test/resources/context/symbol/MethodDescription.bsl @@ -148,3 +148,8 @@ &Аннотация("Параметр") Процедура ПроцедураСАннотацией() КонецПроцедуры + +&Аннотация("Параметр") +// Описание процедуры +Процедура ПроцедураСАннотациейПередОписанием() +КонецПроцедуры From 50a8179abdc08b4ef413a6ae2dd437255a851d5e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 3 Nov 2024 10:07:01 +0100 Subject: [PATCH 549/595] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../symbol/description/MethodDescriptionTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 6865eca7aae..5e2d3162c00 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -44,7 +44,7 @@ void prepare() { var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/context/symbol/MethodDescription.bsl"); var methods = documentContext.getSymbolTree().getMethods(); - assertThat(methods).hasSize(15); + assertThat(methods).hasSize(16); methodsWithDescription = methods.stream() .map(MethodSymbol::getDescription) @@ -52,10 +52,16 @@ void prepare() { .map(Optional::get) .toList(); - assertThat(methodsWithDescription.size()).isEqualTo(14); + assertThat(methodsWithDescription.size()).isEqualTo(15); } } + @Test + void testMethodWithAnnotationBeforeDescription() { + var method = methodsWithDescription.get(14); + assertThat(method.getDescription()).isEqualTo("// Описание процедуры"); + } + @Test void testMethodWithAnnotation() { var method = methodsWithDescription.get(13); @@ -437,4 +443,4 @@ void testMethod1() { assertThat(method.getReturnedValue()).isEmpty(); assertThat(method.getLink()).isEmpty(); } -} \ No newline at end of file +} From 2911dacc5a3d1d5532195e621a6d9504a7a73c06 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 3 Nov 2024 23:11:51 +0100 Subject: [PATCH 550/595] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=B6=D0=B4=D1=83=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B5=D0=B9=20=D0=B8=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../computer/MethodSymbolComputer.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index ea4b58c43f4..2c30f600d5f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -96,12 +96,13 @@ public ParseTree visitFunction(BSLParser.FunctionContext ctx) { MethodSymbol methodSymbol = createMethodSymbol( startNode, stopNode, + declaration.FUNCTION_KEYWORD().getSymbol(), declaration.subName().getStart(), declaration.paramList(), true, declaration.EXPORT_KEYWORD() != null, getCompilerDirective(declaration.compilerDirective()), - getAnnotations(declaration.annotation())); + createAnnotations(declaration.annotation())); methods.add(methodSymbol); @@ -130,12 +131,13 @@ public ParseTree visitProcedure(BSLParser.ProcedureContext ctx) { MethodSymbol methodSymbol = createMethodSymbol( startNode, stopNode, + declaration.PROCEDURE_KEYWORD().getSymbol(), declaration.subName().getStart(), declaration.paramList(), false, declaration.EXPORT_KEYWORD() != null, getCompilerDirective(declaration.compilerDirective()), - getAnnotations(declaration.annotation()) + createAnnotations(declaration.annotation()) ); methods.add(methodSymbol); @@ -190,6 +192,7 @@ private static Optional getCompilerDirective( private MethodSymbol createMethodSymbol( TerminalNode startNode, TerminalNode stopNode, + Token startOfMethod, Token subName, BSLParser.ParamListContext paramList, boolean function, @@ -197,7 +200,8 @@ private MethodSymbol createMethodSymbol( Optional compilerDirective, List annotations ) { - Optional description = createDescription(startNode.getSymbol()); + Optional description = createDescription(startOfMethod) + .or(() -> createDescription(startNode.getSymbol())); boolean deprecated = description .map(MethodDescription::isDeprecated) .orElse(false); @@ -244,7 +248,7 @@ private static List createParameters( .range(getParameterRange(param)) .description(getParameterDescription(parameterName, description)) .build(); - }).collect(Collectors.toList()); + }).toList(); } private static ParameterDefinition.DefaultValue getDefaultValue(BSLParser.ParamContext param) { @@ -318,10 +322,10 @@ private static Optional getParameterDescription( } - private static List getAnnotations(List annotationContext) { - return annotationContext.stream() + private static List createAnnotations(List annotationContexts) { + return annotationContexts.stream() .map(MethodSymbolComputer::createAnnotation) - .collect(Collectors.toList()); + .toList(); } private static Annotation createAnnotation(BSLParser.AnnotationContext annotation) { @@ -342,7 +346,7 @@ private static List getAnnotationParameter( return annotationParamsContext.annotationParam().stream() .map(MethodSymbolComputer::getAnnotationParam) - .collect(Collectors.toList()); + .toList(); } private static AnnotationParameterDefinition getAnnotationParam(BSLParser.AnnotationParamContext o) { From 63afb2428aeb09e4e3e84038d8f7f4d2da384cab Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 3 Nov 2024 23:19:18 +0100 Subject: [PATCH 551/595] Fix QF --- .../context/symbol/description/MethodDescriptionTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 5e2d3162c00..12c15e3d7e4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; From a8ecc55bee3c53346db9085bec33c53bc3613806 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 5 Nov 2024 18:01:14 +0100 Subject: [PATCH 552/595] Fix tests, dependency updates --- build.gradle.kts | 22 +++++++++---------- docs/diagnostics/ReservedParameterNames.md | 2 +- docs/en/diagnostics/DoubleNegatives.md | 2 +- .../configuration/parameters-schema.json | 2 +- .../languageserver/configuration/schema.json | 2 +- ...ReservedParameterNamesDiagnosticTest.java} | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) rename src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/{ReservedParameterNamesTest.java => ReservedParameterNamesDiagnosticTest.java} (94%) diff --git a/build.gradle.kts b/build.gradle.kts index 2f08e91940e..c884b194a6d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,13 +12,13 @@ plugins { id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "5.1.0.4882" id("io.freefair.lombok") version "8.10.2" - id("io.freefair.javadoc-links") version "8.10.2" + //id("io.freefair.javadoc-links") version "8.10.2" id("io.freefair.javadoc-utf-8") version "8.10.2" id("io.freefair.aspectj.post-compile-weaving") version "8.10.2" id("io.freefair.maven-central.validate-poms") version "8.10.2" id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.2.5" + id("org.springframework.boot") version "3.3.5" id("io.spring.dependency-management") version "1.1.6" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.1" id("ru.vyarus.pom") version "3.0.0" @@ -59,7 +59,7 @@ gitProperties { val isSnapshot = gitVersioning.gitVersionDetails.refType != GitRefType.TAG -val languageToolVersion = "6.4" +val languageToolVersion = "6.5" dependencyManagement { imports { @@ -107,8 +107,8 @@ dependencies { implementation("org.aspectj", "aspectjrt", "1.9.22.1") // commons utils - implementation("commons-io", "commons-io", "2.16.1") - implementation("org.apache.commons", "commons-lang3", "3.14.0") + implementation("commons-io", "commons-io", "2.17.0") + implementation("org.apache.commons", "commons-lang3", "3.17.0") implementation("commons-beanutils", "commons-beanutils", "1.9.4"){ exclude("commons-logging", "commons-logging") } @@ -135,7 +135,7 @@ dependencies { // CONSTRAINTS implementation("com.google.guava:guava") { version { - strictly("33.2.1-jre") + strictly("33.3.1-jre") } } @@ -151,7 +151,7 @@ dependencies { // test utils testImplementation("org.jmockit", "jmockit", "1.49") - testImplementation("org.awaitility", "awaitility", "4.2.1") + testImplementation("org.awaitility", "awaitility", "4.2.2") } lombok { @@ -218,7 +218,7 @@ tasks.check { tasks.jacocoTestReport { reports { xml.required.set(true) - xml.outputLocation.set(File("$buildDir/reports/jacoco/test/jacoco.xml")) + xml.outputLocation.set(File("${layout.buildDirectory}/reports/jacoco/test/jacoco.xml")) } } @@ -238,12 +238,12 @@ tasks.generateDiagnosticDocs { doLast { val resourcePath = tasks["processResources"].outputs.files.singleFile copy { - from("$buildDir/docs/diagnostics") + from("${layout.buildDirectory}/docs/diagnostics") into("$resourcePath/com/github/_1c_syntax/bsl/languageserver/diagnostics/ru") } copy { - from("$buildDir/docs/en/diagnostics") + from("${layout.buildDirectory}/docs/en/diagnostics") into("$resourcePath/com/github/_1c_syntax/bsl/languageserver/diagnostics/en") } } @@ -285,7 +285,7 @@ sonarqube { property("sonar.projectKey", "1c-syntax_bsl-language-server") property("sonar.projectName", "BSL Language Server") property("sonar.exclusions", "**/gen/**/*.*") - property("sonar.coverage.jacoco.xmlReportPaths", "$buildDir/reports/jacoco/test/jacoco.xml") + property("sonar.coverage.jacoco.xmlReportPaths", "${layout.buildDirectory}/reports/jacoco/test/jacoco.xml") } } diff --git a/docs/diagnostics/ReservedParameterNames.md b/docs/diagnostics/ReservedParameterNames.md index 7a5ce85f5fc..51960a86f0a 100644 --- a/docs/diagnostics/ReservedParameterNames.md +++ b/docs/diagnostics/ReservedParameterNames.md @@ -1,4 +1,4 @@ -# Зарезервированные имена параметра (ReservedParameterNames) +# Зарезервированные имена параметров (ReservedParameterNames) ## Описание диагностики diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md index 65eea5b15f4..e814dda74d1 100644 --- a/docs/en/diagnostics/DoubleNegatives.md +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -2,4 +2,4 @@ -* Description +## Description diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index a6ca9ad3712..b6fd3f3fae7 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -1672,7 +1672,7 @@ }, "ReservedParameterNames": { "description": "Reserved parameter names", - "default": false, + "default": true, "type": [ "boolean", "object" diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index e515c9e742c..f117154cae3 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -954,4 +954,4 @@ "default": "ask" } } -} +} \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java similarity index 94% rename from src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java rename to src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java index 415cd8c32de..5a90717ca32 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java @@ -54,7 +54,7 @@ void testPositive() { assertThat(diagnostics).hasSize(1); assertThat(diagnostics, true) - .hasMessageOnRange("Переименуйте параметр \"ВидГруппыФормы\" чтобы он не совпадал с зарезервированным словом.", + .hasMessageOnRange("Переименуйте параметр \"ВидГруппыФормы\" так, чтобы он не совпадал с зарезервированным словом.", 2, 16, 30); } From f2f9a25eeb4b475f1d5e88d9a4561c53a2733a64 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 5 Nov 2024 18:15:41 +0100 Subject: [PATCH 553/595] Fake diagnostic description --- docs/en/diagnostics/DoubleNegatives.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md index e814dda74d1..8cf35e0683b 100644 --- a/docs/en/diagnostics/DoubleNegatives.md +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -3,3 +3,5 @@ ## Description + +Описание диагностики From eaa6a4e71121bd1edddb6138e6080b80b8f04a10 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 10 Nov 2024 00:02:38 +0100 Subject: [PATCH 554/595] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/diagnostics/DiagnosticInfosTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java index 403bec0c3ef..6640b79aee6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java @@ -75,9 +75,9 @@ void testAllDiagnosticsHaveDiagnosticMessage() { @Test void testAllDiagnosticsHaveDescriptionResource() { - assertThatCode(() -> diagnosticInfos.values().forEach(diagnosticInfo - -> assertThat(diagnosticInfo.getDescription()).isNotEmpty())) - .doesNotThrowAnyException(); + assertThat(diagnosticInfos).allSatisfy((key, diagnosticInfo) -> { + assertThat(diagnosticInfo.getDescription()).isNotEmpty(); + }); } @Test From 47ae06abba8284a79982a9dd66ce256c3d32209e Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 11 Nov 2024 00:03:51 +0100 Subject: [PATCH 555/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=80=D0=B0=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=20buildDirectory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c884b194a6d..02f2625bbbf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -218,7 +218,7 @@ tasks.check { tasks.jacocoTestReport { reports { xml.required.set(true) - xml.outputLocation.set(File("${layout.buildDirectory}/reports/jacoco/test/jacoco.xml")) + xml.outputLocation.set(File("${layout.buildDirectory.get()}/reports/jacoco/test/jacoco.xml")) } } @@ -238,12 +238,12 @@ tasks.generateDiagnosticDocs { doLast { val resourcePath = tasks["processResources"].outputs.files.singleFile copy { - from("${layout.buildDirectory}/docs/diagnostics") + from("${layout.buildDirectory.get()}/docs/diagnostics") into("$resourcePath/com/github/_1c_syntax/bsl/languageserver/diagnostics/ru") } copy { - from("${layout.buildDirectory}/docs/en/diagnostics") + from("${layout.buildDirectory.get()}/docs/en/diagnostics") into("$resourcePath/com/github/_1c_syntax/bsl/languageserver/diagnostics/en") } } @@ -285,7 +285,7 @@ sonarqube { property("sonar.projectKey", "1c-syntax_bsl-language-server") property("sonar.projectName", "BSL Language Server") property("sonar.exclusions", "**/gen/**/*.*") - property("sonar.coverage.jacoco.xmlReportPaths", "${layout.buildDirectory}/reports/jacoco/test/jacoco.xml") + property("sonar.coverage.jacoco.xmlReportPaths", "${layout.buildDirectory.get()}/reports/jacoco/test/jacoco.xml") } } From fe8188a057121126590ed2d2c8b3febfa1fd3e77 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 11 Nov 2024 00:16:24 +0100 Subject: [PATCH 556/595] =?UTF-8?q?=D0=A1=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20jdk23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/check-package.yml | 2 +- .github/workflows/gradle.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check-package.yml b/.github/workflows/check-package.yml index 0aafe4335dd..ffe39ce37bd 100644 --- a/.github/workflows/check-package.yml +++ b/.github/workflows/check-package.yml @@ -36,7 +36,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - java-version: 21 + java-version: 23 distribution: 'temurin' cache: gradle diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 5d3c2e361f2..c3900a79e7f 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - java_version: ['17', '21'] + java_version: ['17', '21', '23'] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 783c4057b71..0002dc29356 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,7 +33,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - java-version: 21 + java-version: 23 distribution: 'temurin' cache: gradle From fe53693df93b4618a493ecbb8270dcddc487ee6b Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 12 Nov 2024 23:09:45 +0100 Subject: [PATCH 557/595] =?UTF-8?q?=D0=92=D1=81=D0=BF=D0=BB=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=8E=D1=89=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=BA=D0=B0=20=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=20=D0=BA=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B2=20OneScript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/symbol/AnnotationSymbol.java | 86 +++++ .../AnnotationSymbolMarkupContentBuilder.java | 106 ++++++ .../hover/DescriptionFormatter.java | 356 ++++++++++++++++++ .../MethodSymbolMarkupContentBuilder.java | 262 +------------ .../VariableSymbolMarkupContentBuilder.java | 57 +-- ...rceDefinedMethodCallInlayHintSupplier.java | 11 +- .../references/AnnotationReferenceFinder.java | 79 ++++ ...ies => DescriptionFormatter_en.properties} | 4 +- ...ies => DescriptionFormatter_ru.properties} | 4 +- ...leSymbolMarkupContentBuilder_en.properties | 2 - ...leSymbolMarkupContentBuilder_ru.properties | 2 - .../AnnotationReferenceFinderTest.java | 60 +++ .../references/AnnotationReferenceFinder.os | 6 + 13 files changed, 727 insertions(+), 308 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java rename src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/{MethodSymbolMarkupContentBuilder_en.properties => DescriptionFormatter_en.properties} (75%) rename src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/{MethodSymbolMarkupContentBuilder_ru.properties => DescriptionFormatter_ru.properties} (77%) delete mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_en.properties delete mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java create mode 100644 src/test/resources/references/AnnotationReferenceFinder.os diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java new file mode 100644 index 00000000000..5a7cd0851c3 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java @@ -0,0 +1,86 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.context.symbol; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.variable.VariableDescription; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.Value; +import lombok.experimental.NonFinal; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Value +@Builder +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@ToString(exclude = {"children", "parent"}) +public class AnnotationSymbol implements SourceDefinedSymbol, Describable { + + String name; + + SymbolKind symbolKind; + + @EqualsAndHashCode.Include + DocumentContext owner; + + Range range; + + @EqualsAndHashCode.Include + Range selectionRange; + + @Setter + @NonFinal + @Builder.Default + Optional parent = Optional.empty(); + + @Builder.Default + List children = new ArrayList<>(); + + Optional description; + + @Override + public void accept(SymbolTreeVisitor visitor) { + // no-op + } + + public static AnnotationSymbol from(String name, MethodSymbol methodSymbol) { + return AnnotationSymbol.builder() + .name(name) + .symbolKind(SymbolKind.TypeParameter) + .owner(methodSymbol.getOwner()) + .range(methodSymbol.getRange()) + .selectionRange(methodSymbol.getSelectionRange()) + .description(methodSymbol.getDescription()) + .parent(Optional.of(methodSymbol)) + .build(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java new file mode 100644 index 00000000000..39abf339813 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java @@ -0,0 +1,106 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.hover; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.TypeDescription; +import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; +import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.MarkupContent; +import org.eclipse.lsp4j.MarkupKind; +import org.eclipse.lsp4j.SymbolKind; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringJoiner; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Построитель контента для всплывающего окна для {@link AnnotationSymbol}. + */ +@Component +@RequiredArgsConstructor +public class AnnotationSymbolMarkupContentBuilder implements MarkupContentBuilder { + + private final DescriptionFormatter descriptionFormatter; + + @Override + public MarkupContent getContent(AnnotationSymbol symbol) { + var maybeMethodSymbol = symbol.getParent(); + if (maybeMethodSymbol.filter(MethodSymbol.class::isInstance).isEmpty()) { + return new MarkupContent(MarkupKind.MARKDOWN, ""); + } + + var markupBuilder = new StringJoiner("\n"); + var methodSymbol = (MethodSymbol) maybeMethodSymbol.get(); + + // сигнатура + // местоположение метода + // описание метода + // параметры + // примеры + // варианты вызова + + // сигнатура + String signature = descriptionFormatter.getSignature(symbol, methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, signature); + + // местоположение метода + String methodLocation = descriptionFormatter.getLocation(methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, methodLocation); + + // описание метода + String purposeSection = descriptionFormatter.getPurposeSection(methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, purposeSection); + + // параметры + String parametersSection = descriptionFormatter.getParametersSection(methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, parametersSection); + + // примеры + String examplesSection = descriptionFormatter.getExamplesSection(methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, examplesSection); + + // варианты вызова + String callOptionsSection = descriptionFormatter.getCallOptionsSection(methodSymbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, callOptionsSection); + + String content = markupBuilder.toString(); + + return new MarkupContent(MarkupKind.MARKDOWN, content); + } + + @Override + public SymbolKind getSymbolKind() { + return SymbolKind.TypeParameter; + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java new file mode 100644 index 00000000000..d483c6f7a04 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java @@ -0,0 +1,356 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.hover; + +import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.context.symbol.VariableSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; +import com.github._1c_syntax.bsl.languageserver.context.symbol.description.TypeDescription; +import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; +import com.github._1c_syntax.bsl.languageserver.utils.Resources; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.SymbolKind; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.StringJoiner; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Component +@RequiredArgsConstructor +public class DescriptionFormatter { + + private static final String PROCEDURE_KEY = "procedure"; + private static final String FUNCTION_KEY = "function"; + private static final String ANNOTATION_KEY = "annotation"; + private static final String EXPORT_KEY = "export"; + private static final String VAL_KEY = "val"; + private static final String VARIABLE_KEY = "var"; + private static final String PARAMETERS_KEY = "parameters"; + private static final String RETURNED_VALUE_KEY = "returnedValue"; + private static final String EXAMPLES_KEY = "examples"; + private static final String CALL_OPTIONS_KEY = "callOptions"; + private static final String PARAMETER_TEMPLATE = "* **%s**: %s"; + + private final Resources resources; + + public void addSectionIfNotEmpty(StringJoiner markupBuilder, String newContent) { + if (!newContent.isEmpty()) { + markupBuilder.add(newContent); + markupBuilder.add(""); + markupBuilder.add("---"); + } + } + + public String getPurposeSection(MethodSymbol methodSymbol) { + return methodSymbol.getDescription() + .map(MethodDescription::getPurposeDescription) + .orElse(""); + } + + public String getParametersSection(MethodSymbol methodSymbol) { + var result = new StringJoiner(" \n"); // два пробела + methodSymbol.getParameters().forEach(parameterDefinition -> + result.add(parameterToString(parameterDefinition)) + ); + + var parameters = result.toString(); + + if (!parameters.isBlank()) { + var parametersSection = new StringJoiner("\n"); + String header = "**" + getResourceString(PARAMETERS_KEY) + ":**"; + parametersSection.add(header); + parametersSection.add(""); + parametersSection.add(parameters); + return parametersSection.toString(); + } + + return ""; + } + + public String getReturnedValueSection(MethodSymbol methodSymbol) { + var result = new StringJoiner(" \n"); // два пробела + methodSymbol.getDescription().ifPresent((MethodDescription methodDescription) -> { + Map typesMap = typesToMap(methodDescription.getReturnedValue(), 0); + result.add(typesMapToString(typesMap, 1)); + }); + + var returnedValue = result.toString(); + + if (!returnedValue.isEmpty()) { + returnedValue = "**" + getResourceString(RETURNED_VALUE_KEY) + ":**\n\n" + returnedValue; + } + + return returnedValue; + } + + public String getExamplesSection(MethodSymbol methodSymbol) { + var examples = methodSymbol.getDescription() + .map(MethodDescription::getExamples) + .orElseGet(Collections::emptyList); + return getSectionWithCodeFences(examples, EXAMPLES_KEY); + } + + public String getCallOptionsSection(MethodSymbol methodSymbol) { + var callOptions = methodSymbol.getDescription() + .map(MethodDescription::getCallOptions) + .orElseGet(Collections::emptyList); + return getSectionWithCodeFences(callOptions, CALL_OPTIONS_KEY); + } + + public String getSectionWithCodeFences(List codeBlocks, String resourceKey) { + String codeFences = codeBlocks + .stream() + .map(codeBlock -> "```bsl\n" + codeBlock + "\n```") + .collect(Collectors.joining("\n")); + + if (!codeFences.isEmpty()) { + codeFences = "**" + getResourceString(resourceKey) + ":**\n\n" + codeFences; + } + + return codeFences; + } + + public String getLocation(MethodSymbol symbol) { + var documentContext = symbol.getOwner(); + var startPosition = symbol.getSelectionRange().getStart(); + String mdoRef = MdoRefBuilder.getMdoRef(documentContext); + + return String.format( + "[%s](%s#%d)", + mdoRef, + documentContext.getUri(), + startPosition.getLine() + 1 + ); + } + + public String getLocation(VariableSymbol symbol) { + var documentContext = symbol.getOwner(); + var startPosition = symbol.getSelectionRange().getStart(); + String mdoRef = MdoRefBuilder.getMdoRef(documentContext); + + String parentPostfix = symbol.getRootParent(SymbolKind.Method) + .map(sourceDefinedSymbol -> "." + sourceDefinedSymbol.getName()) + .orElse(""); + mdoRef += parentPostfix; + + return String.format( + "[%s](%s#%d)", + mdoRef, + documentContext.getUri(), + startPosition.getLine() + 1 + ); + } + + public String getSignature(MethodSymbol methodSymbol) { + String signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; + + String methodKind; + if (methodSymbol.isFunction()) { + methodKind = getResourceString(FUNCTION_KEY); + } else { + methodKind = getResourceString(PROCEDURE_KEY); + } + String methodName = methodSymbol.getName(); + + var parameters = getParametersDescriptionPart(methodSymbol); + var returnedValueType = getReturnedValueTypeDescriptionPart(methodSymbol); + String export = methodSymbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; + + return String.format( + signatureTemplate, + methodKind, + methodName, + parameters, + export, + returnedValueType + ); + } + + public String getSignature(AnnotationSymbol symbol, MethodSymbol methodSymbol) { + String signatureTemplate = "```bsl\n%s &%s(%s)\n```"; + + String annotationKind = getResourceString(ANNOTATION_KEY); + String annotationName = symbol.getName(); + + var parameters = getParametersDescriptionPart(methodSymbol); + + return String.format( + signatureTemplate, + annotationKind, + annotationName, + parameters + ); + } + + public String getSignature(VariableSymbol symbol) { + String signatureTemplate = "```bsl\n%s %s%s\n```"; + + String varKey = getResourceString(VARIABLE_KEY); + String name = symbol.getName(); + String export = symbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; + + return String.format( + signatureTemplate, + varKey, + name, + export + ); + } + + private String getParametersDescriptionPart(MethodSymbol methodSymbol) { + var parametersDescription = new StringJoiner(", "); + methodSymbol.getParameters().forEach((ParameterDefinition parameterDefinition) -> { + var parameter = ""; + var parameterName = parameterDefinition.getName(); + + if (parameterDefinition.isByValue()) { + parameter = parameter + getResourceString(VAL_KEY) + " "; + } + parameter += parameterName; + + var parameterTypes = parameterDefinition.getDescription() + .map(ParameterDescription::getTypes) + .map(DescriptionFormatter::getTypes) + .orElse(""); + + if (!parameterTypes.isEmpty()) { + parameter += ": " + parameterTypes; + } + + if (parameterDefinition.isOptional()) { + parameter += " = "; + parameter += parameterDefinition.getDefaultValue().getValue(); + } + + parametersDescription.add(parameter); + }); + + return parametersDescription.toString(); + } + + private static String getReturnedValueTypeDescriptionPart(MethodSymbol methodSymbol) { + String returnedValueType = methodSymbol.getDescription() + .map(MethodDescription::getReturnedValue) + .map(DescriptionFormatter::getTypes) + .orElse(""); + if (!returnedValueType.isEmpty()) { + returnedValueType = ": " + returnedValueType; + } + return returnedValueType; + } + + private static String getTypes(List typeDescriptions) { + return typeDescriptions.stream() + .map(TypeDescription::getName) + .flatMap(parameterType -> Stream.of(parameterType.split(","))) + .map(String::trim) + .collect(Collectors.joining(" | ")); + } + + + public String parameterToString(ParameterDescription parameter, int level) { + var result = new StringJoiner(" \n"); // два пробела + Map typesMap = typesToMap(parameter.getTypes(), level); + var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; + + if (typesMap.size() == 1) { + result.add(String.format(parameterTemplate, + parameter.getName(), + typesMapToString(typesMap, 0))); + } else { + result.add(String.format(parameterTemplate, parameter.getName(), "")); + result.add(typesMapToString(typesMap, level + 1)); + } + return result.toString(); + } + + public String parameterToString(ParameterDefinition parameterDefinition) { + int level = 0; + var parameterDescription = parameterDefinition.getDescription(); + if (parameterDescription.isPresent()) { + return parameterToString(parameterDescription.get(), level); + } + + return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); + } + + private Map typesToMap(List parameterTypes, int level) { + Map types = new HashMap<>(); + + parameterTypes.forEach((TypeDescription type) -> { + var typeDescription = typeToString(type, level); + String typeName; + if (type.isHyperlink()) { + typeName = String.format("[%s](%s)", type.getName(), type.getLink()); + } else { + typeName = String.format("`%s`", type.getName()); + } + + types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); + }); + return types; + } + + private String typesMapToString(Map types, int level) { + var result = new StringJoiner(" \n"); // два пробела + var indent = "  ".repeat(level); + types.forEach((String key, String value) -> { + if (key.isBlank()) { + result.add(value); + } else { + result.add(String.format("%s%s %s", indent, value, key)); + } + }); + return result.toString(); + } + + private String typeToString(TypeDescription type, int level) { + var result = new StringJoiner(" \n"); // два пробела + var description = type.getDescription().replace("\n", "
    " + "  ".repeat(level + 1)); + + if (!description.isBlank()) { + description = "- " + description; + } + if (!type.getParameters().isEmpty()) { + description += ":"; + } + + result.add(description); + type.getParameters().forEach((ParameterDescription parameter) -> + result.add(parameterToString(parameter, level + 1))); + return result.toString(); + } + + private String getResourceString(String key) { + return resources.getResourceString(getClass(), key); + } + +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index de16d79d37f..1161ba95bcd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -60,7 +60,7 @@ public class MethodSymbolMarkupContentBuilder implements MarkupContentBuilder - result.add(parameterToString(parameterDefinition)) - ); - - var parameters = result.toString(); - - if (!parameters.isBlank()) { - var parametersSection = new StringJoiner("\n"); - String header = "**" + getResourceString(PARAMETERS_KEY) + ":**"; - parametersSection.add(header); - parametersSection.add(""); - parametersSection.add(parameters); - return parametersSection.toString(); - } - - return ""; - } - - private String getReturnedValueSection(MethodSymbol methodSymbol) { - var result = new StringJoiner(" \n"); // два пробела - methodSymbol.getDescription().ifPresent((MethodDescription methodDescription) -> { - Map typesMap = typesToMap(methodDescription.getReturnedValue(), 0); - result.add(typesMapToString(typesMap, 1)); - }); - - var returnedValue = result.toString(); - - if (!returnedValue.isEmpty()) { - returnedValue = "**" + getResourceString(RETURNED_VALUE_KEY) + ":**\n\n" + returnedValue; - } - - return returnedValue; - } - - private String getExamplesSection(MethodSymbol methodSymbol) { - var examples = methodSymbol.getDescription() - .map(MethodDescription::getExamples) - .orElseGet(Collections::emptyList); - return getSectionWithCodeFences(examples, EXAMPLES_KEY); - } - - private String getCallOptionsSection(MethodSymbol methodSymbol) { - var callOptions = methodSymbol.getDescription() - .map(MethodDescription::getCallOptions) - .orElseGet(Collections::emptyList); - return getSectionWithCodeFences(callOptions, CALL_OPTIONS_KEY); - } - - private String getSectionWithCodeFences(List codeBlocks, String resourceKey) { - String codeFences = codeBlocks - .stream() - .map(codeBlock -> "```bsl\n" + codeBlock + "\n```") - .collect(Collectors.joining("\n")); - - if (!codeFences.isEmpty()) { - codeFences = "**" + getResourceString(resourceKey) + ":**\n\n" + codeFences; - } - - return codeFences; - } - - private static String getLocation(MethodSymbol symbol) { - var documentContext = symbol.getOwner(); - var startPosition = symbol.getSelectionRange().getStart(); - String mdoRef = MdoRefBuilder.getMdoRef(documentContext); - - return String.format( - "[%s](%s#%d)", - mdoRef, - documentContext.getUri(), - startPosition.getLine() + 1 - ); - } - - private String getSignature(MethodSymbol methodSymbol) { - String signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; - - String methodKind; - if (methodSymbol.isFunction()) { - methodKind = getResourceString(FUNCTION_KEY); - } else { - methodKind = getResourceString(PROCEDURE_KEY); - } - String methodName = methodSymbol.getName(); - - var parametersDescription = new StringJoiner(", "); - methodSymbol.getParameters().forEach((ParameterDefinition parameterDefinition) -> { - var parameter = ""; - var parameterName = parameterDefinition.getName(); - - if (parameterDefinition.isByValue()) { - parameter = parameter + getResourceString(VAL_KEY) + " "; - } - parameter += parameterName; - - var parameterTypes = parameterDefinition.getDescription() - .map(ParameterDescription::getTypes) - .map(MethodSymbolMarkupContentBuilder::getTypes) - .orElse(""); - - if (!parameterTypes.isEmpty()) { - parameter += ": " + parameterTypes; - } - - if (parameterDefinition.isOptional()) { - parameter += " = "; - parameter += parameterDefinition.getDefaultValue().getValue(); - } - - parametersDescription.add(parameter); - }); - var parameters = parametersDescription.toString(); - - String returnedValueType = methodSymbol.getDescription() - .map(MethodDescription::getReturnedValue) - .map(MethodSymbolMarkupContentBuilder::getTypes) - .orElse(""); - if (!returnedValueType.isEmpty()) { - returnedValueType = ": " + returnedValueType; - } - - String export = methodSymbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; - - return String.format( - signatureTemplate, - methodKind, - methodName, - parameters, - export, - returnedValueType - ); - } - - private static String getTypes(List typeDescriptions) { - return typeDescriptions.stream() - .map(TypeDescription::getName) - .flatMap(parameterType -> Stream.of(parameterType.split(","))) - .map(String::trim) - .collect(Collectors.joining(" | ")); - } - - private String getResourceString(String key) { - return Resources.getResourceString(configuration.getLanguage(), getClass(), key); - } - - public static String parameterToString(ParameterDescription parameter, int level) { - var result = new StringJoiner(" \n"); // два пробела - Map typesMap = typesToMap(parameter.getTypes(), level); - var parameterTemplate = " ".repeat(level) + PARAMETER_TEMPLATE; - - if (typesMap.size() == 1) { - result.add(String.format(parameterTemplate, - parameter.getName(), - typesMapToString(typesMap, 0))); - } else { - result.add(String.format(parameterTemplate, parameter.getName(), "")); - result.add(typesMapToString(typesMap, level + 1)); - } - return result.toString(); - } - - public static String parameterToString(ParameterDefinition parameterDefinition) { - int level = 0; - if (parameterDefinition.getDescription().isPresent()) { - return parameterToString(parameterDefinition.getDescription().get(), level); - } - - return String.format(PARAMETER_TEMPLATE, parameterDefinition.getName(), ""); - } - - private static Map typesToMap(List parameterTypes, int level) { - Map types = new HashMap<>(); - - parameterTypes.forEach((TypeDescription type) -> { - var typeDescription = typeToString(type, level); - String typeName; - if (type.isHyperlink()) { - typeName = String.format("[%s](%s)", type.getName(), type.getLink()); - } else { - typeName = String.format("`%s`", type.getName()); - } - - types.merge(typeDescription, typeName, (oldValue, newValue) -> String.format("%s | %s", oldValue, newValue)); - }); - return types; - } - - private static String typesMapToString(Map types, int level) { - var result = new StringJoiner(" \n"); // два пробела - var indent = "  ".repeat(level); - types.forEach((String key, String value) -> { - if (key.isBlank()) { - result.add(value); - } else { - result.add(String.format("%s%s %s", indent, value, key)); - } - }); - return result.toString(); - } - - private static String typeToString(TypeDescription type, int level) { - var result = new StringJoiner(" \n"); // два пробела - var description = type.getDescription().replace("\n", "
    " + "  ".repeat(level + 1)); - - if (!description.isBlank()) { - description = "- " + description; - } - if (!type.getParameters().isEmpty()) { - description += ":"; - } - - result.add(description); - type.getParameters().forEach((ParameterDescription parameter) -> - result.add(parameterToString(parameter, level + 1))); - return result.toString(); - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java index 0b442a85e0f..d9fedd1df7d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java @@ -42,6 +42,7 @@ public class VariableSymbolMarkupContentBuilder implements MarkupContentBuilder< private static final String EXPORT_KEY = "export"; private final LanguageServerConfiguration configuration; + private final DescriptionFormatter descriptionFormatter; @Override public MarkupContent getContent(VariableSymbol symbol) { @@ -52,22 +53,22 @@ public MarkupContent getContent(VariableSymbol symbol) { // описание переменной // сигнатура - String signature = getSignature(symbol); - addSectionIfNotEmpty(markupBuilder, signature); + String signature = descriptionFormatter.getSignature(symbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, signature); // местоположение переменной - String location = getLocation(symbol); - addSectionIfNotEmpty(markupBuilder, location); + String location = descriptionFormatter.getLocation(symbol); + descriptionFormatter.addSectionIfNotEmpty(markupBuilder, location); // описание переменной symbol.getDescription() .map(VariableDescription::getPurposeDescription) - .ifPresent(description -> addSectionIfNotEmpty(markupBuilder, description)); + .ifPresent(description -> descriptionFormatter.addSectionIfNotEmpty(markupBuilder, description)); symbol.getDescription() .flatMap(VariableDescription::getTrailingDescription) .map(VariableDescription::getPurposeDescription) - .ifPresent(trailingDescription -> addSectionIfNotEmpty(markupBuilder, trailingDescription)); + .ifPresent(trailingDescription -> descriptionFormatter.addSectionIfNotEmpty(markupBuilder, trailingDescription)); String content = markupBuilder.toString(); @@ -79,48 +80,4 @@ public SymbolKind getSymbolKind() { return SymbolKind.Variable; } - private String getSignature(VariableSymbol symbol) { - String signatureTemplate = "```bsl\n%s %s%s\n```"; - - String varKey = getResourceString(VARIABLE_KEY); - String name = symbol.getName(); - String export = symbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; - - return String.format( - signatureTemplate, - varKey, - name, - export - ); - } - - private static String getLocation(VariableSymbol symbol) { - var documentContext = symbol.getOwner(); - var startPosition = symbol.getSelectionRange().getStart(); - String mdoRef = MdoRefBuilder.getMdoRef(symbol.getOwner()); - - String parentPostfix = symbol.getRootParent(SymbolKind.Method) - .map(sourceDefinedSymbol -> "." + sourceDefinedSymbol.getName()) - .orElse(""); - mdoRef += parentPostfix; - - return String.format( - "[%s](%s#%d)", - mdoRef, - documentContext.getUri(), - startPosition.getLine() + 1 - ); - } - - private static void addSectionIfNotEmpty(StringJoiner markupBuilder, String newContent) { - if (!newContent.isEmpty()) { - markupBuilder.add(newContent); - markupBuilder.add(""); - markupBuilder.add("---"); - } - } - - private String getResourceString(String key) { - return Resources.getResourceString(configuration.getLanguage(), getClass(), key); - } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index d47e73023be..2edb4006c3a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -25,6 +25,7 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; +import com.github._1c_syntax.bsl.languageserver.hover.DescriptionFormatter; import com.github._1c_syntax.bsl.languageserver.hover.MethodSymbolMarkupContentBuilder; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; @@ -63,6 +64,7 @@ public class SourceDefinedMethodCallInlayHintSupplier implements InlayHintSuppli private final ReferenceIndex referenceIndex; private final LanguageServerConfiguration configuration; + private final DescriptionFormatter descriptionFormatter; @Override @@ -81,7 +83,7 @@ public List getInlayHints(DocumentContext documentContext, InlayHintP .filter(Reference::isSourceDefinedSymbolReference) .map(this::toInlayHints) .flatMap(Collection::stream) - .collect(Collectors.toList()); + .toList(); } @@ -129,7 +131,7 @@ private List toInlayHints(Reference reference) { return hints; }) .flatMap(Collection::stream) - .collect(Collectors.toList()); + .toList(); } @@ -164,9 +166,8 @@ private static void setPosition(InlayHint inlayHint, BSLParser.CallParamContext inlayHint.setPosition(position); } - private static void setTooltip(InlayHint inlayHint, ParameterDefinition parameter) { - // todo: refactor - var markdown = MethodSymbolMarkupContentBuilder.parameterToString(parameter); + private void setTooltip(InlayHint inlayHint, ParameterDefinition parameter) { + var markdown = descriptionFormatter.parameterToString(parameter); var tooltip = new MarkupContent(MarkupKind.MARKDOWN, markdown); inlayHint.setTooltip(tooltip); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java new file mode 100644 index 00000000000..1a960a9471b --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -0,0 +1,79 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.references; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.context.FileType; +import com.github._1c_syntax.bsl.languageserver.context.ServerContext; +import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; +import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import com.github._1c_syntax.bsl.languageserver.utils.Trees; +import com.github._1c_syntax.bsl.parser.BSLParser; +import lombok.RequiredArgsConstructor; +import org.antlr.v4.runtime.tree.TerminalNode; +import org.apache.commons.lang3.tuple.Pair; +import org.eclipse.lsp4j.Location; +import org.eclipse.lsp4j.Position; +import org.springframework.stereotype.Component; + +import java.net.URI; +import java.util.Optional; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class AnnotationReferenceFinder implements ReferenceFinder { + + private final ServerContext serverContext; + + @Override + public Optional findReference(URI uri, Position position) { + DocumentContext document = serverContext.getDocument(uri); + if (document == null || document.getFileType() != FileType.OS) { + return Optional.empty(); + } + + var registeredAnnotations = serverContext.getDocuments().values().stream() + .filter(documentContext -> documentContext.getFileType() == FileType.OS) + .map(DocumentContext::getSymbolTree) + .flatMap(symbolTree -> symbolTree.getMethodSymbol("ПриСозданииОбъекта").stream()) + .filter(methodSymbol -> methodSymbol.getAnnotations().stream().anyMatch(annotation -> annotation.getName().equals("Аннотация"))) + .map(methodSymbol -> Pair.of(methodSymbol, methodSymbol.getAnnotations().stream().filter(annotation -> annotation.getName().equals("Аннотация")).findFirst().get())) + .collect(Collectors.toMap(methodSymbolAnnotationPair -> methodSymbolAnnotationPair.getRight().getParameters().get(0).getValue(), Pair::getLeft)); + + return Trees.findTerminalNodeContainsPosition(document.getAst(), position) + .filter(node -> node.getParent().getRuleContext().getRuleIndex() == BSLParser.RULE_annotationName) + .flatMap((TerminalNode annotationNode) -> { + var annotationName = annotationNode.getText(); + var foundAnnotationDeclaration = registeredAnnotations.get(annotationName); + if (foundAnnotationDeclaration == null) { + return Optional.empty(); + } + return Optional.of(Reference.of( + document.getSymbolTree().getModule(), + AnnotationSymbol.from(annotationName, foundAnnotationDeclaration), + new Location(uri.toString(), Ranges.create(annotationNode.getParent().getParent())) + )); + }); + } +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties similarity index 75% rename from src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_en.properties rename to src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties index dd87e8b007d..02473699a8b 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties @@ -1,3 +1,4 @@ +annotation=Annotation callOptions=Сall options examples=Example export=Export @@ -5,4 +6,5 @@ function=Function parameters=Parameters procedure=Procedure returnedValue=Returns -val=Val \ No newline at end of file +val=Val +var=Var \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_ru.properties similarity index 77% rename from src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_ru.properties rename to src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_ru.properties index da11d16cb00..648351fc42b 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_ru.properties @@ -1,3 +1,4 @@ +annotation=Аннотация callOptions=Варианты вызова examples=Пример export=Экспорт @@ -5,4 +6,5 @@ function=Функция parameters=Параметры procedure=Процедура returnedValue=Возвращаемое значение -val=Знач \ No newline at end of file +val=Знач +var=Перем \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_en.properties deleted file mode 100644 index f352ad82aa2..00000000000 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_en.properties +++ /dev/null @@ -1,2 +0,0 @@ -var=Var -export=Export diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_ru.properties deleted file mode 100644 index 4ef82d6d56b..00000000000 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder_ru.properties +++ /dev/null @@ -1,2 +0,0 @@ -var=Перем -export=Экспорт diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java new file mode 100644 index 00000000000..e38d1ac9b50 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java @@ -0,0 +1,60 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.references; + +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.SymbolKind; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class AnnotationReferenceFinderTest { + + @Autowired + private AnnotationReferenceFinder referenceFinder; + + @Test + void findReference() { + // given + var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/references/AnnotationReferenceFinder.os"); + var module = documentContext.getSymbolTree().getModule(); + var method = documentContext.getSymbolTree().getMethods().get(0); + + // when + var optionalReference = referenceFinder.findReference(documentContext.getUri(), new Position(0, 2)); + + // then + assertThat(optionalReference) + .isPresent() + .hasValueSatisfying(reference -> assertThat(reference.getFrom()).isEqualTo(module)) + .hasValueSatisfying(reference -> assertThat(reference.getSymbol().getName()).isEqualTo("ТестоваяАннотация")) + .hasValueSatisfying(reference -> assertThat(reference.getSymbol().getSymbolKind()).isEqualTo(SymbolKind.TypeParameter)) + .hasValueSatisfying(reference -> assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(0, 0, 18))) + .hasValueSatisfying(reference -> assertThat(reference.getSourceDefinedSymbol().orElseThrow().getSelectionRange()).isEqualTo(method.getSelectionRange())) + ; + } +} \ No newline at end of file diff --git a/src/test/resources/references/AnnotationReferenceFinder.os b/src/test/resources/references/AnnotationReferenceFinder.os new file mode 100644 index 00000000000..774f950d7c7 --- /dev/null +++ b/src/test/resources/references/AnnotationReferenceFinder.os @@ -0,0 +1,6 @@ +&ТестоваяАннотация +Перем ТестоваяПеременная; + +&Аннотация("ТестоваяАннотация") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file From d21e0eaaca50b11ad2a73d7c1d55946d43dc304d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:51:09 +0000 Subject: [PATCH 558/595] build(deps): bump io.sentry:sentry-bom from 7.16.0 to 7.17.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.16.0 to 7.17.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.16.0...7.17.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 02f2625bbbf..585d3030f04 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.16.0") + mavenBom("io.sentry:sentry-bom:7.17.0") } } From 76d191a0f536e7c4447c9e3e10a5eece72989b3d Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 17 Nov 2024 01:56:50 +0000 Subject: [PATCH 559/595] Update Gradle Wrapper from 8.10.2 to 8.11 Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b8b9..94113f200e6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From f8abccd05120c8b370ba34ebe425e7c91dd51c7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:10:19 +0000 Subject: [PATCH 560/595] build(deps): bump io.sentry:sentry-bom from 7.17.0 to 7.18.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.17.0 to 7.18.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.17.0...7.18.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 585d3030f04..c98c20699de 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.17.0") + mavenBom("io.sentry:sentry-bom:7.18.0") } } From 806796bed6e899e72952826c9ff5d4616445a3dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 09:10:32 +0000 Subject: [PATCH 561/595] build(deps): bump org.sonarqube from 5.1.0.4882 to 6.0.0.5145 Bumps org.sonarqube from 5.1.0.4882 to 6.0.0.5145. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 585d3030f04..c1bc21c9b0e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "5.1.0.4882" + id("org.sonarqube") version "6.0.0.5145" id("io.freefair.lombok") version "8.10.2" //id("io.freefair.javadoc-links") version "8.10.2" id("io.freefair.javadoc-utf-8") version "8.10.2" From 7fd8ae10dc4a621e06574eb642c54be7ec17f130 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:27:15 +0000 Subject: [PATCH 562/595] build(deps): bump the freefair group with 4 updates Bumps the freefair group with 4 updates: [io.freefair.lombok](https://github.com/freefair/gradle-plugins), [io.freefair.javadoc-utf-8](https://github.com/freefair/gradle-plugins), [io.freefair.aspectj.post-compile-weaving](https://github.com/freefair/gradle-plugins) and [io.freefair.maven-central.validate-poms](https://github.com/freefair/gradle-plugins). Updates `io.freefair.lombok` from 8.10.2 to 8.11 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10.2...8.11) Updates `io.freefair.javadoc-utf-8` from 8.10.2 to 8.11 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10.2...8.11) Updates `io.freefair.aspectj.post-compile-weaving` from 8.10.2 to 8.11 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10.2...8.11) Updates `io.freefair.maven-central.validate-poms` from 8.10.2 to 8.11 - [Release notes](https://github.com/freefair/gradle-plugins/releases) - [Commits](https://github.com/freefair/gradle-plugins/compare/8.10.2...8.11) --- updated-dependencies: - dependency-name: io.freefair.lombok dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.javadoc-utf-8 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.aspectj.post-compile-weaving dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair - dependency-name: io.freefair.maven-central.validate-poms dependency-type: direct:production update-type: version-update:semver-minor dependency-group: freefair ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index fdb773762f7..4c98934cea9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,11 +11,11 @@ plugins { signing id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "6.0.0.5145" - id("io.freefair.lombok") version "8.10.2" + id("io.freefair.lombok") version "8.11" //id("io.freefair.javadoc-links") version "8.10.2" - id("io.freefair.javadoc-utf-8") version "8.10.2" - id("io.freefair.aspectj.post-compile-weaving") version "8.10.2" - id("io.freefair.maven-central.validate-poms") version "8.10.2" + id("io.freefair.javadoc-utf-8") version "8.11" + id("io.freefair.aspectj.post-compile-weaving") version "8.11" + id("io.freefair.maven-central.validate-poms") version "8.11" id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.3.5" From b8758d4a9beb0933dd46ad84515492da70fa77e6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 21 Nov 2024 20:28:13 +0100 Subject: [PATCH 563/595] javadoc-links 8.11 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4c98934cea9..ab09ffd3582 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { id("org.cadixdev.licenser") version "0.6.1" id("org.sonarqube") version "6.0.0.5145" id("io.freefair.lombok") version "8.11" - //id("io.freefair.javadoc-links") version "8.10.2" + id("io.freefair.javadoc-links") version "8.11" id("io.freefair.javadoc-utf-8") version "8.11" id("io.freefair.aspectj.post-compile-weaving") version "8.11" id("io.freefair.maven-central.validate-poms") version "8.11" From c6e47f00377287855f1ff70944f6a688cf39ecc7 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 24 Nov 2024 01:57:26 +0000 Subject: [PATCH 564/595] Update Gradle Wrapper from 8.11 to 8.11.1 Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 94113f200e6..e2847c82004 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From e0013f73b728158dbf80637e7b2d8b76eef0ec8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Nov 2024 09:41:45 +0000 Subject: [PATCH 565/595] build(deps): bump org.sonarqube from 6.0.0.5145 to 6.0.1.5171 Bumps org.sonarqube from 6.0.0.5145 to 6.0.1.5171. --- updated-dependencies: - dependency-name: org.sonarqube dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ab09ffd3582..62aeea5c007 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { jacoco signing id("org.cadixdev.licenser") version "0.6.1" - id("org.sonarqube") version "6.0.0.5145" + id("org.sonarqube") version "6.0.1.5171" id("io.freefair.lombok") version "8.11" id("io.freefair.javadoc-links") version "8.11" id("io.freefair.javadoc-utf-8") version "8.11" From fe3a8474c725b13a07b274579500d06bb8b6baeb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Nov 2024 09:50:35 +0000 Subject: [PATCH 566/595] build(deps): bump dawidd6/action-download-artifact from 6 to 7 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 6 to 7. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index b4ae642abe3..ee009160499 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Download PR number artifact if: github.event.workflow_run.event == 'pull_request' - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v7 with: workflow: ${{ github.event.workflow_run.name }} run_id: ${{ github.event.workflow_run.id }} From 836d4fe028977c56346c7d69fff2efee9250abd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:55:09 +0000 Subject: [PATCH 567/595] build(deps): bump io.sentry:sentry-bom from 7.18.0 to 7.18.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.18.0 to 7.18.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.18.0...7.18.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 62aeea5c007..2458819c2b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.18.0") + mavenBom("io.sentry:sentry-bom:7.18.1") } } From 9e67f26e5b44a3e783059766972b2c7a65ea563e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:25:51 +0000 Subject: [PATCH 568/595] build(deps): bump JetBrains/qodana-action from 2024.2.6 to 2024.3.2 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.2.6 to 2024.3.2. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.2.6...v2024.3.2) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index ebe74690b62..d8c674dec14 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.2.6 + uses: JetBrains/qodana-action@v2024.3.2 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 828f7298881e51166396759f8719950f304df0d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:52:30 +0000 Subject: [PATCH 569/595] build(deps): bump io.sentry:sentry-bom from 7.18.1 to 7.19.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.18.1 to 7.19.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.18.1...7.19.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2458819c2b4..8a0a8a6be8a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.18.1") + mavenBom("io.sentry:sentry-bom:7.19.0") } } From a7915e8375723dcc7abf5f14cf8a156e6718973d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:38:50 +0000 Subject: [PATCH 570/595] build(deps): bump io.spring.dependency-management from 1.1.6 to 1.1.7 Bumps [io.spring.dependency-management](https://github.com/spring-gradle-plugins/dependency-management-plugin) from 1.1.6 to 1.1.7. - [Release notes](https://github.com/spring-gradle-plugins/dependency-management-plugin/releases) - [Commits](https://github.com/spring-gradle-plugins/dependency-management-plugin/compare/v1.1.6...v1.1.7) --- updated-dependencies: - dependency-name: io.spring.dependency-management dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8a0a8a6be8a..ffea08d1ee2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ plugins { id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" id("org.springframework.boot") version "3.3.5" - id("io.spring.dependency-management") version "1.1.6" + id("io.spring.dependency-management") version "1.1.7" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.1" id("ru.vyarus.pom") version "3.0.0" id("com.gorylenko.gradle-git-properties") version "2.4.2" From 8452965a42f946c36a6d08790de89037cc9b6f83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 09:50:37 +0000 Subject: [PATCH 571/595] build(deps): bump org.springframework.boot from 3.3.5 to 3.4.1 Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.3.5 to 3.4.1. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.5...v3.4.1) --- updated-dependencies: - dependency-name: org.springframework.boot dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ffea08d1ee2..08221b50e8a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,7 +18,7 @@ plugins { id("io.freefair.maven-central.validate-poms") version "8.11" id("me.qoomon.git-versioning") version "6.4.4" id("com.github.ben-manes.versions") version "0.51.0" - id("org.springframework.boot") version "3.3.5" + id("org.springframework.boot") version "3.4.1" id("io.spring.dependency-management") version "1.1.7" id("io.github.1c-syntax.bslls-dev-tools") version "0.8.1" id("ru.vyarus.pom") version "3.0.0" From 916bb9930cdb1a82371b2feaa5dfcfe9ba7c31f5 Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Sun, 22 Dec 2024 01:53:37 +0000 Subject: [PATCH 572/595] Update Gradle Wrapper from 8.11.1 to 8.12 Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e2847c82004..cea7a793a84 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d6b1..f3b75f3b0d4 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum From 22cdb0cae5142a57e6df02759110319269cfad97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 09:26:22 +0000 Subject: [PATCH 573/595] build(deps): bump JetBrains/qodana-action from 2024.3.2 to 2024.3.4 Bumps [JetBrains/qodana-action](https://github.com/jetbrains/qodana-action) from 2024.3.2 to 2024.3.4. - [Release notes](https://github.com/jetbrains/qodana-action/releases) - [Commits](https://github.com/jetbrains/qodana-action/compare/v2024.3.2...v2024.3.4) --- updated-dependencies: - dependency-name: JetBrains/qodana-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/qodana.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index d8c674dec14..a0ed7924e33 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.3.2 + uses: JetBrains/qodana-action@v2024.3.4 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} with: From 6e0a2aade59e4a74426157b5a41a837f5cd0d834 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 23 Dec 2024 20:06:03 +0100 Subject: [PATCH 574/595] Update src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../bsl/languageserver/hover/DescriptionFormatter_en.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties index 02473699a8b..10ca8a49e46 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter_en.properties @@ -1,5 +1,5 @@ annotation=Annotation -callOptions=Сall options +callOptions=Call options examples=Example export=Export function=Function From c80b21da67028426730386c2b02b0d5912380169 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 09:18:48 +0000 Subject: [PATCH 575/595] build(deps): bump io.sentry:sentry-bom from 7.19.0 to 7.19.1 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.19.0 to 7.19.1. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.19.0...7.19.1) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ffea08d1ee2..df27b6c9bef 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.19.0") + mavenBom("io.sentry:sentry-bom:7.19.1") } } From bd1e564a81846011da1143242ad0f33433647685 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 15:32:53 +0100 Subject: [PATCH 576/595] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20=D0=BA=D1=8D=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/AnnotationReferenceFinder.java | 69 +++++++++++++++---- .../bsl/languageserver/utils/Methods.java | 7 ++ .../AbstractServerContextAwareTest.java | 29 ++++++++ .../diagnostics/AbstractDiagnosticTest.java | 16 +---- .../AnnotationReferenceFinderTest.java | 7 +- 5 files changed, 101 insertions(+), 27 deletions(-) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java index 1a960a9471b..c3e27810588 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -24,27 +24,69 @@ import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.FileType; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; +import com.github._1c_syntax.bsl.languageserver.context.events.DocumentContextContentChangedEvent; +import com.github._1c_syntax.bsl.languageserver.context.events.ServerContextPopulatedEvent; import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree; +import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; +import com.github._1c_syntax.bsl.languageserver.utils.Methods; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import com.github._1c_syntax.bsl.languageserver.utils.Trees; import com.github._1c_syntax.bsl.parser.BSLParser; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.tree.TerminalNode; +import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.apache.commons.lang3.tuple.Pair; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Position; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.net.URI; +import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; @Component @RequiredArgsConstructor public class AnnotationReferenceFinder implements ReferenceFinder { private final ServerContext serverContext; + private final Map registeredAnnotations = new CaseInsensitiveMap<>(); + + @EventListener + public void handleContextRefresh(ServerContextPopulatedEvent event) { + registeredAnnotations.clear(); + serverContext.getDocuments() + .values() + .forEach(this::findAndRegisterAnnotation); + } + + @EventListener + public void handleDocumentContextChange(DocumentContextContentChangedEvent event) { + DocumentContext documentContext = event.getSource(); + var uri = documentContext.getUri(); + + registeredAnnotations.values().stream() + .filter(annotationSymbol -> annotationSymbol.getOwner().getUri().equals(uri)) + .forEach(annotationSymbol -> registeredAnnotations.remove(annotationSymbol.getName())); + + findAndRegisterAnnotation(documentContext); + } + + private void findAndRegisterAnnotation(DocumentContext documentContext) { + if (documentContext.getFileType() != FileType.OS) { + return; + } + + var symbolTree = documentContext.getSymbolTree(); + + Methods.getOscriptClassConstructor(symbolTree) + .flatMap(AnnotationReferenceFinder::findAnnotation) + .map(methodSymbolAnnotationPair -> AnnotationSymbol.from(getAnnotationName(methodSymbolAnnotationPair.getRight()), methodSymbolAnnotationPair.getLeft())) + .ifPresent(annotationSymbol -> registeredAnnotations.put(annotationSymbol.getName(), annotationSymbol)); + } @Override public Optional findReference(URI uri, Position position) { @@ -53,27 +95,30 @@ public Optional findReference(URI uri, Position position) { return Optional.empty(); } - var registeredAnnotations = serverContext.getDocuments().values().stream() - .filter(documentContext -> documentContext.getFileType() == FileType.OS) - .map(DocumentContext::getSymbolTree) - .flatMap(symbolTree -> symbolTree.getMethodSymbol("ПриСозданииОбъекта").stream()) - .filter(methodSymbol -> methodSymbol.getAnnotations().stream().anyMatch(annotation -> annotation.getName().equals("Аннотация"))) - .map(methodSymbol -> Pair.of(methodSymbol, methodSymbol.getAnnotations().stream().filter(annotation -> annotation.getName().equals("Аннотация")).findFirst().get())) - .collect(Collectors.toMap(methodSymbolAnnotationPair -> methodSymbolAnnotationPair.getRight().getParameters().get(0).getValue(), Pair::getLeft)); - return Trees.findTerminalNodeContainsPosition(document.getAst(), position) .filter(node -> node.getParent().getRuleContext().getRuleIndex() == BSLParser.RULE_annotationName) .flatMap((TerminalNode annotationNode) -> { var annotationName = annotationNode.getText(); - var foundAnnotationDeclaration = registeredAnnotations.get(annotationName); - if (foundAnnotationDeclaration == null) { + var annotationSymbol = registeredAnnotations.get(annotationName); + if (annotationSymbol == null) { return Optional.empty(); } return Optional.of(Reference.of( document.getSymbolTree().getModule(), - AnnotationSymbol.from(annotationName, foundAnnotationDeclaration), + annotationSymbol, new Location(uri.toString(), Ranges.create(annotationNode.getParent().getParent())) )); }); } + + private static Optional> findAnnotation(MethodSymbol methodSymbol) { + return methodSymbol.getAnnotations().stream() + .filter(annotation -> annotation.getName().equalsIgnoreCase("Аннотация")) + .findFirst() + .map(annotation -> Pair.of(methodSymbol, annotation)); + } + + private static String getAnnotationName(Annotation annotation) { + return annotation.getParameters().get(0).getValue(); + } } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java index f223a5aa390..3a55bf8e80c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java @@ -21,6 +21,8 @@ */ package com.github._1c_syntax.bsl.languageserver.utils; +import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; +import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree; import com.github._1c_syntax.bsl.parser.BSLParser; import lombok.experimental.UtilityClass; import org.antlr.v4.runtime.Token; @@ -82,4 +84,9 @@ public static Optional getMethodName(BSLParser.LValueContext lValueContex .flatMap(Methods::getMethodName); } + public static Optional getOscriptClassConstructor(SymbolTree symbolTree) { + return symbolTree.getMethodSymbol("ПриСозданииОбъекта") + .or(() -> symbolTree.getMethodSymbol("OnObjectCreate")); + } + } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java new file mode 100644 index 00000000000..b483d6b638a --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java @@ -0,0 +1,29 @@ +package com.github._1c_syntax.bsl.languageserver.context; + +import com.github._1c_syntax.utils.Absolute; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.PostConstruct; +import java.nio.file.Path; + +@SpringBootTest +public abstract class AbstractServerContextAwareTest { + @Autowired + protected ServerContext context; + + @PostConstruct + public void init() { + context.clear(); + } + + protected void initServerContext(String path) { + var configurationRoot = Absolute.path(path); + initServerContext(configurationRoot); + } + + protected void initServerContext(Path configurationRoot) { + context.setConfigurationRoot(configurationRoot); + context.populateContext(); + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index 8d845642a63..68e3cea83db 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -22,6 +22,7 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.context.AbstractServerContextAwareTest; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure.DiagnosticObjectProvider; @@ -46,13 +47,11 @@ import java.util.List; @SpringBootTest -abstract class AbstractDiagnosticTest { +abstract class AbstractDiagnosticTest extends AbstractServerContextAwareTest { @Autowired private DiagnosticObjectProvider diagnosticObjectProvider; @Autowired - protected ServerContext context; - @Autowired protected LanguageServerConfiguration configuration; private final Class diagnosticClass; @@ -65,20 +64,9 @@ abstract class AbstractDiagnosticTest { @PostConstruct public void init() { diagnosticInstance = diagnosticObjectProvider.get(diagnosticClass); - context.clear(); configuration.reset(); } - protected void initServerContext(String path) { - var configurationRoot = Absolute.path(path); - initServerContext(configurationRoot); - } - - protected void initServerContext(Path configurationRoot) { - context.setConfigurationRoot(configurationRoot); - context.populateContext(); - } - protected List getDiagnostics(DocumentContext documentContext) { return diagnosticInstance.getDiagnostics(documentContext); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java index e38d1ac9b50..82b9a0af985 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java @@ -21,6 +21,8 @@ */ package com.github._1c_syntax.bsl.languageserver.references; +import com.github._1c_syntax.bsl.languageserver.context.AbstractServerContextAwareTest; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; import org.eclipse.lsp4j.Position; @@ -32,7 +34,8 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest -class AnnotationReferenceFinderTest { +@CleanupContextBeforeClassAndAfterClass +class AnnotationReferenceFinderTest extends AbstractServerContextAwareTest { @Autowired private AnnotationReferenceFinder referenceFinder; @@ -40,7 +43,9 @@ class AnnotationReferenceFinderTest { @Test void findReference() { // given + initServerContext(TestUtils.PATH_TO_METADATA); var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/references/AnnotationReferenceFinder.os"); + var module = documentContext.getSymbolTree().getModule(); var method = documentContext.getSymbolTree().getMethods().get(0); From a155eb2451caae5fd10a14a9fe54ae8be9f436c7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 15:56:46 +0100 Subject: [PATCH 577/595] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/symbol/AnnotationSymbol.java | 9 ++++++--- .../references/AnnotationReferenceFinder.java | 10 ++++------ .../references/AnnotationReferenceFinderTest.java | 5 ++--- .../resources/references/AnnotationReferenceFinder.os | 4 +++- ...320\276\321\202\320\260\321\206\320\270\321\217.os" | 3 +++ ...20\276\321\202\320\260\321\206\320\270\321\2172.os" | 3 +++ 6 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 "src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217.os" create mode 100644 "src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\2172.os" diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java index 5a7cd0851c3..0ae0fda074f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java @@ -36,6 +36,7 @@ import org.eclipse.lsp4j.SymbolKind; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -62,11 +63,13 @@ public class AnnotationSymbol implements SourceDefinedSymbol, Describable { @Builder.Default Optional parent = Optional.empty(); - @Builder.Default - List children = new ArrayList<>(); - Optional description; + @Override + public List getChildren() { + return Collections.emptyList(); + } + @Override public void accept(SymbolTreeVisitor visitor) { // no-op diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java index c3e27810588..28649de507f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -28,7 +28,6 @@ import com.github._1c_syntax.bsl.languageserver.context.events.ServerContextPopulatedEvent; import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.context.symbol.SymbolTree; import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.utils.Methods; @@ -37,7 +36,6 @@ import com.github._1c_syntax.bsl.parser.BSLParser; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.tree.TerminalNode; -import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.apache.commons.lang3.tuple.Pair; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.Position; @@ -47,13 +45,14 @@ import java.net.URI; import java.util.Map; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; @Component @RequiredArgsConstructor public class AnnotationReferenceFinder implements ReferenceFinder { private final ServerContext serverContext; - private final Map registeredAnnotations = new CaseInsensitiveMap<>(); + private final Map registeredAnnotations = new ConcurrentHashMap<>(); @EventListener public void handleContextRefresh(ServerContextPopulatedEvent event) { @@ -68,9 +67,8 @@ public void handleDocumentContextChange(DocumentContextContentChangedEvent event DocumentContext documentContext = event.getSource(); var uri = documentContext.getUri(); - registeredAnnotations.values().stream() - .filter(annotationSymbol -> annotationSymbol.getOwner().getUri().equals(uri)) - .forEach(annotationSymbol -> registeredAnnotations.remove(annotationSymbol.getName())); + registeredAnnotations.values() + .removeIf(annotationSymbol -> annotationSymbol.getOwner().getUri().equals(uri)); findAndRegisterAnnotation(documentContext); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java index 82b9a0af985..0f639341f1e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java @@ -43,11 +43,10 @@ class AnnotationReferenceFinderTest extends AbstractServerContextAwareTest { @Test void findReference() { // given - initServerContext(TestUtils.PATH_TO_METADATA); + initServerContext("./src/test/resources/references/annotations"); var documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/references/AnnotationReferenceFinder.os"); var module = documentContext.getSymbolTree().getModule(); - var method = documentContext.getSymbolTree().getMethods().get(0); // when var optionalReference = referenceFinder.findReference(documentContext.getUri(), new Position(0, 2)); @@ -59,7 +58,7 @@ void findReference() { .hasValueSatisfying(reference -> assertThat(reference.getSymbol().getName()).isEqualTo("ТестоваяАннотация")) .hasValueSatisfying(reference -> assertThat(reference.getSymbol().getSymbolKind()).isEqualTo(SymbolKind.TypeParameter)) .hasValueSatisfying(reference -> assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(0, 0, 18))) - .hasValueSatisfying(reference -> assertThat(reference.getSourceDefinedSymbol().orElseThrow().getSelectionRange()).isEqualTo(method.getSelectionRange())) + .hasValueSatisfying(reference -> assertThat(reference.getSourceDefinedSymbol().orElseThrow().getSelectionRange()).isEqualTo(Ranges.create(1, 10, 28))) ; } } \ No newline at end of file diff --git a/src/test/resources/references/AnnotationReferenceFinder.os b/src/test/resources/references/AnnotationReferenceFinder.os index 774f950d7c7..a6bb131844e 100644 --- a/src/test/resources/references/AnnotationReferenceFinder.os +++ b/src/test/resources/references/AnnotationReferenceFinder.os @@ -1,6 +1,8 @@ &ТестоваяАннотация Перем ТестоваяПеременная; -&Аннотация("ТестоваяАннотация") +&ТестоваяАннотация2 +Перем ТестоваяПеременная2; + Процедура ПриСозданииОбъекта() КонецПроцедуры \ No newline at end of file diff --git "a/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217.os" "b/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217.os" new file mode 100644 index 00000000000..e3b4f507ffa --- /dev/null +++ "b/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217.os" @@ -0,0 +1,3 @@ +&Аннотация("ТестоваяАннотация") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\2172.os" "b/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\2172.os" new file mode 100644 index 00000000000..1bbb37f66e2 --- /dev/null +++ "b/src/test/resources/references/annotations/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\2172.os" @@ -0,0 +1,3 @@ +&Аннотация("ТестоваяАннотация2") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file From e87c1329b2064990f2071114e7a0cd7c3486aea2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:01:34 +0100 Subject: [PATCH 578/595] =?UTF-8?q?=D0=9B=D0=B8=D1=86=D0=B5=D0=BD=D0=B7?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractServerContextAwareTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java index b483d6b638a..07dfbad07fd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java @@ -1,3 +1,24 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2024 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ package com.github._1c_syntax.bsl.languageserver.context; import com.github._1c_syntax.utils.Absolute; From 2393a2ba0956d45d77a7025fcd493ec048925dc5 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:05:06 +0100 Subject: [PATCH 579/595] =?UTF-8?q?=D0=97=D0=B0=D1=89=D0=B8=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=82=20=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/references/AnnotationReferenceFinder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java index 28649de507f..7916aa8cd24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -113,6 +113,7 @@ private static Optional> findAnnotation(MethodSym return methodSymbol.getAnnotations().stream() .filter(annotation -> annotation.getName().equalsIgnoreCase("Аннотация")) .findFirst() + .filter(annotation -> annotation.getParameters().size() == 1) .map(annotation -> Pair.of(methodSymbol, annotation)); } From 3ae01fd63bb146bc69019970e33139048cfa776c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:12:32 +0100 Subject: [PATCH 580/595] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B9=20=D0=BD=D0=B0=20=D0=B1=D1=83=D0=B4?= =?UTF-8?q?=D1=83=D1=89=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../languageserver/references/AnnotationReferenceFinder.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java index 7916aa8cd24..96988a0e413 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -74,6 +74,11 @@ public void handleDocumentContextChange(DocumentContextContentChangedEvent event } private void findAndRegisterAnnotation(DocumentContext documentContext) { + // In normal case this method may be called twice per each document context: + // 1. When the document context is created during the server context population or document opening + // 2. When server context is fully populated. + // This can lead to the situation when annotations registered from opened documents are cleared after populateContext step. + // Due to limitation of mechanism to only OS files, we can leave it as is for now, but it should be refactored in the future. if (documentContext.getFileType() != FileType.OS) { return; } From 97831e3f2d1012cf75ae97f0eb7eaccc088d6126 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:17:49 +0100 Subject: [PATCH 581/595] Fix tests --- .../languageserver/context/AbstractServerContextAwareTest.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnosticTest.java | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java index 07dfbad07fd..0923a7e3dd7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java @@ -34,7 +34,7 @@ public abstract class AbstractServerContextAwareTest { protected ServerContext context; @PostConstruct - public void init() { + public void abstractServerContextAwareTestInit() { context.clear(); } diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index 68e3cea83db..a760546ff57 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -24,10 +24,8 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.AbstractServerContextAwareTest; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.context.ServerContext; import com.github._1c_syntax.bsl.languageserver.diagnostics.infrastructure.DiagnosticObjectProvider; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; -import com.github._1c_syntax.utils.Absolute; import jakarta.annotation.PostConstruct; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; @@ -42,7 +40,6 @@ import org.springframework.boot.test.context.SpringBootTest; import java.nio.charset.StandardCharsets; -import java.nio.file.Path; import java.util.Collections; import java.util.List; From 5d351e909afa8a62d72165edaffad03e270a1170 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:19:06 +0100 Subject: [PATCH 582/595] Fix QF --- .../bsl/languageserver/context/symbol/AnnotationSymbol.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java index 0ae0fda074f..06319c9a443 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java @@ -22,12 +22,9 @@ package com.github._1c_syntax.bsl.languageserver.context.symbol; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.context.symbol.annotations.Annotation; import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.variable.VariableDescription; import lombok.Builder; import lombok.EqualsAndHashCode; -import lombok.Getter; import lombok.Setter; import lombok.ToString; import lombok.Value; @@ -35,7 +32,6 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.SymbolKind; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -43,7 +39,7 @@ @Value @Builder @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@ToString(exclude = {"children", "parent"}) +@ToString(exclude = {"parent"}) public class AnnotationSymbol implements SourceDefinedSymbol, Describable { String name; From 166ae66833892d8797a1a4c1712735db2509a6e6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:38:09 +0100 Subject: [PATCH 583/595] Fix QF --- .../hover/AnnotationSymbolMarkupContentBuilder.java | 12 ------------ .../languageserver/hover/DescriptionFormatter.java | 1 - .../hover/MethodSymbolMarkupContentBuilder.java | 13 ------------- .../hover/VariableSymbolMarkupContentBuilder.java | 2 -- .../SourceDefinedMethodCallInlayHintSupplier.java | 2 -- 5 files changed, 30 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java index 39abf339813..c9724ed4099 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java @@ -23,25 +23,13 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.AnnotationSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.TypeDescription; -import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; -import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.MarkupContent; import org.eclipse.lsp4j.MarkupKind; import org.eclipse.lsp4j.SymbolKind; import org.springframework.stereotype.Component; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.StringJoiner; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Построитель контента для всплывающего окна для {@link AnnotationSymbol}. diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java index d483c6f7a04..1eccad44d88 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java @@ -38,7 +38,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.StringJoiner; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index 1161ba95bcd..ed7360d9342 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -21,27 +21,14 @@ */ package com.github._1c_syntax.bsl.languageserver.hover; -import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; -import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.MethodDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.ParameterDescription; -import com.github._1c_syntax.bsl.languageserver.context.symbol.description.TypeDescription; -import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; -import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.MarkupContent; import org.eclipse.lsp4j.MarkupKind; import org.eclipse.lsp4j.SymbolKind; import org.springframework.stereotype.Component; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.StringJoiner; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Построитель контента для всплывающего окна для {@link MethodSymbol}. diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java index d9fedd1df7d..7ca24d7b48e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java @@ -24,8 +24,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.context.symbol.VariableSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.variable.VariableDescription; -import com.github._1c_syntax.bsl.languageserver.utils.MdoRefBuilder; -import com.github._1c_syntax.bsl.languageserver.utils.Resources; import lombok.RequiredArgsConstructor; import org.eclipse.lsp4j.MarkupContent; import org.eclipse.lsp4j.MarkupKind; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 2edb4006c3a..4ee1a9c05f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -26,7 +26,6 @@ import com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol; import com.github._1c_syntax.bsl.languageserver.context.symbol.ParameterDefinition; import com.github._1c_syntax.bsl.languageserver.hover.DescriptionFormatter; -import com.github._1c_syntax.bsl.languageserver.hover.MethodSymbolMarkupContentBuilder; import com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex; import com.github._1c_syntax.bsl.languageserver.references.model.Reference; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; @@ -48,7 +47,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; /** * Поставщик подсказок о параметрах вызываемого метода. From fff4668b1017d556a639bcd7ed8c54714a70dc68 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 27 Dec 2024 16:40:16 +0100 Subject: [PATCH 584/595] Fix QF --- .../hover/DescriptionFormatter.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java index 1eccad44d88..277aac1ef03 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java @@ -34,6 +34,7 @@ import org.eclipse.lsp4j.SymbolKind; import org.springframework.stereotype.Component; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -124,7 +125,7 @@ public String getCallOptionsSection(MethodSymbol methodSymbol) { return getSectionWithCodeFences(callOptions, CALL_OPTIONS_KEY); } - public String getSectionWithCodeFences(List codeBlocks, String resourceKey) { + public String getSectionWithCodeFences(Collection codeBlocks, String resourceKey) { String codeFences = codeBlocks .stream() .map(codeBlock -> "```bsl\n" + codeBlock + "\n```") @@ -169,7 +170,7 @@ public String getLocation(VariableSymbol symbol) { } public String getSignature(MethodSymbol methodSymbol) { - String signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; + var signatureTemplate = "```bsl\n%s %s(%s)%s%s\n```"; String methodKind; if (methodSymbol.isFunction()) { @@ -194,10 +195,10 @@ public String getSignature(MethodSymbol methodSymbol) { } public String getSignature(AnnotationSymbol symbol, MethodSymbol methodSymbol) { - String signatureTemplate = "```bsl\n%s &%s(%s)\n```"; + var signatureTemplate = "```bsl\n%s &%s(%s)\n```"; - String annotationKind = getResourceString(ANNOTATION_KEY); - String annotationName = symbol.getName(); + var annotationKind = getResourceString(ANNOTATION_KEY); + var annotationName = symbol.getName(); var parameters = getParametersDescriptionPart(methodSymbol); @@ -210,11 +211,11 @@ public String getSignature(AnnotationSymbol symbol, MethodSymbol methodSymbol) { } public String getSignature(VariableSymbol symbol) { - String signatureTemplate = "```bsl\n%s %s%s\n```"; + var signatureTemplate = "```bsl\n%s %s%s\n```"; - String varKey = getResourceString(VARIABLE_KEY); - String name = symbol.getName(); - String export = symbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; + var varKey = getResourceString(VARIABLE_KEY); + var name = symbol.getName(); + var export = symbol.isExport() ? (" " + getResourceString(EXPORT_KEY)) : ""; return String.format( signatureTemplate, @@ -292,7 +293,7 @@ public String parameterToString(ParameterDescription parameter, int level) { } public String parameterToString(ParameterDefinition parameterDefinition) { - int level = 0; + var level = 0; var parameterDescription = parameterDefinition.getDescription(); if (parameterDescription.isPresent()) { return parameterToString(parameterDescription.get(), level); @@ -318,7 +319,7 @@ private Map typesToMap(List parameterTypes, int return types; } - private String typesMapToString(Map types, int level) { + private static String typesMapToString(Map types, int level) { var result = new StringJoiner(" \n"); // два пробела var indent = "  ".repeat(level); types.forEach((String key, String value) -> { From 83257cfcdb10eab3fe4ae4a2c9f77e2c36872de9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 29 Dec 2024 23:44:45 +0100 Subject: [PATCH 585/595] Jacoco bump --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index df27b6c9bef..8f00c6d1838 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -159,7 +159,7 @@ lombok { } jacoco { - toolVersion = "0.8.10" + toolVersion = "0.8.12" } java { From 7f21ea3669a40590840d27cc811307d9322a538f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 29 Dec 2024 23:46:51 +0100 Subject: [PATCH 586/595] Don't run tests twice on nix --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0002dc29356..6a2192ca624 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -57,7 +57,7 @@ jobs: - name: Build with Gradle if: matrix.prefix == 'nix' - run: ./gradlew build + run: ./gradlew build -x test - name: Upload jar to release if: matrix.prefix == 'nix' From e49cba5be5fd999b6a3b64b60f047c9806493630 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 31 Dec 2024 00:57:51 +0100 Subject: [PATCH 587/595] Drop lombok and jacoco implicit versions --- build.gradle.kts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8f00c6d1838..78a974144f0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -154,14 +154,6 @@ dependencies { testImplementation("org.awaitility", "awaitility", "4.2.2") } -lombok { - version.set("1.18.32") -} - -jacoco { - toolVersion = "0.8.12" -} - java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 @@ -203,7 +195,7 @@ tasks.test { } reports { - html.required.set(true) + html.required.set(tue) } val jmockitPath = classpath.find { it.name.contains("jmockit") }!!.absolutePath From 2402b23cc1df3eb9cec4612815b5069a3991ca15 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Tue, 31 Dec 2024 00:58:32 +0100 Subject: [PATCH 588/595] Update build.gradle.kts --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 78a974144f0..2d636ffa9fc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -195,7 +195,7 @@ tasks.test { } reports { - html.required.set(tue) + html.required.set(true) } val jmockitPath = classpath.find { it.name.contains("jmockit") }!!.absolutePath From e84a3f81035a6e76c042b406d5ad6e986a91d8e1 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 1 Jan 2025 13:06:05 +0000 Subject: [PATCH 589/595] happy new year --- .../bsl/languageserver/context/symbol/VariableSymbolCreate.java | 2 +- .../_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java | 2 +- .../github/_1c_syntax/bsl/languageserver/AutoServerInfo.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLTextDocumentService.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLWorkspaceService.java | 2 +- .../_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/LanguageClientHolder.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcher.java | 2 +- .../_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java | 2 +- .../aop/measures/ConditionalOnMeasuresEnabled.java | 2 +- .../aop/measures/DocumentContextLazyDataMeasurer.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollector.java | 2 +- .../bsl/languageserver/aop/measures/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/aop/package-info.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallback.java | 2 +- .../bsl/languageserver/aop/sentry/SentryScopeConfigurer.java | 2 +- .../_1c_syntax/bsl/languageserver/aop/sentry/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java | 2 +- .../bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphWalker.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConditionVertex.java | 2 +- .../bsl/languageserver/cfg/PreprocessorConstraints.java | 2 +- .../bsl/languageserver/cfg/StatementsBlockWriter.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java | 2 +- .../bsl/languageserver/cli/LanguageServerStartCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java | 2 +- .../bsl/languageserver/cli/lsp/FileAwarePrintWriter.java | 2 +- .../cli/lsp/LanguageServerLauncherConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/lsp/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/package-info.java | 2 +- .../languageserver/codeactions/AbstractQuickFixSupplier.java | 2 +- .../bsl/languageserver/codeactions/CodeActionSupplier.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplier.java | 2 +- .../codeactions/ExtractStructureConstructorSupplier.java | 2 +- .../languageserver/codeactions/FixAllCodeActionSupplier.java | 2 +- .../codeactions/GenerateStandardRegionsSupplier.java | 2 +- .../languageserver/codeactions/QuickFixCodeActionSupplier.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codeactions/package-info.java | 2 +- .../codelenses/AbstractMethodComplexityCodeLensSupplier.java | 2 +- .../codelenses/AbstractRunTestsCodeLensSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java | 2 +- .../bsl/languageserver/codelenses/CodeLensSupplier.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplier.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/DefaultCodeLensData.java | 2 +- .../languageserver/codelenses/RunAllTestsCodeLensSupplier.java | 2 +- .../bsl/languageserver/codelenses/RunTestCodeLensSupplier.java | 2 +- .../codelenses/infrastructure/CodeLensesConfiguration.java | 2 +- .../languageserver/codelenses/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/codelenses/package-info.java | 2 +- .../languageserver/codelenses/testrunner/TestRunnerAdapter.java | 2 +- .../bsl/languageserver/codelenses/testrunner/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/BSLColor.java | 2 +- .../bsl/languageserver/color/ColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/ColorPresentationSupplier.java | 2 +- .../color/ConstructorColorInformationSupplier.java | 2 +- .../color/ConstructorColorPresentationSupplier.java | 2 +- .../github/_1c_syntax/bsl/languageserver/color/WebColor.java | 2 +- .../bsl/languageserver/color/WebColorInformationSupplier.java | 2 +- .../bsl/languageserver/color/WebColorPresentationSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/color/package-info.java | 2 +- .../bsl/languageserver/commands/CommandArguments.java | 2 +- .../_1c_syntax/bsl/languageserver/commands/CommandSupplier.java | 2 +- .../bsl/languageserver/commands/DefaultCommandArguments.java | 2 +- .../ToggleCognitiveComplexityInlayHintsCommandSupplier.java | 2 +- .../ToggleCyclomaticComplexityInlayHintsCommandSupplier.java | 2 +- .../AbstractToggleComplexityInlayHintsCommandSupplier.java | 2 +- .../complexity/ToggleComplexityInlayHintsCommandArguments.java | 2 +- .../bsl/languageserver/commands/complexity/package-info.java | 2 +- .../commands/infrastructure/CommandsConfiguration.java | 2 +- .../languageserver/commands/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/commands/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/configuration/Language.java | 2 +- .../configuration/LanguageServerConfiguration.java | 2 +- .../bsl/languageserver/configuration/SendErrorsMode.java | 2 +- .../languageserver/configuration/codelens/CodeLensOptions.java | 2 +- .../configuration/codelens/TestRunnerAdapterOptions.java | 2 +- .../bsl/languageserver/configuration/codelens/package-info.java | 2 +- .../configuration/databind/ParametersDeserializer.java | 2 +- .../bsl/languageserver/configuration/databind/package-info.java | 2 +- .../configuration/diagnostics/ComputeTrigger.java | 2 +- .../configuration/diagnostics/DiagnosticsOptions.java | 2 +- .../bsl/languageserver/configuration/diagnostics/Mode.java | 2 +- .../languageserver/configuration/diagnostics/SkipSupport.java | 2 +- .../configuration/diagnostics/SubsystemFilter.java | 2 +- .../languageserver/configuration/diagnostics/package-info.java | 2 +- .../configuration/documentlink/DocumentLinkOptions.java | 2 +- .../languageserver/configuration/documentlink/package-info.java | 2 +- .../events/LanguageServerConfigurationChangedEvent.java | 2 +- .../bsl/languageserver/configuration/events/package-info.java | 2 +- .../configuration/formating/FormattingOptions.java | 2 +- .../languageserver/configuration/formating/package-info.java | 2 +- .../configuration/inlayhints/InlayHintOptions.java | 2 +- .../languageserver/configuration/inlayhints/package-info.java | 2 +- .../bsl/languageserver/configuration/package-info.java | 2 +- .../configuration/watcher/ConfigurationFileChangeListener.java | 2 +- .../configuration/watcher/ConfigurationFileSystemWatcher.java | 2 +- .../bsl/languageserver/configuration/watcher/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/DocumentContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/context/FileType.java | 2 +- .../_1c_syntax/bsl/languageserver/context/MetricStorage.java | 2 +- .../_1c_syntax/bsl/languageserver/context/ServerContext.java | 2 +- .../context/computer/CognitiveComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/ComplexityData.java | 2 +- .../context/computer/ComplexitySecondaryLocation.java | 2 +- .../bsl/languageserver/context/computer/Computer.java | 2 +- .../context/computer/CyclomaticComplexityComputer.java | 2 +- .../bsl/languageserver/context/computer/DiagnosticComputer.java | 2 +- .../context/computer/DiagnosticIgnoranceComputer.java | 2 +- .../languageserver/context/computer/MethodSymbolComputer.java | 2 +- .../languageserver/context/computer/ModuleSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/QueryComputer.java | 2 +- .../languageserver/context/computer/RegionSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/SymbolTreeComputer.java | 2 +- .../languageserver/context/computer/VariableSymbolComputer.java | 2 +- .../bsl/languageserver/context/computer/package-info.java | 2 +- .../context/events/DocumentContextContentChangedEvent.java | 2 +- .../context/events/ServerContextPopulatedEvent.java | 2 +- .../bsl/languageserver/context/events/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/context/package-info.java | 2 +- .../languageserver/context/symbol/AbstractVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/AnnotationSymbol.java | 2 +- .../bsl/languageserver/context/symbol/Describable.java | 2 +- .../bsl/languageserver/context/symbol/Exportable.java | 2 +- .../languageserver/context/symbol/IntBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/MethodSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ModuleSymbol.java | 2 +- .../bsl/languageserver/context/symbol/ParameterDefinition.java | 2 +- .../bsl/languageserver/context/symbol/RegionSymbol.java | 2 +- .../languageserver/context/symbol/ShortBasedVariableSymbol.java | 2 +- .../bsl/languageserver/context/symbol/SourceDefinedSymbol.java | 2 +- .../_1c_syntax/bsl/languageserver/context/symbol/Symbol.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTree.java | 2 +- .../bsl/languageserver/context/symbol/SymbolTreeVisitor.java | 2 +- .../bsl/languageserver/context/symbol/VariableSymbol.java | 2 +- .../languageserver/context/symbol/annotations/Annotation.java | 2 +- .../context/symbol/annotations/AnnotationKind.java | 2 +- .../symbol/annotations/AnnotationParameterDefinition.java | 2 +- .../context/symbol/annotations/CompilerDirectiveKind.java | 2 +- .../languageserver/context/symbol/annotations/package-info.java | 2 +- .../context/symbol/description/DescriptionReader.java | 2 +- .../context/symbol/description/MethodDescription.java | 2 +- .../context/symbol/description/ParameterDescription.java | 2 +- .../symbol/description/SourceDefinedSymbolDescription.java | 2 +- .../context/symbol/description/TypeDescription.java | 2 +- .../languageserver/context/symbol/description/package-info.java | 2 +- .../bsl/languageserver/context/symbol/package-info.java | 2 +- .../context/symbol/variable/VariableDescription.java | 2 +- .../languageserver/context/symbol/variable/VariableKind.java | 2 +- .../bsl/languageserver/databind/ObjectMapperConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java | 2 +- .../_1c_syntax/bsl/languageserver/databind/package-info.java | 2 +- .../diagnostics/AbstractCommonModuleNameDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnostic.java | 2 +- .../diagnostics/AbstractExecuteExternalCodeDiagnostic.java | 2 +- .../diagnostics/AbstractExpressionTreeDiagnostic.java | 2 +- .../diagnostics/AbstractFindMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractListenerDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractMetadataDiagnostic.java | 2 +- .../diagnostics/AbstractMultilingualStringDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLListenerDiagnostic.java | 2 +- .../diagnostics/AbstractSDBLVisitorDiagnostic.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnostic.java | 2 +- .../languageserver/diagnostics/AbstractVisitorDiagnostic.java | 2 +- .../diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BSLDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnostic.java | 2 +- .../diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CachedPublicDiagnostic.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnostic.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnostic.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnostic.java | 2 +- .../languageserver/diagnostics/CodeOutOfRegionDiagnostic.java | 2 +- .../diagnostics/CognitiveComplexityDiagnostic.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java | 2 +- .../diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java | 2 +- .../diagnostics/CommonModuleAssignDiagnostic.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnostic.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnostic.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnostic.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnostic.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnostic.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnostic.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnostic.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnostic.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnostic.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnostic.java | 2 +- .../diagnostics/DenyIncompleteValuesDiagnostic.java | 2 +- .../diagnostics/DeprecatedAttributes8312Diagnostic.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedFindDiagnostic.java | 2 +- .../languageserver/diagnostics/DeprecatedMessageDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8310Diagnostic.java | 2 +- .../diagnostics/DeprecatedMethods8317Diagnostic.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticStorage.java | 2 +- .../languageserver/diagnostics/DisableSafeModeDiagnostic.java | 2 +- .../languageserver/diagnostics/DoubleNegativesDiagnostic.java | 2 +- .../languageserver/diagnostics/DuplicateRegionDiagnostic.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnostic.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyCodeBlockDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/EmptyStatementDiagnostic.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnostic.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnostic.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnostic.java | 2 +- .../languageserver/diagnostics/ExportVariablesDiagnostic.java | 2 +- .../diagnostics/ExternalAppStartingDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java | 2 +- .../languageserver/diagnostics/FileSystemAccessDiagnostic.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnostic.java | 2 +- .../languageserver/diagnostics/FormDataToValueDiagnostic.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnostic.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnostic.java | 2 +- .../diagnostics/FunctionOutParameterDiagnostic.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java | 2 +- .../diagnostics/GlobalContextMethodCollision8312Diagnostic.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnostic.java | 2 +- .../diagnostics/IfConditionComplexityDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnostic.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnostic.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnostic.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnostic.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnostic.java | 2 +- .../languageserver/diagnostics/InternetAccessDiagnostic.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnostic.java | 2 +- .../languageserver/diagnostics/IsInRoleMethodDiagnostic.java | 2 +- .../languageserver/diagnostics/JoinWithSubQueryDiagnostic.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnostic.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/LineLengthDiagnostic.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MagicNumberDiagnostic.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MethodSizeDiagnostic.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnostic.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnostic.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnostic.java | 2 +- .../diagnostics/MissingEventSubscriptionHandlerDiagnostic.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnostic.java | 2 +- .../diagnostics/MissingReturnedValueDescriptionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnostic.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnostic.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnostic.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnostic.java | 2 +- .../MultilingualStringHasAllDeclaredLanguagesDiagnostic.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnostic.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnostic.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnostic.java | 2 +- .../languageserver/diagnostics/NestedStatementsDiagnostic.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnostic.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnostic.java | 2 +- .../languageserver/diagnostics/NonStandardRegionDiagnostic.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnostic.java | 2 +- .../languageserver/diagnostics/NumberOfParamsDiagnostic.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java | 2 +- .../diagnostics/OneStatementPerLineDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnostic.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/ParseErrorDiagnostic.java | 2 +- .../diagnostics/PrivilegedModuleMethodCallDiagnostic.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnostic.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnostic.java | 2 +- .../languageserver/diagnostics/QueryParseErrorDiagnostic.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/QuickFixProvider.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/RefOveruseDiagnostic.java | 2 +- .../diagnostics/ReservedParameterNamesDiagnostic.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnostic.java | 2 +- .../diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnostic.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfAssignDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java | 2 +- .../languageserver/diagnostics/SemicolonPresenceDiagnostic.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnostic.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnostic.java | 2 +- .../languageserver/diagnostics/SetPrivilegedModeDiagnostic.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnostic.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnostic.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnostic.java | 2 +- .../languageserver/diagnostics/ThisObjectAssignDiagnostic.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnostic.java | 2 +- .../languageserver/diagnostics/TooManyReturnsDiagnostic.java | 2 +- .../TransferringParametersBetweenClientAndServerDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnostic.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnostic.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnostic.java | 2 +- .../languageserver/diagnostics/UnreachableCodeDiagnostic.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedLocalMethodDiagnostic.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnostic.java | 2 +- .../languageserver/diagnostics/UnusedParametersDiagnostic.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnostic.java | 2 +- .../languageserver/diagnostics/UseLessForEachDiagnostic.java | 2 +- .../diagnostics/UseSystemInformationDiagnostic.java | 2 +- .../diagnostics/UsingCancelParameterDiagnostic.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnostic.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingHardcodePathDiagnostic.java | 2 +- .../diagnostics/UsingHardcodeSecretInformationDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingLikeInQueryDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingModalWindowsDiagnostic.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnostic.java | 2 +- .../languageserver/diagnostics/UsingServiceTagDiagnostic.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java | 2 +- .../VirtualTableCallWithoutParametersDiagnostic.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnostic.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnostic.java | 2 +- .../diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnostic.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnostic.java | 2 +- .../bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java | 2 +- .../diagnostics/infrastructure/DiagnosticBeanPostProcessor.java | 2 +- .../infrastructure/DiagnosticInfosConfiguration.java | 2 +- .../diagnostics/infrastructure/DiagnosticObjectProvider.java | 2 +- .../diagnostics/infrastructure/DiagnosticsConfiguration.java | 2 +- .../bsl/languageserver/diagnostics/infrastructure/Disabled.java | 2 +- .../languageserver/diagnostics/infrastructure/package-info.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticCode.java | 2 +- .../diagnostics/metadata/DiagnosticCompatibilityMode.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticMetadata.java | 2 +- .../diagnostics/metadata/DiagnosticParameter.java | 2 +- .../diagnostics/metadata/DiagnosticParameterInfo.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticScope.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticSeverity.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticTag.java | 2 +- .../bsl/languageserver/diagnostics/metadata/DiagnosticType.java | 2 +- .../bsl/languageserver/diagnostics/metadata/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/package-info.java | 2 +- .../bsl/languageserver/diagnostics/typo/JLanguageToolPool.java | 2 +- .../documentlink/DiagnosticDescriptionDocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/DocumentLinkSupplier.java | 2 +- .../bsl/languageserver/documentlink/package-info.java | 2 +- .../events/LanguageServerInitializeRequestReceivedEvent.java | 2 +- .../_1c_syntax/bsl/languageserver/events/package-info.java | 2 +- .../folding/AbstractCommentFoldingRangeSupplier.java | 2 +- .../languageserver/folding/CodeBlockFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/CommentFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/FoldingRangeSupplier.java | 2 +- .../languageserver/folding/PreprocIfFoldingRangeSupplier.java | 2 +- .../folding/QueryCommentFoldingRangeSupplier.java | 2 +- .../folding/QueryPackageFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/RegionFoldingRangeSupplier.java | 2 +- .../bsl/languageserver/folding/UseFoldingRangeSupplier.java | 2 +- .../_1c_syntax/bsl/languageserver/folding/package-info.java | 2 +- .../hover/AnnotationSymbolMarkupContentBuilder.java | 2 +- .../bsl/languageserver/hover/DescriptionFormatter.java | 2 +- .../bsl/languageserver/hover/MarkupContentBuilder.java | 2 +- .../languageserver/hover/MarkupContentBuilderConfiguration.java | 2 +- .../languageserver/hover/MethodSymbolMarkupContentBuilder.java | 2 +- .../hover/VariableSymbolMarkupContentBuilder.java | 2 +- .../_1c_syntax/bsl/languageserver/hover/package-info.java | 2 +- .../infrastructure/LanguageClientAwareAppender.java | 2 +- .../bsl/languageserver/infrastructure/LogbackConfiguration.java | 2 +- .../languageserver/infrastructure/SchedulingConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/UtilsConfiguration.java | 2 +- .../bsl/languageserver/infrastructure/package-info.java | 2 +- .../inlayhints/AbstractComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CognitiveComplexityInlayHintSupplier.java | 2 +- .../inlayhints/CyclomaticComplexityInlayHintSupplier.java | 2 +- .../bsl/languageserver/inlayhints/InlayHintSupplier.java | 2 +- .../inlayhints/SourceDefinedMethodCallInlayHintSupplier.java | 2 +- .../inlayhints/infrastructure/InlayHintsConfiguration.java | 2 +- .../languageserver/inlayhints/infrastructure/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/inlayhints/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java | 2 +- .../bsl/languageserver/jsonrpc/ProtocolExtension.java | 2 +- .../_1c_syntax/bsl/languageserver/jsonrpc/package-info.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/package-info.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProvider.java | 2 +- .../bsl/languageserver/providers/CodeActionProvider.java | 2 +- .../bsl/languageserver/providers/CodeLensProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/ColorProvider.java | 2 +- .../bsl/languageserver/providers/CommandProvider.java | 2 +- .../bsl/languageserver/providers/DefinitionProvider.java | 2 +- .../bsl/languageserver/providers/DiagnosticProvider.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProvider.java | 2 +- .../bsl/languageserver/providers/DocumentSymbolProvider.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/FormatProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/HoverProvider.java | 2 +- .../bsl/languageserver/providers/InlayHintProvider.java | 2 +- .../bsl/languageserver/providers/ReferencesProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/RenameProvider.java | 2 +- .../bsl/languageserver/providers/SelectionRangeProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/SymbolProvider.java | 2 +- .../_1c_syntax/bsl/languageserver/providers/package-info.java | 2 +- .../bsl/languageserver/recognizer/AbstractDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetector.java | 2 +- .../bsl/languageserver/recognizer/CodeRecognizer.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetector.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetector.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetector.java | 2 +- .../bsl/languageserver/recognizer/LanguageFootprint.java | 2 +- .../bsl/languageserver/recognizer/PatternDetector.java | 2 +- .../_1c_syntax/bsl/languageserver/recognizer/package-info.java | 2 +- .../languageserver/references/AnnotationReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceIndex.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFiller.java | 2 +- .../references/ReferenceIndexReferenceFinder.java | 2 +- .../bsl/languageserver/references/ReferenceResolver.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinder.java | 2 +- .../bsl/languageserver/references/model/Location.java | 2 +- .../bsl/languageserver/references/model/LocationRepository.java | 2 +- .../bsl/languageserver/references/model/OccurrenceType.java | 2 +- .../bsl/languageserver/references/model/Reference.java | 2 +- .../_1c_syntax/bsl/languageserver/references/model/Symbol.java | 2 +- .../bsl/languageserver/references/model/SymbolOccurrence.java | 2 +- .../references/model/SymbolOccurrenceRepository.java | 2 +- .../bsl/languageserver/references/model/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/references/package-info.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporter.java | 2 +- .../bsl/languageserver/reporters/DiagnosticReporter.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReport.java | 2 +- .../bsl/languageserver/reporters/GenericIssueReporter.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java | 2 +- .../bsl/languageserver/reporters/JUnitTestSuites.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/JsonReporter.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregator.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/SarifReporter.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntry.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java | 2 +- .../bsl/languageserver/reporters/data/AnalysisInfo.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java | 2 +- .../bsl/languageserver/reporters/data/package-info.java | 2 +- .../reporters/databind/AnalysisInfoObjectMapper.java | 2 +- .../reporters/databind/DiagnosticCodeDeserializer.java | 2 +- .../reporters/databind/DiagnosticCodeSerializer.java | 2 +- .../bsl/languageserver/reporters/databind/DiagnosticMixIn.java | 2 +- .../bsl/languageserver/reporters/databind/package-info.java | 2 +- .../reporters/infrastructure/ReportersConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/reporters/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Keywords.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Methods.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Modules.java | 2 +- .../bsl/languageserver/utils/MultilingualStringAnalyser.java | 2 +- .../languageserver/utils/NamedForkJoinWorkerThreadFactory.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/NotifyDescription.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Regions.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/RelatedInformation.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/Resources.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Strings.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java | 2 +- .../com/github/_1c_syntax/bsl/languageserver/utils/Trees.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java | 2 +- .../languageserver/utils/expressiontree/AbstractCallNode.java | 2 +- .../utils/expressiontree/BinaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslExpression.java | 2 +- .../languageserver/utils/expressiontree/BslOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/BslOperator.java | 2 +- .../utils/expressiontree/ConstructorCallNode.java | 2 +- .../utils/expressiontree/DefaultNodeEqualityComparer.java | 2 +- .../languageserver/utils/expressiontree/ExpressionNodeType.java | 2 +- .../utils/expressiontree/ExpressionTreeBuildingVisitor.java | 2 +- .../utils/expressiontree/ExpressionTreeVisitor.java | 2 +- .../bsl/languageserver/utils/expressiontree/MethodCallNode.java | 2 +- .../utils/expressiontree/NodeEqualityComparer.java | 2 +- .../utils/expressiontree/SkippedCallArgumentNode.java | 2 +- .../languageserver/utils/expressiontree/TerminalSymbolNode.java | 2 +- .../utils/expressiontree/TernaryOperatorNode.java | 2 +- .../expressiontree/TransitiveOperationsIgnoringComparer.java | 2 +- .../languageserver/utils/expressiontree/UnaryOperationNode.java | 2 +- .../bsl/languageserver/utils/expressiontree/package-info.java | 2 +- .../_1c_syntax/bsl/languageserver/utils/package-info.java | 2 +- .../bsl/languageserver/websocket/LSPWebSocketEndpoint.java | 2 +- .../bsl/languageserver/websocket/WebSocketConfiguration.java | 2 +- .../_1c_syntax/bsl/languageserver/websocket/package-info.java | 2 +- .../bsl/languageserver/AnalyzeProjectOnStartTest.java | 2 +- .../_1c_syntax/bsl/languageserver/AutoServerInfoTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java | 2 +- .../_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java | 2 +- .../bsl/languageserver/BSLTextDocumentServiceTest.java | 2 +- .../_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java | 2 +- .../bsl/languageserver/WorkDoneProgressHelperTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasureCollectorTest.java | 2 +- .../bsl/languageserver/aop/measures/MeasuresSubsystemTest.java | 2 +- .../aop/sentry/PermissionFilterBeforeSendCallbackTest.java | 2 +- .../bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java | 2 +- .../codeactions/DisableDiagnosticTriggeringSupplierTest.java | 2 +- .../codeactions/ExtractStructureConstructorSupplierTest.java | 2 +- .../codeactions/GenerateStandardRegionsSupplierTest.java | 2 +- .../bsl/languageserver/codeactions/QuickFixSupplierTest.java | 2 +- .../codelenses/CognitiveComplexityCodeLensSupplierTest.java | 2 +- .../codelenses/CyclomaticComplexityCodeLensSupplierTest.java | 2 +- .../codelenses/RunAllTestsCodeLensSupplierTest.java | 2 +- .../languageserver/codelenses/RunTestCodeLensSupplierTest.java | 2 +- .../color/ConstructorColorInformationSupplierTest.java | 2 +- .../color/ConstructorColorPresentationSupplierTest.java | 2 +- .../languageserver/color/WebColorInformationSupplierTest.java | 2 +- .../languageserver/color/WebColorPresentationSupplierTest.java | 2 +- .../ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java | 2 +- ...ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java | 2 +- .../bsl/languageserver/configuration/ConfigurationTest.java | 2 +- .../languageserver/configuration/GlobalConfigurationTest.java | 2 +- .../configuration/LanguageServerConfigurationTest.java | 2 +- .../watcher/ConfigurationFileSystemWatcherTest.java | 2 +- .../languageserver/context/AbstractServerContextAwareTest.java | 2 +- .../bsl/languageserver/context/DocumentContextTest.java | 2 +- .../bsl/languageserver/context/ServerContextTest.java | 2 +- .../context/computer/CognitiveComplexityComputerTest.java | 2 +- .../context/computer/CyclomaticComplexityComputerTest.java | 2 +- .../context/computer/DiagnosticIgnoranceComputerTest.java | 2 +- .../context/computer/MethodSymbolComputerTest.java | 2 +- .../context/computer/ModuleSymbolComputerTest.java | 2 +- .../bsl/languageserver/context/computer/QueryComputerTest.java | 2 +- .../languageserver/context/computer/SymbolTreeComputerTest.java | 2 +- .../bsl/languageserver/context/computer/VariableSymbolTest.java | 2 +- .../context/symbol/description/MethodDescriptionTest.java | 2 +- .../bsl/languageserver/diagnostics/AbstractDiagnosticTest.java | 2 +- .../diagnostics/AbstractSymbolTreeDiagnosticTest.java | 2 +- .../AllFunctionPathMustHaveReturnDiagnosticTest.java | 2 +- .../diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java | 2 +- .../BeginTransactionBeforeTryCatchDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CachedPublicDiagnosticTest.java | 2 +- .../diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java | 2 +- .../diagnostics/CodeAfterAsyncCallDiagnosticTest.java | 2 +- .../diagnostics/CodeBlockBeforeSubDiagnosticTest.java | 2 +- .../diagnostics/CodeOutOfRegionDiagnosticTest.java | 2 +- .../diagnostics/CognitiveComplexityDiagnosticTest.java | 2 +- .../diagnostics/CommandModuleExportMethodsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/CommentedCodeDiagnosticTest.java | 2 +- .../CommitTransactionOutsideTryCatchDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleAssignDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleInvalidTypeDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleMissingAPIDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameCachedDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameClientServerDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameFullAccessDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameGlobalDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameServerCallDiagnosticTest.java | 2 +- .../diagnostics/CommonModuleNameWordsDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveLostDiagnosticTest.java | 2 +- .../diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java | 2 +- .../diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java | 2 +- .../diagnostics/CrazyMultilineStringDiagnosticTest.java | 2 +- .../diagnostics/CreateQueryInCycleDiagnosticTest.java | 2 +- .../diagnostics/CyclomaticComplexityDiagnosticTest.java | 2 +- .../diagnostics/DataExchangeLoadingDiagnosticTest.java | 2 +- .../diagnostics/DeletingCollectionItemDiagnosticTest.java | 2 +- .../diagnostics/DenyIncompleteValuesDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedAttributes8312DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedCurrentDateDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedFindDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMessageDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethodCallDiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8310DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedMethods8317DiagnosticTest.java | 2 +- .../diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticInfosTest.java | 2 +- .../bsl/languageserver/diagnostics/DiagnosticsTest.java | 2 +- .../diagnostics/DisableSafeModeDiagnosticTest.java | 2 +- .../diagnostics/DoubleNegativesDiagnosticTest.java | 2 +- .../diagnostics/DuplicateRegionDiagnosticTest.java | 2 +- .../diagnostics/DuplicateStringLiteralDiagnosticTest.java | 2 +- .../DuplicatedInsertionIntoCollectionDiagnosticTest.java | 2 +- .../diagnostics/EmptyCodeBlockDiagnosticTest.java | 2 +- .../languageserver/diagnostics/EmptyRegionDiagnosticTest.java | 2 +- .../diagnostics/EmptyStatementDiagnosticTest.java | 2 +- .../diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java | 2 +- .../diagnostics/ExecuteExternalCodeDiagnosticTest.java | 2 +- .../ExecuteExternalCodeInCommonModuleDiagnosticTest.java | 2 +- .../diagnostics/ExportVariablesDiagnosticTest.java | 2 +- .../diagnostics/ExternalAppStartingDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ExtraCommasDiagnosticTest.java | 2 +- .../diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java | 2 +- .../diagnostics/FileSystemAccessDiagnosticTest.java | 2 +- .../diagnostics/ForbiddenMetadataNameDiagnosticTest.java | 2 +- .../diagnostics/FormDataToValueDiagnosticTest.java | 2 +- .../diagnostics/FullOuterJoinQueryDiagnosticTest.java | 2 +- .../diagnostics/FunctionNameStartsWithGetDiagnosticTest.java | 2 +- .../diagnostics/FunctionOutParameterDiagnosticTest.java | 2 +- .../diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java | 2 +- .../diagnostics/FunctionShouldHaveReturnDiagnosticTest.java | 2 +- .../languageserver/diagnostics/GetFormMethodDiagnosticTest.java | 2 +- .../GlobalContextMethodCollision8312DiagnosticTest.java | 2 +- .../diagnostics/IdenticalExpressionsDiagnosticTest.java | 2 +- .../diagnostics/IfConditionComplexityDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java | 2 +- .../diagnostics/IfElseDuplicatedConditionDiagnosticTest.java | 2 +- .../diagnostics/IfElseIfEndsWithElseDiagnosticTest.java | 2 +- .../diagnostics/IncorrectLineBreakDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java | 2 +- .../diagnostics/InternetAccessDiagnosticTest.java | 2 +- .../diagnostics/InvalidCharacterInFileDiagnosticTest.java | 2 +- .../diagnostics/IsInRoleMethodDiagnosticTest.java | 2 +- .../diagnostics/JoinWithSubQueryDiagnosticTest.java | 2 +- .../diagnostics/JoinWithVirtualTableDiagnosticTest.java | 2 +- .../diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java | 2 +- .../languageserver/diagnostics/LineLengthDiagnosticTest.java | 2 +- .../LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MagicNumberDiagnosticTest.java | 2 +- .../diagnostics/MetadataObjectNameLengthDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MethodSizeDiagnosticTest.java | 2 +- .../diagnostics/MissedRequiredParameterDiagnosticTest.java | 2 +- .../diagnostics/MissingCodeTryCatchExDiagnosticTest.java | 2 +- .../diagnostics/MissingCommonModuleMethodDiagnosticTest.java | 2 +- .../MissingEventSubscriptionHandlerDiagnosticTest.java | 2 +- .../diagnostics/MissingParameterDescriptionDiagnosticTest.java | 2 +- .../MissingReturnedValueDescriptionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/MissingSpaceDiagnosticTest.java | 2 +- .../diagnostics/MissingTempStorageDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java | 2 +- .../diagnostics/MissingVariablesDescriptionDiagnosticTest.java | 2 +- .../diagnostics/MultilineStringInQueryDiagnosticTest.java | 2 +- ...MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java | 2 +- .../MultilingualStringUsingWithTemplateDiagnosticTest.java | 2 +- .../NestedConstructorsInStructureDeclarationDiagnosticTest.java | 2 +- .../diagnostics/NestedFunctionInParametersDiagnosticTest.java | 2 +- .../diagnostics/NestedStatementsDiagnosticTest.java | 2 +- .../diagnostics/NestedTernaryOperatorDiagnosticTest.java | 2 +- .../diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java | 2 +- .../diagnostics/NonStandardRegionDiagnosticTest.java | 2 +- .../diagnostics/NumberOfOptionalParamsDiagnosticTest.java | 2 +- .../diagnostics/NumberOfParamsDiagnosticTest.java | 2 +- .../NumberOfValuesInStructureConstructorDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OSUsersMethodDiagnosticTest.java | 2 +- .../diagnostics/OneStatementPerLineDiagnosticTest.java | 2 +- .../languageserver/diagnostics/OrderOfParamsDiagnosticTest.java | 2 +- .../diagnostics/OrdinaryAppSupportDiagnosticTest.java | 2 +- .../diagnostics/PairingBrokenTransactionDiagnosticTest.java | 2 +- .../languageserver/diagnostics/ParseErrorDiagnosticTest.java | 2 +- .../diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java | 2 +- .../diagnostics/ProcedureReturnsValueDiagnosticTest.java | 2 +- .../diagnostics/PublicMethodsDescriptionDiagnosticTest.java | 2 +- .../diagnostics/QueryParseErrorDiagnosticTest.java | 2 +- .../diagnostics/QueryToMissingMetadataDiagnosticTest.java | 2 +- .../diagnostics/RedundantAccessToObjectDiagnosticTest.java | 2 +- .../languageserver/diagnostics/RefOveruseDiagnosticTest.java | 2 +- .../diagnostics/ReservedParameterNamesDiagnosticTest.java | 2 +- .../diagnostics/RewriteMethodParameterDiagnosticTest.java | 2 +- .../SameMetadataObjectAndChildNamesDiagnosticTest.java | 2 +- .../diagnostics/ScheduledJobHandlerDiagnosticTest.java | 2 +- .../diagnostics/SelectTopWithoutOrderByDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfAssignDiagnosticTest.java | 2 +- .../languageserver/diagnostics/SelfInsertionDiagnosticTest.java | 2 +- .../diagnostics/SemicolonPresenceDiagnosticTest.java | 2 +- .../diagnostics/ServerSideExportFormMethodDiagnosticTest.java | 2 +- .../diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java | 2 +- .../diagnostics/SetPrivilegedModeDiagnosticTest.java | 2 +- .../diagnostics/SeveralCompilerDirectivesDiagnosticTest.java | 2 +- .../_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java | 2 +- .../diagnostics/SpaceAtStartCommentDiagnosticTest.java | 2 +- .../diagnostics/StyleElementConstructorsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/TempFilesDirDiagnosticTest.java | 2 +- .../diagnostics/TernaryOperatorUsageDiagnosticTest.java | 2 +- .../diagnostics/ThisObjectAssignDiagnosticTest.java | 2 +- .../diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java | 2 +- .../diagnostics/TooManyReturnsDiagnosticTest.java | 2 +- ...nsferringParametersBetweenClientAndServerDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/TypoDiagnosticTest.java | 2 +- .../diagnostics/UnaryPlusInConcatenationDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java | 2 +- .../diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java | 2 +- .../diagnostics/UnreachableCodeDiagnosticTest.java | 2 +- .../diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalMethodDiagnosticTest.java | 2 +- .../diagnostics/UnusedLocalVariableDiagnosticTest.java | 2 +- .../diagnostics/UnusedParametersDiagnosticTest.java | 2 +- .../diagnostics/UsageWriteLogEventDiagnosticTest.java | 2 +- .../diagnostics/UseLessForEachDiagnosticTest.java | 2 +- .../diagnostics/UseSystemInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingCancelParameterDiagnosticTest.java | 2 +- .../diagnostics/UsingExternalCodeToolsDiagnosticTest.java | 2 +- .../diagnostics/UsingFindElementByStringDiagnosticTest.java | 2 +- .../bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java | 2 +- .../diagnostics/UsingHardcodePathDiagnosticTest.java | 2 +- .../UsingHardcodeSecretInformationDiagnosticTest.java | 2 +- .../diagnostics/UsingLikeInQueryDiagnosticTest.java | 2 +- .../diagnostics/UsingModalWindowsDiagnosticTest.java | 2 +- .../diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java | 2 +- .../diagnostics/UsingServiceTagDiagnosticTest.java | 2 +- .../diagnostics/UsingSynchronousCallsDiagnosticTest.java | 2 +- .../languageserver/diagnostics/UsingThisFormDiagnosticTest.java | 2 +- .../VirtualTableCallWithoutParametersDiagnosticTest.java | 2 +- .../diagnostics/WrongDataPathForFormElementsDiagnosticTest.java | 2 +- .../diagnostics/WrongHttpServiceHandlerDiagnosticTest.java | 2 +- .../WrongUseFunctionProceedWithCallDiagnosticTest.java | 2 +- .../WrongUseOfRollbackTransactionMethodDiagnosticTest.java | 2 +- .../diagnostics/WrongWebServiceHandlerDiagnosticTest.java | 2 +- .../languageserver/diagnostics/YoLetterUsageDiagnosticTest.java | 2 +- .../languageserver/diagnostics/metadata/DiagnosticInfoTest.java | 2 +- .../DiagnosticDescriptionDocumentLinkSupplierTest.java | 2 +- .../folding/QueryCommentFoldingRangeSupplierTest.java | 2 +- .../folding/QueryPackageFoldingRangeSupplierTest.java | 2 +- .../hover/MethodSymbolMarkupContentBuilderTest.java | 2 +- .../hover/VariableSymbolMarkupContentBuilderTest.java | 2 +- .../inlayhints/CognitiveComplexityInlayHintSupplierTest.java | 2 +- .../inlayhints/CyclomaticComplexityInlayHintSupplierTest.java | 2 +- .../SourceDefinedMethodCallInlayHintSupplierTest.java | 2 +- .../bsl/languageserver/providers/CallHierarchyProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeActionProviderTest.java | 2 +- .../bsl/languageserver/providers/CodeLensProviderTest.java | 2 +- .../bsl/languageserver/providers/ColorProviderTest.java | 2 +- .../bsl/languageserver/providers/CommandProviderTest.java | 2 +- .../bsl/languageserver/providers/DefinitionProviderTest.java | 2 +- .../bsl/languageserver/providers/DiagnosticProviderTest.java | 2 +- .../bsl/languageserver/providers/DocumentLinkProviderTest.java | 2 +- .../languageserver/providers/DocumentSymbolProviderTest.java | 2 +- .../bsl/languageserver/providers/FoldingRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/FormatProviderTest.java | 2 +- .../bsl/languageserver/providers/HoverProviderTest.java | 2 +- .../bsl/languageserver/providers/InlayHintProviderTest.java | 2 +- .../bsl/languageserver/providers/ReferencesProviderTest.java | 2 +- .../bsl/languageserver/providers/RenameProviderTest.java | 2 +- .../languageserver/providers/SelectionRangeProviderTest.java | 2 +- .../bsl/languageserver/providers/SymbolProviderTest.java | 2 +- .../bsl/languageserver/recognizer/CamelCaseDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/ContainsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/EndWithDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/KeywordsDetectorTest.java | 2 +- .../bsl/languageserver/recognizer/PatternDetectorTest.java | 2 +- .../references/AnnotationReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexFillerTest.java | 2 +- .../references/ReferenceIndexReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/ReferenceIndexTest.java | 2 +- .../bsl/languageserver/references/ReferenceResolverTest.java | 2 +- .../SourceDefinedSymbolDeclarationReferenceFinderTest.java | 2 +- .../bsl/languageserver/references/model/ReferenceTest.java | 2 +- .../bsl/languageserver/reporters/ConsoleReporterTest.java | 2 +- .../bsl/languageserver/reporters/GenericReporterTest.java | 2 +- .../bsl/languageserver/reporters/JUnitReporterTest.java | 2 +- .../bsl/languageserver/reporters/JsonReporterTest.java | 2 +- .../bsl/languageserver/reporters/ReportersAggregatorTest.java | 2 +- .../bsl/languageserver/reporters/SarifReporterTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReportEntryTest.java | 2 +- .../bsl/languageserver/reporters/TSLintReporterTest.java | 2 +- .../util/AbstractDirtyContextTestExecutionListener.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/Assertions.java | 2 +- .../util/CleanupContextBeforeClassAndAfterClass.java | 2 +- .../util/CleanupContextBeforeClassAndAfterEachTestMethod.java | 2 +- ...rtyContextBeforeClassAndAfterClassTestExecutionListener.java | 2 +- ...ntextBeforeClassAndAfterTestMethodTestExecutionListener.java | 2 +- .../util/RefreshContextTestExecutionListener.java | 2 +- .../bsl/languageserver/util/TestApplicationContext.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/TestUtils.java | 2 +- .../bsl/languageserver/util/assertions/CodeActionAssert.java | 2 +- .../languageserver/util/assertions/ColorInformationAssert.java | 2 +- .../util/assertions/ColorInformationAssertFactory.java | 2 +- .../languageserver/util/assertions/ColorInformationsAssert.java | 2 +- .../languageserver/util/assertions/ColorPresentationAssert.java | 2 +- .../util/assertions/ColorPresentationAssertFactory.java | 2 +- .../util/assertions/ColorPresentationsAssert.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticAssert.java | 2 +- .../languageserver/util/assertions/DiagnosticAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/DiagnosticsAssert.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangeAssert.java | 2 +- .../util/assertions/FoldingRangeAssertFactory.java | 2 +- .../bsl/languageserver/util/assertions/FoldingRangesAssert.java | 2 +- .../languageserver/util/assertions/SelectionRangeAssert.java | 2 +- .../util/assertions/SelectionRangeAssertFactory.java | 2 +- .../languageserver/util/assertions/SelectionRangesAssert.java | 2 +- .../bsl/languageserver/util/assertions/package-info.java | 2 +- .../github/_1c_syntax/bsl/languageserver/util/package-info.java | 2 +- .../languageserver/utils/ExpressionParseTreeRewriterTest.java | 2 +- .../bsl/languageserver/utils/ExpressionTreeComparersTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/RangesTest.java | 2 +- .../github/_1c_syntax/bsl/languageserver/utils/StringsTest.java | 2 +- .../bsl/languageserver/websocket/WebsocketLauncherTest.java | 2 +- 831 files changed, 831 insertions(+), 831 deletions(-) diff --git a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java index 52a03b7ef1e..f60f8134312 100644 --- a/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java +++ b/src/jmh/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbolCreate.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java index 10310f35fcb..b27822265f1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStart.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java index 69a3736c835..a8454bdc755 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java index 389198abccd..d3e47adaadf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBinding.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 5e67d295856..4eb91981a66 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index 2be3d0562e6..3c3687960c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index b2e534bd14b..313d6238aab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java index 0cdf596d6c8..6231d1bb4d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java index 39913004743..ac9c3fba311 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ClientCapabilitiesHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java index 45b6a3aaaf4..231b5750201 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/LanguageClientHolder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java index 50e35d7f40d..590564563d8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java index 835890fbe24..700dc1d9692 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java index feb40b151ea..361025d103a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/AspectJConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java index 8c38c404081..33d34866eda 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/EventPublisherAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java index 38745564840..26e5a7087e1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/MeasuresAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java index ae1c46cfcaa..9dadfab75e8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/Pointcuts.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java index f87f9cf88e7..446f1eea60b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java index 7c4adde9697..fcd6fa1e643 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/ConditionalOnMeasuresEnabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java index a19c9a2fa57..29ff969bd01 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/DocumentContextLazyDataMeasurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java index 006596e4d88..bb95db6a6c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java index d131b505558..f0ce3a62ba1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java index 2597ae3f002..01290e3e887 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java index 0e6d4d3866f..ebe7161a946 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallback.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java index 0753d40ce13..1175aa254cc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/SentryScopeConfigurer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java index 9e54ce5f89a..03468a09970 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java index 46eb90351f8..56c486fee8f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/AbstractCfgVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java index 1c28ce385bf..30cfb745c1b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BasicBlockVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java index 0f1cec35cd4..95dc2312ef4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/BranchingVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java index 63db55f1d30..b496f7725e0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgBuildingParseTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java index c4184513306..08484543f06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdge.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java index 89baae8a99a..82aa274e61c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgEdgeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java index 4e621e1d7e2..a408a75dad9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/CfgVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java index 1c20e28010f..126dec69b10 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ConditionalVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java index af2e91499b0..05352436c87 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraph.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java index feda24b33d2..7cac19a5e2c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphWalker.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java index 94407fdc387..d511c00347f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ExitVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java index 9ba50bb6e5e..4de8c2d30e9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java index 17579cf1d41..24935f6935a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/ForeachLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java index 2c11dd87b5e..3f57dd21e6e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LabelVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java index 6fc53f87154..5109173bcb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/LoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java index e9e5178117f..57d5a2a6575 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConditionVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java index f6f780424d4..f98b28838fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/PreprocessorConstraints.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java index 87ef438a26e..9a3e3271852 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/StatementsBlockWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java index 552a7c6a527..a96476f6f52 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/TryExceptVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java index 056d3d6a1c1..bfaf7dc7afc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cfg/WhileLoopVertex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index 376965cefda..96c343f76f6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java index 9be7ea72071..237e33b3660 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java index 76a5bf337e4..62c0b0e6a96 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java index 04cbe9a4225..0fc581d72fe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java index 76156230de9..866f35ca7a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java index 1cc604009e2..b3bfb596f59 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/FileAwarePrintWriter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java index a0574ab0e9d..57a5803df57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/LanguageServerLauncherConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java index e135db8dda8..59ef3545b08 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/lsp/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java index f0323c8bdab..bddaa4259c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java index 10b92ea5e4f..b4d2d728a6c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/AbstractQuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java index d06a03a2894..80e6f4f5487 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/CodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java index 723dbad7c4f..4bec9fa4d0a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java index 3afcc32cd63..68de04ed21a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java index e0d2b5075c6..a7fee6212df 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/FixAllCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java index 6993e357ede..93942932156 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java index 1471721a81c..278b27560ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixCodeActionSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java index f1cdcf3a836..e93a36493db 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java index 3e97832ce87..28544a9a450 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java index 231eb13df03..8ec1d65d2fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractMethodComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java index 3cbf5a209a3..c96fc5d9690 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/AbstractRunTestsCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java index 7938e8c442e..f32f001ee72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java index d05d61fbd01..44842fa3bef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java index 88b2de2c385..bbe60e7bb47 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java index 3e246981447..7c28e0911fc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java index b2c6a9bec44..6a4a2fd1126 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/DefaultCodeLensData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java index 10d7ca8ac74..12e0a2b5d00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java index 10edb38b9c7..ab17cce09a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java index d02b788aed5..abdbe59a0d5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/CodeLensesConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java index e7dc14afc23..c5b8c6fb6d5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java index 3095e10fa2b..6236a336560 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java index badd8e71f7f..aa4a22b5deb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/TestRunnerAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java index 78ab38cedfe..75fa5e6d12f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/codelenses/testrunner/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java index f3c7b60fff2..139356c565a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/BSLColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java index 6f5fddc49c3..8f5526a4a04 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java index 1a9f7bd4f5e..cd7c376c2dd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java index 11c2ed98c5e..4afd6e6db8c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java index 1a4921ea44f..5810f53018f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java index f13eaea4da3..7d0177dbb29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java index a7a50e06f7e..7c6e9249ad0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java index 1c42c9121dc..517ff9413f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java index 5034bf05f7a..d4d36609839 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/color/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java index b6354ef8300..b7aaa9999d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 3de60bb2d92..8f2bae8f88b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java index 3cbf1caf2c0..e7bf4bb8609 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/DefaultCommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java index 7edfca092ba..9899f17261a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java index 6fe3782e439..563eba66652 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java index 2796b1291d1..766a7782653 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/AbstractToggleComplexityInlayHintsCommandSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java index 18607281671..8c8a3424a18 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/ToggleComplexityInlayHintsCommandArguments.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java index a796282ec0c..79cc8eb144e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/complexity/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java index 654582c2230..4c01dc50994 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/CommandsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java index 32a3a7b7158..aaa02aa0906 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java index a1f734f56b9..c496e37738e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java index f403380fa7b..34499babde5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/Language.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index b35dac566fc..9340ed04c95 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java index 6eff543e329..76e21a37521 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/SendErrorsMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java index 654f5fc094a..7f6d07a6e5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/CodeLensOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java index c368f8872e5..d9374af6130 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/TestRunnerAdapterOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java index 99bf2b19d92..3956b2aa599 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/codelens/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java index 8f94f39cbb6..bd1e8937cd6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/ParametersDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java index 8f152e1301f..a4bb7fa6fe1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java index fadb8ccaaf9..676a3439c0c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/ComputeTrigger.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java index d445a027530..e2d9cc8731d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java index 41c8938a3d4..12cfd09ca0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/Mode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java index 7570456eb14..a6279c4601c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SkipSupport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java index 1e89e458003..997c3bdd1a6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/SubsystemFilter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java index 2ca9f5a44b5..22d2b5b05e6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java index bec9d64f0dc..8ee145bd794 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/DocumentLinkOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java index 814184ee631..863a8c4fd63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java index cd6cdd2e3bd..ae4fb59574b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/LanguageServerConfigurationChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java index 4ffc46ddfe2..4cf58ecd361 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java index a6375c02e1f..aebb2d2fa8f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/FormattingOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java index c623a042804..84b784bf8fd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/formating/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java index 10f268d953f..84d0bda3a78 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java index b2526efce46..a925f04ec6a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java index eb3be79b95c..5b06520021a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java index 0736502ba52..f812629d677 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileChangeListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java index 37999e7f76a..fa03a1aeeee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcher.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java index dedf81ea2b1..2e778112c2c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java index ab853043114..b9d2d387d25 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java index 55a924ac48d..bdf1753fd48 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/FileType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java index bc9eef0e6b1..d4a1f85bd51 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/MetricStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java index 9835fc5cb1e..0910a3c454a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java index 51c4ef89747..6a4087f201d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java index 030d9588758..b06da7c0624 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexityData.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java index b942bb9cefc..b2a9bc1b11e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ComplexitySecondaryLocation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java index d50f5015482..29b041675c0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/Computer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java index 26cb9e3423b..78606dac397 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java index fccf771950b..5d52f23d94b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java index 5c3ee42e89a..9d34fb2c19c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java index 2c30f600d5f..a2561659e48 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java index 695c4fcce05..eead7c8c435 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java index 5269748c21b..00c9fe2059e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java index d099cd793c5..54b827e7902 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/RegionSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java index 17e4e3c0603..08dfbf7fe8c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java index ef1da40a5e6..81a9103b0d0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolComputer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java index 81376e2e7e0..e72d3136779 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/computer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java index 62c1535b1f6..473d527eb5a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/DocumentContextContentChangedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java index d27ced1e733..4eb7770a5bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/ServerContextPopulatedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java index 2d133bd98c9..e17d96a1781 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java index 5dc64df4c54..cd303b7a239 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java index 529b33fb768..b7a43dc11cf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AbstractVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java index 06319c9a443..857f1f05d9b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/AnnotationSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java index 60079d66b3d..daaadd7c152 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Describable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java index e94a0f24f5c..d42ad1d37da 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Exportable.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java index 977d18ba6eb..4e907f1fed8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/IntBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java index 99ee4bca83a..81be215e765 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/MethodSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java index fa58f67e29a..dd98e0764d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ModuleSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java index aa495748161..a1ee02b54b1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java index acee636f1a9..ceb713ca6bb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/RegionSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java index 854661b50b8..66331060bc0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/ShortBasedVariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java index cd83b26db30..dfe7faab85d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SourceDefinedSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java index 8d14f7d625e..73d4c3a7114 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java index 640cfc02249..3e53018cbec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTree.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java index 59ba6bb075c..d92e9dcb0b4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/SymbolTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java index 4d5c492459a..6bee4f6a7c2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/VariableSymbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java index bc5a302973f..10576b32170 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/Annotation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java index 2d7f5cd24c0..ae3e0a898bf 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java index db4e17c9cc3..9c017531776 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/AnnotationParameterDefinition.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java index 1b228c48451..5746358b1d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/CompilerDirectiveKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java index 85338488712..b363ff44efb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/annotations/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java index dd9247ddef8..7e8fb4d5cb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/DescriptionReader.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java index 2ba21694ef6..de6406e0a0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java index 1557265e322..c5744d6bf29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/ParameterDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java index 8a50211432c..5d68c879eb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/SourceDefinedSymbolDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java index 416470cb082..c5aaf5affd3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/TypeDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java index dd1bfa7bdef..d96c1febe83 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java index bbeebf6b7ef..a3b85b32c15 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java index 7d4e7b0a6e2..f12bb967f79 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java index 7838c9eb5b1..308c43e48c8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/variable/VariableKind.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java index 3c4b8925020..1b0aa9ec303 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/ObjectMapperConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java index 282a1ea1f3e..6502c4f3d24 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/URITypeAdapter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java index 1b66b7ca64b..32aae1ca293 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java index f18ca2d252a..619590f5f60 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractCommonModuleNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java index 2a1212388f5..e94746b8693 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java index 2ce6daa58b3..f24eff53739 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java index dbbcc1c9c50..d175109bc69 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExpressionTreeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java index 99f454b8908..36a45cb0941 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractFindMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java index 2cfe9af1461..96f22b97d29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java index 1e8eb6c4759..3f612a83af6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java index bb982a47384..e81bdd34e91 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractMultilingualStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java index 1423b353211..f518004c196 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLListenerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java index b08643bd1a2..58f9ce8e6ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSDBLVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java index 4b838e20baf..a1d918f283a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java index 7e6c57f0d7e..3576fc26723 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractVisitorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java index 230e856b569..d1b565e8564 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java index c2dd0841bb1..ecca3091ea7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java index 1afdca40bb8..d239787f66c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BSLDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java index 2ddf0211188..50f182b495d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java index 76d45e5c962..9451fcef22e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java index 5138e87791e..38dddebdbf1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java index ba9a385fe97..07368a4aa12 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java index adb11f9885c..ce0424bb8d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java index 14ac7bef009..4ae66dbaead 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java index 6531354ce29..7634a715dd4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java index f7d9bd1bfc9..6de336fa234 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java index 6f59bb13fd9..8ddca5b0112 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java index b3cb9999794..ed0f1cf42ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java index 801a91e70de..458b235cd02 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java index 95b6e454c1a..e3ac9b5d531 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java index 934772c6e1c..8ea44f214be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java index cbeb0010087..2cc78e88f5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java index 102086f27d0..506ff9de3c2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java index 6e39db28b54..2603085e3c3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java index f2c7fe62a45..b0c6da6fcde 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java index 613a2aa0fb8..46a1c2f0111 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java index eeaaf0f84a5..70837a88eae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java index 7f92a0df203..f73ba62ff37 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java index b10e6f45d4c..2eade626760 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java index 0a670fcfba7..ab3e7ca8d5d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java index 2cd0fde4c4d..ff1da5b29c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java index c5d2c450af8..a81be343837 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java index 89a7abe0d8d..94cd37bc67e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java index e539085f2e5..c06324f8fab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java index cc307657ca0..f045510e4f7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java index 569d96ddbb9..1cef0d0f2b7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java index 072430f357c..ba94092c82c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java index eeba497567f..af89d4a194b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java index e7a16a2dba2..c71a33eed50 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java index 1df38e8628a..8bb67b78760 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java index 24ecaf6a095..cb84bad039e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java index 96a664ff493..ac772f0d51f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java index 144a7b94b7f..cb474d45ca5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java index a305ee926a0..09af0c0227a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java index f885bf66202..73fabc6f0b7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java index e74cc92c8d7..31830eb464c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java index 7cb9f486574..36d73a5ea2a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java index 34f7f982e84..b23e3903e74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticStorage.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java index fb77b6ee573..5846126f22f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java index 9e895698adc..00c222a61d0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java index 8e8823f358a..7a6e3065d27 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java index 2469ea938fe..efe87febbad 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java index 16d08ab5a41..aa2699ceb77 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java index a677faf1f75..5f612dc574c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java index 78e2467a22b..4bb5511a7c7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java index bab137ee836..f5466e59819 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java index bf272609fc5..568a162acd2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java index bd693d1de93..3c770fc65dc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java index 56a48a279b6..c8c42623920 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java index eff3f55deb1..fccdb27adae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 94e4cdbb2c9..e200b465983 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java index 97d3160bd8b..4aa560a2ba5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java index f7634bdc669..1f0e6e38935 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java index a7c6a933b47..9998d5c62e1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java index af3a78aa126..991e4003f27 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java index da0a2bef9ee..33694483626 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java index 7e8f6b94b6a..c8b31ad8e80 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java index 97e2d6b41d6..de2be848c42 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java index 6cf2a4d8371..c659a64838e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java index f498af45d1d..b50c1899539 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java index 449b1fb50a8..15e2f5caca4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java index 991c5903bd6..1c4b33d2198 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java index ee3882f8b7b..ea289717518 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312Diagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java index 6a9a19338f2..7a58d665402 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java index 7ba9a64aa14..e6314791db1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java index aeb97826cce..c04c05d9d56 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java index 3cff8eb3ebc..7e0a7874ca8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java index 97428c28d41..8aad571f03f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java index 283e1628c7a..0048638cc22 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java index 3351ecd899f..0ae300b88f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java index 1d197d60398..cabca3f7589 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java index cb5c0017b64..02a87177aa0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java index 4fa8170f271..341bb84475a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java index 8494808f4e6..dc146d99e81 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java index 54562abf2c5..2008a90c662 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java index a7a8b483693..5bccb424d2d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java index 451ace6cfd2..5b24f741559 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java index 214595b2fba..0fb6dbcf730 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java index 949931ada16..dc684763a2d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java index 362eace6414..24f4760e2b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java index 1718d8795af..169863fd48d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java index 21f26f99a26..0ada0944c3a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java index 079523c7a29..913c3d3df23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java index 8a934f61b32..38f7da974b8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java index 73e3e5e87ac..af3d3d0d48b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java index 302750eb50c..384cf2a2ce3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java index 819042adc93..24825a050c0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java index 30fb86cd23a..fc2284b8321 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java index 8aadabcf3be..cd1bc4c1285 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java index c522fb3a041..6cfce0ce660 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java index 183f6451deb..6aa970b94d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java index 2894bd97cdf..9855bf300b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java index 1c339329c97..9c385351361 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java index a22b1945d0d..912037596f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java index 4d0fee60d8e..068180828d8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java index a4b1dfae901..2a1fa65d8a9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java index 01a01506768..b7d1a2681fa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java index 3fb36458984..87b0103697f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java index 22a889c399b..9e38828f753 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java index f4d4e2fd839..0c1579ffba9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java index 0c928698982..0ea3207bdcc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java index 9e637f2f37c..2645d059875 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java index f6e34cd651c..1995a1bf989 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java index 92a7c1d04be..704437f699a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java index a3d6f0d5ea2..a9cb8d85d57 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java index 82c3e321ad0..8e70230d908 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java index 10d718191cf..a77420f40ae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java index 61b0ef713dd..f4779a0223c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java index b8025fee139..eb097d702f0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java index 55201f69cef..60f755d2f8b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java index d79e7a38c3b..4ddc1abacff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java index 11204eebe64..3dd51db76c4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java index 85e250f9002..89dcaeb7506 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java index 3d04a8a2ebd..05efff84629 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java index f47e4b68894..7fd85d6242c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java index fd3f1fd23bf..87772d95dcc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java index 9fd8f840dd2..3e988a1ad26 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QuickFixProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java index 4a0306b2816..e48a7094f0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index 5b800a0dd33..62ad3ee7cb8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java index 2033f717bd2..ae8ffad8f9f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java index d7a1ede5933..7fad608d1a5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java index 54dda675e11..37b8913ab4d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java index 23723598af1..9ac63290da1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java index 7dd0fff364b..d2e3ccdfffb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java index d21b9c7023f..08554aa7505 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java index 36cf5e61d50..431e7f6eb38 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java index 99dddb44850..b0bc10d2665 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java index 6b142971a00..b0e69044d3f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java index a1e1198f04b..cb37afe7dad 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java index 7e3ef02a411..084ec2dc16f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java index 7ce31cf2443..5394c39447a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java index e7341928a72..f3abfd362a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java index 192b3ed210b..11bad234a76 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java index 968c4fc6992..367f007fed7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java index e9379f68cfb..f5c6a3007b7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java index 4ede7ef7381..18b15a562a9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java index 10ffa1aef88..fa42b781986 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java index d4f30b9910f..94f82b3c09a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java index 99e6b35144b..116c88db32c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java index 5df398eeb24..ea568a0643e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java index 32db59a0a11..e0903842509 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java index 162872cff59..6c872a7303f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java index 4c826bda573..6d6aef9b2ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java index 6977413e068..36696834cbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java index a88bb85abab..f602790a4ae 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java index 41e9eff42b9..c16475e1d6f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java index b04114a518e..adb3ad09868 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java index 7ad35b53ea3..943683239ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java index a3d6a21abcc..cb972229a63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 fcc14160600..ecdb74378c5 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java index b82df25e064..4a9c15d7844 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java index 83310f1d55d..8fc9511346b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java index 1f3d72eae1d..38616f1cee8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java index 0af1d03913c..5eeeb9d3b46 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java index 23bd8100480..628b7d1a108 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java index 8d9886ced66..374a422a924 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java index 58864961406..0658f845d00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java index 30a235b71dd..b30b513d893 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java index a4ff6f4e3f0..72672625eab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java index c86a2c15c95..bcfad90a863 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java index d32f2a5ebb6..dd17454342e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java index c78604e5488..b003e94c39f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java index e5f27ace558..baff5391937 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java index 3cb4320e566..f622174fb8d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java index 0bc8af1032d..d3fc3c80a0d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java index d17047b1ae8..7deedaeda04 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java index a697943ef9f..8d1e23504ec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java index 7d183c65bdd..30ae3c06bda 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java index 148c68888f2..1ce3c739a06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java index 2ee8488594a..75202a9fdb6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java index 27ad40d53d4..5db09abf223 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java index fef6ed25a34..4f4d2000feb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnostic.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java index 3663d0453b6..d7b8080f0cd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticBeanPostProcessor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java index 99e0b47052a..0639afcedbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticInfosConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java index 865a2922549..b3c3ef02ba3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticObjectProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java index a32fd4660b4..c0c3c0edbfb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java index 4f561691eaa..5f23ee1652f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/Disabled.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java index 6a586b7b560..4c8fbd13e06 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java index 781534ce0e2..35437659f18 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java index d33f1d93bbc..ea39df08153 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticCompatibilityMode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java index 7c0d2c2aff7..c4c74d1866e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java index ad4c2979aa3..6b2d2af2d0e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticMetadata.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java index 352ba9d873c..3ce93790ce2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java index ffd1b2f76ac..93408f773c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticParameterInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java index 72b527f8918..a07652d151a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticScope.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java index ec43834b3d6..e63304f4448 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticSeverity.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java index 471ed773fb7..4be2b21b64c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticTag.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java index 6683a18ecba..8e19b734de6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java index f9bf1dc673f..a2c77695afa 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java index 654e5fa820e..a0d2806d59f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java index b9ad3dc17b0..cd5b4778ef4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/typo/JLanguageToolPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java index 84ace808869..b2bd9f86368 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java index feaebeaa226..1c63a207e49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DocumentLinkSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java index 4c0519b3089..efd8b6483ee 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/documentlink/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java index 6cb369704dd..22237c3d8d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/LanguageServerInitializeRequestReceivedEvent.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java index f598ee19660..f6590d56a65 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/events/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java index c8a87144fab..f2d2fd8fc8f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/AbstractCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java index d8f5c44b154..befbcde40fb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CodeBlockFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java index bd2159a6a67..2eb1c073396 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/CommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java index b68a01c7984..61914c819be 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/FoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java index 5ba1970ac53..bd7973a8c7c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/PreprocIfFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java index 27d6db1a44d..56bba9e9a00 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java index 584a1a9fb1c..b9c35112e70 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java index 8b9adcf449d..aca4bd57873 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/RegionFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java index 3744d77b5fc..181baf0267a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/UseFoldingRangeSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java index 899cf0674cf..3f60127ef72 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/folding/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java index c9724ed4099..12ce665772c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/AnnotationSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java index 277aac1ef03..f7b58e5b00d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/DescriptionFormatter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java index 8ef2864767f..273c2df826f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java index 4b50b69af67..a435905296f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MarkupContentBuilderConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java index ed7360d9342..988f18d513c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java index 7ca24d7b48e..f9fb1662929 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java index 80fc3773041..8a9b1141f2c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/hover/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java index 3e69be06eef..cc1cb3f51f1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LanguageClientAwareAppender.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java index b7b74bd053c..ee2dfc5c524 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/LogbackConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java index 125d10ea026..dc429e6e759 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/SchedulingConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java index fb0f8ffe8be..f5c95bfbe59 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/UtilsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java index 6167f32c836..5c231441dbc 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java index e6a3021aa9e..92b44793754 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/AbstractComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java index e1236c620f9..da3bf85a94a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java index f1441f59a6a..cbfae048f8b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index d35ffc8e9e4..44bea201a79 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java index 4ee1a9c05f2..156e5655203 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index a0263e25abc..ee6b86b8565 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java index 43e3dce9c92..32b40ee3e9b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java index 6599b40b255..fb74989ea39 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java index 228ca4d1d0d..ab3ce3e19a1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/DiagnosticParams.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java index c4a00fb8de4..e1fe86e6ae9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/Diagnostics.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java index 3add486d78b..2dc67987d3d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java index 5265e568191..51a1d89ed1c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java index 46fd58beb90..5179e581a5f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java index b91f98ce9f7..147ba8c47af 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java index f201d532b3a..0c7f9f3ab63 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index 203c96b51d6..9f6c2f9201d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java index 30e84fb7b4f..c5a3a5e7db9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index 6d32e0c3354..7c65483d18d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java index 2e4c0692d2d..457d7efd872 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java index 109e4b8fcc6..683be1123b3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java index 6c95d73f5b5..135c5afed29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java index e62aecb7f8b..b9fc1b34619 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java index 437fc0a4996..a988746f2a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java index b9885a6743b..75da7a2890a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java index 2d180202559..6906e8d1230 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index 79b02e1d628..7a953d215a1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java index c0b9817079b..a51708de6fe 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java index 1317c304edf..d36f7d5912c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java index 2be3cd77170..758dc49b818 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java index 598ef476300..031211b66c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java index d56e9e6cd1d..39b3a8d0969 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java index 5e72e243350..768284bd6a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/AbstractDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java index ff703abe1cb..1cd8935ce23 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/BSLFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java index 757f4dd19a2..3ebc837c9a0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java index ff76aca4726..c64850cb92a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CodeRecognizer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java index eb4ac983445..18b4c0bbe21 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java index 5ab5e4debd3..f94755dbb1a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java index 45d2d739a51..24d0cc94075 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java index d010ab2ab6c..037c5d8d145 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/LanguageFootprint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java index ec3ab0dae67..f7bf4901e6c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetector.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java index 6df616c5823..2e381867994 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/recognizer/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java index 96988a0e413..f838fbadc22 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java index e07e337d254..071c4f34a40 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java index 0b478d6daea..edd7dd243d2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java index bb5b458925a..38f539fefb3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java index 6e8729921ea..ed7ad8e78f1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java index 135eb31b0f3..e544f9ac085 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolver.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java index 019ee801830..759f19db5a2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java index e18daea9bc4..510265f37f2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Location.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java index 94edd7731b3..670cb0a03ec 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/LocationRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java index d98f9e34826..3b5acf2e34a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/OccurrenceType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java index 17c635eb77a..1b72ff3b7c2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Reference.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java index ca8c494d4a6..49b4ee582a6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/Symbol.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java index 744ebbc06a7..7a9198110d3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrence.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java index 14a69a5bd9c..d56670324cb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java index da0744a332f..f17fd0b4d6d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java index 6a0266df503..a79bdc6976a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/references/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java index 1ffe7984e87..f31e209f418 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java index affc0644f98..5c36b7ae0c9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/DiagnosticReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java index da17546c9d2..f7b8c745032 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReport.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java index c3635c34576..c26c0633cdb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericIssueReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java index c7227bf2131..7215af10d3f 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java index 5cc881ed74f..773631520a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitTestSuites.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java index dcca6412307..456db8c9b85 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java index 1562bcaa0c5..74c15dc4f05 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java index 5e14005d3a5..4f42460db1a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java index 5fb32be3521..a447d5ab0d6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntry.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java index 58950dac3da..e8bdf99700e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporter.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java index 3fae749ff08..60cbb34c428 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/AnalysisInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java index f4e3a42c536..e71bd5c9f9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/FileInfo.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java index b896ce9f2b6..58ae255913b 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/data/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java index 1182c70306b..77666fe4701 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/AnalysisInfoObjectMapper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java index d343841a80b..23c9e63f4c4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeDeserializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java index f0ad27db949..28e7f478d13 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticCodeSerializer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java index 79314e45d07..8ee85435d0c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/DiagnosticMixIn.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java index cde1586e405..033cec6fab7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/databind/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java index a8d5db65388..ed5cb0f1d71 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/infrastructure/ReportersConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java index fc82caeb936..88d0e687dc2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/reporters/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java index 9f48513a747..36917211af2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/AbstractObjectPool.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java index 5a6209a0112..627fb8a5965 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/DiagnosticHelper.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java index 2d87b377fe4..bf7905fa1eb 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java index 007b348d6f0..b97259968d7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java index 3a55bf8e80c..0fed42a0080 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Methods.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java index 2c09c0aeafe..6defa1c2f80 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Modules.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java index 6976dfb507d..3082000cdb1 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MultilingualStringAnalyser.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java index 7252a453fff..e14ae169d92 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NamedForkJoinWorkerThreadFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java index 3e28e762282..d9f9431517e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/NotifyDescription.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java index 95f30eda4db..362e0644713 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Ranges.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java index 652808b9ffc..36535c201f9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java index 922d16ded88..fca1b34aba3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/RelatedInformation.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java index ee1d47f94d8..eac969f5b64 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Resources.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java index 1061b85061a..5be79f26cff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Strings.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java index c5fb715def3..0d775c5adf5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/ThrowingSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java index e57dfa3a772..78876ebab6a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Trees.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java index 11bded401df..566540f0f29 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/UTF8Control.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java index 0b784f73465..cea788b8735 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/bsl/Constructors.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java index 9d3200f42be..f3d5b452357 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/AbstractCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java index 31549e9b98f..cdd479ae6e7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BinaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java index 72a98f95e9e..21c4e076e74 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslExpression.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java index fa065e25bae..a43264240b4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java index 0c4543e280d..7aec2ce02de 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/BslOperator.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java index 8c86c700cab..8618e3c84a8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ConstructorCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java index 2adecca8171..ed8d2b95125 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/DefaultNodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java index 4b30ce90048..c4761894561 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionNodeType.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java index cf39d3ed566..1f038fc5351 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java index 951ac2b76d9..43306fd2bf0 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeVisitor.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java index 60301c54dd2..e75cf0ea1d5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/MethodCallNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java index 65321d07391..e00306cbf9e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/NodeEqualityComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java index 2a1fe6d79ff..2a82de601a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/SkippedCallArgumentNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java index e32ae01ee08..60d2ad832e2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TerminalSymbolNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java index ef87a7c77be..268ffeafe85 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TernaryOperatorNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java index debce8b1ff2..a1632c1d9f7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/TransitiveOperationsIgnoringComparer.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java index 940390ee30e..065b81cdfc9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/UnaryOperationNode.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java index ddf92da990a..84d295da2a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java index a29b3af73b0..df623b84958 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java index 95bbc0c6fde..c7751dbdca6 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/LSPWebSocketEndpoint.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java index 5e83ecd58ff..02895f419a7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebSocketConfiguration.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java index 0bc11c0ffc9..0bedf5c0bb2 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/websocket/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java index faa9c05a617..2ca8e4cef08 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AnalyzeProjectOnStartTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java index 8ff90150ecd..65d7c8f2cfe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/AutoServerInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java index 6f9e2223ca0..326b23f6042 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSBindingTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java index d762921c85b..bfa589c3374 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java index 73db8cd1116..30193c342de 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java index 7023f3ad0fe..17d3381bca7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java index a0198eb1127..fb640bf3a1a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/ParentProcessWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java index d1eb2080b81..b177700edbc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/WorkDoneProgressHelperTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java index ea66470a16e..45534f9ae19 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasureCollectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java index e46250e938a..6ca7321ff70 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/measures/MeasuresSubsystemTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java index 8bcb1bc6d62..a3acd8ed7f1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/aop/sentry/PermissionFilterBeforeSendCallbackTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java index 955140d760b..47ff170457e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cfg/ControlFlowGraphBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java index cb10c67e30d..c8b70112261 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java index fe7c95416b2..c054e36878e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommandTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java index 8a7ec6a89a9..b64fdef0367 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/DisableDiagnosticTriggeringSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java index a33fed7fd2d..0cb85d36fcf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/ExtractStructureConstructorSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java index 70101561795..0dc18a2e8c8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java index e37eb8c450c..5a6d302bb4f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codeactions/QuickFixSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java index afeafa61a62..df3197240b4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CognitiveComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java index 77dc1a5b1a7..17d9461254b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/CyclomaticComplexityCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java index cb61f676b29..805075b271b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunAllTestsCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java index 342a126f3d1..4c0a56500f2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/codelenses/RunTestCodeLensSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java index 476774f6998..1af94f1b298 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java index 4a04aa643d8..55d9b270ebf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/ConstructorColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java index eb98f7210c3..7e9f815826a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorInformationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java index eedc84270a0..4a946fc4b79 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/color/WebColorPresentationSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java index 54faa284ec9..6a3ed9b5b53 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCognitiveComplexityInlayHintsCommandSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java index fe1cd55467d..3b9f6fe324d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/commands/ToggleCyclomaticComplexityInlayHintsCommandSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java index bab11690a6c..75d30a08b62 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/ConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java index 59e841a769c..62c9af6f15b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/GlobalConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java index 5dbd499e544..c5326e6adcb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java index 5b697d42d03..eac63460987 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/watcher/ConfigurationFileSystemWatcherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java index 0923a7e3dd7..2addffaa45b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/AbstractServerContextAwareTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java index 10cea84790d..651bc501b16 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java index 460211b86fc..d69a17d908e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java index 842a15d7e28..cd419c415d2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CognitiveComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java index 3512108c9a3..b8954cac578 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/CyclomaticComplexityComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java index fe8e646bfe9..14a438d908c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/DiagnosticIgnoranceComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java index eea9fb8ee96..e85e3869b51 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java index 0dd8dc64d43..295ab8d885b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/ModuleSymbolComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java index 9a373864721..48261b256e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/QueryComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java index 8dee44842cc..0676d445fc6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/SymbolTreeComputerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java index 453e5e766e5..b1d4b6acda1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/VariableSymbolTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java index 12c15e3d7e4..f208747e688 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/context/symbol/description/MethodDescriptionTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java index a760546ff57..5b62c2de353 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java index 565457a6583..0f2e0244783 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractSymbolTreeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java index ffb3d88ed29..9e69a8b0d39 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AllFunctionPathMustHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java index 0204d6cfcc7..5f882d2a741 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AssignAliasFieldsInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java index 3b9c4cf0dba..3e666b61894 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BadWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java index 7bf06ddcf88..1604f84f7c0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/BeginTransactionBeforeTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java index 53f02b9a8e9..8fea49b5a68 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java index 412dfac96aa..d5c0f2607dd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java index 3675dd3711e..f1dbf51519b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeAfterAsyncCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java index 96f4521ddd9..b98faf4c26c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeBlockBeforeSubDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java index 30aa6aeedd4..62f656fa49c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CodeOutOfRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java index 1755f5abd74..f7d45ba0437 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CognitiveComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java index b88029236cc..de89418fb9e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommandModuleExportMethodsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java index a3c68def6e0..74054a238c8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommentedCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java index 43cceea2ca5..0cad3f0a230 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommitTransactionOutsideTryCatchDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java index 94aa6a5ac8f..4f57a860d23 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java index d1c2ea451b6..e4b5305c7e6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleInvalidTypeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java index 0b28bc5ceaa..6d9fe8120ae 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java index 6236d1c0883..18479f2a6c6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameCachedDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java index b4ef16846c5..eb19a3063e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java index 489831eef7e..1e624902ce4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameClientServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java index 825ce51b1c4..a34bd2e49ec 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameFullAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java index 62902d5fec0..15380f1dee4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalClientDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java index 3695b89580e..3ba2fce3513 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameGlobalDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java index f3c798ce133..aacc30980fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameServerCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java index dd5aebbe8b9..baeee1eb45a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleNameWordsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java index ea5b1e6d662..5aa067ef10d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveLostDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java index a216029eede..8c5538f0b61 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CompilationDirectiveNeedLessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java index 57b025766e6..74187aea9ad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ConsecutiveEmptyLinesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java index 6f33f4e5b2c..3570d7e4ec0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CrazyMultilineStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java index 6929a034b34..ea0990d86d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CreateQueryInCycleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java index 7f7673f2ea5..6ff9727c9c1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CyclomaticComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java index 9f3c7ca7891..7bb17900d67 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DataExchangeLoadingDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java index eb49f69fb01..075c8fcb643 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java index efde9a9261d..182d35bc964 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DenyIncompleteValuesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java index 459d47696b3..a515adbc763 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedAttributes8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java index 518d661afc6..8f6ace0d136 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedCurrentDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java index aa0fe683ab6..5bc8c895343 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedFindDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java index d3d35e7304a..496c92b9b50 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMessageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java index eea589a8668..8969585297a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java index 579eb69bbf1..3019813d1de 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8310DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java index 2aa288f0b69..2a72ecc19a7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedMethods8317DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java index d632417a708..07211dc1e55 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeprecatedTypeManagedFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java index 6640b79aee6..e61c96eca85 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticInfosTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java index c5a4d44924f..c76cc17aa20 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java index 0c634a49810..9a928a8f61d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DisableSafeModeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java index 00311548343..0f2b04731d1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DoubleNegativesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java index 0fa8db5a6cc..5c2f4600478 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java index 7e74cb73ddb..61bdcccc437 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateStringLiteralDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java index e67ff242a71..6fbf27c93dc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicatedInsertionIntoCollectionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java index 37e895376af..1f1d70ff369 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java index f09133aa9a7..f30946cd34c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java index 00d149c39ba..825ad4eb115 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/EmptyStatementDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java index 78a63257d3d..f9fe8903b0e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExcessiveAutoTestCheckDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java index 9f30ededbb7..ff0bfc7e686 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java index 5242b163580..ae2cb71aa80 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExecuteExternalCodeInCommonModuleDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java index d15b84df1f0..2c0c20162e1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExportVariablesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index ad6aeabdce5..01491127f24 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java index 33144d5b0a3..31aba5633f4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExtraCommasDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java index c420c11f817..30b6fb2a1e3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FieldsFromJoinsWithoutIsNullDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java index d72d0de9dfe..65b3a377310 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FileSystemAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java index 1d21cb0ab0a..e3bfab3a21f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java index a74a04ff7f8..dfa84fe9d39 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FormDataToValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java index 175278208af..89ad394e70e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FullOuterJoinQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java index d537f86bbed..bfe1c3a9cea 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionNameStartsWithGetDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java index 5eb8a421e50..2a10cd7cd83 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionOutParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java index addf83b391b..f59625daab6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionReturnsSamePrimitiveDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java index 5e21ef15c8d..7bb99733155 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/FunctionShouldHaveReturnDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java index de3b7b1b409..f3d2ccb1e8d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GetFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java index 3bfc79e0afc..442d64fdf31 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/GlobalContextMethodCollision8312DiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java index be1875892df..4a4e9a7ff82 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IdenticalExpressionsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java index 95e91b839a1..11b1e3ec8c2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfConditionComplexityDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java index 35edbddc43c..e938b0fbd33 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedCodeBlockDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java index d5cd0f4a87a..2f54ffb9e06 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseDuplicatedConditionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java index efd26ca8c52..3caa8affe69 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IfElseIfEndsWithElseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java index 72b7170bb24..27667d749ec 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectLineBreakDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java index 5b0a1446c5d..efd8b66056b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java index ebaef933392..91211b4a8fd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IncorrectUseOfStrTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java index 2b6216a8a47..ff6f9e81907 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InternetAccessDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java index 3fcb35eec8b..65fe0abb838 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/InvalidCharacterInFileDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java index 625460905ee..d56a251a54b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/IsInRoleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java index 62d5f3b978e..a14f1e6f253 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithSubQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java index e0a2a0cc1bc..d0ae57b6136 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/JoinWithVirtualTableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java index 19d38500574..73246ff99ea 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LatinAndCyrillicSymbolInWordDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java index c93ee2f908c..45e8d561953 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LineLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java index bd58feaa109..f439adc37a0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/LogicalOrInTheWhereSectionOfQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java index 3e032ef2095..2f7ba2af51e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicDateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java index 8883d91a698..268e785f0f9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MagicNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java index 240d37b3bac..af58f3a55bd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java index 85eca3c7b35..fec8c3f0ea8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MethodSizeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java index 9a069e9e6ec..dff67a11f7e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissedRequiredParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java index 13d1bb7d4da..5f3302efd3d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCodeTryCatchExDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java index 1340b3c106b..cae6969ffa1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingCommonModuleMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java index 8bdc47ac188..c939908148e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingEventSubscriptionHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java index e2150a2fd37..5ccdd89ddc3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingParameterDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java index 1ea8452c645..ac2b0f32221 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingReturnedValueDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java index c4d909aee64..34b7584f6d5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingSpaceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java index 63e8731127c..9c78875e43a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java index ba39a7c3741..9e56093bdbe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTemporaryFileDeletionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java index aeffac15871..a78ee1536d7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingVariablesDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java index 63fc6ceaed7..79b0cedf300 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilineStringInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java index f15662ffcca..24203e0b1cf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringHasAllDeclaredLanguagesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java index 868c7dec6c4..ab343c152e5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MultilingualStringUsingWithTemplateDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java index 1473ee36600..339b7d542d1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedConstructorsInStructureDeclarationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java index c1b440eb4cc..129b1a234f9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedFunctionInParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java index be33707d6d2..39ea71c4602 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedStatementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java index bcb545ebdac..25a98b24d32 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NestedTernaryOperatorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java index 4cb8433335c..0931a811b6f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonExportMethodsInApiRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java index af5ba534150..5486c6638b0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NonStandardRegionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java index 5d3c64d23e5..55791de5c3a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfOptionalParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java index 18c90d03b31..b87e904cc21 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java index 5810515e82f..b716e7c16ba 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/NumberOfValuesInStructureConstructorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java index a24832d55ef..c267d4a4276 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OSUsersMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java index fbcf9eb209a..311525d10e0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OneStatementPerLineDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java index ffd96e5cc15..4cbe7b41103 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrderOfParamsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java index 93510c29631..0ef172fea4f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/OrdinaryAppSupportDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java index e77bce9c021..938a9ff36cc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PairingBrokenTransactionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java index b7e72773beb..bce7cb3c6e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java index 3ea86d9376a..66eb20cd6a6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PrivilegedModuleMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java index 232d6e3d4cb..62e2ad26c40 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ProcedureReturnsValueDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java index 41a6af8777e..40d14475d16 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/PublicMethodsDescriptionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java index a45661f5c39..ff1254e962b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryParseErrorDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java index 14eb0150085..ce42684a0d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java index 0153c0fe57f..8e1239e28d8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RedundantAccessToObjectDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java index b151c79dc2a..9b222e1038e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java index 5a90717ca32..b3513e17ad7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ReservedParameterNamesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java index 503d0c4cbb0..26491db8b1d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java index b87c7c4dc62..a8cafd9767e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java index fc31dc182d8..757ab256464 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ScheduledJobHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java index 5e779913ee8..10720dc1714 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelectTopWithoutOrderByDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java index 8fb98f8369c..29a92637a8b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java index 8e179e382d0..484ff08b86b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SelfInsertionDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java index 0cc447d61b5..73aff88e9df 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SemicolonPresenceDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java index 235af7ee9c1..e471ca94eca 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ServerSideExportFormMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java index 86822dccb56..626533d7c47 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPermissionsForNewObjectsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java index 6329fedabd3..bd3c7de8f70 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SetPrivilegedModeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java index 18eafc4e606..debf42c0c75 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SeveralCompilerDirectivesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java index f2c792b75a6..25438cb3423 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java index 908c42d49fb..bec14c6ab98 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SpaceAtStartCommentDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java index f8a30423389..489808c129f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/StyleElementConstructorsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java index bc519a98463..92e0615782f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TempFilesDirDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java index 795ca4e431e..53d6bd2f9f5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TernaryOperatorUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java index 1382c8b68eb..c1c2cb1c525 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ThisObjectAssignDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java index 57f982e1c76..20900b906d5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TimeoutsInExternalResourcesDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java index 22fb8523588..90185c30fa3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TooManyReturnsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java index e5af57f977d..48240a16f4a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TransferringParametersBetweenClientAndServerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java index 8a297d06376..e781a2b77fd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TryNumberDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java index cd7c74d41ee..61a73432b89 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/TypoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java index ad77a7d903e..336055eae5a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnaryPlusInConcatenationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java index 30f8c6955fd..f5dacb17324 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnionAllDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java index c5c1877c582..98009f4a534 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnknownPreprocessorSymbolDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java index 7dd72bba081..1e287a73a35 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnreachableCodeDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java index de422ac7761..ceddc056207 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnsafeSafeModeMethodCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java index 8c4d11227f0..b9bea7be445 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java index 8c61095685c..ade3b750d0d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedLocalVariableDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java index 629abe62dae..74f30430dd0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UnusedParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later 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 55fc6306e0b..3a0e89edaa5 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 @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java index ffece868557..5df059a4ff8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseLessForEachDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java index 7d8de6bdc89..f1a8fe17e56 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UseSystemInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java index 2f957b638aa..37dd4a3319a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingCancelParameterDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java index f0b295d7a6f..8ee5e0086b1 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingExternalCodeToolsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java index e31696a1ffb..321b6232a96 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingFindElementByStringDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java index 846fa3574db..55aaaf7ed8b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingGotoDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java index fbb9b3c428f..2092604875c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeNetworkAddressDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java index a490ccc1d98..16fa8b665e9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodePathDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java index a139a13ec7f..a3746d2903a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingHardcodeSecretInformationDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java index 5981fbab684..4e827b1d487 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingLikeInQueryDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java index 3b0b902cf92..a3dcf7271ed 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingModalWindowsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java index 85a923aad00..fd6365b650e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingObjectNotAvailableUnixDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java index f98c5d73bd3..4f17512631a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingServiceTagDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java index 7281cc1c758..2cc4aec2644 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingSynchronousCallsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java index 132abca9734..f4e1c817704 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/UsingThisFormDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java index f5955b37502..5f14e90d786 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/VirtualTableCallWithoutParametersDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java index dfb7077d122..0cb3a300801 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java index 4e6014399f8..8ea22ab974d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongHttpServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java index 456f545d057..03ab4be3a3c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseFunctionProceedWithCallDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java index d6ee17a7775..a2942b3625d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongUseOfRollbackTransactionMethodDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java index 70824ba16a0..ecc229b6df4 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongWebServiceHandlerDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java index 6039a031912..2c3244ac868 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/YoLetterUsageDiagnosticTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java index be97c5ec967..ded8a686c35 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/metadata/DiagnosticInfoTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java index 9a0da59293a..a3b62fe70fe 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/documentlink/DiagnosticDescriptionDocumentLinkSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java index 9c371868882..1629c6624cf 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryCommentFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java index 3336b6584cb..be00315429d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/folding/QueryPackageFoldingRangeSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java index da295eb3092..34164e8d37f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/MethodSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java index b8ade4cb595..a17f96ef9bd 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/hover/VariableSymbolMarkupContentBuilderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java index 50382b7cc02..374cfb39cc6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CognitiveComplexityInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java index 9bd8183c3fc..388825cddf2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/CyclomaticComplexityInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java index 125d5875e71..12790013dde 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/SourceDefinedMethodCallInlayHintSupplierTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java index 5138aa28389..62732847709 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CallHierarchyProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java index d3d6a3fc3a8..702c9942d2f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeActionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java index f0e1508bff1..6550f774636 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java index bf3cdabd3a0..0f9d1de563e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ColorProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java index fac98c343c6..1a869ef1e23 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java index 65174720c63..f891777e927 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DefinitionProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java index 98c60a42cd3..2e17100eb9f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DiagnosticProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java index 432f6e3edc9..e1ed337d54a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentLinkProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java index a65d315d4ae..50f8795a26c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/DocumentSymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java index 3dc86b95a28..1fbf905b63a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FoldingRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java index 6e8bc70e423..ba614f1aed9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java index 8797a8b35f4..0a7c417135d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/HoverProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index 655222ba63b..b69640f69a7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java index 68b92f76b85..9b6f1878284 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/ReferencesProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java index d5dde16cf24..eba1e36f009 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/RenameProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java index f711f153482..5cccd092e93 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SelectionRangeProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java index 71df84d6e0a..d634c1f96ad 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java index f72d7b4c3a6..af586795aa0 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/CamelCaseDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java index a24e9797576..aa3d023db75 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/ContainsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java index 9bdd05c3032..521e251d646 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/EndWithDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java index 97048c58bea..5aa1bb8b6d6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/KeywordsDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java index 6c4ae4d292e..06ece48ef95 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/recognizer/PatternDetectorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java index 0f639341f1e..7f618f2d351 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/AnnotationReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java index be6915a60fd..9464bad8945 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFillerTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java index 9ed49ea2175..03208b9052f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java index d4180b561c6..217cec0fe37 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java index 9ef76818c36..003dc5343a5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceResolverTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java index 0345b70c08e..53c68422961 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/SourceDefinedSymbolDeclarationReferenceFinderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java index 77777fc8797..a262f68faa7 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/ReferenceTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java index c2f70da74d7..19762255b55 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ConsoleReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java index 8f72749c7ce..ed33b67c1fc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/GenericReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java index 439e2b572b4..f0baed09666 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JUnitReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java index 924bcb74043..ec476dde2fb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/JsonReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java index 90169623e5b..52307e0218c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/ReportersAggregatorTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java index 70fa787d47e..79013b37416 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/SarifReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java index 91d7e339012..6bec1951a54 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReportEntryTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java index 8d8cc4bc123..7aeb7933c7c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/reporters/TSLintReporterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java index 4da82e3c194..5bb36ab7e7f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/AbstractDirtyContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java index 486f16ca10a..e2c67792373 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/Assertions.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java index 08547ba17af..7076aeaa217 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterClass.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java index 9f2b7d96113..e6c2ef93c2e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/CleanupContextBeforeClassAndAfterEachTestMethod.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java index 077e097a991..d8fa66acc79 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterClassTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java index 11bba48de60..81c7f8c3cb3 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/DirtyContextBeforeClassAndAfterTestMethodTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java index eb2f08a9cab..0ab4ed04f76 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/RefreshContextTestExecutionListener.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java index a47395e793c..064be4492b9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestApplicationContext.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java index 196c7672c2c..f5df2698598 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/TestUtils.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java index d3f86bdbfa4..0d57bc55445 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/CodeActionAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java index 0a373c378a8..b39f82bc033 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java index 7e8871341bc..b652924c883 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java index 73020d05ae5..5fa45b787b6 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorInformationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java index 6afed5f52a1..a0b88c4e3dc 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java index 524bb8858f5..0b8311a007e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java index 646f347c635..f5c7b85f1eb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/ColorPresentationsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java index e9e9bd4fcad..406b7431439 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java index ce51fde1a2a..28c10124f1a 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java index 6f6402d5a08..a9e713204c2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/DiagnosticsAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java index 2006c2a7353..61fd0626e3e 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java index a9b94372c2a..323b00c8206 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java index 7bd38c250b1..ef145686c2f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/FoldingRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java index 03d93e1b59d..d82c99cbb80 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java index b1fd50de182..ad1e8423c2d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangeAssertFactory.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java index fef0f9b29d3..5cdc97e3c7f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/SelectionRangesAssert.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java index bbcf6275af2..9519f8dfab5 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/assertions/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java index f31ea669672..b85db4c5af8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/util/package-info.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java index c97ae2dd585..00bf93d84ab 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionParseTreeRewriterTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java index 375ee3cb2f2..dfd50778e91 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/ExpressionTreeComparersTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java index 17c02f539d2..6b413e522f8 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/RangesTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java index aadc9eb7c87..15a21e87d0c 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/StringsTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java index b7759bf2684..e435603ff92 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/websocket/WebsocketLauncherTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2024 + * Copyright (c) 2018-2025 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From a1cfeee2ececb785600ca2a4819ab97098cc8152 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 1 Jan 2025 13:08:21 +0000 Subject: [PATCH 590/595] ignore new year commit --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000000..f9b5b165594 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# happy new year 2025 +e84a3f81035a6e76c042b406d5ad6e986a91d8e1 From 7a10af2bef2ac5549f9333bd6e949ee887bfeae7 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 1 Jan 2025 14:12:22 +0100 Subject: [PATCH 591/595] Update .git-blame-ignore-revs --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index f9b5b165594..d766802d8f5 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -1,2 +1,5 @@ # happy new year 2025 e84a3f81035a6e76c042b406d5ad6e986a91d8e1 +# happy new year 2024 +654c64ee05d943de550defda931b10ad6067171d + From cbb2314a7a074980f29c845d2d3603eee229f2bb Mon Sep 17 00:00:00 2001 From: theshadowco Date: Thu, 2 Jan 2025 13:04:09 +0300 Subject: [PATCH 592/595] new year --- .../github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java | 2 +- .../github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java | 2 +- .../bsl/languageserver/cli/LanguageServerStartCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/VersionCommand.java | 2 +- .../_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java index 4eb91981a66..8a019fc1593 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncher.java @@ -60,7 +60,7 @@ }, usageHelpAutoWidth = true, synopsisSubcommandLabel = "[COMMAND [ARGS]]", - footer = "@|green Copyright(c) 2018-2022|@", + footer = "@|green Copyright(c) 2018-2025|@", header = "@|green BSL language server|@") @SpringBootApplication(scanBasePackageClasses = BSLLSPLauncher.class) @Component diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java index 96c343f76f6..b748bdff8e3 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/AnalyzeCommand.java @@ -80,7 +80,7 @@ aliases = {"-a", "--analyze"}, description = "Run analysis and get diagnostic info", usageHelpAutoWidth = true, - footer = "@|green Copyright(c) 2018-2022|@") + footer = "@|green Copyright(c) 2018-2025|@") @Component @RequiredArgsConstructor public class AnalyzeCommand implements Callable { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java index 237e33b3660..f7308bead2e 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/FormatCommand.java @@ -68,7 +68,7 @@ aliases = {"-f", "--format"}, description = "Format files in source directory", usageHelpAutoWidth = true, - footer = "@|green Copyright(c) 2018-2022|@") + footer = "@|green Copyright(c) 2018-2025|@") @Component @RequiredArgsConstructor public class FormatCommand implements Callable { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java index 62c0b0e6a96..009fbdbabe7 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/LanguageServerStartCommand.java @@ -51,7 +51,7 @@ aliases = {"--lsp"}, description = "LSP server mode (default)", usageHelpAutoWidth = true, - footer = "@|green Copyright(c) 2018-2022|@") + footer = "@|green Copyright(c) 2018-2025|@") @Component @RequiredArgsConstructor public class LanguageServerStartCommand implements Callable { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java index 0fc581d72fe..58e74f6d3ab 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/VersionCommand.java @@ -38,7 +38,7 @@ aliases = {"-v", "--version"}, description = "Print version", usageHelpAutoWidth = true, - footer = "@|green Copyright(c) 2018-2022|@") + footer = "@|green Copyright(c) 2018-2025|@") @Component @RequiredArgsConstructor public class VersionCommand implements Callable { diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java index 866f35ca7a5..1fd3f093f4a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/cli/WebsocketCommand.java @@ -52,7 +52,7 @@ aliases = {"-w", "--websocket"}, description = "Websocket server mode", usageHelpAutoWidth = true, - footer = "@|green Copyright(c) 2018-2022|@") + footer = "@|green Copyright(c) 2018-2025|@") @Component @RequiredArgsConstructor public class WebsocketCommand implements Callable { From 36fa558bf8a2a2d2f67bdf861f023acc6473a3b0 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Thu, 2 Jan 2025 13:10:49 +0300 Subject: [PATCH 593/595] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20mdclasses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 8 ++++---- docs/en/diagnostics/DoubleNegatives.md | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2d636ffa9fc..41928e69f56 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -88,10 +88,10 @@ dependencies { exclude("org.abego.treelayout", "org.abego.treelayout.core") exclude("org.antlr", "antlr-runtime") } - api("io.github.1c-syntax", "utils", "0.6.1") - api("io.github.1c-syntax", "mdclasses", "0.14.0") - api("io.github.1c-syntax", "bsl-common-library", "0.7.0") - api("io.github.1c-syntax", "supportconf", "0.14.0") { + api("io.github.1c-syntax", "utils", "0.6.2") + api("io.github.1c-syntax", "mdclasses", "0.15.0-rc.1") + api("io.github.1c-syntax", "bsl-common-library", "0.8.0-rc.1") + api("io.github.1c-syntax", "supportconf", "0.14.1") { exclude("io.github.1c-syntax", "bsl-common-library") } api("io.github.1c-syntax", "bsl-parser-core", "0.1.0") diff --git a/docs/en/diagnostics/DoubleNegatives.md b/docs/en/diagnostics/DoubleNegatives.md index 8cf35e0683b..e7b19d9278c 100644 --- a/docs/en/diagnostics/DoubleNegatives.md +++ b/docs/en/diagnostics/DoubleNegatives.md @@ -1,7 +1,6 @@ # Double negatives (DoubleNegatives) - ## Description Описание диагностики From 5cc2352d26ad70b000566e8b118bce4cb1839b60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jan 2025 09:16:56 +0000 Subject: [PATCH 594/595] build(deps): bump io.sentry:sentry-bom from 7.19.1 to 7.20.0 Bumps [io.sentry:sentry-bom](https://github.com/getsentry/sentry-java) from 7.19.1 to 7.20.0. - [Release notes](https://github.com/getsentry/sentry-java/releases) - [Changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-java/compare/7.19.1...7.20.0) --- updated-dependencies: - dependency-name: io.sentry:sentry-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 41928e69f56..ed27cc114b2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ val languageToolVersion = "6.5" dependencyManagement { imports { - mavenBom("io.sentry:sentry-bom:7.19.1") + mavenBom("io.sentry:sentry-bom:7.20.0") } } From dbf40aa51739f1e258c4a77b81e6222eadedd918 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 09:54:18 +0000 Subject: [PATCH 595/595] build(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.6 to 4.9.0. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.6...4.9.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ed27cc114b2..1d24f65faed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -140,7 +140,7 @@ dependencies { } // COMPILE - compileOnly("com.github.spotbugs:spotbugs-annotations:4.8.6") + compileOnly("com.github.spotbugs:spotbugs-annotations:4.9.0") // TEST