Xtext:不一致的stackmap帧错误导致使用Xbase时代码生成中断

时间:2012-07-02 11:42:16

标签: xtext

我遇到了似乎是一个标记为固定的eclipse Bug 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我在错误的380313中完全按照分支目标错误获得了Inconsistent stackmap帧,因此代码生成和自动完成不再有效。

如果我将编译器合规性级别更改为1.6,则分支目标错误处的不一致堆栈映射帧消失,并且自动完成工作正常,但代码生成仍然无效(src-gen中不生成代码)。 / p>

我正在使用从头开始安装的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,而不必设置编译器合规级别为1.6?

1 个答案:

答案 0 :(得分:1)

Sebastian Zarnekow:Eclipse的Java编译器中的错误已在Eclipse 3.8中修复。我担心你必须将你的发行版升级到Juno版本或坚持使用Java 1.6。