From fcfad2373723169d27db727dc084723201f25ff2 Mon Sep 17 00:00:00 2001 From: theshadowco Date: Tue, 23 Jan 2024 18:15:06 +0300 Subject: [PATCH 1/3] =?UTF-8?q?-=20=D0=BE=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=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 2/3] =?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 3/3] 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()