java2groovy で、インデントがおかしくなる原因を発見

Groovyをインストール後に、 java2groovy というコマンドが使えるようになります。 これを使用することでJavaソースをGroovy形式のソースに変換できます。

ただ、変換されたソースに何点かおかしな箇所があります。

  • 不要な空白行が大量に出力される
  • 閉じ中括弧(})がインデントされない

いい勉強になると思って Groovyのサイトからソースをダウンロードし、解析してみました。

不具合を見つけた!

org.codehaus.groovy.antlr.treewalker.SourcePrinter.java というソースに不具合がありました。 printNewlineAndIndent() メソッドのなかで

1
  if (visit == OPENING_VISIT || (visit == CLOSING_VISIT && lastLinePrinted > currentLine)) {

という判定処理があるのですが、

1
  if (visit == OPENING_VISIT || visit == CLOSING_VISIT) {

と書き直すことで閉じ中括弧のインデント問題は解決できました。

オープンソースアプリケーションのコア部分のソースを解析できた!

残念なことに、不要な空白行が大量に出力される原因は見つけることができませんでした。 スクリプトを作って不要な改行を除去することにします。

Groovyコア部分のソースコード解析ができたのはいい経験でした。