groovyでenumをネストするようにするとコンパイルが終わらない場合がある。

まともやenumにハマりました。
前回ハマったのはこれ → enumの抽象メソッドはgroovyでサポートされてない? #jggug #q - 旧山pの楽しいお勉強生活

現象

↓のコードはコンパイルが終わりません。

public enum EnumSample {

    HOGE()

    public enum NestEnum {
        HUGA
    }
}
c:\work\20130201>dir
<略>
 c:\work\20130201 のディレクトリ

2013/02/01  19:55    <DIR>          .
2013/02/01  19:55    <DIR>          ..
2013/02/01  19:55                94 EnumSample.groovy
<略>
c:\work\20130201>groovy -version
Groovy Version: 2.1.0 JVM: 1.7.0_11 Vendor: Oracle Corporation OS: Windows 7

c:\work\20130201>groovyc EnumSample.groovy

特に何が出るわけでもなく反応が返ってこないだけなので、30分程待ってみましたがコンパイルは終わりませんでした。

回避方法

HOGE()に「;」付けたらコンパイルできました。

public enum EnumSample {

    HOGE();

    public enum NestEnum {
        HUGA
    }
}
c:\work\20130201>dir
<略>
 c:\work\20130201 のディレクトリ

2013/02/01  20:25    <DIR>          .
2013/02/01  20:25    <DIR>          ..
2013/02/01  20:17                95 EnumSample.groovy
<略>
c:\work\20130201>groovyc EnumSample.groovy

c:\work\20130201>dir
<略>
 c:\work\20130201 のディレクトリ

2013/02/01  20:25    <DIR>          .
2013/02/01  20:25    <DIR>          ..
2013/02/01  20:25             6,543 EnumSample$NestEnum.class
2013/02/01  20:25             6,617 EnumSample.class
2013/02/01  20:17                95 EnumSample.groovy
<略>
c:\work\20130201>

もちろんgroovycで発生するということはgroovyconsoleやらIDEでも発生するわけで。
前回のようにコンパイルエラーになるならともかく、コンパイルで固まっちゃうとIDEで実行してるとIDEを落とさなければなりません。
しかも、Eclipseの場合、ゴミが残るのか起動時にエラーが発生します。

---------------------------
Eclipse
---------------------------
エラーが発生しました。 ログ・ファイル
C:\workspace\.metadata\.log を参照してください。
---------------------------
OK   
---------------------------

「workspace\.metadata\.log」には大量のerrorが出ています。(1600行位出てました)
適当に検索したらGroovyPluginという文字がありました。

<Errorは略>
!ENTRY org.eclipse.core.resources 4 566 2013-02-01 16:40:57.484
!MESSAGE ワークスペースが正しく初期化されていません、またはすでにシャットダウンされています。

ちなみに解決するには「-clean」を付けて実行すればOKかと思います。
(ソースが保存されているとコンパイルしようとしてまたフリーズするので、ダメな場合は直接ソースを編集して下さい。)

関係有りそうな現象

Eclipseではこんな現象も発生しました。
以下のコードでネストしているSampleNameの中括弧内で「a」を入力するとEclipseがフリーズします。
というか、CPU使用率が99%まで上がります。
Pleiades All in One 4.2.1.v20121123 javaのFull Editionで再現)

public enum EnumTest {
 
    A,
    B
 
    public enum SampleName {
 
    }
    def sampleName
}

ちなみにこのコード自体はgroovycではコンパイル可能です。
コードを補完しようとして無限ループに入ってる?