Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/dialect/copybooks #2387

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -127,16 +127,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);
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
),
];
slavek-kucera marked this conversation as resolved.
Show resolved Hide resolved

for (const dialect of dialects) {
const dsnPath = SettingsService.getDsnPath(documentUri, dialect);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,22 @@
@AllArgsConstructor
@Builder
public class CopybookName {
slavek-kucera marked this conversation as resolved.
Show resolved Hide resolved
String displayName;
String dialectType;
String name;
String dialect;
String extension;
public String getQualifiedName() {
slavek-kucera marked this conversation as resolved.
Show resolved Hide resolved
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;
}

Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public ResultWithErrors<List<Node>> 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<SyntaxError> errors = new LinkedList<>();
processNodes(copybookModel, parentLevel).unwrap(errors::addAll)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public List<Node> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -58,15 +60,13 @@ default CompletableFuture<String> 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<Void> downloadCopybooks(
String cobolFileUri,
List<String> copybookNames,
String dialectType,
List<CopybookName> copybookNames,
boolean quietMode) {
throw new UnsupportedOperationException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public List<CopybookName> getNames(String uri) {
@Override
public Optional<CopybookName> findByName(String uri, final String displayName) {
List<CopybookName> copybookNamesList = createCopybookNamesList(uri,
copybookName -> displayName.equalsIgnoreCase(copybookName.getDisplayName()));
copybookName -> displayName.equalsIgnoreCase(copybookName.getQualifiedName()));
return copybookNamesList.isEmpty() ? Optional.empty() : Optional.of(copybookNamesList.get(0));
}

Expand Down Expand Up @@ -151,14 +151,14 @@ private List<CopybookName> 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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@ private CopybookModel resolveSync(
}

private Optional<CopybookModel> 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();
Expand Down Expand Up @@ -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()));
}

Expand All @@ -238,8 +238,8 @@ private Optional<String> resolveCopybookFromWorkspace(CopybookName copybookName,
try {
CompletableFuture<String> 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();
Expand Down Expand Up @@ -288,8 +288,7 @@ public void sendCopybookDownloadRequest(String documentUri, Collection<String> 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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,27 +129,27 @@ static Stream<Arguments> 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"),
Optional.empty()
),
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(),
Optional.empty()
),
Arguments.of(
Arrays.asList(".COPY", ".copy"),
Optional.of(CopybookName.builder().displayName("A").extension("COPY").build())
Optional.of(CopybookName.builder().name("A").extension("COPY").build())
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ void testResponseIfFileNotExists() {
CopybookModel copybookModel =
copybookService
.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand Down Expand Up @@ -183,7 +183,7 @@ void testNoNewClientCallsOnDidChange() {
CopybookModel copybookModelEnabled =
copybookService
.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand All @@ -192,7 +192,7 @@ void testNoNewClientCallsOnDidChange() {
CopybookModel copybookModelSkipped =
copybookService
.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand Down Expand Up @@ -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 */
Expand All @@ -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,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -536,7 +538,7 @@ private CopybookServiceImpl createCopybookService() {
}

private CopybookName createCopybook(String displayName) {
return CopybookName.builder().displayName(displayName).build();
return CopybookName.builder().name(displayName).build();
}

@Test
Expand All @@ -546,7 +548,7 @@ void store() {
CopybookModel copybookModel =
copybookService
.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand All @@ -567,7 +569,7 @@ void store() {
resolve =
copybookService
.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand Down Expand Up @@ -595,7 +597,7 @@ void whenErrorInPreprocessOfCopybook_thenResolveReturnsPreprocessErrors() {

ResultWithErrors<CopybookModel> resolvedCopybook =
copybookService.resolve(
CopybookId.fromString(copybookName.getDisplayName()),
CopybookId.fromString(copybookName.getQualifiedName()),
copybookName,
DOCUMENT_URI,
DOCUMENT_URI,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,6 @@ void test() {
CopybookNameService cns = new CopybookNameServiceImpl(settings, files, () -> client);
List<CopybookName> copybooks = cns.getNames("ABCPROG.CPY");
assertFalse(copybooks.isEmpty());
assertEquals("COPY1", copybooks.get(0).getDisplayName());
assertEquals("COPY1", copybooks.get(0).getQualifiedName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private String findDialect(String name, List<CobolText> copybooks) {
}

private CopybookModel retrieveModel(CopybookName copybookName, String programUri, SQLBackend sqlBackend, List<String> compilerOptions) {
final String name = retrieveRealName(copybookName.getDisplayName(), sqlBackend);
final String name = retrieveRealName(copybookName.getQualifiedName(), sqlBackend);

String content = files.readImplicitCode(name);

Expand Down
Loading