From 8b2884d4ec2767a3d3031827ced1786047344201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Sat, 30 May 2026 12:49:48 +0200 Subject: [PATCH 1/2] refactor: migrate Xtend to Java - com.avaloq.tools.ddk.xtext.scope.generator Co-Authored-By: Claude Opus 4.8 (1M context) --- .../.classpath | 1 - .../.project | 6 --- .../build.properties | 3 +- .../scope/generator/ScopingFragment2.java | 50 +++++++++++++++++++ .../scope/generator/ScopingFragment2.xtend | 48 ------------------ .../xtend-gen/.gitignore | 0 6 files changed, 51 insertions(+), 57 deletions(-) create mode 100644 com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java delete mode 100644 com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.xtend delete mode 100644 com.avaloq.tools.ddk.xtext.scope.generator/xtend-gen/.gitignore diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/.classpath b/com.avaloq.tools.ddk.xtext.scope.generator/.classpath index 0475c5043d..7353dd7ff5 100644 --- a/com.avaloq.tools.ddk.xtext.scope.generator/.classpath +++ b/com.avaloq.tools.ddk.xtext.scope.generator/.classpath @@ -1,7 +1,6 @@ - diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/.project b/com.avaloq.tools.ddk.xtext.scope.generator/.project index 159116daab..98d9806ce4 100644 --- a/com.avaloq.tools.ddk.xtext.scope.generator/.project +++ b/com.avaloq.tools.ddk.xtext.scope.generator/.project @@ -20,11 +20,6 @@ - - org.eclipse.xtext.ui.shared.xtextBuilder - - - net.sf.eclipsecs.core.CheckstyleBuilder @@ -44,7 +39,6 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature - org.eclipse.xtext.ui.shared.xtextNature net.sourceforge.pmd.eclipse.plugin.pmdNature net.sf.eclipsecs.core.CheckstyleNature edu.umd.cs.findbugs.plugin.eclipse.findbugsNature diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/build.properties b/com.avaloq.tools.ddk.xtext.scope.generator/build.properties index 28b46ccf97..34d2e4d2da 100644 --- a/com.avaloq.tools.ddk.xtext.scope.generator/build.properties +++ b/com.avaloq.tools.ddk.xtext.scope.generator/build.properties @@ -1,5 +1,4 @@ -source.. = src/,\ - xtend-gen/ +source.. = src/ output.. = bin/ bin.includes = META-INF/,\ . diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java b/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java new file mode 100644 index 0000000000..c3f406aec9 --- /dev/null +++ b/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2016 Avaloq Group AG and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Avaloq Group AG - initial API and implementation + *******************************************************************************/ + +package com.avaloq.tools.ddk.xtext.scope.generator; + +import org.eclipse.xtext.GrammarUtil; +import org.eclipse.xtext.linking.ILinkingService; +import org.eclipse.xtext.scoping.IScopeProvider; +import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment; +import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess; +import org.eclipse.xtext.xtext.generator.model.TypeReference; + +import com.avaloq.tools.ddk.xtext.linking.LinkingService; +import com.avaloq.tools.ddk.xtext.scoping.IScopeNameProvider; + + +@SuppressWarnings("nls") +public class ScopingFragment2 extends AbstractXtextGeneratorFragment { + + private static final String RUNTIME_PLUGIN = "com.avaloq.tools.ddk.xtext"; + + @Override + public void generate() { + final String prefix = GrammarUtil.getNamespace(getGrammar()) + ".scoping." + GrammarUtil.getSimpleName(getGrammar()); + new GuiceModuleAccess.BindingFactory() + .addTypeToType(TypeReference.typeRef(IScopeProvider.class), new TypeReference(prefix + "ScopeProvider")) + .addTypeToType(TypeReference.typeRef(IScopeNameProvider.class), new TypeReference(prefix + "ScopeNameProvider")) + .addTypeToType(TypeReference.typeRef(ILinkingService.class), TypeReference.typeRef(LinkingService.class)) + .contributeTo(getLanguage().getRuntimeGenModule()); + + if (getProjectConfig().getRuntime().getManifest() != null) { + getProjectConfig().getRuntime().getManifest().getRequiredBundles().add("org.eclipse.emf.ecore"); + getProjectConfig().getRuntime().getManifest().getRequiredBundles().add(RUNTIME_PLUGIN); + getProjectConfig().getRuntime().getManifest().getExportedPackages().add(GrammarUtil.getNamespace(getGrammar()) + ".scoping"); + getProjectConfig().getRuntime().getManifest().getImportedPackages().add("org.apache.logging.log4j"); + } + + if (getProjectConfig().getEclipsePlugin().getManifest() != null) { + getProjectConfig().getRuntime().getManifest().getRequiredBundles().add(RUNTIME_PLUGIN); + } + } +} diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.xtend b/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.xtend deleted file mode 100644 index 191c0b905d..0000000000 --- a/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.xtend +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016 Avaloq Group AG and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Avaloq Group AG - initial API and implementation - *******************************************************************************/ - -package com.avaloq.tools.ddk.xtext.scope.generator - -import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment -import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess - -import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.* -import static extension org.eclipse.xtext.GrammarUtil.* -import org.eclipse.xtext.scoping.IScopeProvider -import com.avaloq.tools.ddk.xtext.scoping.IScopeNameProvider -import org.eclipse.xtext.linking.ILinkingService -import org.eclipse.xtext.xtext.generator.model.TypeReference -import com.avaloq.tools.ddk.xtext.linking.LinkingService - -class ScopingFragment2 extends AbstractXtextGeneratorFragment { - - static val RUNTIME_PLUGIN = "com.avaloq.tools.ddk.xtext" - - override generate() { - val prefix = grammar.namespace + ".scoping." + grammar.simpleName - new GuiceModuleAccess.BindingFactory() - .addTypeToType(IScopeProvider.typeRef, new TypeReference(prefix + "ScopeProvider")) - .addTypeToType(IScopeNameProvider.typeRef, new TypeReference(prefix + "ScopeNameProvider")) - .addTypeToType(ILinkingService.typeRef, LinkingService.typeRef) - .contributeTo(language.runtimeGenModule) - - if (projectConfig.runtime.manifest !== null) { - projectConfig.runtime.manifest.requiredBundles += "org.eclipse.emf.ecore" - projectConfig.runtime.manifest.requiredBundles += RUNTIME_PLUGIN - projectConfig.runtime.manifest.exportedPackages += grammar.namespace + ".scoping" - projectConfig.runtime.manifest.importedPackages += "org.apache.logging.log4j" - } - - if (projectConfig.eclipsePlugin.manifest !== null) { - projectConfig.runtime.manifest.requiredBundles += RUNTIME_PLUGIN - } - } -} \ No newline at end of file diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/xtend-gen/.gitignore b/com.avaloq.tools.ddk.xtext.scope.generator/xtend-gen/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 From d208d5c910842a31275b1fd94c5148d93509afae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Sat, 30 May 2026 17:11:09 +0200 Subject: [PATCH 2/2] fix: ScopingFragment2 adds RUNTIME_PLUGIN to the eclipse-plugin manifest, not the runtime manifest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The block guarded on `getEclipsePlugin().getManifest() != null` added RUNTIME_PLUGIN to `getRuntime().getManifest()` — which already contains it (a no-op on a Set) — so generated UI plugins never declared the com.avaloq.tools.ddk.xtext dependency the block was meant to add. Every sibling generator fragment writes to eclipsePlugin.manifest in this block (FormatFragment2, ExportFragment2, BuilderIntegrationFragment2, CompareFragment2, ModelInferenceFragment2, CheckQuickfixProviderFragment2); ScopingFragment2 was the lone outlier. Latent for years because the current UI plugins do not reference com.avaloq.tools.ddk.xtext packages directly, so the omitted Require-Bundle never caused a resolution failure. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../tools/ddk/xtext/scope/generator/ScopingFragment2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java b/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java index c3f406aec9..8ab6924570 100644 --- a/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java +++ b/com.avaloq.tools.ddk.xtext.scope.generator/src/com/avaloq/tools/ddk/xtext/scope/generator/ScopingFragment2.java @@ -44,7 +44,7 @@ public void generate() { } if (getProjectConfig().getEclipsePlugin().getManifest() != null) { - getProjectConfig().getRuntime().getManifest().getRequiredBundles().add(RUNTIME_PLUGIN); + getProjectConfig().getEclipsePlugin().getManifest().getRequiredBundles().add(RUNTIME_PLUGIN); } } }