1

groovy-eclipse-compilerを使用してgroovyクラスをコンパイルするMavenプロジェクトがあります。このプロジェクトは、コマンドラインから(「mvntest」を介して)正常に実行されます。しかし、Idea内でテストを実行しようとすると、テストを実行する前にスタックトレースが発生するGroovyコンパイラのバグが発生します。

プロジェクト全体へのリンクを添付し、Intellijの人たちにもバグを報告しますが、このサイトの誰かがこの問題の解決策を見つけて見つけてくれることを願っています。
Intellijが私に戻ってきたら、ここに解決策を投稿します。

ここで利用可能なプロジェクトzipファイル:http://dl.dropbox.com/u/9940067/groovy.compiler.bug.zip

とにかく、私は問題を1つのクラスに絞り込み、バグを誘発または非表示にするために少し調整することができます。ここにあります:

    package com.other

    class FooProperties extends Properties {

      FooProperties(File eCeNSHome) {
        assert eCeNSHome != null
        new File(eCeNSHome, "properties").withInputStream { stream -> load(stream) }
      }

      String getString(String key, String defaultValue = null) {
      }

      /**
       * @param key the property name
       * @return the property integer value if it exists or the defaultValue if not
       */
      int getInt(String key, int defaultValue = 0) {
        try {
          Integer.parseInt(getProperty(key))
        } catch(final NumberFormatException e) {
          return defaultValue
        }
      }
    }

以下のgetIntメソッドを次のようなものに変更した場合

int getInt(String key、int defaultValue = 0){return 100}

その後、Groovyコンパイラのバグはなくなります。コードを元のようにバグの表面の上に残しておくと(下のスタックトレースを使用して)。ヘルプやアドバイスをいただければ幸いです。

PS:似たようなバグを検索してみたところ、修正されたコンパイラのバグの報告が見つかりましたが、特性が私のものとは少し異なります。

http://jira.codehaus.org/browse/GRECLIPSE-629

PPS:「mvntest」を実行してもテストは見つかりません。しかし、それは問題ではありません。コマンドラインを使用すると、クラスが少なくとも正常にコンパイルされることがわかります(Groovyコンパイラのバグはトリガーされません)。

スタックトレース

バグ!ソースユニットのフェーズ「クラス生成」の例外'/home/chris/cybergrid/ecens-perception-engine/src/main/groovy/com/other/FooProperties.groovy'java.lang.ObjectのClassNode#getTypeClassが前に呼び出されますタイプクラスは、org.codehaus.groovy.ast.ClassNode.getTypeClass(ClassNode.java:1311)のorg.codehaus.groovy.classgen.asm.BytecodeHelper.box(BytecodeHelper.java:559)のorg.codehausに設定されています。 groovy.classgen.asm.OperandStack.box(OperandStack.java:170)at org.codehaus.groovy.classgen.asm.CallSiteWriter.makeCallSite(CallSiteWriter.java:302)atorg.codehaus.groovy.classgen.asm.InvocationWriter。 org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:87)のmakeCall(InvocationWriter.java:182)org.codehaus.groovy.classgen.asm.InvocationWriterの

4

2 に答える 2

0

これに対する修正はありませんが、回避策を見つけました。同じ例外を生成する同様のコードがあります。defaultValueをから変更した場合

int defaultValue = 0

def defaultValue = 0

エラーはなくなるはずです

プリミティブ型の問題のようです。

intの代わりにdefaultValueとIntegerを作成してみることもできます。

于 2012-06-11T04:33:32.170 に答える
0

修正は、groovyバージョンを1.8.0から1.8.3に変更することです。私が最初にアップロードしたプロジェクトzipでこれを試すことができます。

于 2012-06-13T04:25:11.293 に答える