3

Type of expression is statically unknown多くの標準的な groovy 関数について、Eclipse でエラーが発生します。

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 }

ああ、そうです、そして質問は - それはどういう意味ですか? このエラーは、Google では広く知られていません。

エラーは本当です。実行段階でそれ自体がリゾルバーになる問題ではありません。それどころか、プロジェクトは実行されません。(これはテストであり、「JUnit テストが見つかりません」と表示されます)

4

1 に答える 1

3

ティム・イェーツのコメントは正しいと思います。型推論に関連するもののようです。このバグGRECLIPSE-1483 : field initializers are not contributing to type inferencing にぶつかっていると思います。

私は小さなテストをしました:

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 Type Checking (ファイルを右クリック -> Groovy Type Checking -> Type check) を有効にすると、「Type of expression is statically unknown: trim」というメッセージが表示されます。

もう少し進んで、クラスに次の注釈を付け@TypeCheckedます。

  • この行に複数のマーカー
    • Groovy:[静的型チェック] - 一致するメソッド groovy.util.XmlSlurper#parseText(java.lang.Object) が見つかりません。宣言された型が正しいかどうか、およびメソッドが存在するかどうかを確認してください。
    • Groovy:[静的型チェック] - 一致するメソッド java.lang.Object#trim() が見つかりません。宣言された型が正しいかどうか、およびメソッドが存在するかどうかを確認してください。
    • 式のタイプが静的に不明です: トリム

しかし、上記のコードをメソッド内で囲むと、フィールド初期化子がなくても、上記のエラーは消えます。

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

@TypeChecked注釈がなければ、「 Groovy Type Checking」はこのエラーを出していません。

于 2013-04-09T14:18:41.077 に答える