【发布时间】:2015-05-03 01:49:45
【问题描述】:
我正在尝试使用 XText 创建一种小型 DSL 语言。
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.xbase.Xbase
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
StartState:
'startState'
'evaluate' ref=JvmTypeReference "-" op=[jvmTypes::JvmOperation]
'end';
以下是 ScopeProvider 的实现:
public class MyScopeProvider extends AbstractDeclarativeScopeProvider {
IScope scope_StartState_op(StartState call, EReference reference) {
JvmType type = call.getRef().getType();
List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
if (type instanceof JvmGenericType) {
JvmGenericType gt = (JvmGenericType) type;
for (JvmMember member : gt.getMembers()) {
if (member instanceof JvmOperation) {
descriptions.add(EObjectDescription.create(member.getSimpleName(), member));
}
}
}
return new SimpleScope(descriptions);
}}
我在结果编辑器中输入以下内容
startState evaluate controller.Controller - perform end
在这里,我可以按预期使方法(执行在 controller.Controller 类中的执行)的代码完成工作。但是我需要帮助来解决代码完成后发生的以下错误。
无法解析对 JvmOperation 'perform' 的引用。
另外,我尝试关注Peter's Blog,但没有成功
【问题讨论】:
-
您使用哪个 xtext 版本?语法的声明行是怎样的?它适用于我使用 2.8.2 并继承 org.eclipse.xtext.xbase.Xtype
-
@ChristianDietrich - 我在问题顶部添加了语法。请看一看。我也在 Luna Service Release 2 (4.4.2) Build id: 20150219-0600 上使用 Xtext 2.8.2
-
@ChristianDietrich - 非常感谢您的提示。我使用的是
org.eclipse.xtext.xbase.Xbase而不是org.eclipse.xtext.xbase.Xtype
标签: xtext