From 503fe7705baaf79ac69fe9786f5759da403f0f5f Mon Sep 17 00:00:00 2001 From: Kutlu Date: Wed, 17 Jul 2024 14:41:40 +0200 Subject: [PATCH 01/10] draft impl --- .../services/copybook/CopybookDownloadService.ts | 10 ++-------- .../copybooks/CopybookPreprocessorService.java | 2 +- .../lsp/cobol/lsp/jrpc/CobolLanguageClient.java | 6 +++--- .../service/copybooks/CopybookServiceImpl.java | 3 +-- .../service/copybooks/CopybookServiceTest.java | 14 ++++++++------ 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/clients/cobol-lsp-vscode-extension/src/services/copybook/CopybookDownloadService.ts b/clients/cobol-lsp-vscode-extension/src/services/copybook/CopybookDownloadService.ts index 3c248e4b74..17327e62a2 100644 --- a/clients/cobol-lsp-vscode-extension/src/services/copybook/CopybookDownloadService.ts +++ b/clients/cobol-lsp-vscode-extension/src/services/copybook/CopybookDownloadService.ts @@ -125,16 +125,10 @@ export class CopybookDownloadService { public makeCopybookDownloadHandler() { return ( cobolFileName: string, - copybookNames: string[], - dialectType: string, + copybookNames: CopybookName[], _quietMode: boolean, ) => { - return this.downloadCopybooks( - cobolFileName, - copybookNames.map( - (copybookName) => new CopybookName(copybookName, dialectType), - ), - ); + return this.downloadCopybooks(cobolFileName, copybookNames); }; } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java index f582a57a88..6078f19539 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java @@ -232,7 +232,7 @@ private boolean firstInstruction(ExtendedDocument extendedDocument, Position sta } private CopybookName getCopybookName(CobolPreprocessor.CopySourceContext ctx) { - return new CopybookName(StringUtils.trimQuotes(ctx.getText())); + return new CopybookName(StringUtils.trimQuotes(ctx.getText()), "COBOL"); } private CopybookModel read(CopybookName copybookName, String documentUri) { diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java index b85714d501..d6fedc1012 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java @@ -16,6 +16,8 @@ import java.util.List; import java.util.concurrent.CompletableFuture; + +import org.eclipse.lsp.cobol.common.copybook.CopybookName; import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; import org.eclipse.lsp4j.services.LanguageClient; @@ -58,15 +60,13 @@ default CompletableFuture resolveCopybook( * * @param cobolFileUri Uri of the cobol program * @param copybookNames list of copybooks to download - * @param dialectType the name of copybook dialect * @param quietMode the name of copybook dialect * @return corresponding local file absolute path */ @JsonRequest("copybook/download") default CompletableFuture downloadCopybooks( String cobolFileUri, - List copybookNames, - String dialectType, + List copybookNames, boolean quietMode) { throw new UnsupportedOperationException(); } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index 0f7a5173a3..d7304fee05 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -288,8 +288,7 @@ public void sendCopybookDownloadRequest(String documentUri, Collection c LOG.debug("Copybooks to download: {}", copybooksToDownload); if (!copybooksToDownload.isEmpty()) { clientProvider.get().downloadCopybooks(documentUri, - copybooksToDownload.stream().map(CopybookName::getQualifiedName).collect(toList()), - Optional.ofNullable(copybooksToDownload.stream().findFirst().get().getDialectType()).orElse(COBOL), //NOSONAR + copybooksToDownload, !processingMode.userInteraction); } } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java index 24d117ee0a..158e26c5f6 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java @@ -381,22 +381,22 @@ void testServiceSendsDownloadingRequestForAnalysisFinishedEvent() { new CopybookModel( copybookInvalid2.toCopybookId(DOCUMENT_2_URI), copybookInvalid2, null, null), invalidCpy2); - + CopybookName invalidCopybookName = new CopybookName(INVALID_CPY_NAME); // First document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(INVALID_CPY_NAME), "COBOL", true); + .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybookName), true); // Others parsing done events for first document are not trigger settingsService copybookService.sendCopybookDownloadRequest(DOCUMENT_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(INVALID_CPY_NAME), "COBOL", true); - + .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybookName), true); + CopybookName invalidCopybookName2 = new CopybookName(INVALID_2_CPY_NAME); // Second document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_2_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_2_URI, ImmutableList.of(INVALID_2_CPY_NAME), "COBOL", true); + .downloadCopybooks(DOCUMENT_2_URI, ImmutableList.of(invalidCopybookName2), true); } /** Test that the service resolves the SQLDA predefined copybook */ @@ -490,10 +490,12 @@ void testServiceSendsDownloadingRequestForAllNotResolvedCopybooks() { // Notify that analysis finished sending the document URI and copybook names that have nested // copybooks + CopybookName invalidCopybookName = new CopybookName(INVALID_CPY_NAME); + CopybookName nestedCopybookName = new CopybookName(NESTED_CPY_NAME); copybookService.sendCopybookDownloadRequest( DOCUMENT_URI, asList(PARENT_CPY_URI, DOCUMENT_URI), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, asList(INVALID_CPY_NAME, NESTED_CPY_NAME), "COBOL", true); + .downloadCopybooks(DOCUMENT_URI, asList(invalidCopybookName, nestedCopybookName), true); } @Test From 380766f77949c0717c97527aeebbe99f0c6b12c2 Mon Sep 17 00:00:00 2001 From: Kutlu Date: Thu, 18 Jul 2024 14:54:21 +0200 Subject: [PATCH 02/10] change dto fields --- .../copybook/downloader/DownloadUtil.ts | 10 +++++++--- .../cobol/common/copybook/CopybookName.java | 20 +++++++++---------- .../dialects/idms/IdmsCopybookService.java | 2 +- .../dialects/idms/IdmsCopybookVisitor.java | 2 +- .../copybooks/CopybookErrorService.java | 2 +- .../implicitDialects/sql/Db2SqlVisitor.java | 2 +- .../copybooks/CopybookNameServiceImpl.java | 6 +++--- .../copybooks/CopybookServiceImpl.java | 10 +++++----- .../copybooks/CopybookServiceTest.java | 18 ++++++++--------- .../test/engine/PredefinedCopybookUtils.java | 2 +- 10 files changed, 39 insertions(+), 35 deletions(-) diff --git a/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts b/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts index 35204e32c8..f1a08bca53 100644 --- a/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts +++ b/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts @@ -153,9 +153,13 @@ export class DownloadUtil { documentUri: string, copybookNames: CopybookName[], ): boolean { - const dialects = new Set( - copybookNames.map((n) => n.dialect?.toLocaleUpperCase()).filter(Boolean), - ); + const dialects = [ + ...new Set( + copybookNames + .map((n) => n.dialect?.toLocaleUpperCase()) + .filter(Boolean), + ), + ]; for (const dialect of dialects) { const dsnPath = SettingsService.getDsnPath(documentUri, dialect); diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java index df7f4305da..8c65533021 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java @@ -29,22 +29,22 @@ @AllArgsConstructor @Builder public class CopybookName { - String displayName; - String dialectType; + String name; + String dialect; String extension; public String getQualifiedName() { - return displayName; + return name; } - public CopybookName(String displayName) { - this.displayName = displayName; + public CopybookName(String name) { + this.name = name; this.extension = null; - this.dialectType = null; + this.dialect = null; } - public CopybookName(String displayName, String dialectType) { - this.displayName = displayName; - this.dialectType = dialectType; + public CopybookName(String name, String dialect) { + this.name = name; + this.dialect = dialect; this.extension = null; } @@ -54,6 +54,6 @@ public CopybookName(String displayName, String dialectType) { * @return an instance of copybook id */ public CopybookId toCopybookId(String programUri) { - return CopybookId.create(displayName, dialectType, programUri); + return CopybookId.create(name, dialect, programUri); } } diff --git a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java index 901dd5bce3..9ff8a0b6bd 100644 --- a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java +++ b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java @@ -75,7 +75,7 @@ public ResultWithErrors> processCopybook(CopybookModel copybookModel, processedCopybooks.add(copybookName); - CopyNode node = new CopyNode(locality, locality.toLocation(), copybookName.getDisplayName(), IdmsDialect.NAME, copybookModel.getUri()); + CopyNode node = new CopyNode(locality, locality.toLocation(), copybookName.getQualifiedName(), IdmsDialect.NAME, copybookModel.getUri()); List errors = new LinkedList<>(); processNodes(copybookModel, parentLevel).unwrap(errors::addAll) diff --git a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java index 6c02f761ad..3fd3cc8379 100644 --- a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java +++ b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java @@ -92,7 +92,7 @@ public List visitCopyIdmsStatement(IdmsCopyParser.CopyIdmsStatementContext documentUri, preprocessor); CopybookModel copybookModel = resolvedCopybook.getResult(); - Locality locality = IdmsParserHelper.buildNameRangeLocality(optionsContext, copybookName.getDisplayName(), documentUri); + Locality locality = IdmsParserHelper.buildNameRangeLocality(optionsContext, copybookName.getQualifiedName(), documentUri); errors.addAll(resolvedCopybook.getErrors()); return idmsCopybookService.processCopybook(copybookModel, calculateLevel(getLevel(ctx)), locality) .unwrap(errors::addAll); diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java index 16e2257cda..3c6d974ee9 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java @@ -56,7 +56,7 @@ private SyntaxError addCopybookError( SyntaxError error = SyntaxError.syntaxError().errorSource(ErrorSource.COPYBOOK) .severity(info) - .suggestion(messageService.getMessage(messageID, copybookName.getDisplayName())) + .suggestion(messageService.getMessage(messageID, copybookName.getQualifiedName())) .location(locality.toOriginalLocation()) .build(); LOG.debug(logMessage, error.toString()); diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java index 9bd32c85ed..ea8dd5ecd1 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java @@ -172,7 +172,7 @@ private Locality getLocality(Location location) { copybookService.getCopybookUsage(docUri).stream() .filter(model -> model.getUri().equals(location.getUri())) .findFirst() - .ifPresent(model -> builder.copybookId(model.getCopybookName().getDisplayName())); + .ifPresent(model -> builder.copybookId(model.getCopybookName().getQualifiedName())); } return builder.build(); } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java index 4ed5eacfe0..77cb2c5d4d 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java @@ -79,7 +79,7 @@ public List getNames(String uri) { @Override public Optional findByName(String uri, final String displayName) { List copybookNamesList = createCopybookNamesList(uri, - copybookName -> displayName.equalsIgnoreCase(copybookName.getDisplayName())); + copybookName -> displayName.equalsIgnoreCase(copybookName.getQualifiedName())); return copybookNamesList.isEmpty() ? Optional.empty() : Optional.of(copybookNamesList.get(0)); } @@ -151,14 +151,14 @@ private List resolveNames( .map(nameAndExtension -> nameAndExtension.split("\\.")) .map(nameAndExtension -> CopybookName .builder() - .displayName(nameAndExtension[0]) + .name(nameAndExtension[0]) .extension(nameAndExtension.length == 1 ? "" : nameAndExtension[1]) .build()) .filter(copybookName -> copybookExtensionsWithoutDotAsSet.contains( copybookName.getExtension())) .filter(predicate) .collect(Collectors.toMap( - CopybookName::getDisplayName, + CopybookName::getQualifiedName, Function.identity(), (existing, replacement) -> copybookExtensionsWithoutDot.indexOf(existing.getExtension()) diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index d7304fee05..bed34deec4 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -184,8 +184,8 @@ private CopybookModel resolveSync( } private Optional tryResolvePredefinedCopybook(CopybookName copybookName) { - CopybookName predefineCopybookName = new CopybookName(copybookName.getDisplayName().toUpperCase(), copybookName.getDialectType(), copybookName.getExtension()); - CopybookId copybookId = predefineCopybookName.toCopybookId(ImplicitCodeUtils.createFullUrl(predefineCopybookName.getDisplayName())); + CopybookName predefineCopybookName = new CopybookName(copybookName.getQualifiedName().toUpperCase(), copybookName.getDialect(), copybookName.getExtension()); + CopybookId copybookId = predefineCopybookName.toCopybookId(ImplicitCodeUtils.createFullUrl(predefineCopybookName.getQualifiedName())); try { CopybookModel copybookModel = copybookCache.get(copybookId, () -> new CopybookModel(copybookId, predefineCopybookName, null, null)); if (copybookModel.getContent() == null || copybookModel.getUri() == null) return Optional.empty(); @@ -215,7 +215,7 @@ private OriginalLocation getErrorOriginalLocation(CopybookModel dirtyCopybook, S return new OriginalLocation( Optional.ofNullable(error.getLocation()).map(OriginalLocation::getLocation).orElse(null), CopybooksRepository.toId(dirtyCopybook.getCopybookName().getQualifiedName(), - dirtyCopybook.getCopybookName().getDialectType(), + dirtyCopybook.getCopybookName().getDialect(), dirtyCopybook.getUri())); } @@ -238,8 +238,8 @@ private Optional resolveCopybookFromWorkspace(CopybookName copybookName, try { CompletableFuture future = clientProvider.get().resolveCopybook( programUri, - copybookName.getDisplayName(), - Optional.ofNullable(copybookName.getDialectType()).orElse(COBOL)); + copybookName.getQualifiedName(), + Optional.ofNullable(copybookName.getDialect()).orElse(COBOL)); if (future == null) { return Optional.empty(); diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java index 158e26c5f6..331ae9e600 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java @@ -134,7 +134,7 @@ void testResponseIfFileNotExists() { CopybookModel copybookModel = copybookService .resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -183,7 +183,7 @@ void testNoNewClientCallsOnDidChange() { CopybookModel copybookModelEnabled = copybookService .resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -192,7 +192,7 @@ void testNoNewClientCallsOnDidChange() { CopybookModel copybookModelSkipped = copybookService .resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -410,13 +410,13 @@ void testSqldaCopybookResolutionDoesNotRelyOnBackend() { assertEquals( copybookService.resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, null), copybookService.resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -538,7 +538,7 @@ private CopybookServiceImpl createCopybookService() { } private CopybookName createCopybook(String displayName) { - return CopybookName.builder().displayName(displayName).build(); + return CopybookName.builder().name(displayName).build(); } @Test @@ -548,7 +548,7 @@ void store() { CopybookModel copybookModel = copybookService .resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -569,7 +569,7 @@ void store() { resolve = copybookService .resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -597,7 +597,7 @@ void whenErrorInPreprocessOfCopybook_thenResolveReturnsPreprocessErrors() { ResultWithErrors resolvedCopybook = copybookService.resolve( - CopybookId.fromString(copybookName.getDisplayName()), + CopybookId.fromString(copybookName.getQualifiedName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, diff --git a/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java b/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java index 686cc1b24d..7fe957d2c7 100644 --- a/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java +++ b/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java @@ -73,7 +73,7 @@ private String findDialect(String name, List copybooks) { } private CopybookModel retrieveModel(CopybookName copybookName, String programUri, SQLBackend sqlBackend, List compilerOptions) { - final String name = retrieveRealName(copybookName.getDisplayName(), sqlBackend); + final String name = retrieveRealName(copybookName.getQualifiedName(), sqlBackend); String content = files.readImplicitCode(name); From 64ea13c3fb81d3ff27cc93cdc03e2f7e5d87ecda Mon Sep 17 00:00:00 2001 From: Kutlu Date: Thu, 18 Jul 2024 16:05:33 +0200 Subject: [PATCH 03/10] fix field names --- .../cobol/service/copybooks/CopybookNameServiceTest.java | 8 ++++---- .../CopybooksResolutionWithVariableInPathTest.java | 2 +- .../delegates/completions/CopybookNameCompletionTest.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java index 06ffe0e686..f269fe2087 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java @@ -129,11 +129,11 @@ static Stream copybooksWithExtensionsOrderData() { return Stream.of( Arguments.of( Arrays.asList(".xyz", ".copy", ".COPY", ".cpy", ".CPY"), - Optional.of(CopybookName.builder().displayName("A").extension("copy").build()) + Optional.of(CopybookName.builder().name("A").extension("copy").build()) ), Arguments.of( Arrays.asList(".xyz", ".CPY", ".cpy", ".COPY", ".copy"), - Optional.of(CopybookName.builder().displayName("A").extension("CPY").build()) + Optional.of(CopybookName.builder().name("A").extension("CPY").build()) ), Arguments.of( Arrays.asList(".xyz", ".acd"), @@ -141,7 +141,7 @@ static Stream copybooksWithExtensionsOrderData() { ), Arguments.of( Arrays.asList("", ".copy"), - Optional.of(CopybookName.builder().displayName("A").extension("").build()) + Optional.of(CopybookName.builder().name("A").extension("").build()) ), Arguments.of( Collections.emptyList(), @@ -149,7 +149,7 @@ static Stream copybooksWithExtensionsOrderData() { ), Arguments.of( Arrays.asList(".COPY", ".copy"), - Optional.of(CopybookName.builder().displayName("A").extension("COPY").build()) + Optional.of(CopybookName.builder().name("A").extension("COPY").build()) ) ); } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java index b5d52922c1..841391cbb6 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java @@ -62,6 +62,6 @@ void test() { CopybookNameService cns = new CopybookNameServiceImpl(settings, files, () -> client); List copybooks = cns.getNames("ABCPROG.CPY"); assertFalse(copybooks.isEmpty()); - assertEquals("COPY1", copybooks.get(0).getDisplayName()); + assertEquals("COPY1", copybooks.get(0).getQualifiedName()); } } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java index 1d248e7111..60e6e65afc 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java @@ -38,9 +38,9 @@ class CopybookNameCompletionTest { @Test void testCopybookNameCompletion() { when(copybookNameService.getNames("id")).thenReturn(Arrays.asList( - CopybookName.builder().displayName("Copy1").build(), - CopybookName.builder().displayName("copy2").build(), - CopybookName.builder().displayName("no-copy").build())); + CopybookName.builder().name("Copy1").build(), + CopybookName.builder().name("copy2").build(), + CopybookName.builder().name("no-copy").build())); CopybookNameCompletion copybookNameCompletion = new CopybookNameCompletion(copybookNameService); CobolDocumentModel document = new CobolDocumentModel("id", TEXT, AnalysisResult.builder().build()); From ff5f47af52efa6fcba5f7034a20f474bd6b33c19 Mon Sep 17 00:00:00 2001 From: Kutlu Date: Fri, 19 Jul 2024 14:54:12 +0200 Subject: [PATCH 04/10] comments --- .../copybook/downloader/DownloadUtil.ts | 10 ++---- .../cobol/common/copybook/CopyBookDTO.java | 35 +++++++++++++++++++ .../cobol/common/copybook/CopybookName.java | 16 ++++----- .../dialects/idms/IdmsCopybookService.java | 2 +- .../dialects/idms/IdmsCopybookVisitor.java | 2 +- .../copybooks/CopybookErrorService.java | 2 +- .../implicitDialects/sql/Db2SqlVisitor.java | 2 +- .../cobol/lsp/jrpc/CobolLanguageClient.java | 6 ++-- .../copybooks/CopybookNameServiceImpl.java | 4 +-- .../copybooks/CopybookServiceImpl.java | 16 +++++---- .../copybooks/CopybookNameServiceTest.java | 8 ++--- .../copybooks/CopybookServiceTest.java | 34 +++++++++--------- ...booksResolutionWithVariableInPathTest.java | 2 +- .../CopybookNameCompletionTest.java | 6 ++-- .../test/engine/PredefinedCopybookUtils.java | 2 +- 15 files changed, 91 insertions(+), 56 deletions(-) create mode 100644 server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java diff --git a/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts b/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts index f1a08bca53..35204e32c8 100644 --- a/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts +++ b/clients/cobol-lsp-vscode-extension/src/services/copybook/downloader/DownloadUtil.ts @@ -153,13 +153,9 @@ export class DownloadUtil { documentUri: string, copybookNames: CopybookName[], ): boolean { - const dialects = [ - ...new Set( - copybookNames - .map((n) => n.dialect?.toLocaleUpperCase()) - .filter(Boolean), - ), - ]; + const dialects = new Set( + copybookNames.map((n) => n.dialect?.toLocaleUpperCase()).filter(Boolean), + ); for (const dialect of dialects) { const dsnPath = SettingsService.getDsnPath(documentUri, dialect); diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java new file mode 100644 index 0000000000..11bf6645cd --- /dev/null +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024 Broadcom. + * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + * + */ +package org.eclipse.lsp.cobol.common.copybook; + +import lombok.Builder; +import lombok.Value; + +/** + * This value class represents a copybook DTO with name and dialect info. Display name is the name + * as it is specified in the original COPY statement. Dialect type is the type of the dialect the + * copybook statement belongs to. + */ +@Value +@Builder +public class CopyBookDTO { + String name; + String dialect; + + public CopyBookDTO(String name,String dialect) { + this.name = name; + this.dialect = dialect; + } +} diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java index 8c65533021..8ad9f20012 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java @@ -29,22 +29,22 @@ @AllArgsConstructor @Builder public class CopybookName { - String name; - String dialect; + String displayName; + String dialectType; String extension; public String getQualifiedName() { - return name; + return displayName; } public CopybookName(String name) { - this.name = name; + this.displayName = name; this.extension = null; - this.dialect = null; + this.dialectType = null; } public CopybookName(String name, String dialect) { - this.name = name; - this.dialect = dialect; + this.displayName = name; + this.dialectType = dialect; this.extension = null; } @@ -54,6 +54,6 @@ public CopybookName(String name, String dialect) { * @return an instance of copybook id */ public CopybookId toCopybookId(String programUri) { - return CopybookId.create(name, dialect, programUri); + return CopybookId.create(displayName, dialectType, programUri); } } diff --git a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java index 9ff8a0b6bd..901dd5bce3 100644 --- a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java +++ b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookService.java @@ -75,7 +75,7 @@ public ResultWithErrors> processCopybook(CopybookModel copybookModel, processedCopybooks.add(copybookName); - CopyNode node = new CopyNode(locality, locality.toLocation(), copybookName.getQualifiedName(), IdmsDialect.NAME, copybookModel.getUri()); + CopyNode node = new CopyNode(locality, locality.toLocation(), copybookName.getDisplayName(), IdmsDialect.NAME, copybookModel.getUri()); List errors = new LinkedList<>(); processNodes(copybookModel, parentLevel).unwrap(errors::addAll) diff --git a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java index 3fd3cc8379..6c02f761ad 100644 --- a/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java +++ b/server/dialect-idms/src/main/java/org/eclipse/lsp/cobol/dialects/idms/IdmsCopybookVisitor.java @@ -92,7 +92,7 @@ public List visitCopyIdmsStatement(IdmsCopyParser.CopyIdmsStatementContext documentUri, preprocessor); CopybookModel copybookModel = resolvedCopybook.getResult(); - Locality locality = IdmsParserHelper.buildNameRangeLocality(optionsContext, copybookName.getQualifiedName(), documentUri); + Locality locality = IdmsParserHelper.buildNameRangeLocality(optionsContext, copybookName.getDisplayName(), documentUri); errors.addAll(resolvedCopybook.getErrors()); return idmsCopybookService.processCopybook(copybookModel, calculateLevel(getLevel(ctx)), locality) .unwrap(errors::addAll); diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java index 3c6d974ee9..16e2257cda 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookErrorService.java @@ -56,7 +56,7 @@ private SyntaxError addCopybookError( SyntaxError error = SyntaxError.syntaxError().errorSource(ErrorSource.COPYBOOK) .severity(info) - .suggestion(messageService.getMessage(messageID, copybookName.getQualifiedName())) + .suggestion(messageService.getMessage(messageID, copybookName.getDisplayName())) .location(locality.toOriginalLocation()) .build(); LOG.debug(logMessage, error.toString()); diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java index ea8dd5ecd1..9bd32c85ed 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlVisitor.java @@ -172,7 +172,7 @@ private Locality getLocality(Location location) { copybookService.getCopybookUsage(docUri).stream() .filter(model -> model.getUri().equals(location.getUri())) .findFirst() - .ifPresent(model -> builder.copybookId(model.getCopybookName().getQualifiedName())); + .ifPresent(model -> builder.copybookId(model.getCopybookName().getDisplayName())); } return builder.build(); } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java index d6fedc1012..6a079d62bc 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/jrpc/CobolLanguageClient.java @@ -17,7 +17,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; -import org.eclipse.lsp.cobol.common.copybook.CopybookName; +import org.eclipse.lsp.cobol.common.copybook.CopyBookDTO; import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; import org.eclipse.lsp4j.services.LanguageClient; @@ -59,14 +59,14 @@ default CompletableFuture resolveCopybook( * download remote copybook * * @param cobolFileUri Uri of the cobol program - * @param copybookNames list of copybooks to download + * @param copybooks list of copybooks to download * @param quietMode the name of copybook dialect * @return corresponding local file absolute path */ @JsonRequest("copybook/download") default CompletableFuture downloadCopybooks( String cobolFileUri, - List copybookNames, + List copybooks, boolean quietMode) { throw new UnsupportedOperationException(); } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java index 77cb2c5d4d..de70059b13 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java @@ -151,14 +151,14 @@ private List resolveNames( .map(nameAndExtension -> nameAndExtension.split("\\.")) .map(nameAndExtension -> CopybookName .builder() - .name(nameAndExtension[0]) + .displayName(nameAndExtension[0]) .extension(nameAndExtension.length == 1 ? "" : nameAndExtension[1]) .build()) .filter(copybookName -> copybookExtensionsWithoutDotAsSet.contains( copybookName.getExtension())) .filter(predicate) .collect(Collectors.toMap( - CopybookName::getQualifiedName, + CopybookName::getDisplayName, Function.identity(), (existing, replacement) -> copybookExtensionsWithoutDot.indexOf(existing.getExtension()) diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index bed34deec4..4e7d2f9cb7 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -184,8 +184,8 @@ private CopybookModel resolveSync( } private Optional tryResolvePredefinedCopybook(CopybookName copybookName) { - CopybookName predefineCopybookName = new CopybookName(copybookName.getQualifiedName().toUpperCase(), copybookName.getDialect(), copybookName.getExtension()); - CopybookId copybookId = predefineCopybookName.toCopybookId(ImplicitCodeUtils.createFullUrl(predefineCopybookName.getQualifiedName())); + CopybookName predefineCopybookName = new CopybookName(copybookName.getDisplayName().toUpperCase(), copybookName.getDialectType(), copybookName.getExtension()); + CopybookId copybookId = predefineCopybookName.toCopybookId(ImplicitCodeUtils.createFullUrl(predefineCopybookName.getDisplayName())); try { CopybookModel copybookModel = copybookCache.get(copybookId, () -> new CopybookModel(copybookId, predefineCopybookName, null, null)); if (copybookModel.getContent() == null || copybookModel.getUri() == null) return Optional.empty(); @@ -215,7 +215,7 @@ private OriginalLocation getErrorOriginalLocation(CopybookModel dirtyCopybook, S return new OriginalLocation( Optional.ofNullable(error.getLocation()).map(OriginalLocation::getLocation).orElse(null), CopybooksRepository.toId(dirtyCopybook.getCopybookName().getQualifiedName(), - dirtyCopybook.getCopybookName().getDialect(), + dirtyCopybook.getCopybookName().getDisplayName(), dirtyCopybook.getUri())); } @@ -238,8 +238,8 @@ private Optional resolveCopybookFromWorkspace(CopybookName copybookName, try { CompletableFuture future = clientProvider.get().resolveCopybook( programUri, - copybookName.getQualifiedName(), - Optional.ofNullable(copybookName.getDialect()).orElse(COBOL)); + copybookName.getDisplayName(), + Optional.ofNullable(copybookName.getDialectType()).orElse(COBOL)); if (future == null) { return Optional.empty(); @@ -286,11 +286,15 @@ public void sendCopybookDownloadRequest(String documentUri, Collection c .flatMap(Set::stream) .collect(toList()); LOG.debug("Copybooks to download: {}", copybooksToDownload); + List copybooks = new ArrayList<>(); + copybooksToDownload.forEach(copybookName -> copybooks.add(new CopyBookDTO(copybookName.getDisplayName(), copybookName.getDialectType()))); + if (!copybooksToDownload.isEmpty()) { clientProvider.get().downloadCopybooks(documentUri, - copybooksToDownload, + copybooks, !processingMode.userInteraction); } + copybooksToDownload.clear(); } } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java index f269fe2087..06ffe0e686 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceTest.java @@ -129,11 +129,11 @@ static Stream copybooksWithExtensionsOrderData() { return Stream.of( Arguments.of( Arrays.asList(".xyz", ".copy", ".COPY", ".cpy", ".CPY"), - Optional.of(CopybookName.builder().name("A").extension("copy").build()) + Optional.of(CopybookName.builder().displayName("A").extension("copy").build()) ), Arguments.of( Arrays.asList(".xyz", ".CPY", ".cpy", ".COPY", ".copy"), - Optional.of(CopybookName.builder().name("A").extension("CPY").build()) + Optional.of(CopybookName.builder().displayName("A").extension("CPY").build()) ), Arguments.of( Arrays.asList(".xyz", ".acd"), @@ -141,7 +141,7 @@ static Stream copybooksWithExtensionsOrderData() { ), Arguments.of( Arrays.asList("", ".copy"), - Optional.of(CopybookName.builder().name("A").extension("").build()) + Optional.of(CopybookName.builder().displayName("A").extension("").build()) ), Arguments.of( Collections.emptyList(), @@ -149,7 +149,7 @@ static Stream copybooksWithExtensionsOrderData() { ), Arguments.of( Arrays.asList(".COPY", ".copy"), - Optional.of(CopybookName.builder().name("A").extension("COPY").build()) + Optional.of(CopybookName.builder().displayName("A").extension("COPY").build()) ) ); } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java index 331ae9e600..52e0c767ae 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java @@ -134,7 +134,7 @@ void testResponseIfFileNotExists() { CopybookModel copybookModel = copybookService .resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -183,7 +183,7 @@ void testNoNewClientCallsOnDidChange() { CopybookModel copybookModelEnabled = copybookService .resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -192,7 +192,7 @@ void testNoNewClientCallsOnDidChange() { CopybookModel copybookModelSkipped = copybookService .resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -381,22 +381,22 @@ void testServiceSendsDownloadingRequestForAnalysisFinishedEvent() { new CopybookModel( copybookInvalid2.toCopybookId(DOCUMENT_2_URI), copybookInvalid2, null, null), invalidCpy2); - CopybookName invalidCopybookName = new CopybookName(INVALID_CPY_NAME); + CopyBookDTO invalidCopybook = new CopyBookDTO(INVALID_CPY_NAME, "COBOL"); // First document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybookName), true); + .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybook), true); // Others parsing done events for first document are not trigger settingsService copybookService.sendCopybookDownloadRequest(DOCUMENT_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybookName), true); - CopybookName invalidCopybookName2 = new CopybookName(INVALID_2_CPY_NAME); + .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybook), true); + CopyBookDTO invalidCopybook2 = new CopyBookDTO(INVALID_2_CPY_NAME, "COBOL"); // Second document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_2_URI, emptyList(), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_2_URI, ImmutableList.of(invalidCopybookName2), true); + .downloadCopybooks(DOCUMENT_2_URI, ImmutableList.of(invalidCopybook2), true); } /** Test that the service resolves the SQLDA predefined copybook */ @@ -410,13 +410,13 @@ void testSqldaCopybookResolutionDoesNotRelyOnBackend() { assertEquals( copybookService.resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, null), copybookService.resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -490,12 +490,12 @@ void testServiceSendsDownloadingRequestForAllNotResolvedCopybooks() { // Notify that analysis finished sending the document URI and copybook names that have nested // copybooks - CopybookName invalidCopybookName = new CopybookName(INVALID_CPY_NAME); - CopybookName nestedCopybookName = new CopybookName(NESTED_CPY_NAME); + CopyBookDTO invalidCopybook = new CopyBookDTO(INVALID_CPY_NAME, "COBOL"); + CopyBookDTO nestedCopybook = new CopyBookDTO(NESTED_CPY_NAME, "COBOL"); copybookService.sendCopybookDownloadRequest( DOCUMENT_URI, asList(PARENT_CPY_URI, DOCUMENT_URI), ENABLED); verify(client, times(1)) - .downloadCopybooks(DOCUMENT_URI, asList(invalidCopybookName, nestedCopybookName), true); + .downloadCopybooks(DOCUMENT_URI, asList(invalidCopybook, nestedCopybook), true); } @Test @@ -538,7 +538,7 @@ private CopybookServiceImpl createCopybookService() { } private CopybookName createCopybook(String displayName) { - return CopybookName.builder().name(displayName).build(); + return CopybookName.builder().displayName(displayName).build(); } @Test @@ -548,7 +548,7 @@ void store() { CopybookModel copybookModel = copybookService .resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -569,7 +569,7 @@ void store() { resolve = copybookService .resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, @@ -597,7 +597,7 @@ void whenErrorInPreprocessOfCopybook_thenResolveReturnsPreprocessErrors() { ResultWithErrors resolvedCopybook = copybookService.resolve( - CopybookId.fromString(copybookName.getQualifiedName()), + CopybookId.fromString(copybookName.getDisplayName()), copybookName, DOCUMENT_URI, DOCUMENT_URI, diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java index 841391cbb6..b5d52922c1 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybooksResolutionWithVariableInPathTest.java @@ -62,6 +62,6 @@ void test() { CopybookNameService cns = new CopybookNameServiceImpl(settings, files, () -> client); List copybooks = cns.getNames("ABCPROG.CPY"); assertFalse(copybooks.isEmpty()); - assertEquals("COPY1", copybooks.get(0).getQualifiedName()); + assertEquals("COPY1", copybooks.get(0).getDisplayName()); } } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java index 60e6e65afc..1d248e7111 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/delegates/completions/CopybookNameCompletionTest.java @@ -38,9 +38,9 @@ class CopybookNameCompletionTest { @Test void testCopybookNameCompletion() { when(copybookNameService.getNames("id")).thenReturn(Arrays.asList( - CopybookName.builder().name("Copy1").build(), - CopybookName.builder().name("copy2").build(), - CopybookName.builder().name("no-copy").build())); + CopybookName.builder().displayName("Copy1").build(), + CopybookName.builder().displayName("copy2").build(), + CopybookName.builder().displayName("no-copy").build())); CopybookNameCompletion copybookNameCompletion = new CopybookNameCompletion(copybookNameService); CobolDocumentModel document = new CobolDocumentModel("id", TEXT, AnalysisResult.builder().build()); diff --git a/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java b/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java index 7fe957d2c7..686cc1b24d 100644 --- a/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java +++ b/server/test/src/main/java/org/eclipse/lsp/cobol/test/engine/PredefinedCopybookUtils.java @@ -73,7 +73,7 @@ private String findDialect(String name, List copybooks) { } private CopybookModel retrieveModel(CopybookName copybookName, String programUri, SQLBackend sqlBackend, List compilerOptions) { - final String name = retrieveRealName(copybookName.getQualifiedName(), sqlBackend); + final String name = retrieveRealName(copybookName.getDisplayName(), sqlBackend); String content = files.readImplicitCode(name); From f5b3a5b9db353a7e6985f790d34d6e04ff81a4cf Mon Sep 17 00:00:00 2001 From: Kutlu Date: Fri, 19 Jul 2024 14:57:52 +0200 Subject: [PATCH 05/10] missed ones --- .../lsp/cobol/common/copybook/CopybookName.java | 10 +++++----- .../service/copybooks/CopybookNameServiceImpl.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java index 8ad9f20012..df7f4305da 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookName.java @@ -36,15 +36,15 @@ public String getQualifiedName() { return displayName; } - public CopybookName(String name) { - this.displayName = name; + public CopybookName(String displayName) { + this.displayName = displayName; this.extension = null; this.dialectType = null; } - public CopybookName(String name, String dialect) { - this.displayName = name; - this.dialectType = dialect; + public CopybookName(String displayName, String dialectType) { + this.displayName = displayName; + this.dialectType = dialectType; this.extension = null; } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java index de70059b13..4ed5eacfe0 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookNameServiceImpl.java @@ -79,7 +79,7 @@ public List getNames(String uri) { @Override public Optional findByName(String uri, final String displayName) { List copybookNamesList = createCopybookNamesList(uri, - copybookName -> displayName.equalsIgnoreCase(copybookName.getQualifiedName())); + copybookName -> displayName.equalsIgnoreCase(copybookName.getDisplayName())); return copybookNamesList.isEmpty() ? Optional.empty() : Optional.of(copybookNamesList.get(0)); } From cddc11562c45de8ef8d49127675f0e75ca09c45a Mon Sep 17 00:00:00 2001 From: Kutlu Date: Fri, 19 Jul 2024 16:26:19 +0200 Subject: [PATCH 06/10] comment --- .../lsp/cobol/service/copybooks/CopybookServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index 4e7d2f9cb7..ae95496a53 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -215,7 +215,7 @@ private OriginalLocation getErrorOriginalLocation(CopybookModel dirtyCopybook, S return new OriginalLocation( Optional.ofNullable(error.getLocation()).map(OriginalLocation::getLocation).orElse(null), CopybooksRepository.toId(dirtyCopybook.getCopybookName().getQualifiedName(), - dirtyCopybook.getCopybookName().getDisplayName(), + dirtyCopybook.getCopybookName().getDialectType(), dirtyCopybook.getUri())); } From b1f53f18620de7021eb4fa59f051336afa4b7368 Mon Sep 17 00:00:00 2001 From: Kutlu Date: Tue, 23 Jul 2024 10:13:46 +0200 Subject: [PATCH 07/10] comments --- .../lsp/cobol/common/copybook/CopyBookDTO.java | 11 +++++++---- .../copybooks/CopybookPreprocessorService.java | 2 +- .../cobol/service/copybooks/CopybookServiceImpl.java | 5 +---- .../cobol/service/copybooks/CopybookServiceTest.java | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java index 11bf6645cd..4eb85c15e7 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java @@ -17,6 +17,10 @@ import lombok.Builder; import lombok.Value; +import java.util.Optional; + +import static org.eclipse.lsp.cobol.common.copybook.CopybookId.COBOL; + /** * This value class represents a copybook DTO with name and dialect info. Display name is the name * as it is specified in the original COPY statement. Dialect type is the type of the dialect the @@ -27,9 +31,8 @@ public class CopyBookDTO { String name; String dialect; - - public CopyBookDTO(String name,String dialect) { - this.name = name; - this.dialect = dialect; + public CopyBookDTO(CopybookName copybookName) { + this.name = copybookName.getDisplayName(); + this.dialect = Optional.ofNullable(copybookName.getDialectType()).orElse(COBOL); } } diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java index 6078f19539..f582a57a88 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/preprocessor/delegates/copybooks/CopybookPreprocessorService.java @@ -232,7 +232,7 @@ private boolean firstInstruction(ExtendedDocument extendedDocument, Position sta } private CopybookName getCopybookName(CobolPreprocessor.CopySourceContext ctx) { - return new CopybookName(StringUtils.trimQuotes(ctx.getText()), "COBOL"); + return new CopybookName(StringUtils.trimQuotes(ctx.getText())); } private CopybookModel read(CopybookName copybookName, String documentUri) { diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index ae95496a53..091e85a765 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -286,12 +286,9 @@ public void sendCopybookDownloadRequest(String documentUri, Collection c .flatMap(Set::stream) .collect(toList()); LOG.debug("Copybooks to download: {}", copybooksToDownload); - List copybooks = new ArrayList<>(); - copybooksToDownload.forEach(copybookName -> copybooks.add(new CopyBookDTO(copybookName.getDisplayName(), copybookName.getDialectType()))); - if (!copybooksToDownload.isEmpty()) { clientProvider.get().downloadCopybooks(documentUri, - copybooks, + copybooksToDownload.stream().map(CopyBookDTO::new).collect(toList()), !processingMode.userInteraction); } copybooksToDownload.clear(); diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java index 52e0c767ae..f02584a1dd 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceTest.java @@ -381,7 +381,7 @@ void testServiceSendsDownloadingRequestForAnalysisFinishedEvent() { new CopybookModel( copybookInvalid2.toCopybookId(DOCUMENT_2_URI), copybookInvalid2, null, null), invalidCpy2); - CopyBookDTO invalidCopybook = new CopyBookDTO(INVALID_CPY_NAME, "COBOL"); + CopyBookDTO invalidCopybook = new CopyBookDTO(copybookInvalid); // First document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_URI, emptyList(), ENABLED); verify(client, times(1)) @@ -392,7 +392,7 @@ void testServiceSendsDownloadingRequestForAnalysisFinishedEvent() { verify(client, times(1)) .downloadCopybooks(DOCUMENT_URI, ImmutableList.of(invalidCopybook), true); - CopyBookDTO invalidCopybook2 = new CopyBookDTO(INVALID_2_CPY_NAME, "COBOL"); + CopyBookDTO invalidCopybook2 = new CopyBookDTO(copybookInvalid2); // Second document parsing done copybookService.sendCopybookDownloadRequest(DOCUMENT_2_URI, emptyList(), ENABLED); verify(client, times(1)) @@ -490,8 +490,8 @@ void testServiceSendsDownloadingRequestForAllNotResolvedCopybooks() { // Notify that analysis finished sending the document URI and copybook names that have nested // copybooks - CopyBookDTO invalidCopybook = new CopyBookDTO(INVALID_CPY_NAME, "COBOL"); - CopyBookDTO nestedCopybook = new CopyBookDTO(NESTED_CPY_NAME, "COBOL"); + CopyBookDTO invalidCopybook = new CopyBookDTO(copybookInvalid); + CopyBookDTO nestedCopybook = new CopyBookDTO(copybookNested); copybookService.sendCopybookDownloadRequest( DOCUMENT_URI, asList(PARENT_CPY_URI, DOCUMENT_URI), ENABLED); verify(client, times(1)) From 01ca290b6daaeb9ba721e11294ffd944fdf31036 Mon Sep 17 00:00:00 2001 From: Kutlu Date: Tue, 23 Jul 2024 10:21:01 +0200 Subject: [PATCH 08/10] remove value class --- .../org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java index 4eb85c15e7..9e414290fd 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java @@ -22,12 +22,10 @@ import static org.eclipse.lsp.cobol.common.copybook.CopybookId.COBOL; /** - * This value class represents a copybook DTO with name and dialect info. Display name is the name + * This class represents a copybook DTO with name and dialect info. Display name is the name * as it is specified in the original COPY statement. Dialect type is the type of the dialect the * copybook statement belongs to. */ -@Value -@Builder public class CopyBookDTO { String name; String dialect; From 517ed34112f7949dbd3846e27fcbff2cc1750667 Mon Sep 17 00:00:00 2001 From: Kutlu <104970275+KutluOzel-b@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:51:16 +0200 Subject: [PATCH 09/10] Update server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java Co-authored-by: slavek-kucera <53339291+slavek-kucera@users.noreply.github.com> --- .../eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index 091e85a765..6144294e3a 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -291,7 +291,6 @@ public void sendCopybookDownloadRequest(String documentUri, Collection c copybooksToDownload.stream().map(CopyBookDTO::new).collect(toList()), !processingMode.userInteraction); } - copybooksToDownload.clear(); } } From c28d7937f3d1607efe347fa912e7563bd8c063f2 Mon Sep 17 00:00:00 2001 From: Kutlu Date: Tue, 23 Jul 2024 10:59:24 +0200 Subject: [PATCH 10/10] comments --- .../org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java | 3 ++- .../lsp/cobol/service/copybooks/CopybookServiceImpl.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java index 9e414290fd..5fa8e2daaa 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopyBookDTO.java @@ -22,10 +22,11 @@ import static org.eclipse.lsp.cobol.common.copybook.CopybookId.COBOL; /** - * This class represents a copybook DTO with name and dialect info. Display name is the name + * This value class represents a copybook DTO with name and dialect info. Display name is the name * as it is specified in the original COPY statement. Dialect type is the type of the dialect the * copybook statement belongs to. */ +@Value public class CopyBookDTO { String name; String dialect; diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java index 6144294e3a..b401830805 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/service/copybooks/CopybookServiceImpl.java @@ -278,17 +278,18 @@ public void sendCopybookDownloadRequest(String documentUri, Collection c uris.add(documentUri); if (processingMode.download) { - List copybooksToDownload = + List copybooksToDownload = uris.stream() .map(files::getNameFromURI) .map(copybooksForDownloading::remove) .filter(Objects::nonNull) .flatMap(Set::stream) + .map(CopyBookDTO::new) .collect(toList()); LOG.debug("Copybooks to download: {}", copybooksToDownload); if (!copybooksToDownload.isEmpty()) { clientProvider.get().downloadCopybooks(documentUri, - copybooksToDownload.stream().map(CopyBookDTO::new).collect(toList()), + copybooksToDownload, !processingMode.userInteraction); } }