File tree Expand file tree Collapse file tree 4 files changed +77
-1
lines changed
de.fraunhofer.ipa.ros.xtext/src/de/fraunhofer/ipa/ros
de.fraunhofer.ipa.ros2.xtext/src/de/fraunhofer/ipa/ros2 Expand file tree Collapse file tree 4 files changed +77
-1
lines changed Original file line number Diff line number Diff line change 1+ package de.fraunhofer.ipa.ros ;
2+
3+ import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider
4+ import org.eclipse.emf.ecore.EObject
5+ import ros.TopicSpec
6+ import ros.ServiceSpec
7+ import ros.ActionSpec
8+
9+ class RosQNP extends DefaultDeclarativeQualifiedNameProvider {
10+
11+ override getFullyQualifiedName (EObject obj ) {
12+ if (obj instanceof TopicSpec ) {
13+ val topic_spec_name = obj. name
14+ val pkg_name = obj. package . name
15+ return getConverter(). toQualifiedName(pkg_name + " /msg/" + topic_spec_name);
16+ }
17+ if (obj instanceof ServiceSpec ) {
18+ val service_spec_name = obj. name
19+ val pkg_name = obj. package . name
20+ return getConverter(). toQualifiedName(pkg_name + " /srv/" + service_spec_name);
21+ }
22+ if (obj instanceof ActionSpec ) {
23+ val action_spec_name = obj. name
24+ val pkg_name = obj. package . name
25+ return getConverter(). toQualifiedName(pkg_name + " /action/" + action_spec_name);
26+ }
27+ return super . qualifiedName(obj);
28+ }
29+ }
Original file line number Diff line number Diff line change @@ -5,8 +5,10 @@ package de.fraunhofer.ipa.ros
55
66import com.google.inject.Binder
77import de.fraunhofer.ipa.ros.generator.CICustomOutputProvider
8- import org.eclipse.xtext.conversion.IValueConverterService
98import org.eclipse.xtext.generator.IOutputConfigurationProvider
9+ import org.eclipse.xtext.scoping.IScopeProvider
10+ import de.fraunhofer.ipa.ros.scoping.RosSP
11+ import org.eclipse.xtext.naming.IQualifiedNameProvider
1012
1113/**
1214 * Use this class to register components to be used at runtime / without the Equinox extension registry.
@@ -18,4 +20,12 @@ class RosRuntimeModule extends AbstractRosRuntimeModule {
1820 binder. bind(IOutputConfigurationProvider ). to(CICustomOutputProvider ). asEagerSingleton()
1921 }
2022
23+ override Class<? extends IScopeProvider > bindIScopeProvider () {
24+ return RosSP
25+ }
26+
27+ override Class<? extends IQualifiedNameProvider > bindIQualifiedNameProvider () {
28+ return RosQNP
29+ }
30+
2131}
Original file line number Diff line number Diff line change 1+ package de.fraunhofer.ipa.ros.scoping
2+
3+ import org.eclipse.emf.ecore.EObject
4+ import org.eclipse.emf.ecore.EReference
5+ import org.eclipse.xtext.EcoreUtil2
6+ import org.eclipse.xtext.scoping.Scopes
7+ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
8+ import ros.RosPackage
9+ import ros.SpecBase
10+
11+ class RosSP extends AbstractDeclarativeScopeProvider {
12+
13+ override getScope (EObject context , EReference reference ) {
14+ if (context instanceof SpecBase ) {
15+ if (reference == RosPackage . Literals . SPEC_BASE ) {
16+ val candidates = EcoreUtil2 . getAllContentsOfType(context. package , SpecBase );
17+ return Scopes . scopeFor(candidates)
18+ }
19+ }
20+ return super . getScope(context, reference);
21+ }
22+
23+ }
Original file line number Diff line number Diff line change 33 */
44package de.fraunhofer.ipa.ros2
55
6+ import org.eclipse.xtext.scoping.IGlobalScopeProvider
7+ import de.fraunhofer.ipa.ros.RosQNP
8+ import org.eclipse.xtext.naming.IQualifiedNameProvider
9+ import org.eclipse.xtext.scoping.IScopeProvider
10+ import de.fraunhofer.ipa.ros.scoping.RosSP
611
712/**
813 * Use this class to register components to be used at runtime / without the Equinox extension registry.
914 */
1015class Ros2RuntimeModule extends AbstractRos2RuntimeModule {
16+
17+ override Class<? extends IScopeProvider > bindIScopeProvider () {
18+ return RosSP
19+ }
20+
21+ override Class<? extends IQualifiedNameProvider > bindIQualifiedNameProvider () {
22+ return RosQNP
23+ }
24+
1125}
You can’t perform that action at this time.
0 commit comments