From 4b14e5f73564a6885ff3da35786c9491a411cf9a Mon Sep 17 00:00:00 2001 From: ipa-nhg Date: Mon, 25 Sep 2023 11:46:21 +0200 Subject: [PATCH 1/3] Add Language Server support for the ros (component level) DSLs --- .../de.fraunhofer.ipa.ros.xtext.ide/pom.xml | 108 +++++++++++++++++- .../ipa/ros/ide/launch/ServerLauncher.java | 55 +++++++++ .../de.fraunhofer.ipa.ros1.xtext.ide/pom.xml | 108 +++++++++++++++++- .../ipa/ros1/ide/launch/ServerLauncher.java | 55 +++++++++ .../de.fraunhofer.ipa.ros2.xtext.ide/pom.xml | 108 +++++++++++++++++- .../ipa/ros2/ide/launch/ServerLauncher.java | 55 +++++++++ 6 files changed, 480 insertions(+), 9 deletions(-) create mode 100644 plugins/de.fraunhofer.ipa.ros.xtext.ide/src/de/fraunhofer/ipa/ros/ide/launch/ServerLauncher.java create mode 100644 plugins/de.fraunhofer.ipa.ros1.xtext.ide/src/de/fraunhofer/ipa/ros1/ide/launch/ServerLauncher.java create mode 100644 plugins/de.fraunhofer.ipa.ros2.xtext.ide/src/de/fraunhofer/ipa/ros2/ide/launch/ServerLauncher.java diff --git a/plugins/de.fraunhofer.ipa.ros.xtext.ide/pom.xml b/plugins/de.fraunhofer.ipa.ros.xtext.ide/pom.xml index 0dfe06246..050b9dd3c 100644 --- a/plugins/de.fraunhofer.ipa.ros.xtext.ide/pom.xml +++ b/plugins/de.fraunhofer.ipa.ros.xtext.ide/pom.xml @@ -12,22 +12,124 @@ eclipse-plugin + src + + + src + + **/*.java + **/*.xtend + + + org.eclipse.xtend xtend-maven-plugin + + org.codehaus.mojo + build-helper-maven-plugin + 3.3.0 + + + add-source + initialize + + add-source + add-resource + + + + src-gen + + + + src-gen + + **/*.java + **/*.g + + + + + + + org.apache.maven.plugins - maven-clean-plugin + maven-shade-plugin + 3.2.4 + + + + de.fraunhofer.ipa.ros.ide.launch.ServerLauncher + + + plugin.properties + + + + + + + *:* + + META-INF/INDEX.LIST + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + .options + .api_description + *.profile + *.html + about.* + about_files/* + plugin.xml + systembundle.properties + profile.list + **/*._trace + **/*.g + **/*.mwe2 + **/*.xtext + + + + true + ls + false + - xtend-gen-clean - clean + package + + shade + + + + ${project.groupId} + de.fraunhofer.ipa.ros.xtext + ${project.version} + + + org.eclipse.xtext + org.eclipse.xtext.ide + ${xtextVersion} + + + org.eclipse.xtext + org.eclipse.xtext.xbase.ide + ${xtextVersion} + + + diff --git a/plugins/de.fraunhofer.ipa.ros.xtext.ide/src/de/fraunhofer/ipa/ros/ide/launch/ServerLauncher.java b/plugins/de.fraunhofer.ipa.ros.xtext.ide/src/de/fraunhofer/ipa/ros/ide/launch/ServerLauncher.java new file mode 100644 index 000000000..b4b27ed45 --- /dev/null +++ b/plugins/de.fraunhofer.ipa.ros.xtext.ide/src/de/fraunhofer/ipa/ros/ide/launch/ServerLauncher.java @@ -0,0 +1,55 @@ +package de.fraunhofer.ipa.ros.ide.launch; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.channels.AsynchronousServerSocketChannel; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.Channels; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.function.Function; + +import org.eclipse.lsp4j.jsonrpc.Launcher; +import org.eclipse.lsp4j.jsonrpc.MessageConsumer; +import org.eclipse.lsp4j.services.LanguageClient; +import org.eclipse.xtext.ide.server.LanguageServerImpl; +import org.eclipse.xtext.ide.server.ServerModule; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class ServerLauncher { + public static void main(String[] args) throws InterruptedException, IOException { + Injector injector = Guice.createInjector(new ServerModule()); + LanguageServerImpl languageServer = injector.getInstance(LanguageServerImpl.class); + Function wrapper = consumer -> { + MessageConsumer result = consumer; + return result; + }; + Launcher launcher = createSocketLauncher(languageServer, LanguageClient.class, + new InetSocketAddress("localhost", 5008), Executors.newCachedThreadPool(), wrapper); + languageServer.connect(launcher.getRemoteProxy()); + Future future = launcher.startListening(); + while (!future.isDone()) { + Thread.sleep(10_000l); + } + } + + static Launcher createSocketLauncher(Object localService, Class remoteInterface, + SocketAddress socketAddress, ExecutorService executorService, + Function wrapper) throws IOException { + AsynchronousServerSocketChannel serverSocket = AsynchronousServerSocketChannel.open().bind(socketAddress); + AsynchronousSocketChannel socketChannel; + try { + socketChannel = serverSocket.accept().get(); + return Launcher.createIoLauncher(localService, remoteInterface, Channels.newInputStream(socketChannel), + Channels.newOutputStream(socketChannel), executorService, wrapper); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file diff --git a/plugins/de.fraunhofer.ipa.ros1.xtext.ide/pom.xml b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/pom.xml index 3b79f0d4b..e88ac9bf5 100644 --- a/plugins/de.fraunhofer.ipa.ros1.xtext.ide/pom.xml +++ b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/pom.xml @@ -12,22 +12,124 @@ eclipse-plugin + src + + + src + + **/*.java + **/*.xtend + + + org.eclipse.xtend xtend-maven-plugin + + org.codehaus.mojo + build-helper-maven-plugin + 3.3.0 + + + add-source + initialize + + add-source + add-resource + + + + src-gen + + + + src-gen + + **/*.java + **/*.g + + + + + + + org.apache.maven.plugins - maven-clean-plugin + maven-shade-plugin + 3.2.4 + + + + de.fraunhofer.ipa.ros1.ide.launch.ServerLauncher + + + plugin.properties + + + + + + + *:* + + META-INF/INDEX.LIST + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + .options + .api_description + *.profile + *.html + about.* + about_files/* + plugin.xml + systembundle.properties + profile.list + **/*._trace + **/*.g + **/*.mwe2 + **/*.xtext + + + + true + ls + false + - xtend-gen-clean - clean + package + + shade + + + + ${project.groupId} + de.fraunhofer.ipa.ros.xtext + ${project.version} + + + org.eclipse.xtext + org.eclipse.xtext.ide + ${xtextVersion} + + + org.eclipse.xtext + org.eclipse.xtext.xbase.ide + ${xtextVersion} + + + diff --git a/plugins/de.fraunhofer.ipa.ros1.xtext.ide/src/de/fraunhofer/ipa/ros1/ide/launch/ServerLauncher.java b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/src/de/fraunhofer/ipa/ros1/ide/launch/ServerLauncher.java new file mode 100644 index 000000000..41cbebd3d --- /dev/null +++ b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/src/de/fraunhofer/ipa/ros1/ide/launch/ServerLauncher.java @@ -0,0 +1,55 @@ +package de.fraunhofer.ipa.ros1.ide.launch; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.channels.AsynchronousServerSocketChannel; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.Channels; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.function.Function; + +import org.eclipse.lsp4j.jsonrpc.Launcher; +import org.eclipse.lsp4j.jsonrpc.MessageConsumer; +import org.eclipse.lsp4j.services.LanguageClient; +import org.eclipse.xtext.ide.server.LanguageServerImpl; +import org.eclipse.xtext.ide.server.ServerModule; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class ServerLauncher { + public static void main(String[] args) throws InterruptedException, IOException { + Injector injector = Guice.createInjector(new ServerModule()); + LanguageServerImpl languageServer = injector.getInstance(LanguageServerImpl.class); + Function wrapper = consumer -> { + MessageConsumer result = consumer; + return result; + }; + Launcher launcher = createSocketLauncher(languageServer, LanguageClient.class, + new InetSocketAddress("localhost", 5008), Executors.newCachedThreadPool(), wrapper); + languageServer.connect(launcher.getRemoteProxy()); + Future future = launcher.startListening(); + while (!future.isDone()) { + Thread.sleep(10_000l); + } + } + + static Launcher createSocketLauncher(Object localService, Class remoteInterface, + SocketAddress socketAddress, ExecutorService executorService, + Function wrapper) throws IOException { + AsynchronousServerSocketChannel serverSocket = AsynchronousServerSocketChannel.open().bind(socketAddress); + AsynchronousSocketChannel socketChannel; + try { + socketChannel = serverSocket.accept().get(); + return Launcher.createIoLauncher(localService, remoteInterface, Channels.newInputStream(socketChannel), + Channels.newOutputStream(socketChannel), executorService, wrapper); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file diff --git a/plugins/de.fraunhofer.ipa.ros2.xtext.ide/pom.xml b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/pom.xml index 1ed02d04c..b4bf8f4b3 100644 --- a/plugins/de.fraunhofer.ipa.ros2.xtext.ide/pom.xml +++ b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/pom.xml @@ -12,22 +12,124 @@ eclipse-plugin + src + + + src + + **/*.java + **/*.xtend + + + org.eclipse.xtend xtend-maven-plugin + + org.codehaus.mojo + build-helper-maven-plugin + 3.3.0 + + + add-source + initialize + + add-source + add-resource + + + + src-gen + + + + src-gen + + **/*.java + **/*.g + + + + + + + org.apache.maven.plugins - maven-clean-plugin + maven-shade-plugin + 3.2.4 + + + + de.fraunhofer.ipa.ros2.ide.launch.ServerLauncher + + + plugin.properties + + + + + + + *:* + + META-INF/INDEX.LIST + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + .options + .api_description + *.profile + *.html + about.* + about_files/* + plugin.xml + systembundle.properties + profile.list + **/*._trace + **/*.g + **/*.mwe2 + **/*.xtext + + + + true + ls + false + - xtend-gen-clean - clean + package + + shade + + + + ${project.groupId} + de.fraunhofer.ipa.ros.xtext + ${project.version} + + + org.eclipse.xtext + org.eclipse.xtext.ide + ${xtextVersion} + + + org.eclipse.xtext + org.eclipse.xtext.xbase.ide + ${xtextVersion} + + + diff --git a/plugins/de.fraunhofer.ipa.ros2.xtext.ide/src/de/fraunhofer/ipa/ros2/ide/launch/ServerLauncher.java b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/src/de/fraunhofer/ipa/ros2/ide/launch/ServerLauncher.java new file mode 100644 index 000000000..7bf341dd9 --- /dev/null +++ b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/src/de/fraunhofer/ipa/ros2/ide/launch/ServerLauncher.java @@ -0,0 +1,55 @@ +package de.fraunhofer.ipa.ros2.ide.launch; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.channels.AsynchronousServerSocketChannel; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.Channels; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.function.Function; + +import org.eclipse.lsp4j.jsonrpc.Launcher; +import org.eclipse.lsp4j.jsonrpc.MessageConsumer; +import org.eclipse.lsp4j.services.LanguageClient; +import org.eclipse.xtext.ide.server.LanguageServerImpl; +import org.eclipse.xtext.ide.server.ServerModule; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class ServerLauncher { + public static void main(String[] args) throws InterruptedException, IOException { + Injector injector = Guice.createInjector(new ServerModule()); + LanguageServerImpl languageServer = injector.getInstance(LanguageServerImpl.class); + Function wrapper = consumer -> { + MessageConsumer result = consumer; + return result; + }; + Launcher launcher = createSocketLauncher(languageServer, LanguageClient.class, + new InetSocketAddress("localhost", 5008), Executors.newCachedThreadPool(), wrapper); + languageServer.connect(launcher.getRemoteProxy()); + Future future = launcher.startListening(); + while (!future.isDone()) { + Thread.sleep(10_000l); + } + } + + static Launcher createSocketLauncher(Object localService, Class remoteInterface, + SocketAddress socketAddress, ExecutorService executorService, + Function wrapper) throws IOException { + AsynchronousServerSocketChannel serverSocket = AsynchronousServerSocketChannel.open().bind(socketAddress); + AsynchronousSocketChannel socketChannel; + try { + socketChannel = serverSocket.accept().get(); + return Launcher.createIoLauncher(localService, remoteInterface, Channels.newInputStream(socketChannel), + Channels.newOutputStream(socketChannel), executorService, wrapper); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file From 5048f9f67911d3e1e340ad04c7208bdb02a14492 Mon Sep 17 00:00:00 2001 From: ipa-nhg Date: Thu, 1 Feb 2024 08:39:47 +0100 Subject: [PATCH 2/3] Add register to the StandaloneSetup for the grammars --- .../src/de/fraunhofer/ipa/ros/RosStandaloneSetup.xtend | 8 ++++++++ .../src/de/fraunhofer/ipa/ros1/Ros1StandaloneSetup.xtend | 8 ++++++++ .../src/de/fraunhofer/ipa/ros2/Ros2StandaloneSetup.xtend | 8 ++++++++ .../ipa/rossystem/RosSystemStandaloneSetup.xtend | 9 +++++++++ 4 files changed, 33 insertions(+) diff --git a/plugins/de.fraunhofer.ipa.ros.xtext/src/de/fraunhofer/ipa/ros/RosStandaloneSetup.xtend b/plugins/de.fraunhofer.ipa.ros.xtext/src/de/fraunhofer/ipa/ros/RosStandaloneSetup.xtend index ea6292625..efb7cb1a4 100644 --- a/plugins/de.fraunhofer.ipa.ros.xtext/src/de/fraunhofer/ipa/ros/RosStandaloneSetup.xtend +++ b/plugins/de.fraunhofer.ipa.ros.xtext/src/de/fraunhofer/ipa/ros/RosStandaloneSetup.xtend @@ -3,6 +3,9 @@ */ package de.fraunhofer.ipa.ros +import com.google.inject.Injector +import org.eclipse.emf.ecore.EPackage +import ros.RosPackage /** * Initialization support for running Xtext languages without Equinox extension registry. @@ -12,4 +15,9 @@ class RosStandaloneSetup extends RosStandaloneSetupGenerated { def static void doSetup() { new RosStandaloneSetup().createInjectorAndDoEMFRegistration() } + + override register(Injector injector) { + EPackage.Registry.INSTANCE.put(RosPackage.eNS_URI, RosPackage.eINSTANCE) + super.register(injector) + } } diff --git a/plugins/de.fraunhofer.ipa.ros1.xtext/src/de/fraunhofer/ipa/ros1/Ros1StandaloneSetup.xtend b/plugins/de.fraunhofer.ipa.ros1.xtext/src/de/fraunhofer/ipa/ros1/Ros1StandaloneSetup.xtend index bc869fde5..847daba8c 100644 --- a/plugins/de.fraunhofer.ipa.ros1.xtext/src/de/fraunhofer/ipa/ros1/Ros1StandaloneSetup.xtend +++ b/plugins/de.fraunhofer.ipa.ros1.xtext/src/de/fraunhofer/ipa/ros1/Ros1StandaloneSetup.xtend @@ -3,6 +3,9 @@ */ package de.fraunhofer.ipa.ros1 +import com.google.inject.Injector +import org.eclipse.emf.ecore.EPackage +import ros.RosPackage /** * Initialization support for running Xtext languages without Equinox extension registry. @@ -12,4 +15,9 @@ class Ros1StandaloneSetup extends Ros1StandaloneSetupGenerated { def static void doSetup() { new Ros1StandaloneSetup().createInjectorAndDoEMFRegistration() } + + override register(Injector injector) { + EPackage.Registry.INSTANCE.put(RosPackage.eNS_URI, RosPackage.eINSTANCE) + super.register(injector) + } } diff --git a/plugins/de.fraunhofer.ipa.ros2.xtext/src/de/fraunhofer/ipa/ros2/Ros2StandaloneSetup.xtend b/plugins/de.fraunhofer.ipa.ros2.xtext/src/de/fraunhofer/ipa/ros2/Ros2StandaloneSetup.xtend index 50427f553..135230888 100644 --- a/plugins/de.fraunhofer.ipa.ros2.xtext/src/de/fraunhofer/ipa/ros2/Ros2StandaloneSetup.xtend +++ b/plugins/de.fraunhofer.ipa.ros2.xtext/src/de/fraunhofer/ipa/ros2/Ros2StandaloneSetup.xtend @@ -3,6 +3,9 @@ */ package de.fraunhofer.ipa.ros2 +import com.google.inject.Injector +import org.eclipse.emf.ecore.EPackage +import ros.RosPackage /** * Initialization support for running Xtext languages without Equinox extension registry. @@ -12,4 +15,9 @@ class Ros2StandaloneSetup extends Ros2StandaloneSetupGenerated { def static void doSetup() { new Ros2StandaloneSetup().createInjectorAndDoEMFRegistration() } + + override register(Injector injector) { + EPackage.Registry.INSTANCE.put(RosPackage.eNS_URI, RosPackage.eINSTANCE) + super.register(injector) + } } diff --git a/plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/RosSystemStandaloneSetup.xtend b/plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/RosSystemStandaloneSetup.xtend index 637333e44..88b8f4849 100644 --- a/plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/RosSystemStandaloneSetup.xtend +++ b/plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/RosSystemStandaloneSetup.xtend @@ -3,6 +3,9 @@ */ package de.fraunhofer.ipa.rossystem +import com.google.inject.Injector +import org.eclipse.emf.ecore.EPackage +import system.RossystemPackage /** * Initialization support for running Xtext languages without Equinox extension registry. @@ -12,4 +15,10 @@ class RosSystemStandaloneSetup extends RosSystemStandaloneSetupGenerated { def static void doSetup() { new RosSystemStandaloneSetup().createInjectorAndDoEMFRegistration() } + + + override register(Injector injector) { + EPackage.Registry.INSTANCE.put(RossystemPackage.eNS_URI, RossystemPackage.eINSTANCE) + super.register(injector) + } } From 9087f8c6e930485c68d0c9fa11bfb07832c0eee7 Mon Sep 17 00:00:00 2001 From: ipa-nhg Date: Thu, 1 Feb 2024 08:45:31 +0100 Subject: [PATCH 3/3] Add missed required bundles --- plugins/de.fraunhofer.ipa.ros.xtext.ide/META-INF/MANIFEST.MF | 5 ++++- .../de.fraunhofer.ipa.ros1.xtext.ide/META-INF/MANIFEST.MF | 5 ++++- .../de.fraunhofer.ipa.ros2.xtext.ide/META-INF/MANIFEST.MF | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/de.fraunhofer.ipa.ros.xtext.ide/META-INF/MANIFEST.MF b/plugins/de.fraunhofer.ipa.ros.xtext.ide/META-INF/MANIFEST.MF index 8eae8c716..7b4993b5a 100644 --- a/plugins/de.fraunhofer.ipa.ros.xtext.ide/META-INF/MANIFEST.MF +++ b/plugins/de.fraunhofer.ipa.ros.xtext.ide/META-INF/MANIFEST.MF @@ -9,7 +9,10 @@ Require-Bundle: de.fraunhofer.ipa.ros.xtext, de.fraunhofer.ipa.ros, org.eclipse.xtext.ide, org.eclipse.xtext.xbase.ide, - org.antlr.runtime;bundle-version="4.7.2" + org.antlr.runtime;bundle-version="4.7.2", + org.eclipse.lsp4j.jsonrpc, + org.eclipse.lsp4j, + com.google.gson Bundle-RequiredExecutionEnvironment: JavaSE-19 Export-Package: de.fraunhofer.ipa.ros.ide.contentassist.antlr.internal, de.fraunhofer.ipa.ros.ide.contentassist.antlr, diff --git a/plugins/de.fraunhofer.ipa.ros1.xtext.ide/META-INF/MANIFEST.MF b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/META-INF/MANIFEST.MF index ee75e491a..4acd92066 100644 --- a/plugins/de.fraunhofer.ipa.ros1.xtext.ide/META-INF/MANIFEST.MF +++ b/plugins/de.fraunhofer.ipa.ros1.xtext.ide/META-INF/MANIFEST.MF @@ -12,7 +12,10 @@ Require-Bundle: de.fraunhofer.ipa.ros1.xtext, org.eclipse.xtext.xbase.ide, org.antlr.runtime;bundle-version="4.7.2", de.fraunhofer.ipa.ros.xtext, - de.fraunhofer.ipa.ros.xtext.ui + de.fraunhofer.ipa.ros.xtext.ui, + org.eclipse.lsp4j.jsonrpc, + org.eclipse.lsp4j, + com.google.gson Bundle-RequiredExecutionEnvironment: JavaSE-19 Export-Package: de.fraunhofer.ipa.ros1.ide.contentassist.antlr.internal, de.fraunhofer.ipa.ros1.ide.contentassist.antlr.lexer, diff --git a/plugins/de.fraunhofer.ipa.ros2.xtext.ide/META-INF/MANIFEST.MF b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/META-INF/MANIFEST.MF index bcdc8d380..e4bbd7eef 100644 --- a/plugins/de.fraunhofer.ipa.ros2.xtext.ide/META-INF/MANIFEST.MF +++ b/plugins/de.fraunhofer.ipa.ros2.xtext.ide/META-INF/MANIFEST.MF @@ -12,7 +12,10 @@ Require-Bundle: de.fraunhofer.ipa.ros2.xtext, org.eclipse.xtext.xbase.ide, org.antlr.runtime;bundle-version="4.7.2", de.fraunhofer.ipa.ros.xtext;bundle-version="2.0.0", - de.fraunhofer.ipa.ros.xtext.ui;bundle-version="2.0.0" + de.fraunhofer.ipa.ros.xtext.ui;bundle-version="2.0.0", + org.eclipse.lsp4j.jsonrpc, + org.eclipse.lsp4j, + com.google.gson Bundle-RequiredExecutionEnvironment: JavaSE-19 Export-Package: de.fraunhofer.ipa.ros2.ide.contentassist.antlr.internal, de.fraunhofer.ipa.ros2.ide.contentassist.antlr,