kagamihogeの日記

kagamihogeの日記です。

JEP 256: BeanInfo Annotationsをテキトーに訳した

http://openjdk.java.net/jeps/256 をテキトーに訳した

JEP 256: BeanInfo Annotations

Author   Sergey Malenkov
Owner   Sergey Bylokhov
Created 2014/06/04 16:07
Updated 2015/07/23 13:28
Type    Feature
Status  Targeted
Component   client-libs/java.beans
Scope   JDK
Discussion  beans dash dev at openjdk dot java dot net
Effort  S
Duration    S
Priority    3
Reviewed by Kevin Rushforth, Richard Bair
Endorsed by Kevin Rushforth
Release 9
Issue   8044826

Summary

@beaninfojavadocタグを適切なアノテーションに置き換え、実行時に動的にBeanInfoクラスを生成するように、このアノテーションを処理します。

Motivation

カスタムBeanInfoクラス作成を簡易化し、クライアントライブラリのモジュール化を可能にします。

Description

BeanInfoクラスはおおむね実行時に自動生成されますが、Swingクラスの大半は依然としてコンパイル時に@beaninfojavadocタグからBeanInforクラスを生成します。我々の提案では@beaninfoタグを以下のアノテーションで置き換え、インタープリターを行う既存のイントロスペクションアルゴリズムを拡張します。

package java.beans;
public @interface JavaBean {
    String description() default "";
    String defaultProperty() default "";
    String defaultEventSet() default "";
}

package java.beans;
public @interface BeanProperty {
    boolean bound() default true;
    boolean expert() default false;
    boolean hidden() default false;
    boolean preferred() default false;
    boolean visualUpdate() default false;
    String description() default "";
    String[] enumerationValues() default {};
}

package javax.swing;
public @interface SwingContainer {
    boolean value() default true;
    String delegate() default "";
}

詳細については、JavaBean, BeanProperty, SwingContainerjavadocを参照してください。

これらのアノテーションは実行時のBeanInfor生成中に対応する機能属性(feature attributes)を設定します。Beanクラスごとに別々のBeanInfoクラスを作成するより、Beanクラスに直接属性を指定するほうが、開発者にとっては便利です。また、自動生成クラスの削除も可能となり、これによりクライアントライブラリのモジュール化が容易になります。

Testing

新しいイントロスペクションアルゴリズムが想定通りの効果を生むかどうかの検証が必要です。また、新しいイントロスペクションアルゴリズム後方互換性を壊していないか、もしくは、壊される互換性が一定水準内に収まっているか、どちらかであることの検証が必要です。

Risks and Assumptions

  • 新しいイントロスペクションアルゴリズムが依然とは若干異なる振る舞いをするかもしれないが、深刻な後方互換性については考慮しない*1
  • パフォーマンス低下については考慮しない。イントロスペクションアルゴリズムリファクタリングによってパフォーマンス向上の可能性がある。

*1:we do not expectは「考慮しない」と訳したが、どの程度の深刻さなのか、ちょっとわからん