我花了几天的时间来想出一种在Xtext DSL中引用C++类型的解决方案。在这一点上,我对引用Java / JVM类型的Xtext / Eclipse机制非常熟悉。
大概要做一些类似于JVM导入机制的操作,我将不得不将一个现有的CDT索引(可能非常大)保存为Ecore,并将该Ecore导入到我的Xtext语法中。
我正在考虑的另一种选择是通过编程将现有的CDT索引挂钩。似乎此选项可能更困难,因为它可能涉及更多的自定义代码来实现。
有没有人发现并成功实现Xtext语法/ DSL中的C++类型引用?有什么例子吗?有更好的解决方案的建议吗?就此而言,我提出的任何一种解决方案似乎都合理/可行吗?
谢谢。
最佳答案
为了实际上能够引用Xtext DSL中的C++或任何非Xtext元素,必须将可引用的元素带入Xtext的索引中。
正确的方法是拥有一个包含CDT索引的IAllContainerState并为每个C++文件创建一个IResourceDescription。 CDT索引应包含有关所包含的资源,类型和名称的信息,可以将其映射到作用域一章中描述的概念:https://eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
GenericResourceServiceProvider可以用于C++资源的IResourceServiceProvider。
看一下org.eclipse.xtext.resource.generic包以及如何使用它为.ecore模型建立索引。