Xtext注入绑定错误

时间:2016-03-03 21:55:27

标签: dependency-injection guice xtext

我遵循这本书"使用Xtext和Xtend实现特定于域的语言"作者:Lorenzo Bettini,在第6章的某些时候,我要求使用Xtext提供的API,引用使用Google Guice的依赖注入。

实施的服务守则

class EntitiesOutputConfigurationProvider extends OutputConfigurationProvider {
       public val ENTITIES_GEN = "./entities-gen"
       override getOutputConfigurations() {
              super.getOutputConfigurations() => [
              head.outputDirectory = ENTITIES_GEN
              ]
       }
}

绑定的代码是:

public class EntitiesRuntimeModule extends AbstractEntitiesRuntimeModule {
       public Class<? extends IOutputConfigurationProvider>
       bindIOutputConfigurationProvider() {
              return EntitiesOutputConfigurationProvider. class;
       }
}

我在

之后收到以下错误
  

AbstractEntitiesRuntimeModule

错误:

  输入不匹配&#39; {&#39;期待&#39; =&gt;&#39;

根据书和Xtext文档,代码是正确的。 任何人都有任何想法?

P.S。:我的Xtext版本是2.9

1 个答案:

答案 0 :(得分:0)

您在Xtend类中使用Java语法。 要在Xtend中定义新方法,您始终必须使用def关键字。

特定错误消息的原因是Xtend支持函数类型的缩写。例如,()=>String是不带参数并返回String的函数的类型,并且是Function0<? extends String>的缩写。

在Xtend中,public Class<? extends IOutputConfigurationProvider> bindIOutputConfigurationProvider是一个完整的字段定义(不是方法定义),并且Xtend解析器认为您正在尝试启动具有函数类型的第二个字段定义,但您没有完全指定类型。在函数类型中,()之后的下一件事总是必须是=>,因此解析器会抱怨它找到了{