EclipseにおいてJavaのstatic importを素早く得る方法



問題

Eclipseを使っていると通常のクラス参照では、すぐにそのクラスを見つけ出してくれて、importを作成してくれる。例えば何かしらのクラス名を記述して、そこで「Ctrl + Shift + M」を押せば候補を表示してくれ、OKすると自動的にimportを作ってくれる。

しかし、static importは自動的に作ってくれない。例えば、JUnitテストで以下を記述したいとする。

 assertTrue(result);

この場合、自分で「import static org.junit.Assert.*」と書かなければならないのだ。。。。と思ったのだが違っていた。自動でやってくれるのである。

設定

EclipseのPreferenceの設定に以下のように記述する。実際には多くの記述がデフォルトで含まれていると思うが、もちろんここに自分の使いたいものを追加してよい。

※伏せ字にしている箇所は独自のライブラリの定義である。

ここに見られるように、「org.junit.Assert.*」を登録しておく。

呼び出し方法

次のように書いたとする。この時点では、importは「import org.junit.*」のみである。static importは無い。

import org.junit.*;

public class Foo {
  @Test
  public void test() {

  }
}

次に「assertTrue」とだけ書いて、「Ctrl + Space」を押す。すると以下の状態になる。

選択肢のいずれかを選ぶと、以下の状態になり、

さらに、static importが勝手に挿入されていることがわかるはずだ。

import static org.junit.Assert.*;

import org.junit.*;

うまくいかないことがある

しかし、これがうまく行かない場合があるのだ。Ctrl + Spaceを押しても”no default proposals”などと表示されてしまう。

現在のところ原因が不明。

ライブラリとして取り込んでいる場合は問題無いらしい(org.junit.Assert.*など)のだが、開発中のプログラムの中のクラスだと選択肢を出すこともあり、出さないこともある。ここがわからない。一体全体どういう条件で出たり出なかったりするのか。