From 2161b201ca01c8872ac11862250ab56e4a144ad2 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 1 Jul 2022 20:29:13 +0300 Subject: [PATCH 01/20] =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexTest.java | 41 +++++++++++++++++++ .../resources/references/ReferenceIndex.bsl | 14 +++++++ 2 files changed, 55 insertions(+) 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 5ea27241f89..fe878018a2b 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 @@ -36,6 +36,7 @@ import javax.annotation.PostConstruct; import java.nio.file.Paths; +import java.util.stream.Collectors; import static com.github._1c_syntax.bsl.languageserver.util.TestUtils.PATH_TO_METADATA; import static org.assertj.core.api.Assertions.assertThat; @@ -158,6 +159,46 @@ void testGetReferenceToCommonModuleMethod() { assertThat(reference.getUri()).isEqualTo(uri); } + // TODO еще нужен тест для параметра, совпадающего с именем общего модуля, ссылки на общий модуль при этом не должны получаться + + @Test + void getReferencesToCommonModuleMethodFromAssignment() { + // given + var documentContext = TestUtils.getDocumentContextFromFile(PATH_TO_FILE); + var methodSymbol = documentContext.getSymbolTree().getMethodSymbol("Тест_Присваивание").orElseThrow(); + var commonModuleContext = serverContext.getDocument("CommonModule.ПервыйОбщийМодуль", ModuleType.CommonModule).orElseThrow(); + var calledMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("НеУстаревшаяФункция").orElseThrow(); + + var uri = documentContext.getUri(); + var position = new Position(9, 30); + + // when + final var referencesTo = referenceIndex.getReferencesTo(calledMethodSymbol).stream() + .filter(reference -> reference.getUri().equals(uri)) + .collect(Collectors.toList()); + + // then + var reference = referencesTo.get(0); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(8, 26, 45)); + assertThat(reference.getUri()).isEqualTo(uri); + + reference = referencesTo.get(1); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(9, 26, 45)); + assertThat(reference.getUri()).isEqualTo(uri); + + reference = referencesTo.get(2); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(10, 22, 41)); + assertThat(reference.getUri()).isEqualTo(uri); + + assertThat(referencesTo).hasSize(3); + } + @Test void testCantGetReferenceToNonExportCommonModuleMethod() { // given diff --git a/src/test/resources/references/ReferenceIndex.bsl b/src/test/resources/references/ReferenceIndex.bsl index 3ffbbc1d206..d46f610f0f0 100644 --- a/src/test/resources/references/ReferenceIndex.bsl +++ b/src/test/resources/references/ReferenceIndex.bsl @@ -4,3 +4,17 @@ РегистрыСведений.РегистрСведений1.УстаревшаяПроцедура(); ПервыйОбщийМодуль.Тест(); КонецПроцедуры + +Процедура Тест_Присваивание() + А = ПервыйОбщийМодуль.НеУстаревшаяФункция(); + Б = ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); + ПервыйОбщийМодуль.НеУстаревшаяФункция().Реквизит = 10; +КонецПроцедуры + +Процедура Тест_ИмяПараметр(ПервыйОбщийМодуль) + ПервыйОбщийМодуль.МетодНесуществующий(1, 2); // ошибка + А = ПервыйОбщийМодуль.ДругойМетодНесуществующий(); // ошибка + ПервыйОбщийМодуль.ЕщеМетодНесуществующий().Добавить(); // ошибка + ПервыйОбщийМодуль.ЕщеОдинМетодНесуществующий().Реквизит = 10; // ошибка + Б = ПервыйОбщийМодуль.ЕщеДругойМетодНесуществующий().Добавить(); // ошибка +КонецПроцедуры \ No newline at end of file From da7b1bdb83e2a9218c75603fd71b58627e6e10c3 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Fri, 1 Jul 2022 20:58:02 +0300 Subject: [PATCH 02/20] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B8=D1=81=D0=B2?= =?UTF-8?q?=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexFiller.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 fe6516fc1d4..5690d71dacf 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 @@ -40,6 +40,7 @@ import org.springframework.stereotype.Component; import java.net.URI; +import java.util.Collections; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -124,6 +125,18 @@ public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallCont return super.visitGlobalMethodCall(ctx); } + @Override + public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { + final var identifier = ctx.IDENTIFIER(); + if (identifier != null){ + String mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, Collections.emptyList()); + if (!mdoRef.isEmpty()) { + getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + } + } + return super.visitLValue(ctx); + } + private void checkCall(String mdoRef, Token methodName) { String methodNameText = methodName.getText(); @@ -177,6 +190,12 @@ private Optional getMethodName(List .findFirst() .orElse(Optional.empty()); } + + private Optional getMethodName(BSLParser.LValueContext lValueContext) { + return Optional.ofNullable(lValueContext.acceptor()) + .map(BSLParser.AcceptorContext::modifier) + .flatMap(this::getMethodName); + } } @RequiredArgsConstructor From ab151794036a2584c788c8e2b88036be17935f13 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 12:56:08 +0300 Subject: [PATCH 03/20] =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=BA=D0=B5=D0=B9=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexTest.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) 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 fe878018a2b..16b152938b6 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 @@ -22,13 +22,17 @@ package com.github._1c_syntax.bsl.languageserver.references; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; +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.Reference; +import com.github._1c_syntax.bsl.languageserver.references.model.SymbolOccurrenceRepository; 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 com.github._1c_syntax.mdclasses.mdo.support.ModuleType; import org.eclipse.lsp4j.Location; 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; @@ -47,6 +51,8 @@ class ReferenceIndexTest { @Autowired private ReferenceIndex referenceIndex; + @Autowired + private LocationRepository locationRepository; @Autowired private ServerContext serverContext; @@ -159,8 +165,6 @@ void testGetReferenceToCommonModuleMethod() { assertThat(reference.getUri()).isEqualTo(uri); } - // TODO еще нужен тест для параметра, совпадающего с именем общего модуля, ссылки на общий модуль при этом не должны получаться - @Test void getReferencesToCommonModuleMethodFromAssignment() { // given @@ -170,7 +174,6 @@ void getReferencesToCommonModuleMethodFromAssignment() { var calledMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("НеУстаревшаяФункция").orElseThrow(); var uri = documentContext.getUri(); - var position = new Position(9, 30); // when final var referencesTo = referenceIndex.getReferencesTo(calledMethodSymbol).stream() @@ -199,6 +202,44 @@ void getReferencesToCommonModuleMethodFromAssignment() { assertThat(referencesTo).hasSize(3); } + // TODO еще нужен тест для параметра, совпадающего с именем общего модуля, ссылки на общий модуль при этом не должны получаться + + @Test + void getReferencesToCommonModuleMethodWithEqualNameWitMethodParam() { + // given + var documentContext = TestUtils.getDocumentContextFromFile(PATH_TO_FILE); + var methodSymbol = documentContext.getSymbolTree().getMethodSymbol("Тест_ИмяПараметр").orElseThrow(); + var commonModuleContext = serverContext.getDocument("CommonModule.ПервыйОбщийМодуль", ModuleType.CommonModule).orElseThrow(); + var calledMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("НеУстаревшаяФункция").orElseThrow(); + + var uri = documentContext.getUri(); + + // when +// final var commonModuleCallCount = referenceIndex.getReferencesFrom(uri).stream() +// .filter(reference -> reference.getFrom().getName().equalsIgnoreCase("Тест_ИмяПараметр")) +// .filter(reference -> MethodSymbol.class.isInstance(reference.getSymbol())) +// .filter(reference -> reference.getSourceDefinedSymbol().get().getName().equalsIgnoreCase("ПервыйОбщийМодуль")) +// .count(); +// final var referencesFromSymbolOccurrenceRepo = symbolOccurrenceRepository.occurrencesToSymbols.entrySet().stream() +// .filter(symbolSetEntry -> symbolSetEntry.getKey().getMdoRef().equalsIgnoreCase("CommonModule.ПервыйОбщийМодуль")) +// .filter(symbolSetEntry -> symbolSetEntry.getValue().stream() +// .filter(symbolOccurrence -> symbolOccurrence.getLocation().getUri() == uri) +// .anyMatch(symbolOccurrence -> Ranges.containsRange(methodSymbol.getRange(), symbolOccurrence.getLocation().getRange()))) +// .collect(Collectors.toList()); +// +// // then +// assertThat(referencesFromSymbolOccurrenceRepo.size()).isEqualTo(0); + + final var referencesFromLocationRepo = locationRepository.getSymbolOccurrencesByLocationUri(documentContext.getUri()) + .filter(symbolOccurrence -> symbolOccurrence.getOccurrenceType() == OccurrenceType.REFERENCE) + .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getSymbolKind() == SymbolKind.Method) + .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getModuleType() == ModuleType.CommonModule) + .filter(symbolOccurrence -> Ranges.containsRange(methodSymbol.getRange(), symbolOccurrence.getLocation().getRange())) + .collect(Collectors.toList()); + + assertThat(referencesFromLocationRepo.size()).isEqualTo(0); + } + @Test void testCantGetReferenceToNonExportCommonModuleMethod() { // given From e13337d6d684e5d28c41701c02cd1eaed9181647 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 13:15:12 +0300 Subject: [PATCH 04/20] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=20=D1=81?= =?UTF-8?q?=D1=81=D1=8B=D0=BB=D0=BE=D0=BA=20=D0=BD=D0=B0=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - когда имя параметра совпадает с именем общего модуля - слегка уточнил тест --- .../references/ReferenceIndexFiller.java | 42 +++++++++++++++++-- .../references/ReferenceIndexTest.java | 29 +++---------- 2 files changed, 44 insertions(+), 27 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 5690d71dacf..7353301f3e7 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 @@ -31,6 +31,7 @@ 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 com.github._1c_syntax.mdclasses.Configuration; import com.github._1c_syntax.mdclasses.mdo.support.ModuleType; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.Token; @@ -39,7 +40,9 @@ 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; @@ -47,6 +50,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; @Component @RequiredArgsConstructor @@ -80,6 +84,19 @@ public void fill(DocumentContext documentContext) { private class MethodSymbolReferenceIndexFinder extends BSLParserBaseVisitor { private final DocumentContext documentContext; + private Collection subParameters = Collections.emptyList(); + + @Override + public BSLParserRuleContext visitProcDeclaration(BSLParser.ProcDeclarationContext ctx) { + subParameters = calcParams(ctx.paramList()); + return super.visitProcDeclaration(ctx); + } + + @Override + public BSLParserRuleContext visitFuncDeclaration(BSLParser.FuncDeclarationContext ctx) { + subParameters = calcParams(ctx.paramList()); + return super.visitFuncDeclaration(ctx); + } @Override public BSLParserRuleContext visitCallStatement(BSLParser.CallStatementContext ctx) { @@ -139,17 +156,27 @@ public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { private void checkCall(String mdoRef, Token methodName) { + final var configuration = documentContext.getServerContext().getConfiguration(); String methodNameText = methodName.getText(); - Map modules = documentContext.getServerContext().getConfiguration().getModulesByMDORef(mdoRef); + Map modules = configuration.getModulesByMDORef(mdoRef); for (Map.Entry e : modules.entrySet()) { - ModuleType moduleType = e.getKey(); - if (!DEFAULT_MODULE_TYPES.contains(moduleType)) { + var moduleType = e.getKey(); + if (!DEFAULT_MODULE_TYPES.contains(moduleType) + || (moduleType == ModuleType.CommonModule && isParamNameEqualCommonModule(mdoRef, configuration))) { continue; } addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName)); } } + private boolean isParamNameEqualCommonModule(String mdoRef, Configuration configuration) { + return subParameters.stream() + .map(configuration::getCommonModule) + .filter(Optional::isPresent) + .flatMap(Optional::stream) + .anyMatch(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef().equalsIgnoreCase(mdoRef)); + } + private void addMethodCall(String mdoRef, ModuleType moduleType, String methodName, Range range) { index.addMethodCall(documentContext.getUri(), mdoRef, moduleType, methodName, range); } @@ -196,6 +223,15 @@ private Optional getMethodName(BSLParser.LValueContext lValueContext) { .map(BSLParser.AcceptorContext::modifier) .flatMap(this::getMethodName); } + + private List calcParams(@Nullable BSLParser.ParamListContext paramList) { + if (paramList == null) { + return Collections.emptyList(); + } + return paramList.param().stream() + .map(paramContext -> paramContext.IDENTIFIER().getText()) + .collect(Collectors.toList()); + } } @RequiredArgsConstructor 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 16b152938b6..9f44758d9e4 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 @@ -25,7 +25,6 @@ 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.Reference; -import com.github._1c_syntax.bsl.languageserver.references.model.SymbolOccurrenceRepository; 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; @@ -206,38 +205,20 @@ void getReferencesToCommonModuleMethodFromAssignment() { @Test void getReferencesToCommonModuleMethodWithEqualNameWitMethodParam() { - // given + var documentContext = TestUtils.getDocumentContextFromFile(PATH_TO_FILE); var methodSymbol = documentContext.getSymbolTree().getMethodSymbol("Тест_ИмяПараметр").orElseThrow(); - var commonModuleContext = serverContext.getDocument("CommonModule.ПервыйОбщийМодуль", ModuleType.CommonModule).orElseThrow(); - var calledMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("НеУстаревшаяФункция").orElseThrow(); - - var uri = documentContext.getUri(); - - // when -// final var commonModuleCallCount = referenceIndex.getReferencesFrom(uri).stream() -// .filter(reference -> reference.getFrom().getName().equalsIgnoreCase("Тест_ИмяПараметр")) -// .filter(reference -> MethodSymbol.class.isInstance(reference.getSymbol())) -// .filter(reference -> reference.getSourceDefinedSymbol().get().getName().equalsIgnoreCase("ПервыйОбщийМодуль")) -// .count(); -// final var referencesFromSymbolOccurrenceRepo = symbolOccurrenceRepository.occurrencesToSymbols.entrySet().stream() -// .filter(symbolSetEntry -> symbolSetEntry.getKey().getMdoRef().equalsIgnoreCase("CommonModule.ПервыйОбщийМодуль")) -// .filter(symbolSetEntry -> symbolSetEntry.getValue().stream() -// .filter(symbolOccurrence -> symbolOccurrence.getLocation().getUri() == uri) -// .anyMatch(symbolOccurrence -> Ranges.containsRange(methodSymbol.getRange(), symbolOccurrence.getLocation().getRange()))) -// .collect(Collectors.toList()); -// -// // then -// assertThat(referencesFromSymbolOccurrenceRepo.size()).isEqualTo(0); + final var commonModuleMdoRef = serverContext.getConfiguration().getCommonModule("ПервыйОбщийМодуль").orElseThrow() + .getMdoReference().getMdoRef(); final var referencesFromLocationRepo = locationRepository.getSymbolOccurrencesByLocationUri(documentContext.getUri()) .filter(symbolOccurrence -> symbolOccurrence.getOccurrenceType() == OccurrenceType.REFERENCE) .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getSymbolKind() == SymbolKind.Method) - .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getModuleType() == ModuleType.CommonModule) + .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getMdoRef().equals(commonModuleMdoRef)) .filter(symbolOccurrence -> Ranges.containsRange(methodSymbol.getRange(), symbolOccurrence.getLocation().getRange())) .collect(Collectors.toList()); - assertThat(referencesFromLocationRepo.size()).isEqualTo(0); + assertThat(referencesFromLocationRepo).isEmpty(); } @Test From 02bae505fbb675827b3ac63c775fbda4788c24e9 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 13:52:36 +0300 Subject: [PATCH 05/20] =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=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 --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 4 +++- 1 file changed, 3 insertions(+), 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 7353301f3e7..9cb1a96c715 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 @@ -229,7 +229,9 @@ private List calcParams(@Nullable BSLParser.ParamListContext paramList) return Collections.emptyList(); } return paramList.param().stream() - .map(paramContext -> paramContext.IDENTIFIER().getText()) + .map(paramContext -> paramContext.IDENTIFIER()) + .filter(Objects::nonNull) + .map(terminalNode -> terminalNode.getText()) .collect(Collectors.toList()); } } From 5637ef7d5fe487f9b6a24da667ee24c74d109402 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 14:25:33 +0300 Subject: [PATCH 06/20] =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=BA=D0=B5=D0=B9=D1=81=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D0=BE?= =?UTF-8?q?=D0=B5=20API=20RefIndex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit обращение к существующим методам общего модуля --- .../references/ReferenceIndexTest.java | 15 +++------------ src/test/resources/references/ReferenceIndex.bsl | 10 +++++----- 2 files changed, 8 insertions(+), 17 deletions(-) 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 9f44758d9e4..6e9f83378b1 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 @@ -22,8 +22,6 @@ package com.github._1c_syntax.bsl.languageserver.references; import com.github._1c_syntax.bsl.languageserver.context.ServerContext; -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.Reference; import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; @@ -50,8 +48,6 @@ class ReferenceIndexTest { @Autowired private ReferenceIndex referenceIndex; - @Autowired - private LocationRepository locationRepository; @Autowired private ServerContext serverContext; @@ -208,14 +204,9 @@ void getReferencesToCommonModuleMethodWithEqualNameWitMethodParam() { var documentContext = TestUtils.getDocumentContextFromFile(PATH_TO_FILE); var methodSymbol = documentContext.getSymbolTree().getMethodSymbol("Тест_ИмяПараметр").orElseThrow(); - final var commonModuleMdoRef = serverContext.getConfiguration().getCommonModule("ПервыйОбщийМодуль").orElseThrow() - .getMdoReference().getMdoRef(); - - final var referencesFromLocationRepo = locationRepository.getSymbolOccurrencesByLocationUri(documentContext.getUri()) - .filter(symbolOccurrence -> symbolOccurrence.getOccurrenceType() == OccurrenceType.REFERENCE) - .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getSymbolKind() == SymbolKind.Method) - .filter(symbolOccurrence -> symbolOccurrence.getSymbol().getMdoRef().equals(commonModuleMdoRef)) - .filter(symbolOccurrence -> Ranges.containsRange(methodSymbol.getRange(), symbolOccurrence.getLocation().getRange())) + + final var referencesFromLocationRepo = referenceIndex.getReferencesFrom(documentContext.getUri(), SymbolKind.Method).stream() + .filter(reference -> Ranges.containsRange(methodSymbol.getRange(), reference.getSelectionRange())) .collect(Collectors.toList()); assertThat(referencesFromLocationRepo).isEmpty(); diff --git a/src/test/resources/references/ReferenceIndex.bsl b/src/test/resources/references/ReferenceIndex.bsl index d46f610f0f0..d2826eb75fb 100644 --- a/src/test/resources/references/ReferenceIndex.bsl +++ b/src/test/resources/references/ReferenceIndex.bsl @@ -12,9 +12,9 @@ КонецПроцедуры Процедура Тест_ИмяПараметр(ПервыйОбщийМодуль) - ПервыйОбщийМодуль.МетодНесуществующий(1, 2); // ошибка - А = ПервыйОбщийМодуль.ДругойМетодНесуществующий(); // ошибка - ПервыйОбщийМодуль.ЕщеМетодНесуществующий().Добавить(); // ошибка - ПервыйОбщийМодуль.ЕщеОдинМетодНесуществующий().Реквизит = 10; // ошибка - Б = ПервыйОбщийМодуль.ЕщеДругойМетодНесуществующий().Добавить(); // ошибка + ПервыйОбщийМодуль.НеУстаревшаяПроцедура(1, 2); // ошибка + А = ПервыйОбщийМодуль.НеУстаревшаяФункция(); // ошибка + ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // ошибка + ПервыйОбщийМодуль.НеУстаревшаяФункция().Реквизит = 10; // ошибка + Б = ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // ошибка КонецПроцедуры \ No newline at end of file From b154583deabe19786c61f1da5a5d72747308eab9 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 14:27:51 +0300 Subject: [PATCH 07/20] Sonar - lambda --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 5 +++-- 1 file changed, 3 insertions(+), 2 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 9cb1a96c715..c4e80a806e3 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 @@ -35,6 +35,7 @@ import com.github._1c_syntax.mdclasses.mdo.support.ModuleType; 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 org.springframework.context.event.EventListener; @@ -229,9 +230,9 @@ private List calcParams(@Nullable BSLParser.ParamListContext paramList) return Collections.emptyList(); } return paramList.param().stream() - .map(paramContext -> paramContext.IDENTIFIER()) + .map(BSLParser.ParamContext::IDENTIFIER) .filter(Objects::nonNull) - .map(terminalNode -> terminalNode.getText()) + .map(ParseTree::getText) .collect(Collectors.toList()); } } From 6d109657914e83f179b532724681d1b28fdbcc79 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 17:52:24 +0300 Subject: [PATCH 08/20] =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20+=20=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=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=D0=B9=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexFiller.java | 28 ++++++++----------- .../references/ReferenceIndexTest.java | 2 -- 2 files changed, 12 insertions(+), 18 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 c4e80a806e3..b8eed2f8132 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 @@ -31,7 +31,6 @@ 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 com.github._1c_syntax.mdclasses.Configuration; import com.github._1c_syntax.mdclasses.mdo.support.ModuleType; import lombok.RequiredArgsConstructor; import org.antlr.v4.runtime.Token; @@ -85,17 +84,17 @@ public void fill(DocumentContext documentContext) { private class MethodSymbolReferenceIndexFinder extends BSLParserBaseVisitor { private final DocumentContext documentContext; - private Collection subParameters = Collections.emptyList(); + private Collection commonModuleMdoRefFromSubParams = Collections.emptySet(); @Override public BSLParserRuleContext visitProcDeclaration(BSLParser.ProcDeclarationContext ctx) { - subParameters = calcParams(ctx.paramList()); + commonModuleMdoRefFromSubParams = calcParams(ctx.paramList()); return super.visitProcDeclaration(ctx); } @Override public BSLParserRuleContext visitFuncDeclaration(BSLParser.FuncDeclarationContext ctx) { - subParameters = calcParams(ctx.paramList()); + commonModuleMdoRefFromSubParams = calcParams(ctx.paramList()); return super.visitFuncDeclaration(ctx); } @@ -163,21 +162,13 @@ private void checkCall(String mdoRef, Token methodName) { for (Map.Entry e : modules.entrySet()) { var moduleType = e.getKey(); if (!DEFAULT_MODULE_TYPES.contains(moduleType) - || (moduleType == ModuleType.CommonModule && isParamNameEqualCommonModule(mdoRef, configuration))) { + || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { continue; } addMethodCall(mdoRef, moduleType, methodNameText, Ranges.create(methodName)); } } - private boolean isParamNameEqualCommonModule(String mdoRef, Configuration configuration) { - return subParameters.stream() - .map(configuration::getCommonModule) - .filter(Optional::isPresent) - .flatMap(Optional::stream) - .anyMatch(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef().equalsIgnoreCase(mdoRef)); - } - private void addMethodCall(String mdoRef, ModuleType moduleType, String methodName, Range range) { index.addMethodCall(documentContext.getUri(), mdoRef, moduleType, methodName, range); } @@ -225,15 +216,20 @@ private Optional getMethodName(BSLParser.LValueContext lValueContext) { .flatMap(this::getMethodName); } - private List calcParams(@Nullable BSLParser.ParamListContext paramList) { + private Collection calcParams(@Nullable BSLParser.ParamListContext paramList) { if (paramList == null) { - return Collections.emptyList(); + return Collections.emptySet(); } + final var configuration = documentContext.getServerContext().getConfiguration(); return paramList.param().stream() .map(BSLParser.ParamContext::IDENTIFIER) .filter(Objects::nonNull) .map(ParseTree::getText) - .collect(Collectors.toList()); + .map(configuration::getCommonModule) + .filter(Optional::isPresent) + .flatMap(Optional::stream) + .map(mdCommonModule -> mdCommonModule.getMdoReference().getMdoRef()) + .collect(Collectors.toSet()); } } 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 6e9f83378b1..38a3b86f7ea 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 @@ -197,8 +197,6 @@ void getReferencesToCommonModuleMethodFromAssignment() { assertThat(referencesTo).hasSize(3); } - // TODO еще нужен тест для параметра, совпадающего с именем общего модуля, ссылки на общий модуль при этом не должны получаться - @Test void getReferencesToCommonModuleMethodWithEqualNameWitMethodParam() { From f32f9494c156714a9aef6dcce74e36ad04eeaeb0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 18:29:55 +0300 Subject: [PATCH 09/20] =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=B0=D1=8E=D1=89?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=BA=D0=B5=D0=B9=D1=81=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D0=BD=D0=B5=D0=B4=D0=B6=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=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 уточнил пред.тест --- .../references/ReferenceIndexTest.java | 39 +++++++++++++++++++ .../resources/references/ReferenceIndex.bsl | 8 +++- 2 files changed, 46 insertions(+), 1 deletion(-) 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 38a3b86f7ea..dfa2e16b6f5 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 @@ -173,6 +173,7 @@ void getReferencesToCommonModuleMethodFromAssignment() { // when final var referencesTo = referenceIndex.getReferencesTo(calledMethodSymbol).stream() .filter(reference -> reference.getUri().equals(uri)) + .filter(reference -> Ranges.containsRange(methodSymbol.getRange(), reference.toLocation().getRange())) .collect(Collectors.toList()); // then @@ -197,6 +198,44 @@ void getReferencesToCommonModuleMethodFromAssignment() { assertThat(referencesTo).hasSize(3); } + @Test + void getReferencesToFullPathModuleMethodFromAssignment() { + // given + var documentContext = TestUtils.getDocumentContextFromFile(PATH_TO_FILE); + var methodSymbol = documentContext.getSymbolTree().getMethodSymbol("Тест_ВызовЧерезПолноеИмяОбъекта").orElseThrow(); + var commonModuleContext = serverContext.getDocument("InformationRegister.РегистрСведений1", ModuleType.ManagerModule).orElseThrow(); + var calledMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("НеУстаревшаяФункция").orElseThrow(); + + var uri = documentContext.getUri(); + + // when + final var referencesTo = referenceIndex.getReferencesTo(calledMethodSymbol).stream() + .filter(reference -> reference.getUri().equals(uri)) + .filter(reference -> Ranges.containsRange(methodSymbol.getRange(), reference.toLocation().getRange())) + .collect(Collectors.toList()); + + // then + var reference = referencesTo.get(0); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(22, 42, 61)); + assertThat(reference.getUri()).isEqualTo(uri); + + reference = referencesTo.get(1); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(23, 42, 61)); + assertThat(reference.getUri()).isEqualTo(uri); + + reference = referencesTo.get(2); + assertThat(reference.getFrom()).isEqualTo(methodSymbol); + assertThat(reference.getSymbol()).isEqualTo(calledMethodSymbol); + assertThat(reference.getSelectionRange()).isEqualTo(Ranges.create(24, 38, 57)); + assertThat(reference.getUri()).isEqualTo(uri); + + assertThat(referencesTo).hasSize(3); + } + @Test void getReferencesToCommonModuleMethodWithEqualNameWitMethodParam() { diff --git a/src/test/resources/references/ReferenceIndex.bsl b/src/test/resources/references/ReferenceIndex.bsl index d2826eb75fb..fed32b1ea86 100644 --- a/src/test/resources/references/ReferenceIndex.bsl +++ b/src/test/resources/references/ReferenceIndex.bsl @@ -17,4 +17,10 @@ ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // ошибка ПервыйОбщийМодуль.НеУстаревшаяФункция().Реквизит = 10; // ошибка Б = ПервыйОбщийМодуль.НеУстаревшаяФункция().Добавить(); // ошибка -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Процедура Тест_ВызовЧерезПолноеИмяОбъекта() + А = РегистрыСведений.РегистрСведений1.НеУстаревшаяФункция(); + Б = РегистрыСведений.РегистрСведений1.НеУстаревшаяФункция().Добавить(); + РегистрыСведений.РегистрСведений1.НеУстаревшаяФункция().Реквизит = 10; +КонецПроцедуры From c2623126f402cd57dbc1421c8fe39f894d64e25a Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 3 Jul 2022 18:31:50 +0300 Subject: [PATCH 10/20] =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BB=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D1=81=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B5=D0=BD=D0=B5=D0=B4=D0=B6=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=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 --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 5 ++++- 1 file changed, 4 insertions(+), 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 b8eed2f8132..c8cff656cbc 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 @@ -146,7 +146,10 @@ public BSLParserRuleContext visitGlobalMethodCall(BSLParser.GlobalMethodCallCont public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { final var identifier = ctx.IDENTIFIER(); if (identifier != null){ - String mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, Collections.emptyList()); + final List modifiers = Optional.ofNullable(ctx.acceptor()) + .map(BSLParser.AcceptorContext::modifier) + .orElseGet(Collections::emptyList); + String mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, modifiers); if (!mdoRef.isEmpty()) { getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); } From 1759f7944e62ccbebe91842cbdb64f43d90de4a4 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 5 Jul 2022 18:30:39 +0300 Subject: [PATCH 11/20] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexFiller.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 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 e8762c54da5..c156557e97d 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 @@ -49,7 +49,9 @@ import java.util.Collection; import java.util.Collections; import java.util.EnumSet; +import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -187,12 +189,7 @@ public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { private void checkCall(String mdoRef, Token methodName) { var methodNameText = Strings.trimQuotes(methodName.getText()); - Map modules = documentContext.getServerContext().getConfiguration().getModulesByMDORef(mdoRef); - for (ModuleType moduleType : modules.keySet()) { - if (!DEFAULT_MODULE_TYPES.contains(moduleType)) { - final var configuration = documentContext.getServerContext().getConfiguration(); - String methodNameText = methodName.getText(); Map modules = configuration.getModulesByMDORef(mdoRef); for (Map.Entry e : modules.entrySet()) { var moduleType = e.getKey(); @@ -208,6 +205,29 @@ private void addMethodCall(String mdoRef, ModuleType moduleType, String methodNa index.addMethodCall(documentContext.getUri(), mdoRef, moduleType, methodName, range); } + private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String mdoRef) { + Methods.getMethodName(methodName).ifPresent((Token methodNameToken) -> { + if (!mdoRef.equals(MdoRefBuilder.getMdoRef(documentContext))) { + checkCall(mdoRef, methodNameToken); + } + + addMethodCall( + mdoRef, + documentContext.getModuleType(), + Strings.trimQuotes(methodName.getText()), + Ranges.create(methodName) + ); + }); + } + + private String getModule(BSLParser.CallParamContext callParamContext) { + return NotifyDescription.getFirstMember(callParamContext) + .map(BSLParser.MemberContext::complexIdentifier) + .filter(Predicate.not(Modules::isThisObject)) + .map(complexIdentifier -> MdoRefBuilder.getMdoRef(documentContext, complexIdentifier)) + .orElse(MdoRefBuilder.getMdoRef(documentContext)); + } + private Optional getMethodName(BSLParser.CallStatementContext ctx) { var modifiers = ctx.modifier(); Optional methodName; From dc9a69e163b31711609a6e685cb73bff8775b62e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 5 Jul 2022 18:49:40 +0300 Subject: [PATCH 12/20] =?UTF-8?q?=D0=B5=D1=89=D0=B5=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D1=81=D1=82=D0=B2=D0=B8=D0=B9=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../references/ReferenceIndexFiller.java | 45 +------------------ .../bsl/languageserver/utils/Methods.java | 6 +++ 2 files changed, 7 insertions(+), 44 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 c156557e97d..3a568d88868 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 @@ -181,7 +181,7 @@ public BSLParserRuleContext visitLValue(BSLParser.LValueContext ctx) { .orElseGet(Collections::emptyList); String mdoRef = MdoRefBuilder.getMdoRef(documentContext, identifier, modifiers); if (!mdoRef.isEmpty()) { - getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); + Methods.getMethodName(ctx).ifPresent(methodName -> checkCall(mdoRef, methodName)); } } return super.visitLValue(ctx); @@ -228,49 +228,6 @@ private String getModule(BSLParser.CallParamContext callParamContext) { .orElse(MdoRefBuilder.getMdoRef(documentContext)); } - private Optional getMethodName(BSLParser.CallStatementContext ctx) { - var modifiers = ctx.modifier(); - Optional methodName; - if (ctx.globalMethodCall() != null) { - methodName = getMethodName(ctx.globalMethodCall()); - } else { - methodName = getMethodName(ctx.accessCall()); - } - - if (modifiers.isEmpty()) { - return methodName; - } else { - return getMethodName(modifiers).or(() -> methodName); - } - } - - private Optional getMethodName(BSLParser.GlobalMethodCallContext ctx) { - return Optional.of(ctx.methodName().getStart()); - } - - private Optional getMethodName(BSLParser.AccessCallContext ctx) { - return Optional.of(ctx.methodCall().methodName().getStart()); - } - - private Optional getMethodName(BSLParser.ComplexIdentifierContext ctx) { - return getMethodName(ctx.modifier()); - } - - private Optional getMethodName(List modifiers) { - return modifiers.stream() - .map(BSLParser.ModifierContext::accessCall) - .filter(Objects::nonNull) - .map(this::getMethodName) - .findFirst() - .orElse(Optional.empty()); - } - - private Optional getMethodName(BSLParser.LValueContext lValueContext) { - return Optional.ofNullable(lValueContext.acceptor()) - .map(BSLParser.AcceptorContext::modifier) - .flatMap(this::getMethodName); - } - private Collection calcParams(@Nullable BSLParser.ParamListContext paramList) { if (paramList == null) { return Collections.emptySet(); 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 6ca1382bee0..626404e2b3e 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 @@ -76,4 +76,10 @@ public static Optional getMethodName(BSLParser.CallParamContext callParam .map(BSLParser.StringContext::getStart); } + public static Optional getMethodName(BSLParser.LValueContext lValueContext) { + return Optional.ofNullable(lValueContext.acceptor()) + .map(BSLParser.AcceptorContext::modifier) + .flatMap(Methods::getMethodName); + } + } From 6136f6765c1f678a25c3dc3de3aaf4b32ad14fac Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 5 Jul 2022 18:51:20 +0300 Subject: [PATCH 13/20] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20ReferenceIndex::isReferenceAcc?= =?UTF-8?q?essible=20+=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/references/ReferenceIndex.java | 3 ++- .../bsl/languageserver/references/ReferenceIndexTest.java | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) 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 0615105e9e8..0b9894450b4 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 @@ -245,7 +245,8 @@ private Optional buildReference( SourceDefinedSymbol from = getFromSymbol(symbolOccurrence); return new Reference(from, symbol, uri, range, occurrenceType); }) - .filter(ReferenceIndex::isReferenceAccessible); +// .filter(ReferenceIndex::isReferenceAccessible) + ; } private Optional getSourceDefinedSymbol(Symbol symbolEntity) { 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 dfa2e16b6f5..d7643a8f7a7 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 @@ -272,6 +272,7 @@ void testGetReferencesFromLocalMethodSymbol() { var commonModuleContext = serverContext.getDocument("CommonModule.ПервыйОбщийМодуль", ModuleType.CommonModule).orElseThrow(); var commonModuleMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("УстаревшаяПроцедура").orElseThrow(); + var commonModuleNonExportMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("Тест").orElseThrow(); var managerModuleContext = serverContext.getDocument("InformationRegister.РегистрСведений1", ModuleType.ManagerModule).orElseThrow(); var managerModuleMethodSymbol = managerModuleContext.getSymbolTree().getMethodSymbol("УстаревшаяПроцедура").orElseThrow(); @@ -280,16 +281,19 @@ void testGetReferencesFromLocalMethodSymbol() { var locationLocal = new Location(uri, Ranges.create(1, 4, 16)); var locationCommonModule = new Location(uri, Ranges.create(2, 22, 41)); var locationManagerModule = new Location(uri, Ranges.create(3, 38, 57)); + // TODO временная переменная + var locationNonExportCommonModule = new Location(uri, Ranges.create(4, 22, 26)); // when var references = referenceIndex.getReferencesFrom(localMethodSymbol); // then assertThat(references) - .hasSize(3) + .hasSize(4) .contains(Reference.of(localMethodSymbol, localMethodSymbol, locationLocal)) .contains(Reference.of(localMethodSymbol, commonModuleMethodSymbol, locationCommonModule)) .contains(Reference.of(localMethodSymbol, managerModuleMethodSymbol, locationManagerModule)) + .contains(Reference.of(localMethodSymbol, commonModuleNonExportMethodSymbol, locationNonExportCommonModule)) ; } From 98163e4da3cf34fb383f95dbc24feb006e153a71 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 5 Jul 2022 18:51:27 +0300 Subject: [PATCH 14/20] =?UTF-8?q?Revert=20"=D1=83=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20ReferenceIndex::isRef?= =?UTF-8?q?erenceAccessible=20+=20=D1=82=D0=B5=D1=81=D1=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6136f6765c1f678a25c3dc3de3aaf4b32ad14fac. --- .../bsl/languageserver/references/ReferenceIndex.java | 3 +-- .../bsl/languageserver/references/ReferenceIndexTest.java | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) 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 0b9894450b4..0615105e9e8 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 @@ -245,8 +245,7 @@ private Optional buildReference( SourceDefinedSymbol from = getFromSymbol(symbolOccurrence); return new Reference(from, symbol, uri, range, occurrenceType); }) -// .filter(ReferenceIndex::isReferenceAccessible) - ; + .filter(ReferenceIndex::isReferenceAccessible); } private Optional getSourceDefinedSymbol(Symbol symbolEntity) { 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 d7643a8f7a7..dfa2e16b6f5 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 @@ -272,7 +272,6 @@ void testGetReferencesFromLocalMethodSymbol() { var commonModuleContext = serverContext.getDocument("CommonModule.ПервыйОбщийМодуль", ModuleType.CommonModule).orElseThrow(); var commonModuleMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("УстаревшаяПроцедура").orElseThrow(); - var commonModuleNonExportMethodSymbol = commonModuleContext.getSymbolTree().getMethodSymbol("Тест").orElseThrow(); var managerModuleContext = serverContext.getDocument("InformationRegister.РегистрСведений1", ModuleType.ManagerModule).orElseThrow(); var managerModuleMethodSymbol = managerModuleContext.getSymbolTree().getMethodSymbol("УстаревшаяПроцедура").orElseThrow(); @@ -281,19 +280,16 @@ void testGetReferencesFromLocalMethodSymbol() { var locationLocal = new Location(uri, Ranges.create(1, 4, 16)); var locationCommonModule = new Location(uri, Ranges.create(2, 22, 41)); var locationManagerModule = new Location(uri, Ranges.create(3, 38, 57)); - // TODO временная переменная - var locationNonExportCommonModule = new Location(uri, Ranges.create(4, 22, 26)); // when var references = referenceIndex.getReferencesFrom(localMethodSymbol); // then assertThat(references) - .hasSize(4) + .hasSize(3) .contains(Reference.of(localMethodSymbol, localMethodSymbol, locationLocal)) .contains(Reference.of(localMethodSymbol, commonModuleMethodSymbol, locationCommonModule)) .contains(Reference.of(localMethodSymbol, managerModuleMethodSymbol, locationManagerModule)) - .contains(Reference.of(localMethodSymbol, commonModuleNonExportMethodSymbol, locationNonExportCommonModule)) ; } From 6cd23bdb19bead03d7e6f43b65c08dd228f02f57 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 19 Jul 2022 19:10:29 +0300 Subject: [PATCH 15/20] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java Co-authored-by: Nikita Fedkin --- .../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 3a568d88868..1c2cdd1e22c 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 @@ -89,7 +89,7 @@ public void fill(DocumentContext documentContext) { private class MethodSymbolReferenceIndexFinder extends BSLParserBaseVisitor { private final DocumentContext documentContext; - private Collection commonModuleMdoRefFromSubParams = Collections.emptySet(); + private Set commonModuleMdoRefFromSubParams = Collections.emptySet(); @Override public BSLParserRuleContext visitProcDeclaration(BSLParser.ProcDeclarationContext ctx) { From 0e2d0d821a3279a9d66d24dcce55f0bac1ad2f02 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 19 Jul 2022 19:10:36 +0300 Subject: [PATCH 16/20] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java Co-authored-by: Nikita Fedkin --- .../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 1c2cdd1e22c..fabb7a60299 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 @@ -228,7 +228,7 @@ private String getModule(BSLParser.CallParamContext callParamContext) { .orElse(MdoRefBuilder.getMdoRef(documentContext)); } - private Collection calcParams(@Nullable BSLParser.ParamListContext paramList) { + private Set calcParams(@Nullable BSLParser.ParamListContext paramList) { if (paramList == null) { return Collections.emptySet(); } From c1d35c821d9df4cd195404c61c6092edcfa0355e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 11:19:38 +0300 Subject: [PATCH 17/20] =?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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit улучшена проверка ЭтотОбъект через регулярку --- .../_1c_syntax/bsl/languageserver/utils/Modules.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 31966e0476b..4817e47c929 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 @@ -31,11 +31,15 @@ public class Modules { private static final Pattern THIS_OBJECT_PATTERN = CaseInsensitivePattern.compile( - "^(ЭтотОбъект|ThisObject)$" + "ЭтотОбъект|ThisObject" ); public static boolean isThisObject(BSLParser.ComplexIdentifierContext complexIdentifier) { - return THIS_OBJECT_PATTERN.matcher(complexIdentifier.IDENTIFIER().getText()).find(); + final var identifier = complexIdentifier.IDENTIFIER(); + if (identifier == null){ + return false; + } + return THIS_OBJECT_PATTERN.matcher(identifier.getText()).matches(); } } From c3c2cc9e74dda48030e6f4043263e820463a1c6b Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 11:21:34 +0300 Subject: [PATCH 18/20] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=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 --- .../references/ReferenceIndexFiller.java | 11 +++++++++- .../ReferenceIndexNotifyDescription.bsl | 22 +++++++++++++++++-- 2 files changed, 30 insertions(+), 3 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 3a568d88868..29d18ab4916 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 @@ -206,6 +206,9 @@ private void addMethodCall(String mdoRef, ModuleType moduleType, String methodNa } private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String mdoRef) { + if (mdoRef.isEmpty()){ + return; + } Methods.getMethodName(methodName).ifPresent((Token methodNameToken) -> { if (!mdoRef.equals(MdoRefBuilder.getMdoRef(documentContext))) { checkCall(mdoRef, methodNameToken); @@ -221,8 +224,14 @@ private void addCallbackMethodCall(BSLParser.CallParamContext methodName, String } private String getModule(BSLParser.CallParamContext callParamContext) { - return NotifyDescription.getFirstMember(callParamContext) + final var complexIdentifierContext1 = NotifyDescription.getFirstMember(callParamContext) .map(BSLParser.MemberContext::complexIdentifier) + .filter(complexIdentifierContext -> complexIdentifierContext.IDENTIFIER() != null) + .filter(complexIdentifierContext -> complexIdentifierContext.modifier().isEmpty()); + if (complexIdentifierContext1.isEmpty()){ + return ""; + } + return complexIdentifierContext1 .filter(Predicate.not(Modules::isThisObject)) .map(complexIdentifier -> MdoRefBuilder.getMdoRef(documentContext, complexIdentifier)) .orElse(MdoRefBuilder.getMdoRef(documentContext)); diff --git a/src/test/resources/references/ReferenceIndexNotifyDescription.bsl b/src/test/resources/references/ReferenceIndexNotifyDescription.bsl index 3274c8670ef..01f80f0b806 100644 --- a/src/test/resources/references/ReferenceIndexNotifyDescription.bsl +++ b/src/test/resources/references/ReferenceIndexNotifyDescription.bsl @@ -9,10 +9,28 @@ ЭтотОбъект ); + // Такое объявление не ловим + ОписаниеОповещения2 = Новый ОписаниеОповещения( + "ОбработчикОписаниеОповещения", + ОбщийМодуль("Имя"), + , + "ОшибкаОписаниеОповещения", + ОбщегоНазначения.ОбщийМодуль("Имя") + ); + + // Такое объявление не ловим + ОписаниеОповещения3 = Новый ОписаниеОповещения( + "ОбработчикОписаниеОповещения", + "ИмяМодуля", + , + "ОшибкаОписаниеОповещения", + "ДругоеИмяМодуля" + ); + // Такое объявление не ловим ОбработчикОписаниеОповещения = "ОбработчикОписаниеОповещенияВПеременной"; ОшибкаОписаниеОповещения = "ОшибкаОписаниеОповещенияВПеременной"; - ОписаниеОповещения2 = Новый ОписаниеОповещения( + ОписаниеОповещения4 = Новый ОписаниеОповещения( ОбработчикОписаниеОповещения, ЭтотОбъект, , @@ -26,7 +44,7 @@ ПараметрыОбработчика[1] = ЭтотОбъект; ПараметрыОбработчика[3] = "ОшибкаОписаниеОповещения"; ПараметрыОбработчика[4] = ЭтотОбъект; - ОписаниеОповещения3 = Новый("ОписаниеОповещения", ПараметрыОбработчика); + ОписаниеОповещения5 = Новый("ОписаниеОповещения", ПараметрыОбработчика); КонецПроцедуры From 3b284d34cb15ae5223d6009b49e916c46841ee17 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 20 Jul 2022 18:37:03 +0300 Subject: [PATCH 19/20] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=B2=D1=8B=D1=87=D0=B8?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 9a6de10ed49..d9db398a865 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 @@ -195,8 +195,7 @@ private void checkCall(String mdoRef, Token methodName) { var methodNameText = Strings.trimQuotes(methodName.getText()); final var configuration = documentContext.getServerContext().getConfiguration(); Map modules = configuration.getModulesByMDORef(mdoRef); - for (Map.Entry e : modules.entrySet()) { - var moduleType = e.getKey(); + for (ModuleType moduleType : modules.keySet()) { if (!DEFAULT_MODULE_TYPES.contains(moduleType) || (moduleType == ModuleType.CommonModule && commonModuleMdoRefFromSubParams.contains(mdoRef))) { continue; From 8fae65aa80b127a22019a640a409e9a0a714ec49 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 22 Jul 2022 23:33:26 +0300 Subject: [PATCH 20/20] Update src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndexFiller.java --- .../bsl/languageserver/references/ReferenceIndexFiller.java | 1 + 1 file changed, 1 insertion(+) 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 d9db398a865..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 @@ -209,6 +209,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()){ return; }