eclipseで総称型の警告を無視する方法

eclipseJavaのコードを書いていると、特に他人のコードやライブラリを使ってるとたまにあらわれる警告。

型の安全性: メソッド add(Object) は raw 型 List に属しています。総称型 List への参照はパラメーター化される必要があります

例えば、

hoge.getValueList().add(someValue);

なんてコードを書くと出てきたりします。
原因は、hoge.getValueList()の戻り値がList型などのraw型の総称型になっていること。
raw型というのは、総称型として定義されている型(例えば、ListMap)に対して型引数を指定しなかった時の型。
総称型が導入されて以降は、List<String>などと使うべきなのに、Listと型引数を指定しないで使うとこんな警告が出るわけです。

キャストで回避する方法は存在しないようで、

((List<String>) hoge.getValueList()).add(someValue);

などとしてみても、

型の安全性: List から List への未検査キャスト

と言われてしまいます。

結局、警告を消すには「無視する」しかないようで、SuppressWarningsアノテーションを使います。
値をuncheckedとして、このアノテーションを指定すると、その指定された範囲では総称型に関するキャストが警告として現れません。(無視されるのはそういうキャストだけかな? 調べてないが…。)
ところが、アノテーションは文にはつけられないので、

@SuppressWarnings("unchecked")
hoge.getValueList().add(someValue);

などという書き方はできません

仕方がないので、メソッドやクラスにつけることになりますが、無駄に広範囲で無視するようにしてしまうと必要な警告まで見えなくなってしまいます。バグまで見過ごしかねないという、よくある(?)問題です。
そこで、SuppressWarningsアノテーションがローカル変数宣言にもつけられることを利用します。

@SuppressWarnings("unchecked")
List<String> list = hoge.getValueList();
list.add(someValue);

とすることで、警告回避の影響をここだけにとどめることができるので、個人的にお薦めです。

P.S.

どうしてアノテーションが文につけられないかを考えると、構文解析が難解になるからでしょうか。
文のアノテーションを許すと、例えば、

@interface Test {
    String value() default "";
}
…
    @Test("hoge") length();  //【A】
    @Test("hoge").length();  //【B】

と書けることになりますね。
【A】は、length();に対して@Test("hoge")がついています。【B】は、("hoge").length();に対して@Testがついていることになります。
)”の次の“.”まで読んで初めて("hoge")アノテーションの一部なのか、文の一部なのかわかるというのは少々複雑ですね。
というわけで、アノテーションは、次に“(”が現れうる場所にはつけられないのでしょう。
そうすることで、@何々のあとに“(”が現れたとき、その“(”から対応する“)”までをアノテーションの一部だと決めて構わなくなりますから。

と、考えると納得がいくのですがいかがでしょう?
どっかに開発者のコメントとかありそうですけど。