JEP 256: BeanInfo Annotations (original) (raw)

Author Sergey Malenkov
Owner Sergey Bylokhov
Type Feature
Scope JDK
Status Closed / Delivered
Release 9
Component client-libs / java.beans
Discussion beans dash dev at openjdk dot java dot net
Effort L
Duration L
Reviewed by Kevin Rushforth, Richard Bair
Endorsed by Kevin Rushforth
Created 2014/06/04 16:07
Updated 2017/02/23 16:49
Issue 8044826

Summary

Replace @beaninfo Javadoc tags with proper annotations, and process those annotations at run time to generate BeanInfo classes dynamically.

Motivation

Simplify the creation of custom BeanInfo classes and enable the modularization of the client library.

Description

Most BeanInfo classes are automatically generated at runtime, but many Swing classes still generate BeanInfo classes from @beaninfo Javadoc tags at compile time. We propose to replace the @beaninfo tags with the following annotations, and extend the existing introspection algorithm to interpret them:

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 "";
}

For further detail, see the Javadoc forJavaBean,BeanProperty, andSwingContainer.

These annotations will set the corresponding feature attributes duringBeanInfo generation at run time. It will be easier for developers to specify these attributes directly in Bean classes rather than create a separate BeanInfo class for every Bean class. It will also allow the removal of the automatically-generated classes, which will make it easier to modularize the client library.

Testing

We'll need to verify that the new introspection algorithm behaves as expected. We'll also need to verify that the new introspection algorithm doesn't break backward compatibility, or else ensure that cases in which compatibility is broken are rare.

Risks and Assumptions