From a07778314817f0de70b16aa257917fda5d7f9a96 Mon Sep 17 00:00:00 2001 From: Michael Messer Date: Wed, 15 Jan 2025 12:32:47 -0500 Subject: [PATCH] Make grammar flexible, add checks, fix test --- .../eclipse/lsp/cobol/implicitDialects/cics/CICSParser.g4 | 6 +++--- .../cics/utility/CICSPutContainerOptionsCheckUtility.java | 4 +++- .../lsp/cobol/usecases/TestCicsPutContainerStatement.java | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/server/engine/src/main/antlr4/org/eclipse/lsp/cobol/implicitDialects/cics/CICSParser.g4 b/server/engine/src/main/antlr4/org/eclipse/lsp/cobol/implicitDialects/cics/CICSParser.g4 index 5e4e0eea10..024f9bdf84 100644 --- a/server/engine/src/main/antlr4/org/eclipse/lsp/cobol/implicitDialects/cics/CICSParser.g4 +++ b/server/engine/src/main/antlr4/org/eclipse/lsp/cobol/implicitDialects/cics/CICSParser.g4 @@ -679,9 +679,9 @@ cics_purge: PURGE cics_handle_response? MESSAGE cics_handle_response?; cics_push: PUSH cics_handle_response? HANDLE cics_handle_response?; /** PUT CONTAINER (both of them): */ -cics_put_container: ((PUT CONTAINER cics_data_value cics_put_container_bts) | (PUT|PUT64) CONTAINER cics_data_value cics_put_container_channel); -cics_put_container_bts: ((ACQACTIVITY | PROCESS | ACQPROCESS) | (ACTIVITY | FLENGTH) cics_data_value | (FROM) cics_data_area | cics_handle_response)+; -cics_put_container_channel: ((BIT | CHAR | APPEND | PREPEND) | (CHANNEL | FLENGTH | FROMCCSID | FROMCODEPAGE) cics_data_value | FROM cics_data_area | DATATYPE cics_cvda | cics_handle_response)+; +cics_put_container: (PUT cics_put_container_bts | (PUT|PUT64) cics_put_container_channel); +cics_put_container_bts: ((ACQACTIVITY | PROCESS | ACQPROCESS) | (ACTIVITY | CONTAINER | FLENGTH) cics_data_value | FROM cics_data_area | cics_handle_response)+; +cics_put_container_channel: ((BIT | CHAR | APPEND | PREPEND) | (CHANNEL | CONTAINER | FLENGTH | FROMCCSID | FROMCODEPAGE) cics_data_value | FROM cics_data_area | DATATYPE cics_cvda | cics_handle_response)+; /** QUERY CHANNEL / COUNTER / DCOUNTER / SECURITY */ cics_query: QUERY (cics_query_channel | cics_query_counter | cics_query_security); diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/cics/utility/CICSPutContainerOptionsCheckUtility.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/cics/utility/CICSPutContainerOptionsCheckUtility.java index 1e1abce63d..d61abe7caf 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/cics/utility/CICSPutContainerOptionsCheckUtility.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/cics/utility/CICSPutContainerOptionsCheckUtility.java @@ -33,7 +33,6 @@ public class CICSPutContainerOptionsCheckUtility extends CICSOptionsCheckBaseUti private static final Map DUPLICATE_CHECK_OPTIONS = new HashMap() { { - put(CICSLexer.ACQACTIVITY, ErrorSeverity.ERROR); put(CICSLexer.ACTIVITY, ErrorSeverity.ERROR); put(CICSLexer.CHANNEL, ErrorSeverity.ERROR); put(CICSLexer.CONTAINER, ErrorSeverity.ERROR); @@ -43,6 +42,7 @@ public class CICSPutContainerOptionsCheckUtility extends CICSOptionsCheckBaseUti put(CICSLexer.FROMCCSID, ErrorSeverity.ERROR); put(CICSLexer.FROMCODEPAGE, ErrorSeverity.ERROR); + put(CICSLexer.ACQACTIVITY, ErrorSeverity.WARNING); put(CICSLexer.ACQPROCESS, ErrorSeverity.WARNING); put(CICSLexer.APPEND, ErrorSeverity.WARNING); put(CICSLexer.BIT, ErrorSeverity.WARNING); @@ -79,6 +79,7 @@ public void checkOptions(E ctx) { private void checkBTS(CICSParser.Cics_put_container_btsContext ctx) { checkMutuallyExclusiveOptions("ACTIVITY, ACQACTIVITY, PROCESS or ACQPROCESS", ctx.ACTIVITY(), ctx.ACQACTIVITY(), ctx.PROCESS(), ctx.ACQPROCESS()); checkHasMandatoryOptions(ctx.FROM(), ctx, "FROM"); + checkHasMandatoryOptions(ctx.CONTAINER(), ctx, "CONTAINER"); } private void checkChannel(CICSParser.Cics_put_container_channelContext ctx) { @@ -88,6 +89,7 @@ private void checkChannel(CICSParser.Cics_put_container_channelContext ctx) { checkMutuallyExclusiveOptions("APPEND or PREPEND", ctx.APPEND(), ctx.PREPEND()); checkHasMandatoryOptions(ctx.FROM(), ctx, "FROM"); + checkHasMandatoryOptions(ctx.CONTAINER(), ctx, "CONTAINER"); } } diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestCicsPutContainerStatement.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestCicsPutContainerStatement.java index 6b959199d9..642f42c6de 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestCicsPutContainerStatement.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestCicsPutContainerStatement.java @@ -42,7 +42,7 @@ public class TestCicsPutContainerStatement { private static final String PUT_BTS_INVALID = "PUT CONTAINER({$varOne}) ACTIVITY({$varOne}) {ACQACTIVITY|errorOne} FROM({$varOne}) FLENGTH({$varOne})"; private static final String PUT_CHANNEL_INVALID = "PUT CONTAINER({$varOne}) CHANNEL({$varOne}) FROM({$varOne}) FLENGTH({$varOne}) BIT {DATATYPE|errorOne}({$varOne}) APPEND"; - private static final String PUT_BTS_INVALID_2 = "PUT CONTAINER({$varOne}) {ACQACTIVITY|errorOne}"; + private static final String PUT_BTS_INVALID_2 = "PUT {_CONTAINER({$varOne}) ACQACTIVITY|errorOne_}"; // Test Functions @Test