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 632715ea82 [incubator-kie-drools-5932] [new-parser] Anonymous classes 
not supported (#5979)
632715ea82 is described below

commit 632715ea823b7ced1a5a6cdd86b0e9db3ffe6376
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Tue Jun 4 15:41:48 2024 +0900

    [incubator-kie-drools-5932] [new-parser] Anonymous classes not supported 
(#5979)
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 23 ++++++++++++++++++++++
 .../drools/drl/parser/antlr4/DRL6Expressions.g4    |  6 +++---
 .../drools/drl/parser/antlr4/DRLVisitorImpl.java   |  2 +-
 3 files changed, 27 insertions(+), 4 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 875315157d..d3a919d0c4 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
@@ -5304,4 +5304,27 @@ class MiscDRLParserTest {
             });
         });
     }
+
+    @Test
+    void functionWithAnonymousClass() {
+        final String text = "function Function<String, Integer> f() {\n" +
+                "    return new Function<String, Integer>() {\n" +
+                "        public Integer apply(String s) {\n" +
+                "            return s.length();\n" +
+                "        }\n" +
+                "    };\n" +
+                "}";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+        FunctionDescr function = packageDescr.getFunctions().get(0);
+
+        assertThat(function.getName()).isEqualTo("f");
+        
assertThat(function.getReturnType()).isEqualToIgnoringWhitespace("Function<String,
 Integer>");
+        assertThat(function.getParameterTypes()).isEmpty();
+        assertThat(function.getParameterNames()).isEmpty();
+        assertThat(function.getBody()).isEqualToIgnoringWhitespace("return new 
Function<String, Integer>() {\n" +
+                                                                           "   
     public Integer apply(String s) {\n" +
+                                                                           "   
         return s.length();\n" +
+                                                                           "   
     }\n" +
+                                                                           "   
 };");
+    }
 }
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
index f2a5a79f19..026beef4ce 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
@@ -810,7 +810,7 @@ identifierSuffix
 
 creator
     :  nonWildcardTypeArguments? createdName
-        (arrayCreatorRest | classCreatorRest)
+        (arrayCreatorRest | classCreatorRestExpr)
     ;
 
 createdName
@@ -821,7 +821,7 @@ createdName
 
 // Old parser cannot parse innerCreator with selector expression (outer.new 
InnerClass() != null) TODO: Delete this after investigation
 innerCreator
-    :  {!(helper.validateIdentifierKey(DroolsSoftKeywords.INSTANCEOF))}? 
drlIdentifier classCreatorRest
+    :  {!(helper.validateIdentifierKey(DroolsSoftKeywords.INSTANCEOF))}? 
drlIdentifier classCreatorRestExpr
     ;
 
 arrayCreatorRest
@@ -840,7 +840,7 @@ arrayInitializer
     :  LBRACE (variableInitializer (COMMA variableInitializer)* (COMMA)? )? 
RBRACE
     ;
 
-classCreatorRest
+classCreatorRestExpr // do not overwrite JavaParser.g4 classCreatorRest
     :  arguments //classBody?          //sotty:  restored classBody to allow 
for inline, anonymous classes
     ;
 
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
index d67450e919..cefce9921c 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
@@ -207,7 +207,7 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
                 .withParserRuleContext(ctx)
                 .build();
         if (ctx.typeTypeOrVoid() != null) {
-            functionDescr.setReturnType(ctx.typeTypeOrVoid().getText());
+            
functionDescr.setReturnType(getTextPreservingWhitespace(ctx.typeTypeOrVoid()));
         } else {
             functionDescr.setReturnType("void");
         }


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

Reply via email to