3

I am getting Type of expression is statically unknown error in Eclipse for many standard groovy functions:

import groovy.util.slurpersupport.NodeChild
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
import org.codehaus.groovy.tools.xml.DomToGroovy

...

                                   v- here
def xmlRequest= new XmlSlurper().parseText(templateString.trim())

def outputBuilder = new StreamingMarkupBuilder()
                    v- and here
fw<< outputBuilder.bind{ mkp.yield xmlRequest }

Oh, yes, and the question is - what does it mean, please? This error is NOT widely known by google.

The error is real, it is not a problem that would be resolver by itself at run stage. On the contrary, the project won't run. ( it is a test and says : No JUnit tests found )

4

1 回答 1

3

我认为蒂姆耶茨的评论是正确的。这似乎与类型推断有关。我猜您遇到了这个错误GRECLIPSE-1483字段初始值设定项对类型推断没有贡献

我做了一个小测试:

package test

import groovy.util.slurpersupport.NodeChild
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
import groovy.xml.XmlUtil
import org.codehaus.groovy.tools.xml.DomToGroovy

class SimpleTest {
    def templateString = '<test>testing</test>'

    def xmlRequest= new XmlSlurper().parseText(templateString.trim())
}

这样,该trim()方法被下划线。激活Groovy 类型检查(右键单击文件 -> Groovy 类型检查 -> 类型检查),消息“表达式类型静态未知:修剪”

更进一步,用@TypeChecked

  • 此行有多个标记
    • Groovy:[静态类型检查] - 找不到匹配的方法 groovy.util.XmlSlurper#parseText(java.lang.Object)。请检查声明的类型是否正确以及方法是否存在。
    • Groovy:[静态类型检查] - 找不到匹配的方法 java.lang.Object#trim()。请检查声明的类型是否正确以及方法是否存在。
    • 表达式的类型是静态未知的:trim

但是,如果我将上面的代码包含在一个方法中,从而没有字段初始值设定项,上述错误就会消失:

@TypeChecked
class SimpleTest {
    def test() {
        def templateString = '<test>testing</test>'
        def xmlRequest= new XmlSlurper().parseText(templateString.trim())
    }
}

如果没有@TypeChecked注释,“ Groovy 类型检查”不会给出这个错误。

于 2013-04-09T14:18:41.077 回答