From ddf73f8ca65bc8c0b5713c1ac3967b26e9104656 Mon Sep 17 00:00:00 2001 From: pauln2112cge Date: Fri, 25 Sep 2026 14:14:49 +0200 Subject: [PATCH] Enable java code generation with operation reflection --- .../ecore/EMFGeneratorFragment.xtend | 29 +++++++++++++++++++ .../nl/esi/xtext/actions/GenerateActions.mwe2 | 3 +- .../esi/xtext/common/lang/GenerateBase.mwe2 | 4 +-- .../ExpressionEvaluatorFunctionTest.xtend | 22 ++++++++++++++ .../xtext/expressions/GenerateExpression.mwe2 | 3 +- .../src/nl/esi/xtext/types/GenerateTypes.mwe2 | 3 +- 6 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 bundles/nl.esi.xplus.xtext.generator/src/nl/esi/xplus/xtext/generator/ecore/EMFGeneratorFragment.xtend diff --git a/bundles/nl.esi.xplus.xtext.generator/src/nl/esi/xplus/xtext/generator/ecore/EMFGeneratorFragment.xtend b/bundles/nl.esi.xplus.xtext.generator/src/nl/esi/xplus/xtext/generator/ecore/EMFGeneratorFragment.xtend new file mode 100644 index 0000000..1e0ea2a --- /dev/null +++ b/bundles/nl.esi.xplus.xtext.generator/src/nl/esi/xplus/xtext/generator/ecore/EMFGeneratorFragment.xtend @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2024, 2026 TNO-ESI + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + */ +package nl.esi.xplus.xtext.generator.ecore + +import org.eclipse.emf.ecore.resource.ResourceSet +import org.eclipse.xtext.Grammar +import org.eclipse.xtext.xtext.generator.ecore.EMFGeneratorFragment2 +import org.eclipse.xtend.lib.annotations.Accessors + +@Accessors +class EMFGeneratorFragment extends EMFGeneratorFragment2 { + + boolean operationReflection = false; + + override protected getGenModel(ResourceSet rs, Grammar grammar) { + val genModel = super.getGenModel(rs, grammar) + genModel.operationReflection = true + return genModel + } + + +} diff --git a/bundles/nl.esi.xtext.actions/src/nl/esi/xtext/actions/GenerateActions.mwe2 b/bundles/nl.esi.xtext.actions/src/nl/esi/xtext/actions/GenerateActions.mwe2 index fcb4dfd..22adef6 100644 --- a/bundles/nl.esi.xtext.actions/src/nl/esi/xtext/actions/GenerateActions.mwe2 +++ b/bundles/nl.esi.xtext.actions/src/nl/esi/xtext/actions/GenerateActions.mwe2 @@ -58,8 +58,9 @@ Workflow { junitSupport = { junitVersion = "5" } - emfGenerator = { + emfGenerator = nl.esi.xplus.xtext.generator.ecore.EMFGeneratorFragment { generateEdit = true + operationReflection = true editDirectory = "${baseName}.edit/src-gen" } } diff --git a/bundles/nl.esi.xtext.common.lang/src/nl/esi/xtext/common/lang/GenerateBase.mwe2 b/bundles/nl.esi.xtext.common.lang/src/nl/esi/xtext/common/lang/GenerateBase.mwe2 index 2a3829a..85ad4dc 100644 --- a/bundles/nl.esi.xtext.common.lang/src/nl/esi/xtext/common/lang/GenerateBase.mwe2 +++ b/bundles/nl.esi.xtext.common.lang/src/nl/esi/xtext/common/lang/GenerateBase.mwe2 @@ -59,11 +59,11 @@ Workflow { junitSupport = { junitVersion = "5" } - emfGenerator = { + emfGenerator = nl.esi.xplus.xtext.generator.ecore.EMFGeneratorFragment { generateEdit = true + operationReflection = true editDirectory = "${baseName}.edit/src-gen" } - } } } diff --git a/bundles/nl.esi.xtext.expressions.tests/src/nl/esi/xtext/expressions/tests/ExpressionEvaluatorFunctionTest.xtend b/bundles/nl.esi.xtext.expressions.tests/src/nl/esi/xtext/expressions/tests/ExpressionEvaluatorFunctionTest.xtend index 6d847a6..b2a283f 100644 --- a/bundles/nl.esi.xtext.expressions.tests/src/nl/esi/xtext/expressions/tests/ExpressionEvaluatorFunctionTest.xtend +++ b/bundles/nl.esi.xtext.expressions.tests/src/nl/esi/xtext/expressions/tests/ExpressionEvaluatorFunctionTest.xtend @@ -48,6 +48,28 @@ class ExpressionEvaluatorFunctionTest extends ExpressionEvaluatorTestBase { ''') } + + @Test + def void basedOnTemplateTest() { + assertEval(''' + type derived based on string + derived[] dArray = ["d" ] + string[] sArray = ["s" ] + string xD = "d" + derived yD = "d" + string xS = "s" + derived yS = "s" + ''', ''' + type derived based on string + derived[] dArray = ["d" ] + string[] sArray = ["s" ] + string xD = get(dArray, 0) + derived yD = get(dArray, 0) + string xS = get(sArray, 0) + derived yS = get(sArray, 0) + ''') + } + @Test def void size() { assertEval(''' diff --git a/bundles/nl.esi.xtext.expressions/src/nl/esi/xtext/expressions/GenerateExpression.mwe2 b/bundles/nl.esi.xtext.expressions/src/nl/esi/xtext/expressions/GenerateExpression.mwe2 index b161cbb..9d22d0d 100644 --- a/bundles/nl.esi.xtext.expressions/src/nl/esi/xtext/expressions/GenerateExpression.mwe2 +++ b/bundles/nl.esi.xtext.expressions/src/nl/esi/xtext/expressions/GenerateExpression.mwe2 @@ -63,8 +63,9 @@ Workflow { junitSupport = { junitVersion = "5" } - emfGenerator = { + emfGenerator = nl.esi.xplus.xtext.generator.ecore.EMFGeneratorFragment { generateEdit = true + operationReflection = true editDirectory = "${baseName}.edit/src-gen" } } diff --git a/bundles/nl.esi.xtext.types/src/nl/esi/xtext/types/GenerateTypes.mwe2 b/bundles/nl.esi.xtext.types/src/nl/esi/xtext/types/GenerateTypes.mwe2 index 65c19b3..fb9fa5b 100644 --- a/bundles/nl.esi.xtext.types/src/nl/esi/xtext/types/GenerateTypes.mwe2 +++ b/bundles/nl.esi.xtext.types/src/nl/esi/xtext/types/GenerateTypes.mwe2 @@ -62,8 +62,9 @@ Workflow { junitSupport = { junitVersion = "5" } - emfGenerator = { + emfGenerator = nl.esi.xplus.xtext.generator.ecore.EMFGeneratorFragment { generateEdit = true + operationReflection = true editDirectory = "${baseName}.edit/src-gen" } }