Scala Slick 2.0和IntelliJ,突出显示错误

Scala Slick 2.0和IntelliJ,突出显示错误,scala,slick,Scala,Slick,我正在迁移到Slick 2.0.0-RC1(从1.x开始),我很难让IntelliJ识别TableQuery语句中的隐含信息。然而,在IntelliJ和sbt(读:play)中,一切都是编译的。我从利用新的代码生成功能开始,刚才我从光滑的示例中逐字地抓取了片段——两者都产生相同的行为 使用提升嵌入()的第一个示例,会出现以下两种情况: 该行: def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id) 在供应商上生成错误,表示类型不

我正在迁移到Slick 2.0.0-RC1(从1.x开始),我很难让IntelliJ识别
TableQuery
语句中的隐含信息。然而,在IntelliJ和sbt(读:play)中,一切都是编译的。我从利用新的代码生成功能开始,刚才我从光滑的示例中逐字地抓取了片段——两者都产生相同的行为

使用提升嵌入()的第一个示例,会出现以下两种情况:

  • 该行:

    def supplier = foreignKey("SUP_FK", supID, suppliers)(_.id)
    
    供应商上生成错误,表示
    类型不匹配,应为:TableQuery[NotInferredTT],实际:((标记)=>FirstExample.suppliers)=>TableQuery[FirstExample.suppliers]

  • TableQuery[…]
    VAL(如咖啡)上没有任何已取消的收集操作(如筛选、映射、获取等)

奇怪的是,使用for comprehension不会产生任何错误,但是没有正确的类型信息(最终成为
any

我确信我已经得到了
.simple.\u
导入(如果没有它,它不会在其他地方编译)。我已经清除了所有的缓存,重新运行我的gen idea,完成了完整的重建,等等,但没有任何进展。我正在使用Scala 0.22.302插件运行IntelliJ 12.1.6 Ultimate。我自己的项目使用SQLServer,但我尝试了H2的例子,也经历了同样的事情


有人能给我指出正确的方向吗?

我找到了一个解决方法,但我真的在寻找更强大的东西。如果我覆盖
SourceCodeGenerator
,然后覆盖其中的
TableDef
,然后覆盖其中的
TableValueDef
,我可以覆盖其中的
def code

override def code = s"lazy val $name = TableQuery[${TableClass.name}](tag => new ${TableClass.name}(tag))"

…这样我就不会有宏不计算的问题了。不用说,这不是一个理想的解决方案。

我认为这只是在抑制错误,而是在为我工作的函数中直接调用它:

foreignKey("SUP_FK", supID, TableQuery[Suppliers])

进一步检查后,看起来宏在IntelliJ中不起作用-如果我显式地为
TableQuery
键入构造函数lambda(例如,
val suppliers=TableQuery[suppliers](tag=>new suppliers(tag))
),一切都会按预期开始工作。我在这里做什么蠢事吗?也张贴在这里:Thx。我提交了一份PR,以相应地更改默认代码生成器。