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]