JDK-8044826 : JEP 256: BeanInfo Annotations
  • Type: JEP
  • Component: client-libs
  • Sub-Component: java.beans
  • Priority: P3
  • Status: Closed
  • Resolution: Delivered
  • Fix Versions: 9
  • Submitted: 2014-06-04
  • Updated: 2017-02-23
  • Resolved: 2017-01-26
Related Reports
Blocks :  
Relates :  
Relates :  
Relates :  
Sub Tasks
JDK-8132138 :  
Description
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 for
[JavaBean](http://download.java.net/jdk9/docs/api/java/beans/JavaBean.html),
[BeanProperty](http://download.java.net/jdk9/docs/api/java/beans/BeanProperty.html), and
[SwingContainer](http://download.java.net/jdk9/docs/api/javax/swing/SwingContainer.html).

These annotations will set the corresponding feature attributes during
`BeanInfo` 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
---------------------

  - The new introspection algorithm may behave somewhat differently, but
    we do not expect any serious backward incompatibilities.

  - We do not expect any performance degradation.  The refactoring of the
    introspection algorithm might improve performance.

Comments
The main part of the JEP (JDK-4763438) was pushed to the client ws: http://hg.openjdk.java.net/jdk9/client/jdk/rev/b89f353e2f9a
09-10-2015

The JEP is Targeted -- it means you have green light to push reviewed code to JDK 9 repo
01-07-2015

Testing due date is September 27
16-06-2015

NOTE: Dev Due Date is Apr 13.
12-02-2015