From a329b58dac6a0f5f4533f3dde07fcdeab1ad7ad7 Mon Sep 17 00:00:00 2001 From: alexwp10 Date: Mon, 3 Aug 2026 17:20:17 +0200 Subject: [PATCH 1/3] Support qualified names in function operations --- .../de/monticore/lang/SysMLExpressions.mc4 | 2 +- .../java/parser/ExpressionParserTest.java | 26 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 b/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 index a8142047..36864786 100644 --- a/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 +++ b/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 @@ -118,7 +118,7 @@ component grammar SysMLExpressions "{" SysMLElement* inner:Expression "}" ; SysMLFunctionOperationExpression implements Expression <291> = - Expression "->" Name + Expression "->" SysMLQualifiedName ("(" (SysMLParameter || ",")* ")")? (body:SysMLBodyExpression)? ; diff --git a/language/src/test/java/parser/ExpressionParserTest.java b/language/src/test/java/parser/ExpressionParserTest.java index fe1cddc8..af388dc0 100644 --- a/language/src/test/java/parser/ExpressionParserTest.java +++ b/language/src/test/java/parser/ExpressionParserTest.java @@ -98,7 +98,31 @@ public void testFunctionOperationAfterFieldAccess() throws IOException { var functionOperation = (ASTSysMLFunctionOperationExpression) ast.get(); assertThat(functionOperation.getExpression()) .isInstanceOf(ASTFieldAccessExpression.class); - assertThat(functionOperation.getName()).isEqualTo("c"); + assertThat(functionOperation.getSysMLQualifiedName().getPartsList()).containsExactly("c"); } + /** + * Checks that qualified names on both sides of a function operation + * are parsed with the correct binding. + */ + @ParameterizedTest + @ValueSource(strings = { + "a.b->c.d", + "a::b->c::d", + "a::b->c.d", + "a.b->c::d" + }) + public void testQualifiedNamesInFunctionOperation(String expr) throws IOException { + var ast = parser.parse_StringExpression(expr); + + assertThat(ast).isPresent(); + assertThat(Log.getFindings()).isEmpty(); + assertThat(ast.get()).isInstanceOf(ASTSysMLFunctionOperationExpression.class); + + var functionOperation = (ASTSysMLFunctionOperationExpression) ast.get(); + assertThat(functionOperation.getExpression()) + .isInstanceOf(ASTFieldAccessExpression.class); + assertThat(functionOperation.getSysMLQualifiedName().getPartsList()) + .containsExactly("c", "d"); + } } From ff2b6b7efe9fa0e50a9148110a9bce07a02c0be4 Mon Sep 17 00:00:00 2001 From: alexwp10 Date: Wed, 12 Aug 2026 15:55:02 +0200 Subject: [PATCH 2/3] Use MCQualifiedName instead of SysMLQualifiedName in SysMLFunctionOperationExpression #190 --- .../src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 | 2 +- language/src/test/java/parser/ExpressionParserTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 b/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 index 36864786..79b079d3 100644 --- a/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 +++ b/language/src/main/grammars/de/monticore/lang/SysMLExpressions.mc4 @@ -118,7 +118,7 @@ component grammar SysMLExpressions "{" SysMLElement* inner:Expression "}" ; SysMLFunctionOperationExpression implements Expression <291> = - Expression "->" SysMLQualifiedName + Expression "->" MCQualifiedName ("(" (SysMLParameter || ",")* ")")? (body:SysMLBodyExpression)? ; diff --git a/language/src/test/java/parser/ExpressionParserTest.java b/language/src/test/java/parser/ExpressionParserTest.java index af388dc0..af985757 100644 --- a/language/src/test/java/parser/ExpressionParserTest.java +++ b/language/src/test/java/parser/ExpressionParserTest.java @@ -98,7 +98,7 @@ public void testFunctionOperationAfterFieldAccess() throws IOException { var functionOperation = (ASTSysMLFunctionOperationExpression) ast.get(); assertThat(functionOperation.getExpression()) .isInstanceOf(ASTFieldAccessExpression.class); - assertThat(functionOperation.getSysMLQualifiedName().getPartsList()).containsExactly("c"); + assertThat(functionOperation.getMCQualifiedName().getPartsList()).containsExactly("c"); } /** @@ -122,7 +122,7 @@ public void testQualifiedNamesInFunctionOperation(String expr) throws IOExceptio var functionOperation = (ASTSysMLFunctionOperationExpression) ast.get(); assertThat(functionOperation.getExpression()) .isInstanceOf(ASTFieldAccessExpression.class); - assertThat(functionOperation.getSysMLQualifiedName().getPartsList()) + assertThat(functionOperation.getMCQualifiedName().getPartsList()) .containsExactly("c", "d"); } } From e590939b7700a22b16354103b243d6081a5116a1 Mon Sep 17 00:00:00 2001 From: alexwp10 Date: Wed, 12 Aug 2026 16:26:09 +0200 Subject: [PATCH 3/3] Bump version to 7.8.79 #190 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index febaa061..ddd15d5e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ assertj_version = 3.21.0 junit_version = 5.8.2 # Version of published artifacts -version = 7.8.78 +version = 7.8.79