This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch dev-new-parser
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/dev-new-parser by this push:
     new 1f6457f864 Avoid error when there is no space between rule keyword and 
rule name (#5898)
1f6457f864 is described below

commit 1f6457f8647252e7d16af501b81a730dcdf2981b
Author: Jiří Locker <[email protected]>
AuthorDate: Wed May 8 08:43:48 2024 +0200

    Avoid error when there is no space between rule keyword and rule name 
(#5898)
---
 .../java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java  | 11 +++++++++++
 .../main/java/org/drools/drl/parser/antlr4/LexerHelper.java   | 11 ++++++-----
 .../java/org/drools/drl/parser/util/ParserStringUtils.java    |  5 ++++-
 .../drools/testcoverage/functional/parser/DrlParserTest.java  |  2 +-
 4 files changed, 22 insertions(+), 7 deletions(-)

diff --git 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
index 724662f429..8aa6b0fa86 100644
--- 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
+++ 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
@@ -4673,4 +4673,15 @@ class MiscDRLParserTest {
         assertThat(children).isNotEmpty(); // Make sure that every child type 
is represented.
         assertThat(children).allSatisfy(baseDescr -> 
assertThat(baseDescr.getNamespace()).isEqualTo(namespace));
     }
+
+    @Test
+    public void noWhitespaceBetweenRuleKeywordAndName() {
+        final String text = "rule X when then end rule\"Y\" when then end 
rule'Z'when then end";
+
+        PackageDescr pkg = parseAndGetPackageDescr(text);
+
+        assertThat(pkg.getRules())
+                .map(RuleDescr::getName)
+                .containsExactly("X", "Y", "Z");
+    }
 }
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/LexerHelper.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/LexerHelper.java
index 479eebce85..4960baaf31 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/LexerHelper.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/LexerHelper.java
@@ -18,7 +18,7 @@
  */
 package org.drools.drl.parser.antlr4;
 
-import java.util.List;
+import java.util.Set;
 
 import org.antlr.v4.runtime.CharStream;
 import org.antlr.v4.runtime.IntStream;
@@ -29,9 +29,10 @@ import org.drools.drl.parser.lang.DroolsSoftKeywords;
  */
 public class LexerHelper {
 
-    private static final List<Character> semiAndWS = List.of(';', ' ', '\t', 
'\n', '\r');
-    private static final List<String> statementKeywordsList = 
List.of(ParserHelper.statementKeywords);
-    private static final List<String> attributeKeywordsList = 
List.of(DroolsSoftKeywords.SALIENCE,
+    private static final Set<Character> semiAndWS = Set.of(';', ' ', '\t', 
'\n', '\r');
+    private static final Set<Character> delimiters = Set.of(';', ' ', '\t', 
'\n', '\r', '"', '\'');
+    private static final Set<String> statementKeywordsList = 
Set.of(ParserHelper.statementKeywords);
+    private static final Set<String> attributeKeywordsList = 
Set.of(DroolsSoftKeywords.SALIENCE,
                                                                       
DroolsSoftKeywords.ENABLED,
                                                                       
DroolsSoftKeywords.NO + "-" + DroolsSoftKeywords.LOOP,
                                                                       
DroolsSoftKeywords.AUTO + "-" + DroolsSoftKeywords.FOCUS,
@@ -82,7 +83,7 @@ public class LexerHelper {
         StringBuilder sb = new StringBuilder();
         while (true) {
             int la = input.LA(lookAheadCounter);
-            if (semiAndWS.contains((char) la) || la == IntStream.EOF) {
+            if (delimiters.contains((char) la) || la == IntStream.EOF) {
                 break;
             }
             sb.append((char) la);
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/util/ParserStringUtils.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/util/ParserStringUtils.java
index b67e64dd17..6226cc070e 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/util/ParserStringUtils.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/util/ParserStringUtils.java
@@ -33,7 +33,10 @@ public class ParserStringUtils {
     public static String safeStripStringDelimiters(String value) {
         if (value != null) {
             value = value.trim();
-            if (value.length() >= 2 && value.startsWith("\"") && 
value.endsWith("\"")) {
+            if (value.length() >= 2 && (
+                    value.startsWith("\"") && value.endsWith("\"")
+                    || value.startsWith("'") && value.endsWith("'")
+            )) {
                 value = value.substring(1, value.length() - 1);
             }
         }
diff --git 
a/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/functional/parser/DrlParserTest.java
 
b/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/functional/parser/DrlParserTest.java
index dadbe10e7b..9aa85201e2 100644
--- 
a/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/functional/parser/DrlParserTest.java
+++ 
b/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/functional/parser/DrlParserTest.java
@@ -34,7 +34,7 @@ public class DrlParserTest extends ParserTest {
         super(file, kieBaseTestConfiguration);
     }
 
-    @Parameters
+    @Parameters(name = "{index}: {0}, {1}")
     public static Collection<Object[]> getParameters() {
         return getTestParamsFromFiles(getFiles("drl"));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to