フィールドに複数宣言されたアノテーションを処理するとランタイムごと落ちる
Activityクラスにおいて、フィールドに対してどんな種類の(といってもサポートされていることが前提だが)でも良いから、複数のアノテーションを宣言して、それをランタイム中で取得しようとすると何も例外をキャッチできずにランタイムが落ちる。(Nativeメソッドで落ちているからだろう)
public class AnnotationTest extends Activity {
@Resource
@Deprecated
protected EditText editText01;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//アノテーションを取得しようとすると落ちるぜ
Field fields = this.getClass().getDeclaredFields();
for ( Field f : fields ) {
if ( f.isAnnotationPresent(Deprecated.class) ) { //ここで落ちてしまう
:
:
}
//アノテーションの種類を特定せずに配列で受けても結果は変わらず
Annotation anos = f.getAnnotations();
}
途中まで追ってみるとアノテーションがターゲットに対して複数宣言されている場合、その種別を検査するために、アノテーションが持っている属性(実際にはJavaメソッド)をそのシグネチャで判断しているらしく、内部でメソッドクラスのメソッドを呼び出している最中で異常終了してしまうようだ。
宣言されているアノテーションが一つだと問題は無いのでバグっぽいな。