From 9b11a92309a03d745c52a208e590a683f84f4cf8 Mon Sep 17 00:00:00 2001 From: SimonCockx <47859223+SimonCockx@users.noreply.github.com> Date: Fri, 7 Mar 2025 16:49:45 +0100 Subject: [PATCH] Fix default operation issue (#948) * Fix default operation issue * clean * Fixed --- .../expression/ExpressionGeneratorTest.xtend | 22 ++++++++++++ .../java/expression/ExpressionGenerator.xtend | 36 ++++++++++++------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/expression/ExpressionGeneratorTest.xtend b/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/expression/ExpressionGeneratorTest.xtend index 2ede54d3b..831a34376 100644 --- a/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/expression/ExpressionGeneratorTest.xtend +++ b/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/expression/ExpressionGeneratorTest.xtend @@ -71,6 +71,28 @@ class ExpressionGeneratorTest { + @Test + def void testDefaultWithMetaCoercion() { + val expr = ''' + foo default bar + ''' + + val expected = ''' + import com.rosetta.model.lib.mapper.MapperS; + import com.rosetta.model.metafields.FieldWithMetaString; + + + { + FieldWithMetaString foo; + FieldWithMetaString bar; + final FieldWithMetaString fieldWithMetaString = MapperS.of(foo).getOrDefault(bar); + return fieldWithMetaString == null ? null : fieldWithMetaString.getValue(); + } + ''' + + assertJavaCode(expected, expr, String, #[], #["foo string (1..1) [metadata scheme]", "bar string (1..1) [metadata scheme]"]) + } + @Test def void testFeatureCallToIncompatibleOverrideUsesCorrectGetter() { val context = ''' diff --git a/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend b/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend index a3cf164ba..f34458d79 100644 --- a/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend +++ b/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend @@ -346,12 +346,6 @@ class ExpressionGenerator extends RosettaExpressionSwitch«method»(«l», «r»)''', MAPPER_S.wrap(resultType))], context.scope) + .then(rightCode, [l, r|JavaExpression.from('''«MapperMaths».<«resultType», «joinedWithoutMeta», «joinedWithoutMeta»>«method»(«l», «r»)''', MAPPER_S.wrap(resultType))], context.scope) } else { val leftCode = javaCode(left, MAPPER.wrapExtends(leftType), context.scope) val rightCode = javaCode(right, MAPPER.wrapExtends(rightType), context.scope) @@ -385,12 +385,20 @@ class ExpressionGenerator extends RosettaExpressionSwitch", case ">=": { + val leftRtype = typeProvider.getRMetaAnnotatedType(expr.left).RType + val rightRtype = typeProvider.getRMetaAnnotatedType(expr.right).RType + val joinedWithoutMeta = leftRtype.join(rightRtype).toJavaReferenceType val method = switch expr.operator { case "=": 'areEqual' case "<>": 'notEqual' @@ -430,8 +442,8 @@ class ExpressionGenerator extends RosettaExpressionSwitch