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]