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 6886467595 Allow traits to inherit multiple traits (#5824)
6886467595 is described below

commit 6886467595f522c561319381d643a050fc87569e
Author: Jiří Locker <[email protected]>
AuthorDate: Thu Apr 4 16:24:56 2024 +0200

    Allow traits to inherit multiple traits (#5824)
---
 .../drools/drl/parser/antlr4/MiscDRLParserTest.java   | 19 +++++++++++++++++++
 .../antlr4/org/drools/drl/parser/antlr4/DRLParser.g4  |  2 +-
 .../org/drools/drl/parser/antlr4/DRLVisitorImpl.java  |  4 +++-
 3 files changed, 23 insertions(+), 2 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 fa961b876a..2d21323828 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
@@ -34,6 +34,7 @@ import org.drools.drl.ast.descr.NotDescr;
 import org.drools.drl.ast.descr.OrDescr;
 import org.drools.drl.ast.descr.PackageDescr;
 import org.drools.drl.ast.descr.PatternDescr;
+import org.drools.drl.ast.descr.QualifiedName;
 import org.drools.drl.ast.descr.QueryDescr;
 import org.drools.drl.ast.descr.RuleDescr;
 import org.drools.drl.ast.descr.TypeDeclarationDescr;
@@ -3978,4 +3979,22 @@ class MiscDRLParserTest {
         assertThat(query.getParameterTypes()).isEmpty();
         assertThat(query.getParameters()).isEmpty();
     }
+
+    @Test
+    public void traitExtendsMultiple() throws Exception {
+        final String source = "declare trait FatherTrait extends 
com.sample.ParentTrait, UncleTrait, org.test.GrandParentTrait end";
+
+        PackageDescr pkg = parser.parse(source);
+        
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
+
+        final List<TypeDeclarationDescr> declarations = 
pkg.getTypeDeclarations();
+
+        assertThat(declarations).hasSize(1);
+        TypeDeclarationDescr trait = declarations.get(0);
+        assertThat(trait.getSuperTypeName()).isEqualTo("ParentTrait");
+        assertThat(trait.getSuperTypeNamespace()).isEqualTo("com.sample");
+        assertThat(trait.getSuperTypes())
+                .map(QualifiedName::getFullName)
+                .containsExactlyInAnyOrder("com.sample.ParentTrait", 
"UncleTrait", "org.test.GrandParentTrait");
+    }
 }
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
index 7cc1d584d8..7d9dd2235f 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
@@ -59,7 +59,7 @@ declaredef : DRL_DECLARE (
  *                     END
  */
 
-typeDeclaration : DRL_TRAIT? name=drlQualifiedName (EXTENDS 
superType=drlQualifiedName)? drlAnnotation* field* ;
+typeDeclaration : DRL_TRAIT? name=drlQualifiedName (EXTENDS 
superTypes+=drlQualifiedName (COMMA superTypes+=drlQualifiedName)* )? 
drlAnnotation* field* ;
 
 // entryPointDeclaration := ENTRY-POINT stringId annotation* END
 
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 b9564e9a77..84ebe76f56 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
@@ -215,7 +215,9 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
             typeDeclarationDescr.setTrait(true);
         }
         if (ctx.EXTENDS() != null) {
-            typeDeclarationDescr.addSuperType(ctx.superType.getText());
+            for (DRLParser.DrlQualifiedNameContext superType : ctx.superTypes) 
{
+                typeDeclarationDescr.addSuperType(superType.getText());
+            }
         }
         ctx.drlAnnotation().stream()
                 .map(this::visitDrlAnnotation)


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

Reply via email to