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]