我遇到了似乎是标记为已修复的 Eclipse 错误 380313 的一个实例。我的语法如下:
grammar org.xtext.example.hyrule.HyRule with org.eclipse.xtext.common.Terminals
// with org.eclipse.xtext.xbase.Xbase
generate hyRule "http://www.xtext.org/example/hyrule/HyRule"
Start:
rules+=Rule*;
Rule:
'FOR' 'PAYLOAD' PAYLOAD 'ELEMENTS' elements+=ID+ 'CONSTRAINED''BY'name=ID '!';
PAYLOAD:
"sse"| "stacons"
;
哪个工作正常,以及哪个代码生成编辑器等都可以工作。然而,一旦我改变
with org.eclipse.xtext.common.Terminals
至
with org.eclipse.xtext.xbase.Xbase
并启动生成的 IDE,我得到了 Inconsistent stackmap frames at branch target 错误,与错误 380313 中的详细信息完全相同,因此代码生成和自动完成不再起作用。
如果我将编译器合规级别更改为 1.6,分支目标错误处的堆栈图帧不一致就会消失,并且自动完成工作,但代码生成仍然不起作用(在 src-gen 中没有生成代码)。
我正在使用从头开始安装的 Xtext 2.3 和 java 7。xtext 项目的构建路径未修改,并且我已将 org.eclipse.xtext.xbase.lib_2.3.0.v201206120633.jar 添加到DSL 项目(即在运行时启动的eclipse 实例中的那个)。
任何帮助将不胜感激,我一直在绞尽脑汁试图找到问题所在。
更新:在上面的示例中,我使用 generator.xtend 生成代码。相反,如果我使用 JvmModelInferrer,那么在合规性设置为 1.7 的情况下,我仍然会收到上述错误,并且自动完成功能完全被破坏,但代码生成确实有效。当然,在这种情况下,将合规级别设置为 1.6 一切正常。但是我当然应该能够使用生成器而不是 JvmModelInferrer,并且不必将编译器合规级别设置为 t 1.6?